Skip to content

Commit 2885d12

Browse files
committed
[X86] Fold bitcast(logic(bitcast(X), Y)) --> logic'(X, bitcast(Y)) for int-int bitcasts
Extend the existing combine that handles bitcasting for fp-logic ops to also help remove logic ops across bitcasts to/from the same integer types. This helps improve AVX512 predicate handling for D/Q logic ops and also allows DAGCombine's scalarizeExtractedBinop to remove some annoying gpr->simd->gpr transfers. The concat_vectors regression in pr40891.ll will be addressed in a followup commit on this patch. Differential Revision: https://reviews.llvm.org/D96206
1 parent d9207d3 commit 2885d12

20 files changed

+135
-170
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39599,6 +39599,7 @@ static SDValue combineBitcast(SDNode *N, SelectionDAG &DAG,
3959939599
SDValue N0 = N->getOperand(0);
3960039600
EVT VT = N->getValueType(0);
3960139601
EVT SrcVT = N0.getValueType();
39602+
const TargetLowering &TLI = DAG.getTargetLoweringInfo();
3960239603

3960339604
// Try to match patterns such as
3960439605
// (i16 bitcast (v16i1 x))
@@ -39656,8 +39657,7 @@ static SDValue combineBitcast(SDNode *N, SelectionDAG &DAG,
3965639657
// If we're bitcasting from iX to vXi1, see if the integer originally
3965739658
// began as a vXi1 and whether we can remove the bitcast entirely.
3965839659
if (VT.isVector() && VT.getScalarType() == MVT::i1 &&
39659-
SrcVT.isScalarInteger() &&
39660-
DAG.getTargetLoweringInfo().isTypeLegal(VT)) {
39660+
SrcVT.isScalarInteger() && TLI.isTypeLegal(VT)) {
3966139661
if (SDValue V =
3966239662
combineBitcastToBoolVector(VT, N0, SDLoc(N), DAG, Subtarget))
3966339663
return V;
@@ -39845,8 +39845,11 @@ static SDValue combineBitcast(SDNode *N, SelectionDAG &DAG,
3984539845
default: return SDValue();
3984639846
}
3984739847

39848+
// Check if we have a bitcast from another integer type as well.
3984839849
if (!((Subtarget.hasSSE1() && VT == MVT::f32) ||
39849-
(Subtarget.hasSSE2() && VT == MVT::f64)))
39850+
(Subtarget.hasSSE2() && VT == MVT::f64) ||
39851+
(Subtarget.hasSSE2() && VT.isInteger() && VT.isVector() &&
39852+
TLI.isTypeLegal(VT))))
3985039853
return SDValue();
3985139854

3985239855
SDValue LogicOp0 = N0.getOperand(0);
@@ -39855,17 +39858,21 @@ static SDValue combineBitcast(SDNode *N, SelectionDAG &DAG,
3985539858

3985639859
// bitcast(logic(bitcast(X), Y)) --> logic'(X, bitcast(Y))
3985739860
if (N0.hasOneUse() && LogicOp0.getOpcode() == ISD::BITCAST &&
39858-
LogicOp0.hasOneUse() && LogicOp0.getOperand(0).getValueType() == VT &&
39861+
LogicOp0.hasOneUse() && LogicOp0.getOperand(0).hasOneUse() &&
39862+
LogicOp0.getOperand(0).getValueType() == VT &&
3985939863
!isa<ConstantSDNode>(LogicOp0.getOperand(0))) {
3986039864
SDValue CastedOp1 = DAG.getBitcast(VT, LogicOp1);
39861-
return DAG.getNode(FPOpcode, DL0, VT, LogicOp0.getOperand(0), CastedOp1);
39865+
unsigned Opcode = VT.isFloatingPoint() ? FPOpcode : N0.getOpcode();
39866+
return DAG.getNode(Opcode, DL0, VT, LogicOp0.getOperand(0), CastedOp1);
3986239867
}
3986339868
// bitcast(logic(X, bitcast(Y))) --> logic'(bitcast(X), Y)
3986439869
if (N0.hasOneUse() && LogicOp1.getOpcode() == ISD::BITCAST &&
39865-
LogicOp1.hasOneUse() && LogicOp1.getOperand(0).getValueType() == VT &&
39870+
LogicOp1.hasOneUse() && LogicOp1.getOperand(0).hasOneUse() &&
39871+
LogicOp1.getOperand(0).getValueType() == VT &&
3986639872
!isa<ConstantSDNode>(LogicOp1.getOperand(0))) {
3986739873
SDValue CastedOp0 = DAG.getBitcast(VT, LogicOp0);
39868-
return DAG.getNode(FPOpcode, DL0, VT, LogicOp1.getOperand(0), CastedOp0);
39874+
unsigned Opcode = VT.isFloatingPoint() ? FPOpcode : N0.getOpcode();
39875+
return DAG.getNode(Opcode, DL0, VT, LogicOp1.getOperand(0), CastedOp0);
3986939876
}
3987039877

3987139878
return SDValue();

llvm/test/CodeGen/X86/avx512-logic.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -911,7 +911,7 @@ define <16 x i32> @ternlog_maskz_or_and_mask(<16 x i32> %x, <16 x i32> %y, <16 x
911911
; KNL: ## %bb.0:
912912
; KNL-NEXT: vpxor %xmm3, %xmm3, %xmm3
913913
; KNL-NEXT: vpcmpgtd %zmm2, %zmm3, %k1
914-
; KNL-NEXT: vpandq {{.*}}(%rip), %zmm0, %zmm0
914+
; KNL-NEXT: vpandd {{.*}}(%rip), %zmm0, %zmm0
915915
; KNL-NEXT: vpord %zmm1, %zmm0, %zmm0 {%k1} {z}
916916
; KNL-NEXT: retq
917917
;
@@ -933,7 +933,7 @@ define <8 x i64> @ternlog_maskz_xor_and_mask(<8 x i64> %x, <8 x i64> %y, <8 x i6
933933
; KNL: ## %bb.0:
934934
; KNL-NEXT: vpxor %xmm3, %xmm3, %xmm3
935935
; KNL-NEXT: vpcmpgtq %zmm2, %zmm3, %k1
936-
; KNL-NEXT: vpandd {{.*}}(%rip), %zmm0, %zmm0
936+
; KNL-NEXT: vpandq {{.*}}(%rip), %zmm0, %zmm0
937937
; KNL-NEXT: vpxorq %zmm1, %zmm0, %zmm0 {%k1} {z}
938938
; KNL-NEXT: retq
939939
;
@@ -977,7 +977,7 @@ define <16 x i32> @ternlog_masky_or_and_mask(<16 x i32> %x, <16 x i32> %y, <16 x
977977
; KNL: ## %bb.0:
978978
; KNL-NEXT: vpxor %xmm3, %xmm3, %xmm3
979979
; KNL-NEXT: vpcmpgtd %zmm2, %zmm3, %k1
980-
; KNL-NEXT: vpandq {{.*}}(%rip), %zmm0, %zmm0
980+
; KNL-NEXT: vpandd {{.*}}(%rip), %zmm0, %zmm0
981981
; KNL-NEXT: vpord %zmm1, %zmm0, %zmm1 {%k1}
982982
; KNL-NEXT: vmovdqa64 %zmm1, %zmm0
983983
; KNL-NEXT: retq
@@ -1023,7 +1023,7 @@ define <8 x i64> @ternlog_masky_xor_and_mask(<8 x i64> %x, <8 x i64> %y, <8 x i6
10231023
; KNL: ## %bb.0:
10241024
; KNL-NEXT: vpxor %xmm3, %xmm3, %xmm3
10251025
; KNL-NEXT: vpcmpgtq %zmm2, %zmm3, %k1
1026-
; KNL-NEXT: vpandd {{.*}}(%rip), %zmm0, %zmm0
1026+
; KNL-NEXT: vpandq {{.*}}(%rip), %zmm0, %zmm0
10271027
; KNL-NEXT: vpxorq %zmm1, %zmm0, %zmm1 {%k1}
10281028
; KNL-NEXT: vmovdqa64 %zmm1, %zmm0
10291029
; KNL-NEXT: retq

llvm/test/CodeGen/X86/known-signbits-vector.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ define float @signbits_ashr_sext_sextinreg_and_extract_sitofp(<2 x i64> %a0, <2
341341
; X86-NEXT: vpsrad $29, %xmm0, %xmm0
342342
; X86-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
343343
; X86-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
344-
; X86-NEXT: vpand %xmm1, %xmm0, %xmm0
344+
; X86-NEXT: vpand %xmm0, %xmm1, %xmm0
345345
; X86-NEXT: vcvtdq2ps %xmm0, %xmm0
346346
; X86-NEXT: vmovss %xmm0, (%esp)
347347
; X86-NEXT: flds (%esp)

llvm/test/CodeGen/X86/memcmp-more-load-pairs.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1671,7 +1671,7 @@ define i1 @length24_eq(i8* %x, i8* %y) nounwind {
16711671
; X64-AVX-NEXT: vmovq {{.*#+}} xmm2 = mem[0],zero
16721672
; X64-AVX-NEXT: vpxor %xmm2, %xmm1, %xmm1
16731673
; X64-AVX-NEXT: vpxor (%rsi), %xmm0, %xmm0
1674-
; X64-AVX-NEXT: vpor %xmm1, %xmm0, %xmm0
1674+
; X64-AVX-NEXT: vpor %xmm0, %xmm1, %xmm0
16751675
; X64-AVX-NEXT: vptest %xmm0, %xmm0
16761676
; X64-AVX-NEXT: sete %al
16771677
; X64-AVX-NEXT: retq

llvm/test/CodeGen/X86/memcmp-optsize.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -688,7 +688,7 @@ define i1 @length24_eq(i8* %x, i8* %y) nounwind optsize {
688688
; X64-AVX-NEXT: vmovq {{.*#+}} xmm2 = mem[0],zero
689689
; X64-AVX-NEXT: vpxor %xmm2, %xmm1, %xmm1
690690
; X64-AVX-NEXT: vpxor (%rsi), %xmm0, %xmm0
691-
; X64-AVX-NEXT: vpor %xmm1, %xmm0, %xmm0
691+
; X64-AVX-NEXT: vpor %xmm0, %xmm1, %xmm0
692692
; X64-AVX-NEXT: vptest %xmm0, %xmm0
693693
; X64-AVX-NEXT: sete %al
694694
; X64-AVX-NEXT: retq

llvm/test/CodeGen/X86/memcmp-pgso.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -688,7 +688,7 @@ define i1 @length24_eq(i8* %x, i8* %y) nounwind !prof !14 {
688688
; X64-AVX-NEXT: vmovq {{.*#+}} xmm2 = mem[0],zero
689689
; X64-AVX-NEXT: vpxor %xmm2, %xmm1, %xmm1
690690
; X64-AVX-NEXT: vpxor (%rsi), %xmm0, %xmm0
691-
; X64-AVX-NEXT: vpor %xmm1, %xmm0, %xmm0
691+
; X64-AVX-NEXT: vpor %xmm0, %xmm1, %xmm0
692692
; X64-AVX-NEXT: vptest %xmm0, %xmm0
693693
; X64-AVX-NEXT: sete %al
694694
; X64-AVX-NEXT: retq

llvm/test/CodeGen/X86/memcmp.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1650,7 +1650,7 @@ define i1 @length24_eq(i8* %x, i8* %y) nounwind {
16501650
; X64-AVX-NEXT: vmovq {{.*#+}} xmm2 = mem[0],zero
16511651
; X64-AVX-NEXT: vpxor %xmm2, %xmm1, %xmm1
16521652
; X64-AVX-NEXT: vpxor (%rsi), %xmm0, %xmm0
1653-
; X64-AVX-NEXT: vpor %xmm1, %xmm0, %xmm0
1653+
; X64-AVX-NEXT: vpor %xmm0, %xmm1, %xmm0
16541654
; X64-AVX-NEXT: vptest %xmm0, %xmm0
16551655
; X64-AVX-NEXT: sete %al
16561656
; X64-AVX-NEXT: retq

llvm/test/CodeGen/X86/merge-consecutive-loads-512.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ define <8 x i64> @merge_8i64_i64_1u3u5zu8(i64* %ptr) nounwind uwtable noinline s
217217
; X86-AVX512F: # %bb.0:
218218
; X86-AVX512F-NEXT: movl {{[0-9]+}}(%esp), %eax
219219
; X86-AVX512F-NEXT: vmovdqu64 8(%eax), %zmm0
220-
; X86-AVX512F-NEXT: vpandq {{\.LCPI.*}}, %zmm0, %zmm0
220+
; X86-AVX512F-NEXT: vpandd {{\.LCPI.*}}, %zmm0, %zmm0
221221
; X86-AVX512F-NEXT: retl
222222
%ptr0 = getelementptr inbounds i64, i64* %ptr, i64 1
223223
%ptr2 = getelementptr inbounds i64, i64* %ptr, i64 3

llvm/test/CodeGen/X86/pr40891.ll

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@ define <8 x i32> @foo(<8 x i64> %x, <4 x i64> %y) {
88
; CHECK: # %bb.0:
99
; CHECK-NEXT: vandps %ymm2, %ymm0, %ymm0
1010
; CHECK-NEXT: vandps {{\.LCPI.*}}, %ymm1, %ymm1
11-
; CHECK-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm0[2,3],ymm1[2,3]
11+
; CHECK-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm2
12+
; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm0
13+
; CHECK-NEXT: vextractf128 $1, %ymm1, %xmm1
1214
; CHECK-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
13-
; CHECK-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,2],ymm2[0,2],ymm0[4,6],ymm2[4,6]
15+
; CHECK-NEXT: vshufps {{.*#+}} ymm0 = ymm2[0,2],ymm0[0,2],ymm2[4,6],ymm0[4,6]
1416
; CHECK-NEXT: retl
1517
%a = shufflevector <4 x i64> %y, <4 x i64> <i64 12345, i64 67890, i64 13579, i64 24680>, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1618
%b = and <8 x i64> %x, %a

llvm/test/CodeGen/X86/sse2.ll

Lines changed: 6 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -678,38 +678,16 @@ define <4 x i32> @PR19721(<4 x i32> %i) {
678678
; X86-SSE-NEXT: andps {{\.LCPI.*}}, %xmm0
679679
; X86-SSE-NEXT: retl
680680
;
681-
; X86-AVX-LABEL: PR19721:
682-
; X86-AVX: # %bb.0:
683-
; X86-AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1
684-
; X86-AVX-NEXT: vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
685-
; X86-AVX-NEXT: retl
681+
; AVX-LABEL: PR19721:
682+
; AVX: # %bb.0:
683+
; AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1
684+
; AVX-NEXT: vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
685+
; AVX-NEXT: ret{{[l|q]}}
686686
;
687687
; X64-SSE-LABEL: PR19721:
688688
; X64-SSE: # %bb.0:
689-
; X64-SSE-NEXT: movq %xmm0, %rax
690-
; X64-SSE-NEXT: movabsq $-4294967296, %rcx # imm = 0xFFFFFFFF00000000
691-
; X64-SSE-NEXT: andq %rax, %rcx
692-
; X64-SSE-NEXT: movq %rcx, %xmm1
693-
; X64-SSE-NEXT: movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
689+
; X64-SSE-NEXT: andps {{.*}}(%rip), %xmm0
694690
; X64-SSE-NEXT: retq
695-
;
696-
; X64-AVX1-LABEL: PR19721:
697-
; X64-AVX1: # %bb.0:
698-
; X64-AVX1-NEXT: vmovq %xmm0, %rax
699-
; X64-AVX1-NEXT: movabsq $-4294967296, %rcx # imm = 0xFFFFFFFF00000000
700-
; X64-AVX1-NEXT: andq %rax, %rcx
701-
; X64-AVX1-NEXT: vmovq %rcx, %xmm1
702-
; X64-AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
703-
; X64-AVX1-NEXT: retq
704-
;
705-
; X64-AVX512-LABEL: PR19721:
706-
; X64-AVX512: # %bb.0:
707-
; X64-AVX512-NEXT: vmovq %xmm0, %rax
708-
; X64-AVX512-NEXT: movabsq $-4294967296, %rcx # imm = 0xFFFFFFFF00000000
709-
; X64-AVX512-NEXT: andq %rax, %rcx
710-
; X64-AVX512-NEXT: vmovq %rcx, %xmm1
711-
; X64-AVX512-NEXT: vpblendd {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3]
712-
; X64-AVX512-NEXT: retq
713691
%bc = bitcast <4 x i32> %i to i128
714692
%insert = and i128 %bc, -4294967296
715693
%bc2 = bitcast i128 %insert to <4 x i32>

llvm/test/CodeGen/X86/vec_saddo.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -813,10 +813,9 @@ define <2 x i32> @saddo_v2i64(<2 x i64> %a0, <2 x i64> %a1, <2 x i64>* %p2) noun
813813
; SSE-NEXT: pxor %xmm0, %xmm2
814814
; SSE-NEXT: movdqa %xmm3, %xmm4
815815
; SSE-NEXT: pcmpgtd %xmm2, %xmm4
816-
; SSE-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
817816
; SSE-NEXT: pcmpeqd %xmm3, %xmm2
818817
; SSE-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
819-
; SSE-NEXT: pand %xmm5, %xmm2
818+
; SSE-NEXT: pand %xmm4, %xmm2
820819
; SSE-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
821820
; SSE-NEXT: por %xmm2, %xmm3
822821
; SSE-NEXT: pxor %xmm2, %xmm2

llvm/test/CodeGen/X86/vec_ssubo.ll

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -819,19 +819,17 @@ define <2 x i32> @ssubo_v2i64(<2 x i64> %a0, <2 x i64> %a1, <2 x i64>* %p2) noun
819819
; SSE-NEXT: pxor %xmm2, %xmm0
820820
; SSE-NEXT: movdqa %xmm3, %xmm4
821821
; SSE-NEXT: pcmpgtd %xmm0, %xmm4
822-
; SSE-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
823822
; SSE-NEXT: pcmpeqd %xmm3, %xmm0
824823
; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
825-
; SSE-NEXT: pand %xmm5, %xmm0
824+
; SSE-NEXT: pand %xmm4, %xmm0
826825
; SSE-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
827826
; SSE-NEXT: por %xmm0, %xmm3
828827
; SSE-NEXT: pxor %xmm2, %xmm1
829828
; SSE-NEXT: movdqa %xmm1, %xmm0
830829
; SSE-NEXT: pcmpgtd %xmm2, %xmm0
831-
; SSE-NEXT: pshufd {{.*#+}} xmm4 = xmm0[0,0,2,2]
832830
; SSE-NEXT: pcmpeqd %xmm2, %xmm1
833831
; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
834-
; SSE-NEXT: pand %xmm4, %xmm1
832+
; SSE-NEXT: pand %xmm0, %xmm1
835833
; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
836834
; SSE-NEXT: por %xmm1, %xmm0
837835
; SSE-NEXT: pxor %xmm3, %xmm0

llvm/test/CodeGen/X86/vector-idiv-v2i32.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -249,9 +249,9 @@ define void @test_udiv_pow2_v2i32(<2 x i32>* %x, <2 x i32>* %y) nounwind {
249249
define void @test_urem_pow2_v2i32(<2 x i32>* %x, <2 x i32>* %y) nounwind {
250250
; X64-LABEL: test_urem_pow2_v2i32:
251251
; X64: # %bb.0:
252-
; X64-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
253-
; X64-NEXT: andps {{.*}}(%rip), %xmm0
254-
; X64-NEXT: movlps %xmm0, (%rsi)
252+
; X64-NEXT: movabsq $30064771079, %rax # imm = 0x700000007
253+
; X64-NEXT: andq (%rdi), %rax
254+
; X64-NEXT: movq %rax, (%rsi)
255255
; X64-NEXT: retq
256256
;
257257
; X86-LABEL: test_urem_pow2_v2i32:

llvm/test/CodeGen/X86/vector-reduce-and-cmp.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,7 @@ define i1 @test_v2i16(<2 x i16> %a0) {
477477
; AVX-LABEL: test_v2i16:
478478
; AVX: # %bb.0:
479479
; AVX-NEXT: vpsrld $16, %xmm0, %xmm1
480-
; AVX-NEXT: vpand %xmm1, %xmm0, %xmm0
480+
; AVX-NEXT: vpand %xmm0, %xmm1, %xmm0
481481
; AVX-NEXT: vmovd %xmm0, %eax
482482
; AVX-NEXT: testw %ax, %ax
483483
; AVX-NEXT: sete %al
@@ -505,7 +505,7 @@ define i1 @test_v4i16(<4 x i16> %a0) {
505505
; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
506506
; AVX-NEXT: vpand %xmm1, %xmm0, %xmm0
507507
; AVX-NEXT: vpsrld $16, %xmm0, %xmm1
508-
; AVX-NEXT: vpand %xmm1, %xmm0, %xmm0
508+
; AVX-NEXT: vpand %xmm0, %xmm1, %xmm0
509509
; AVX-NEXT: vmovd %xmm0, %eax
510510
; AVX-NEXT: testw %ax, %ax
511511
; AVX-NEXT: setne %al
@@ -537,7 +537,7 @@ define i1 @test_v8i16(<8 x i16> %a0) {
537537
; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
538538
; AVX-NEXT: vpand %xmm1, %xmm0, %xmm0
539539
; AVX-NEXT: vpsrld $16, %xmm0, %xmm1
540-
; AVX-NEXT: vpand %xmm1, %xmm0, %xmm0
540+
; AVX-NEXT: vpand %xmm0, %xmm1, %xmm0
541541
; AVX-NEXT: vmovd %xmm0, %eax
542542
; AVX-NEXT: testw %ax, %ax
543543
; AVX-NEXT: sete %al

llvm/test/CodeGen/X86/vector-reduce-and.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ define i16 @test_v2i16(<2 x i16> %a0) {
407407
; AVX-LABEL: test_v2i16:
408408
; AVX: # %bb.0:
409409
; AVX-NEXT: vpsrld $16, %xmm0, %xmm1
410-
; AVX-NEXT: vpand %xmm1, %xmm0, %xmm0
410+
; AVX-NEXT: vpand %xmm0, %xmm1, %xmm0
411411
; AVX-NEXT: vmovd %xmm0, %eax
412412
; AVX-NEXT: # kill: def $ax killed $ax killed $eax
413413
; AVX-NEXT: retq
@@ -432,7 +432,7 @@ define i16 @test_v4i16(<4 x i16> %a0) {
432432
; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
433433
; AVX-NEXT: vpand %xmm1, %xmm0, %xmm0
434434
; AVX-NEXT: vpsrld $16, %xmm0, %xmm1
435-
; AVX-NEXT: vpand %xmm1, %xmm0, %xmm0
435+
; AVX-NEXT: vpand %xmm0, %xmm1, %xmm0
436436
; AVX-NEXT: vmovd %xmm0, %eax
437437
; AVX-NEXT: # kill: def $ax killed $ax killed $eax
438438
; AVX-NEXT: retq
@@ -461,7 +461,7 @@ define i16 @test_v8i16(<8 x i16> %a0) {
461461
; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
462462
; AVX-NEXT: vpand %xmm1, %xmm0, %xmm0
463463
; AVX-NEXT: vpsrld $16, %xmm0, %xmm1
464-
; AVX-NEXT: vpand %xmm1, %xmm0, %xmm0
464+
; AVX-NEXT: vpand %xmm0, %xmm1, %xmm0
465465
; AVX-NEXT: vmovd %xmm0, %eax
466466
; AVX-NEXT: # kill: def $ax killed $ax killed $eax
467467
; AVX-NEXT: retq

llvm/test/CodeGen/X86/vector-reduce-or.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ define i16 @test_v2i16(<2 x i16> %a0) {
407407
; AVX-LABEL: test_v2i16:
408408
; AVX: # %bb.0:
409409
; AVX-NEXT: vpsrld $16, %xmm0, %xmm1
410-
; AVX-NEXT: vpor %xmm1, %xmm0, %xmm0
410+
; AVX-NEXT: vpor %xmm0, %xmm1, %xmm0
411411
; AVX-NEXT: vmovd %xmm0, %eax
412412
; AVX-NEXT: # kill: def $ax killed $ax killed $eax
413413
; AVX-NEXT: retq
@@ -432,7 +432,7 @@ define i16 @test_v4i16(<4 x i16> %a0) {
432432
; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
433433
; AVX-NEXT: vpor %xmm1, %xmm0, %xmm0
434434
; AVX-NEXT: vpsrld $16, %xmm0, %xmm1
435-
; AVX-NEXT: vpor %xmm1, %xmm0, %xmm0
435+
; AVX-NEXT: vpor %xmm0, %xmm1, %xmm0
436436
; AVX-NEXT: vmovd %xmm0, %eax
437437
; AVX-NEXT: # kill: def $ax killed $ax killed $eax
438438
; AVX-NEXT: retq
@@ -461,7 +461,7 @@ define i16 @test_v8i16(<8 x i16> %a0) {
461461
; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
462462
; AVX-NEXT: vpor %xmm1, %xmm0, %xmm0
463463
; AVX-NEXT: vpsrld $16, %xmm0, %xmm1
464-
; AVX-NEXT: vpor %xmm1, %xmm0, %xmm0
464+
; AVX-NEXT: vpor %xmm0, %xmm1, %xmm0
465465
; AVX-NEXT: vmovd %xmm0, %eax
466466
; AVX-NEXT: # kill: def $ax killed $ax killed $eax
467467
; AVX-NEXT: retq

llvm/test/CodeGen/X86/vector-reduce-xor.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ define i16 @test_v2i16(<2 x i16> %a0) {
407407
; AVX-LABEL: test_v2i16:
408408
; AVX: # %bb.0:
409409
; AVX-NEXT: vpsrld $16, %xmm0, %xmm1
410-
; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
410+
; AVX-NEXT: vpxor %xmm0, %xmm1, %xmm0
411411
; AVX-NEXT: vmovd %xmm0, %eax
412412
; AVX-NEXT: # kill: def $ax killed $ax killed $eax
413413
; AVX-NEXT: retq
@@ -432,7 +432,7 @@ define i16 @test_v4i16(<4 x i16> %a0) {
432432
; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
433433
; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
434434
; AVX-NEXT: vpsrld $16, %xmm0, %xmm1
435-
; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
435+
; AVX-NEXT: vpxor %xmm0, %xmm1, %xmm0
436436
; AVX-NEXT: vmovd %xmm0, %eax
437437
; AVX-NEXT: # kill: def $ax killed $ax killed $eax
438438
; AVX-NEXT: retq
@@ -461,7 +461,7 @@ define i16 @test_v8i16(<8 x i16> %a0) {
461461
; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
462462
; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
463463
; AVX-NEXT: vpsrld $16, %xmm0, %xmm1
464-
; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
464+
; AVX-NEXT: vpxor %xmm0, %xmm1, %xmm0
465465
; AVX-NEXT: vmovd %xmm0, %eax
466466
; AVX-NEXT: # kill: def $ax killed $ax killed $eax
467467
; AVX-NEXT: retq

0 commit comments

Comments
 (0)