Skip to content

Commit 07232f4

Browse files
committed
[X86][SSE] canonicalizeShuffleWithBinOps - add X86ISD::PSHUFB handling.
Recommit rGcd938ab162b0ac560dd0e9fee290980c7e0e47e5 with an early-out if the pshub would introduce zeros across the binop.
1 parent 0fb4a20 commit 07232f4

File tree

4 files changed

+12
-3
lines changed

4 files changed

+12
-3
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36838,6 +36838,15 @@ static SDValue canonicalizeShuffleWithBinOps(SDValue N, SelectionDAG &DAG,
3683836838
unsigned Opc = N.getOpcode();
3683936839
switch (Opc) {
3684036840
// Unary and Unary+Permute Shuffles.
36841+
case X86ISD::PSHUFB: {
36842+
// Don't merge PSHUFB if it contains zero'd elements.
36843+
SmallVector<int> Mask;
36844+
SmallVector<SDValue> Ops;
36845+
if (!getTargetShuffleMask(N.getNode(), ShuffleVT.getSimpleVT(), false, Ops,
36846+
Mask))
36847+
break;
36848+
LLVM_FALLTHROUGH;
36849+
}
3684136850
case X86ISD::VBROADCAST:
3684236851
case X86ISD::MOVDDUP:
3684336852
case X86ISD::PSHUFD: {

llvm/test/CodeGen/X86/vector-fshr-rot-128.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1403,8 +1403,8 @@ define <16 x i8> @splatvar_funnnel_v16i8(<16 x i8> %x, <16 x i8> %amt) nounwind
14031403
; XOPAVX1-LABEL: splatvar_funnnel_v16i8:
14041404
; XOPAVX1: # %bb.0:
14051405
; XOPAVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
1406-
; XOPAVX1-NEXT: vpsubb %xmm1, %xmm2, %xmm1
14071406
; XOPAVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1
1407+
; XOPAVX1-NEXT: vpsubb %xmm1, %xmm2, %xmm1
14081408
; XOPAVX1-NEXT: vprotb %xmm1, %xmm0, %xmm0
14091409
; XOPAVX1-NEXT: retq
14101410
;

llvm/test/CodeGen/X86/vector-shift-ashr-128.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -848,8 +848,8 @@ define <16 x i8> @splatvar_shift_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
848848
; XOPAVX1-LABEL: splatvar_shift_v16i8:
849849
; XOPAVX1: # %bb.0:
850850
; XOPAVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
851-
; XOPAVX1-NEXT: vpsubb %xmm1, %xmm2, %xmm1
852851
; XOPAVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1
852+
; XOPAVX1-NEXT: vpsubb %xmm1, %xmm2, %xmm1
853853
; XOPAVX1-NEXT: vpshab %xmm1, %xmm0, %xmm0
854854
; XOPAVX1-NEXT: retq
855855
;

llvm/test/CodeGen/X86/vector-shift-lshr-128.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -698,8 +698,8 @@ define <16 x i8> @splatvar_shift_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
698698
; XOPAVX1-LABEL: splatvar_shift_v16i8:
699699
; XOPAVX1: # %bb.0:
700700
; XOPAVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
701-
; XOPAVX1-NEXT: vpsubb %xmm1, %xmm2, %xmm1
702701
; XOPAVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1
702+
; XOPAVX1-NEXT: vpsubb %xmm1, %xmm2, %xmm1
703703
; XOPAVX1-NEXT: vpshlb %xmm1, %xmm0, %xmm0
704704
; XOPAVX1-NEXT: retq
705705
;

0 commit comments

Comments
 (0)