[X86] Fold PSHUF(VSHIFT(X,Y)) -> VSHIFT(PSHUF(X),Y)
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Sat, 22 Apr 2023 19:02:27 +0000 (20:02 +0100)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Sat, 22 Apr 2023 19:02:27 +0000 (20:02 +0100)
commitc3bf6d20ac306b829dc99939b3a8f9487f7f1c9a
tree5934e44edfbff9364c9564f282dab5f5bdcf5fed
parent1eb74f7e83ffb3f9d00e5987cead3b12e00bbe82
[X86] Fold PSHUF(VSHIFT(X,Y)) -> VSHIFT(PSHUF(X),Y)

PSHUFD/PSHUFLW/PSHUFHW can act as a vector move / folded load, notably helping simplify pre-AVX cases in particular.

This is a much milder alternative to refactoring canonicalizeShuffleWithBinOps to support SSE shifts nodes.
36 files changed:
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/abds-vector-128.ll
llvm/test/CodeGen/X86/abdu-vector-128.ll
llvm/test/CodeGen/X86/avx512-cmp.ll
llvm/test/CodeGen/X86/combine-abs.ll
llvm/test/CodeGen/X86/combine-mul.ll
llvm/test/CodeGen/X86/combine-ptest.ll
llvm/test/CodeGen/X86/combine-sdiv.ll
llvm/test/CodeGen/X86/freeze-binary.ll
llvm/test/CodeGen/X86/icmp-abs-C-vec.ll
llvm/test/CodeGen/X86/icmp-pow2-logic-npow2.ll
llvm/test/CodeGen/X86/known-signbits-vector.ll
llvm/test/CodeGen/X86/packss.ll
llvm/test/CodeGen/X86/pr32907.ll
llvm/test/CodeGen/X86/promote-cmp.ll
llvm/test/CodeGen/X86/rotate_vec.ll
llvm/test/CodeGen/X86/sadd_sat_vec.ll
llvm/test/CodeGen/X86/sdiv_fix_sat.ll
llvm/test/CodeGen/X86/select-sra.ll
llvm/test/CodeGen/X86/shift-logic.ll
llvm/test/CodeGen/X86/shrink_vmul.ll
llvm/test/CodeGen/X86/shuffle-of-shift.ll
llvm/test/CodeGen/X86/ssub_sat_vec.ll
llvm/test/CodeGen/X86/vec_shift5.ll
llvm/test/CodeGen/X86/vector-bo-select.ll
llvm/test/CodeGen/X86/vector-sext.ll
llvm/test/CodeGen/X86/vector-shift-ashr-128.ll
llvm/test/CodeGen/X86/vector-shift-ashr-sub128.ll
llvm/test/CodeGen/X86/vector-shift-lshr-sub128.ll
llvm/test/CodeGen/X86/vector-shift-shl-sub128.ll
llvm/test/CodeGen/X86/vector_splat-const-shift-of-constmasked.ll
llvm/test/CodeGen/X86/viabs.ll
llvm/test/CodeGen/X86/vselect-zero.ll
llvm/test/CodeGen/X86/vselect.ll
llvm/test/CodeGen/X86/vshift-3.ll
llvm/test/CodeGen/X86/vsplit-and.ll