[llvm] bf2ce6b - [X86] combinePTESTCC - fold TESTC(X, ~X) -> TESTC(X, -1)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Sat Apr 1 12:29:26 PDT 2023
Author: Simon Pilgrim
Date: 2023-04-01T20:28:31+01:00
New Revision: bf2ce6ba422b93d5338f36654168aa1fa4e78798
URL: https://github.com/llvm/llvm-project/commit/bf2ce6ba422b93d5338f36654168aa1fa4e78798
DIFF: https://github.com/llvm/llvm-project/commit/bf2ce6ba422b93d5338f36654168aa1fa4e78798.diff
LOG: [X86] combinePTESTCC - fold TESTC(X,~X) -> TESTC(X,-1)
Partial fix for Issue #59998
Added:
Modified:
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/combine-ptest.ll
llvm/test/CodeGen/X86/vector-reduce-and-bool.ll
llvm/test/CodeGen/X86/vector-reduce-and-cmp.ll
llvm/test/CodeGen/X86/vector-reduce-and-scalar.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index c146aa715577..e012026917f8 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -47233,6 +47233,18 @@ static SDValue combinePTESTCC(SDValue EFLAGS, X86::CondCode &CC,
}
}
+ if (CC == X86::COND_B || CC == X86::COND_AE) {
+ // TESTC(X,~X) == TESTC(X,-1)
+ if (SDValue NotOp1 = IsNOT(Op1, DAG)) {
+ if (peekThroughBitcasts(NotOp1) == peekThroughBitcasts(Op0)) {
+ SDLoc DL(EFLAGS);
+ return DAG.getNode(EFLAGS.getOpcode(), DL, VT,
+ DAG.getBitcast(OpVT, NotOp1),
+ DAG.getAllOnesConstant(DL, OpVT));
+ }
+ }
+ }
+
if (CC == X86::COND_E || CC == X86::COND_NE) {
// TESTZ(X,~Y) == TESTC(Y,X)
if (SDValue NotOp1 = IsNOT(Op1, DAG)) {
diff --git a/llvm/test/CodeGen/X86/combine-ptest.ll b/llvm/test/CodeGen/X86/combine-ptest.ll
index bff6d5fc0479..61ca9208a100 100644
--- a/llvm/test/CodeGen/X86/combine-ptest.ll
+++ b/llvm/test/CodeGen/X86/combine-ptest.ll
@@ -150,7 +150,7 @@ define i32 @ptestnzc_256_invert0_commute(<4 x i64> %c, <4 x i64> %d, i32 %a, i32
}
;
-; TODO: testc(X,~X) -> testc(X,-1)
+; testc(X,~X) -> testc(X,-1)
;
define i32 @ptestc_128_not(<2 x i64> %c, <2 x i64> %d, i32 %a, i32 %b) {
@@ -158,7 +158,6 @@ define i32 @ptestc_128_not(<2 x i64> %c, <2 x i64> %d, i32 %a, i32 %b) {
; CHECK: # %bb.0:
; CHECK-NEXT: movl %edi, %eax
; CHECK-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
-; CHECK-NEXT: vpxor %xmm1, %xmm0, %xmm1
; CHECK-NEXT: vptest %xmm1, %xmm0
; CHECK-NEXT: cmovael %esi, %eax
; CHECK-NEXT: retq
diff --git a/llvm/test/CodeGen/X86/vector-reduce-and-bool.ll b/llvm/test/CodeGen/X86/vector-reduce-and-bool.ll
index 1cf831730c82..67632509c864 100644
--- a/llvm/test/CodeGen/X86/vector-reduce-and-bool.ll
+++ b/llvm/test/CodeGen/X86/vector-reduce-and-bool.ll
@@ -1554,7 +1554,6 @@ define i1 @icmp1_v2i64_v2i1(<2 x i64>) {
; SSE41-LABEL: icmp1_v2i64_v2i1:
; SSE41: # %bb.0:
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
@@ -1562,7 +1561,6 @@ define i1 @icmp1_v2i64_v2i1(<2 x i64>) {
; AVX1OR2-LABEL: icmp1_v2i64_v2i1:
; AVX1OR2: # %bb.0:
; AVX1OR2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
-; AVX1OR2-NEXT: vpxor %xmm1, %xmm0, %xmm1
; AVX1OR2-NEXT: vptest %xmm1, %xmm0
; AVX1OR2-NEXT: setb %al
; AVX1OR2-NEXT: retq
@@ -1615,7 +1613,6 @@ define i1 @icmp1_v4i32_v4i1(<4 x i32>) {
; SSE41-LABEL: icmp1_v4i32_v4i1:
; SSE41: # %bb.0:
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
@@ -1623,7 +1620,6 @@ define i1 @icmp1_v4i32_v4i1(<4 x i32>) {
; AVX1OR2-LABEL: icmp1_v4i32_v4i1:
; AVX1OR2: # %bb.0:
; AVX1OR2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
-; AVX1OR2-NEXT: vpxor %xmm1, %xmm0, %xmm1
; AVX1OR2-NEXT: vptest %xmm1, %xmm0
; AVX1OR2-NEXT: setb %al
; AVX1OR2-NEXT: retq
@@ -1676,7 +1672,6 @@ define i1 @icmp1_v8i16_v8i1(<8 x i16>) {
; SSE41-LABEL: icmp1_v8i16_v8i1:
; SSE41: # %bb.0:
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
@@ -1684,7 +1679,6 @@ define i1 @icmp1_v8i16_v8i1(<8 x i16>) {
; AVX1OR2-LABEL: icmp1_v8i16_v8i1:
; AVX1OR2: # %bb.0:
; AVX1OR2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
-; AVX1OR2-NEXT: vpxor %xmm1, %xmm0, %xmm1
; AVX1OR2-NEXT: vptest %xmm1, %xmm0
; AVX1OR2-NEXT: setb %al
; AVX1OR2-NEXT: retq
@@ -1703,18 +1697,14 @@ define i1 @icmp1_v8i16_v8i1(<8 x i16>) {
;
; AVX512BW-LABEL: icmp1_v8i16_v8i1:
; AVX512BW: # %bb.0:
-; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
-; AVX512BW-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512BW-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
+; AVX512BW-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
; AVX512BW-NEXT: vptest %xmm1, %xmm0
; AVX512BW-NEXT: setb %al
-; AVX512BW-NEXT: vzeroupper
; AVX512BW-NEXT: retq
;
; AVX512VL-LABEL: icmp1_v8i16_v8i1:
; AVX512VL: # %bb.0:
-; AVX512VL-NEXT: vmovdqa %xmm0, %xmm1
-; AVX512VL-NEXT: vpternlogq $15, %xmm0, %xmm0, %xmm1
+; AVX512VL-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
; AVX512VL-NEXT: vptest %xmm1, %xmm0
; AVX512VL-NEXT: setb %al
; AVX512VL-NEXT: retq
@@ -1736,46 +1726,16 @@ define i1 @icmp1_v16i8_v16i1(<16 x i8>) {
; SSE41-LABEL: icmp1_v16i8_v16i1:
; SSE41: # %bb.0:
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
;
-; AVX1OR2-LABEL: icmp1_v16i8_v16i1:
-; AVX1OR2: # %bb.0:
-; AVX1OR2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
-; AVX1OR2-NEXT: vpxor %xmm1, %xmm0, %xmm1
-; AVX1OR2-NEXT: vptest %xmm1, %xmm0
-; AVX1OR2-NEXT: setb %al
-; AVX1OR2-NEXT: retq
-;
-; AVX512F-LABEL: icmp1_v16i8_v16i1:
-; AVX512F: # %bb.0:
-; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
-; AVX512F-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512F-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512F-NEXT: vptest %xmm1, %xmm0
-; AVX512F-NEXT: setb %al
-; AVX512F-NEXT: vzeroupper
-; AVX512F-NEXT: retq
-;
-; AVX512BW-LABEL: icmp1_v16i8_v16i1:
-; AVX512BW: # %bb.0:
-; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
-; AVX512BW-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512BW-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512BW-NEXT: vptest %xmm1, %xmm0
-; AVX512BW-NEXT: setb %al
-; AVX512BW-NEXT: vzeroupper
-; AVX512BW-NEXT: retq
-;
-; AVX512VL-LABEL: icmp1_v16i8_v16i1:
-; AVX512VL: # %bb.0:
-; AVX512VL-NEXT: vmovdqa %xmm0, %xmm1
-; AVX512VL-NEXT: vpternlogq $15, %xmm0, %xmm0, %xmm1
-; AVX512VL-NEXT: vptest %xmm1, %xmm0
-; AVX512VL-NEXT: setb %al
-; AVX512VL-NEXT: retq
+; AVX-LABEL: icmp1_v16i8_v16i1:
+; AVX: # %bb.0:
+; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
+; AVX-NEXT: vptest %xmm1, %xmm0
+; AVX-NEXT: setb %al
+; AVX-NEXT: retq
%a = icmp eq <16 x i8> %0, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
%b = call i1 @llvm.vector.reduce.and.v16i1(<16 x i1> %a)
ret i1 %b
@@ -1794,10 +1754,9 @@ define i1 @icmp1_v4i64_v4i1(<4 x i64>) {
;
; SSE41-LABEL: icmp1_v4i64_v4i1:
; SSE41: # %bb.0:
-; SSE41-NEXT: pcmpeqd %xmm2, %xmm2
; SSE41-NEXT: pand %xmm1, %xmm0
-; SSE41-NEXT: pxor %xmm0, %xmm2
-; SSE41-NEXT: ptest %xmm2, %xmm0
+; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
+; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
;
@@ -1816,7 +1775,6 @@ define i1 @icmp1_v4i64_v4i1(<4 x i64>) {
; AVX2-LABEL: icmp1_v4i64_v4i1:
; AVX2: # %bb.0:
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setb %al
; AVX2-NEXT: vzeroupper
@@ -1871,10 +1829,9 @@ define i1 @icmp1_v8i32_v8i1(<8 x i32>) {
;
; SSE41-LABEL: icmp1_v8i32_v8i1:
; SSE41: # %bb.0:
-; SSE41-NEXT: pcmpeqd %xmm2, %xmm2
; SSE41-NEXT: pand %xmm1, %xmm0
-; SSE41-NEXT: pxor %xmm0, %xmm2
-; SSE41-NEXT: ptest %xmm2, %xmm0
+; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
+; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
;
@@ -1893,40 +1850,18 @@ define i1 @icmp1_v8i32_v8i1(<8 x i32>) {
; AVX2-LABEL: icmp1_v8i32_v8i1:
; AVX2: # %bb.0:
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setb %al
; AVX2-NEXT: vzeroupper
; AVX2-NEXT: retq
;
-; AVX512F-LABEL: icmp1_v8i32_v8i1:
-; AVX512F: # %bb.0:
-; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
-; AVX512F-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512F-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512F-NEXT: vptest %ymm1, %ymm0
-; AVX512F-NEXT: setb %al
-; AVX512F-NEXT: vzeroupper
-; AVX512F-NEXT: retq
-;
-; AVX512BW-LABEL: icmp1_v8i32_v8i1:
-; AVX512BW: # %bb.0:
-; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
-; AVX512BW-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512BW-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512BW-NEXT: vptest %ymm1, %ymm0
-; AVX512BW-NEXT: setb %al
-; AVX512BW-NEXT: vzeroupper
-; AVX512BW-NEXT: retq
-;
-; AVX512VL-LABEL: icmp1_v8i32_v8i1:
-; AVX512VL: # %bb.0:
-; AVX512VL-NEXT: vmovdqa %ymm0, %ymm1
-; AVX512VL-NEXT: vpternlogq $15, %ymm0, %ymm0, %ymm1
-; AVX512VL-NEXT: vptest %ymm1, %ymm0
-; AVX512VL-NEXT: setb %al
-; AVX512VL-NEXT: vzeroupper
-; AVX512VL-NEXT: retq
+; AVX512-LABEL: icmp1_v8i32_v8i1:
+; AVX512: # %bb.0:
+; AVX512-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
+; AVX512-NEXT: vptest %ymm1, %ymm0
+; AVX512-NEXT: setb %al
+; AVX512-NEXT: vzeroupper
+; AVX512-NEXT: retq
%a = icmp eq <8 x i32> %0, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
%b = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %a)
ret i1 %b
@@ -1945,10 +1880,9 @@ define i1 @icmp1_v16i16_v16i1(<16 x i16>) {
;
; SSE41-LABEL: icmp1_v16i16_v16i1:
; SSE41: # %bb.0:
-; SSE41-NEXT: pcmpeqd %xmm2, %xmm2
; SSE41-NEXT: pand %xmm1, %xmm0
-; SSE41-NEXT: pxor %xmm0, %xmm2
-; SSE41-NEXT: ptest %xmm2, %xmm0
+; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
+; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
;
@@ -1967,7 +1901,6 @@ define i1 @icmp1_v16i16_v16i1(<16 x i16>) {
; AVX2-LABEL: icmp1_v16i16_v16i1:
; AVX2: # %bb.0:
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setb %al
; AVX2-NEXT: vzeroupper
@@ -1986,9 +1919,7 @@ define i1 @icmp1_v16i16_v16i1(<16 x i16>) {
;
; AVX512BW-LABEL: icmp1_v16i16_v16i1:
; AVX512BW: # %bb.0:
-; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
-; AVX512BW-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512BW-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
+; AVX512BW-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
; AVX512BW-NEXT: vptest %ymm1, %ymm0
; AVX512BW-NEXT: setb %al
; AVX512BW-NEXT: vzeroupper
@@ -1996,8 +1927,7 @@ define i1 @icmp1_v16i16_v16i1(<16 x i16>) {
;
; AVX512VL-LABEL: icmp1_v16i16_v16i1:
; AVX512VL: # %bb.0:
-; AVX512VL-NEXT: vmovdqa %ymm0, %ymm1
-; AVX512VL-NEXT: vpternlogq $15, %ymm0, %ymm0, %ymm1
+; AVX512VL-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
; AVX512VL-NEXT: vptest %ymm1, %ymm0
; AVX512VL-NEXT: setb %al
; AVX512VL-NEXT: vzeroupper
@@ -2022,7 +1952,6 @@ define i1 @icmp1_v32i8_v32i1(<32 x i8>) {
; SSE41: # %bb.0:
; SSE41-NEXT: pand %xmm1, %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
@@ -2042,7 +1971,6 @@ define i1 @icmp1_v32i8_v32i1(<32 x i8>) {
; AVX2-LABEL: icmp1_v32i8_v32i1:
; AVX2: # %bb.0:
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setb %al
; AVX2-NEXT: vzeroupper
@@ -2071,9 +1999,7 @@ define i1 @icmp1_v32i8_v32i1(<32 x i8>) {
;
; AVX512BW-LABEL: icmp1_v32i8_v32i1:
; AVX512BW: # %bb.0:
-; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
-; AVX512BW-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512BW-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
+; AVX512BW-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
; AVX512BW-NEXT: vptest %ymm1, %ymm0
; AVX512BW-NEXT: setb %al
; AVX512BW-NEXT: vzeroupper
@@ -2081,8 +2007,7 @@ define i1 @icmp1_v32i8_v32i1(<32 x i8>) {
;
; AVX512VL-LABEL: icmp1_v32i8_v32i1:
; AVX512VL: # %bb.0:
-; AVX512VL-NEXT: vmovdqa %ymm0, %ymm1
-; AVX512VL-NEXT: vpternlogq $15, %ymm0, %ymm0, %ymm1
+; AVX512VL-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
; AVX512VL-NEXT: vptest %ymm1, %ymm0
; AVX512VL-NEXT: setb %al
; AVX512VL-NEXT: vzeroupper
@@ -2107,12 +2032,11 @@ define i1 @icmp1_v8i64_v8i1(<8 x i64>) {
;
; SSE41-LABEL: icmp1_v8i64_v8i1:
; SSE41: # %bb.0:
-; SSE41-NEXT: pcmpeqd %xmm4, %xmm4
; SSE41-NEXT: pand %xmm3, %xmm1
; SSE41-NEXT: pand %xmm2, %xmm0
; SSE41-NEXT: pand %xmm1, %xmm0
-; SSE41-NEXT: pxor %xmm0, %xmm4
-; SSE41-NEXT: ptest %xmm4, %xmm0
+; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
+; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
;
@@ -2131,9 +2055,8 @@ define i1 @icmp1_v8i64_v8i1(<8 x i64>) {
;
; AVX2-LABEL: icmp1_v8i64_v8i1:
; AVX2: # %bb.0:
-; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2
; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0
-; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm1
+; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setb %al
; AVX2-NEXT: vzeroupper
@@ -2167,12 +2090,11 @@ define i1 @icmp1_v16i32_v16i1(<16 x i32>) {
;
; SSE41-LABEL: icmp1_v16i32_v16i1:
; SSE41: # %bb.0:
-; SSE41-NEXT: pcmpeqd %xmm4, %xmm4
; SSE41-NEXT: pand %xmm3, %xmm1
; SSE41-NEXT: pand %xmm2, %xmm0
; SSE41-NEXT: pand %xmm1, %xmm0
-; SSE41-NEXT: pxor %xmm0, %xmm4
-; SSE41-NEXT: ptest %xmm4, %xmm0
+; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
+; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
;
@@ -2191,9 +2113,8 @@ define i1 @icmp1_v16i32_v16i1(<16 x i32>) {
;
; AVX2-LABEL: icmp1_v16i32_v16i1:
; AVX2: # %bb.0:
-; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2
; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0
-; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm1
+; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setb %al
; AVX2-NEXT: vzeroupper
@@ -2227,12 +2148,11 @@ define i1 @icmp1_v32i16_v32i1(<32 x i16>) {
;
; SSE41-LABEL: icmp1_v32i16_v32i1:
; SSE41: # %bb.0:
-; SSE41-NEXT: pcmpeqd %xmm4, %xmm4
; SSE41-NEXT: pand %xmm3, %xmm1
; SSE41-NEXT: pand %xmm2, %xmm0
; SSE41-NEXT: pand %xmm1, %xmm0
-; SSE41-NEXT: pxor %xmm0, %xmm4
-; SSE41-NEXT: ptest %xmm4, %xmm0
+; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
+; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
;
@@ -2251,9 +2171,8 @@ define i1 @icmp1_v32i16_v32i1(<32 x i16>) {
;
; AVX2-LABEL: icmp1_v32i16_v32i1:
; AVX2: # %bb.0:
-; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2
; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0
-; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm1
+; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setb %al
; AVX2-NEXT: vzeroupper
@@ -2322,7 +2241,6 @@ define i1 @icmp1_v64i8_v64i1(<64 x i8>) {
; SSE41-NEXT: pand %xmm2, %xmm0
; SSE41-NEXT: pand %xmm1, %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
@@ -2344,7 +2262,6 @@ define i1 @icmp1_v64i8_v64i1(<64 x i8>) {
; AVX2: # %bb.0:
; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setb %al
; AVX2-NEXT: vzeroupper
diff --git a/llvm/test/CodeGen/X86/vector-reduce-and-cmp.ll b/llvm/test/CodeGen/X86/vector-reduce-and-cmp.ll
index 7f20ef7367e9..d4d79ddbd589 100644
--- a/llvm/test/CodeGen/X86/vector-reduce-and-cmp.ll
+++ b/llvm/test/CodeGen/X86/vector-reduce-and-cmp.ll
@@ -24,46 +24,16 @@ define i1 @test_v2i64(<2 x i64> %a0) {
; SSE41-LABEL: test_v2i64:
; SSE41: # %bb.0:
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
;
-; AVX1OR2-LABEL: test_v2i64:
-; AVX1OR2: # %bb.0:
-; AVX1OR2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
-; AVX1OR2-NEXT: vpxor %xmm1, %xmm0, %xmm1
-; AVX1OR2-NEXT: vptest %xmm1, %xmm0
-; AVX1OR2-NEXT: setb %al
-; AVX1OR2-NEXT: retq
-;
-; AVX512F-LABEL: test_v2i64:
-; AVX512F: # %bb.0:
-; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
-; AVX512F-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512F-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512F-NEXT: vptest %xmm1, %xmm0
-; AVX512F-NEXT: setb %al
-; AVX512F-NEXT: vzeroupper
-; AVX512F-NEXT: retq
-;
-; AVX512BW-LABEL: test_v2i64:
-; AVX512BW: # %bb.0:
-; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
-; AVX512BW-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512BW-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512BW-NEXT: vptest %xmm1, %xmm0
-; AVX512BW-NEXT: setb %al
-; AVX512BW-NEXT: vzeroupper
-; AVX512BW-NEXT: retq
-;
-; AVX512BWVL-LABEL: test_v2i64:
-; AVX512BWVL: # %bb.0:
-; AVX512BWVL-NEXT: vmovdqa %xmm0, %xmm1
-; AVX512BWVL-NEXT: vpternlogq $15, %xmm0, %xmm0, %xmm1
-; AVX512BWVL-NEXT: vptest %xmm1, %xmm0
-; AVX512BWVL-NEXT: setb %al
-; AVX512BWVL-NEXT: retq
+; AVX-LABEL: test_v2i64:
+; AVX: # %bb.0:
+; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
+; AVX-NEXT: vptest %xmm1, %xmm0
+; AVX-NEXT: setb %al
+; AVX-NEXT: retq
%1 = call i64 @llvm.vector.reduce.and.v2i64(<2 x i64> %a0)
%2 = icmp eq i64 %1, -1
ret i1 %2
@@ -84,7 +54,6 @@ define i1 @test_v4i64(<4 x i64> %a0) {
; SSE41: # %bb.0:
; SSE41-NEXT: pand %xmm1, %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setae %al
; SSE41-NEXT: retq
@@ -93,7 +62,6 @@ define i1 @test_v4i64(<4 x i64> %a0) {
; AVX1: # %bb.0:
; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1
-; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm1
; AVX1-NEXT: vptest %ymm1, %ymm0
; AVX1-NEXT: setae %al
; AVX1-NEXT: vzeroupper
@@ -102,40 +70,18 @@ define i1 @test_v4i64(<4 x i64> %a0) {
; AVX2-LABEL: test_v4i64:
; AVX2: # %bb.0:
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setae %al
; AVX2-NEXT: vzeroupper
; AVX2-NEXT: retq
;
-; AVX512F-LABEL: test_v4i64:
-; AVX512F: # %bb.0:
-; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
-; AVX512F-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512F-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512F-NEXT: vptest %ymm1, %ymm0
-; AVX512F-NEXT: setae %al
-; AVX512F-NEXT: vzeroupper
-; AVX512F-NEXT: retq
-;
-; AVX512BW-LABEL: test_v4i64:
-; AVX512BW: # %bb.0:
-; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
-; AVX512BW-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512BW-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512BW-NEXT: vptest %ymm1, %ymm0
-; AVX512BW-NEXT: setae %al
-; AVX512BW-NEXT: vzeroupper
-; AVX512BW-NEXT: retq
-;
-; AVX512BWVL-LABEL: test_v4i64:
-; AVX512BWVL: # %bb.0:
-; AVX512BWVL-NEXT: vmovdqa %ymm0, %ymm1
-; AVX512BWVL-NEXT: vpternlogq $15, %ymm0, %ymm0, %ymm1
-; AVX512BWVL-NEXT: vptest %ymm1, %ymm0
-; AVX512BWVL-NEXT: setae %al
-; AVX512BWVL-NEXT: vzeroupper
-; AVX512BWVL-NEXT: retq
+; AVX512-LABEL: test_v4i64:
+; AVX512: # %bb.0:
+; AVX512-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
+; AVX512-NEXT: vptest %ymm1, %ymm0
+; AVX512-NEXT: setae %al
+; AVX512-NEXT: vzeroupper
+; AVX512-NEXT: retq
%1 = call i64 @llvm.vector.reduce.and.v4i64(<4 x i64> %a0)
%2 = icmp ne i64 %1, -1
ret i1 %2
@@ -160,7 +106,6 @@ define i1 @test_v8i64(<8 x i64> %a0) {
; SSE41-NEXT: pand %xmm2, %xmm0
; SSE41-NEXT: pand %xmm1, %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
@@ -170,7 +115,6 @@ define i1 @test_v8i64(<8 x i64> %a0) {
; AVX1-NEXT: vandps %ymm1, %ymm0, %ymm0
; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1
-; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm1
; AVX1-NEXT: vptest %ymm1, %ymm0
; AVX1-NEXT: setb %al
; AVX1-NEXT: vzeroupper
@@ -180,7 +124,6 @@ define i1 @test_v8i64(<8 x i64> %a0) {
; AVX2: # %bb.0:
; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setb %al
; AVX2-NEXT: vzeroupper
@@ -226,7 +169,6 @@ define i1 @test_v16i64(<16 x i64> %a0) {
; SSE41-NEXT: pand %xmm2, %xmm0
; SSE41-NEXT: pand %xmm1, %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setae %al
; SSE41-NEXT: retq
@@ -238,7 +180,6 @@ define i1 @test_v16i64(<16 x i64> %a0) {
; AVX1-NEXT: vandps %ymm1, %ymm0, %ymm0
; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1
-; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm1
; AVX1-NEXT: vptest %ymm1, %ymm0
; AVX1-NEXT: setae %al
; AVX1-NEXT: vzeroupper
@@ -250,7 +191,6 @@ define i1 @test_v16i64(<16 x i64> %a0) {
; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0
; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setae %al
; AVX2-NEXT: vzeroupper
@@ -306,46 +246,16 @@ define i1 @test_v4i32(<4 x i32> %a0) {
; SSE41-LABEL: test_v4i32:
; SSE41: # %bb.0:
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setae %al
; SSE41-NEXT: retq
;
-; AVX1OR2-LABEL: test_v4i32:
-; AVX1OR2: # %bb.0:
-; AVX1OR2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
-; AVX1OR2-NEXT: vpxor %xmm1, %xmm0, %xmm1
-; AVX1OR2-NEXT: vptest %xmm1, %xmm0
-; AVX1OR2-NEXT: setae %al
-; AVX1OR2-NEXT: retq
-;
-; AVX512F-LABEL: test_v4i32:
-; AVX512F: # %bb.0:
-; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
-; AVX512F-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512F-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512F-NEXT: vptest %xmm1, %xmm0
-; AVX512F-NEXT: setae %al
-; AVX512F-NEXT: vzeroupper
-; AVX512F-NEXT: retq
-;
-; AVX512BW-LABEL: test_v4i32:
-; AVX512BW: # %bb.0:
-; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
-; AVX512BW-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512BW-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512BW-NEXT: vptest %xmm1, %xmm0
-; AVX512BW-NEXT: setae %al
-; AVX512BW-NEXT: vzeroupper
-; AVX512BW-NEXT: retq
-;
-; AVX512BWVL-LABEL: test_v4i32:
-; AVX512BWVL: # %bb.0:
-; AVX512BWVL-NEXT: vmovdqa %xmm0, %xmm1
-; AVX512BWVL-NEXT: vpternlogq $15, %xmm0, %xmm0, %xmm1
-; AVX512BWVL-NEXT: vptest %xmm1, %xmm0
-; AVX512BWVL-NEXT: setae %al
-; AVX512BWVL-NEXT: retq
+; AVX-LABEL: test_v4i32:
+; AVX: # %bb.0:
+; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
+; AVX-NEXT: vptest %xmm1, %xmm0
+; AVX-NEXT: setae %al
+; AVX-NEXT: retq
%1 = call i32 @llvm.vector.reduce.and.v4i32(<4 x i32> %a0)
%2 = icmp ne i32 %1, -1
ret i1 %2
@@ -366,7 +276,6 @@ define i1 @test_v8i32(<8 x i32> %a0) {
; SSE41: # %bb.0:
; SSE41-NEXT: pand %xmm1, %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
@@ -375,7 +284,6 @@ define i1 @test_v8i32(<8 x i32> %a0) {
; AVX1: # %bb.0:
; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1
-; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm1
; AVX1-NEXT: vptest %ymm1, %ymm0
; AVX1-NEXT: setb %al
; AVX1-NEXT: vzeroupper
@@ -384,40 +292,18 @@ define i1 @test_v8i32(<8 x i32> %a0) {
; AVX2-LABEL: test_v8i32:
; AVX2: # %bb.0:
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setb %al
; AVX2-NEXT: vzeroupper
; AVX2-NEXT: retq
;
-; AVX512F-LABEL: test_v8i32:
-; AVX512F: # %bb.0:
-; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
-; AVX512F-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512F-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512F-NEXT: vptest %ymm1, %ymm0
-; AVX512F-NEXT: setb %al
-; AVX512F-NEXT: vzeroupper
-; AVX512F-NEXT: retq
-;
-; AVX512BW-LABEL: test_v8i32:
-; AVX512BW: # %bb.0:
-; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
-; AVX512BW-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512BW-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512BW-NEXT: vptest %ymm1, %ymm0
-; AVX512BW-NEXT: setb %al
-; AVX512BW-NEXT: vzeroupper
-; AVX512BW-NEXT: retq
-;
-; AVX512BWVL-LABEL: test_v8i32:
-; AVX512BWVL: # %bb.0:
-; AVX512BWVL-NEXT: vmovdqa %ymm0, %ymm1
-; AVX512BWVL-NEXT: vpternlogq $15, %ymm0, %ymm0, %ymm1
-; AVX512BWVL-NEXT: vptest %ymm1, %ymm0
-; AVX512BWVL-NEXT: setb %al
-; AVX512BWVL-NEXT: vzeroupper
-; AVX512BWVL-NEXT: retq
+; AVX512-LABEL: test_v8i32:
+; AVX512: # %bb.0:
+; AVX512-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
+; AVX512-NEXT: vptest %ymm1, %ymm0
+; AVX512-NEXT: setb %al
+; AVX512-NEXT: vzeroupper
+; AVX512-NEXT: retq
%1 = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> %a0)
%2 = icmp eq i32 %1, -1
ret i1 %2
@@ -442,7 +328,6 @@ define i1 @test_v16i32(<16 x i32> %a0) {
; SSE41-NEXT: pand %xmm2, %xmm0
; SSE41-NEXT: pand %xmm1, %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setae %al
; SSE41-NEXT: retq
@@ -452,7 +337,6 @@ define i1 @test_v16i32(<16 x i32> %a0) {
; AVX1-NEXT: vandps %ymm1, %ymm0, %ymm0
; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1
-; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm1
; AVX1-NEXT: vptest %ymm1, %ymm0
; AVX1-NEXT: setae %al
; AVX1-NEXT: vzeroupper
@@ -462,7 +346,6 @@ define i1 @test_v16i32(<16 x i32> %a0) {
; AVX2: # %bb.0:
; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setae %al
; AVX2-NEXT: vzeroupper
@@ -508,7 +391,6 @@ define i1 @test_v32i32(<32 x i32> %a0) {
; SSE41-NEXT: pand %xmm2, %xmm0
; SSE41-NEXT: pand %xmm1, %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
@@ -520,7 +402,6 @@ define i1 @test_v32i32(<32 x i32> %a0) {
; AVX1-NEXT: vandps %ymm1, %ymm0, %ymm0
; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1
-; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm1
; AVX1-NEXT: vptest %ymm1, %ymm0
; AVX1-NEXT: setb %al
; AVX1-NEXT: vzeroupper
@@ -532,7 +413,6 @@ define i1 @test_v32i32(<32 x i32> %a0) {
; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0
; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setb %al
; AVX2-NEXT: vzeroupper
@@ -607,46 +487,16 @@ define i1 @test_v8i16(<8 x i16> %a0) {
; SSE41-LABEL: test_v8i16:
; SSE41: # %bb.0:
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
;
-; AVX1OR2-LABEL: test_v8i16:
-; AVX1OR2: # %bb.0:
-; AVX1OR2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
-; AVX1OR2-NEXT: vpxor %xmm1, %xmm0, %xmm1
-; AVX1OR2-NEXT: vptest %xmm1, %xmm0
-; AVX1OR2-NEXT: setb %al
-; AVX1OR2-NEXT: retq
-;
-; AVX512F-LABEL: test_v8i16:
-; AVX512F: # %bb.0:
-; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
-; AVX512F-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512F-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512F-NEXT: vptest %xmm1, %xmm0
-; AVX512F-NEXT: setb %al
-; AVX512F-NEXT: vzeroupper
-; AVX512F-NEXT: retq
-;
-; AVX512BW-LABEL: test_v8i16:
-; AVX512BW: # %bb.0:
-; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
-; AVX512BW-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512BW-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512BW-NEXT: vptest %xmm1, %xmm0
-; AVX512BW-NEXT: setb %al
-; AVX512BW-NEXT: vzeroupper
-; AVX512BW-NEXT: retq
-;
-; AVX512BWVL-LABEL: test_v8i16:
-; AVX512BWVL: # %bb.0:
-; AVX512BWVL-NEXT: vmovdqa %xmm0, %xmm1
-; AVX512BWVL-NEXT: vpternlogq $15, %xmm0, %xmm0, %xmm1
-; AVX512BWVL-NEXT: vptest %xmm1, %xmm0
-; AVX512BWVL-NEXT: setb %al
-; AVX512BWVL-NEXT: retq
+; AVX-LABEL: test_v8i16:
+; AVX: # %bb.0:
+; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
+; AVX-NEXT: vptest %xmm1, %xmm0
+; AVX-NEXT: setb %al
+; AVX-NEXT: retq
%1 = call i16 @llvm.vector.reduce.and.v8i16(<8 x i16> %a0)
%2 = icmp eq i16 %1, -1
ret i1 %2
@@ -667,7 +517,6 @@ define i1 @test_v16i16(<16 x i16> %a0) {
; SSE41: # %bb.0:
; SSE41-NEXT: pand %xmm1, %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setae %al
; SSE41-NEXT: retq
@@ -676,7 +525,6 @@ define i1 @test_v16i16(<16 x i16> %a0) {
; AVX1: # %bb.0:
; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1
-; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm1
; AVX1-NEXT: vptest %ymm1, %ymm0
; AVX1-NEXT: setae %al
; AVX1-NEXT: vzeroupper
@@ -685,40 +533,18 @@ define i1 @test_v16i16(<16 x i16> %a0) {
; AVX2-LABEL: test_v16i16:
; AVX2: # %bb.0:
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setae %al
; AVX2-NEXT: vzeroupper
; AVX2-NEXT: retq
;
-; AVX512F-LABEL: test_v16i16:
-; AVX512F: # %bb.0:
-; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
-; AVX512F-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512F-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512F-NEXT: vptest %ymm1, %ymm0
-; AVX512F-NEXT: setae %al
-; AVX512F-NEXT: vzeroupper
-; AVX512F-NEXT: retq
-;
-; AVX512BW-LABEL: test_v16i16:
-; AVX512BW: # %bb.0:
-; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
-; AVX512BW-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512BW-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512BW-NEXT: vptest %ymm1, %ymm0
-; AVX512BW-NEXT: setae %al
-; AVX512BW-NEXT: vzeroupper
-; AVX512BW-NEXT: retq
-;
-; AVX512BWVL-LABEL: test_v16i16:
-; AVX512BWVL: # %bb.0:
-; AVX512BWVL-NEXT: vmovdqa %ymm0, %ymm1
-; AVX512BWVL-NEXT: vpternlogq $15, %ymm0, %ymm0, %ymm1
-; AVX512BWVL-NEXT: vptest %ymm1, %ymm0
-; AVX512BWVL-NEXT: setae %al
-; AVX512BWVL-NEXT: vzeroupper
-; AVX512BWVL-NEXT: retq
+; AVX512-LABEL: test_v16i16:
+; AVX512: # %bb.0:
+; AVX512-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
+; AVX512-NEXT: vptest %ymm1, %ymm0
+; AVX512-NEXT: setae %al
+; AVX512-NEXT: vzeroupper
+; AVX512-NEXT: retq
%1 = call i16 @llvm.vector.reduce.and.v16i16(<16 x i16> %a0)
%2 = icmp ne i16 %1, -1
ret i1 %2
@@ -743,7 +569,6 @@ define i1 @test_v32i16(<32 x i16> %a0) {
; SSE41-NEXT: pand %xmm2, %xmm0
; SSE41-NEXT: pand %xmm1, %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
@@ -753,7 +578,6 @@ define i1 @test_v32i16(<32 x i16> %a0) {
; AVX1-NEXT: vandps %ymm1, %ymm0, %ymm0
; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1
-; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm1
; AVX1-NEXT: vptest %ymm1, %ymm0
; AVX1-NEXT: setb %al
; AVX1-NEXT: vzeroupper
@@ -763,7 +587,6 @@ define i1 @test_v32i16(<32 x i16> %a0) {
; AVX2: # %bb.0:
; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setb %al
; AVX2-NEXT: vzeroupper
@@ -809,7 +632,6 @@ define i1 @test_v64i16(<64 x i16> %a0) {
; SSE41-NEXT: pand %xmm2, %xmm0
; SSE41-NEXT: pand %xmm1, %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setae %al
; SSE41-NEXT: retq
@@ -821,7 +643,6 @@ define i1 @test_v64i16(<64 x i16> %a0) {
; AVX1-NEXT: vandps %ymm1, %ymm0, %ymm0
; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1
-; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm1
; AVX1-NEXT: vptest %ymm1, %ymm0
; AVX1-NEXT: setae %al
; AVX1-NEXT: vzeroupper
@@ -833,7 +654,6 @@ define i1 @test_v64i16(<64 x i16> %a0) {
; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0
; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setae %al
; AVX2-NEXT: vzeroupper
@@ -927,46 +747,16 @@ define i1 @test_v16i8(<16 x i8> %a0) {
; SSE41-LABEL: test_v16i8:
; SSE41: # %bb.0:
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setae %al
; SSE41-NEXT: retq
;
-; AVX1OR2-LABEL: test_v16i8:
-; AVX1OR2: # %bb.0:
-; AVX1OR2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
-; AVX1OR2-NEXT: vpxor %xmm1, %xmm0, %xmm1
-; AVX1OR2-NEXT: vptest %xmm1, %xmm0
-; AVX1OR2-NEXT: setae %al
-; AVX1OR2-NEXT: retq
-;
-; AVX512F-LABEL: test_v16i8:
-; AVX512F: # %bb.0:
-; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
-; AVX512F-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512F-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512F-NEXT: vptest %xmm1, %xmm0
-; AVX512F-NEXT: setae %al
-; AVX512F-NEXT: vzeroupper
-; AVX512F-NEXT: retq
-;
-; AVX512BW-LABEL: test_v16i8:
-; AVX512BW: # %bb.0:
-; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
-; AVX512BW-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512BW-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512BW-NEXT: vptest %xmm1, %xmm0
-; AVX512BW-NEXT: setae %al
-; AVX512BW-NEXT: vzeroupper
-; AVX512BW-NEXT: retq
-;
-; AVX512BWVL-LABEL: test_v16i8:
-; AVX512BWVL: # %bb.0:
-; AVX512BWVL-NEXT: vmovdqa %xmm0, %xmm1
-; AVX512BWVL-NEXT: vpternlogq $15, %xmm0, %xmm0, %xmm1
-; AVX512BWVL-NEXT: vptest %xmm1, %xmm0
-; AVX512BWVL-NEXT: setae %al
-; AVX512BWVL-NEXT: retq
+; AVX-LABEL: test_v16i8:
+; AVX: # %bb.0:
+; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
+; AVX-NEXT: vptest %xmm1, %xmm0
+; AVX-NEXT: setae %al
+; AVX-NEXT: retq
%1 = call i8 @llvm.vector.reduce.and.v16i8(<16 x i8> %a0)
%2 = icmp ne i8 %1, -1
ret i1 %2
@@ -987,7 +777,6 @@ define i1 @test_v32i8(<32 x i8> %a0) {
; SSE41: # %bb.0:
; SSE41-NEXT: pand %xmm1, %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
@@ -996,7 +785,6 @@ define i1 @test_v32i8(<32 x i8> %a0) {
; AVX1: # %bb.0:
; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1
-; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm1
; AVX1-NEXT: vptest %ymm1, %ymm0
; AVX1-NEXT: setb %al
; AVX1-NEXT: vzeroupper
@@ -1005,40 +793,18 @@ define i1 @test_v32i8(<32 x i8> %a0) {
; AVX2-LABEL: test_v32i8:
; AVX2: # %bb.0:
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setb %al
; AVX2-NEXT: vzeroupper
; AVX2-NEXT: retq
;
-; AVX512F-LABEL: test_v32i8:
-; AVX512F: # %bb.0:
-; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
-; AVX512F-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512F-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512F-NEXT: vptest %ymm1, %ymm0
-; AVX512F-NEXT: setb %al
-; AVX512F-NEXT: vzeroupper
-; AVX512F-NEXT: retq
-;
-; AVX512BW-LABEL: test_v32i8:
-; AVX512BW: # %bb.0:
-; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
-; AVX512BW-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512BW-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512BW-NEXT: vptest %ymm1, %ymm0
-; AVX512BW-NEXT: setb %al
-; AVX512BW-NEXT: vzeroupper
-; AVX512BW-NEXT: retq
-;
-; AVX512BWVL-LABEL: test_v32i8:
-; AVX512BWVL: # %bb.0:
-; AVX512BWVL-NEXT: vmovdqa %ymm0, %ymm1
-; AVX512BWVL-NEXT: vpternlogq $15, %ymm0, %ymm0, %ymm1
-; AVX512BWVL-NEXT: vptest %ymm1, %ymm0
-; AVX512BWVL-NEXT: setb %al
-; AVX512BWVL-NEXT: vzeroupper
-; AVX512BWVL-NEXT: retq
+; AVX512-LABEL: test_v32i8:
+; AVX512: # %bb.0:
+; AVX512-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
+; AVX512-NEXT: vptest %ymm1, %ymm0
+; AVX512-NEXT: setb %al
+; AVX512-NEXT: vzeroupper
+; AVX512-NEXT: retq
%1 = call i8 @llvm.vector.reduce.and.v32i8(<32 x i8> %a0)
%2 = icmp eq i8 %1, -1
ret i1 %2
@@ -1063,7 +829,6 @@ define i1 @test_v64i8(<64 x i8> %a0) {
; SSE41-NEXT: pand %xmm2, %xmm0
; SSE41-NEXT: pand %xmm1, %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setae %al
; SSE41-NEXT: retq
@@ -1073,7 +838,6 @@ define i1 @test_v64i8(<64 x i8> %a0) {
; AVX1-NEXT: vandps %ymm1, %ymm0, %ymm0
; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1
-; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm1
; AVX1-NEXT: vptest %ymm1, %ymm0
; AVX1-NEXT: setae %al
; AVX1-NEXT: vzeroupper
@@ -1083,7 +847,6 @@ define i1 @test_v64i8(<64 x i8> %a0) {
; AVX2: # %bb.0:
; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setae %al
; AVX2-NEXT: vzeroupper
@@ -1129,7 +892,6 @@ define i1 @test_v128i8(<128 x i8> %a0) {
; SSE41-NEXT: pand %xmm2, %xmm0
; SSE41-NEXT: pand %xmm1, %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
@@ -1141,7 +903,6 @@ define i1 @test_v128i8(<128 x i8> %a0) {
; AVX1-NEXT: vandps %ymm1, %ymm0, %ymm0
; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1
-; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm1
; AVX1-NEXT: vptest %ymm1, %ymm0
; AVX1-NEXT: setb %al
; AVX1-NEXT: vzeroupper
@@ -1153,7 +914,6 @@ define i1 @test_v128i8(<128 x i8> %a0) {
; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0
; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setb %al
; AVX2-NEXT: vzeroupper
@@ -1198,3 +958,8 @@ declare i8 @llvm.vector.reduce.and.v16i8(<16 x i8>)
declare i8 @llvm.vector.reduce.and.v32i8(<32 x i8>)
declare i8 @llvm.vector.reduce.and.v64i8(<64 x i8>)
declare i8 @llvm.vector.reduce.and.v128i8(<128 x i8>)
+;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
+; AVX1OR2: {{.*}}
+; AVX512BW: {{.*}}
+; AVX512BWVL: {{.*}}
+; AVX512F: {{.*}}
diff --git a/llvm/test/CodeGen/X86/vector-reduce-and-scalar.ll b/llvm/test/CodeGen/X86/vector-reduce-and-scalar.ll
index 55a6a7022d0e..3a3824260140 100644
--- a/llvm/test/CodeGen/X86/vector-reduce-and-scalar.ll
+++ b/llvm/test/CodeGen/X86/vector-reduce-and-scalar.ll
@@ -25,48 +25,17 @@ define i1 @test_v2i64(ptr %ptr) nounwind {
; SSE41: # %bb.0:
; SSE41-NEXT: movdqa (%rdi), %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
;
-; AVX1OR2-LABEL: test_v2i64:
-; AVX1OR2: # %bb.0:
-; AVX1OR2-NEXT: vmovdqa (%rdi), %xmm0
-; AVX1OR2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
-; AVX1OR2-NEXT: vpxor %xmm1, %xmm0, %xmm1
-; AVX1OR2-NEXT: vptest %xmm1, %xmm0
-; AVX1OR2-NEXT: setb %al
-; AVX1OR2-NEXT: retq
-;
-; AVX512F-LABEL: test_v2i64:
-; AVX512F: # %bb.0:
-; AVX512F-NEXT: vmovdqa (%rdi), %xmm0
-; AVX512F-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512F-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512F-NEXT: vptest %xmm1, %xmm0
-; AVX512F-NEXT: setb %al
-; AVX512F-NEXT: vzeroupper
-; AVX512F-NEXT: retq
-;
-; AVX512BW-LABEL: test_v2i64:
-; AVX512BW: # %bb.0:
-; AVX512BW-NEXT: vmovdqa (%rdi), %xmm0
-; AVX512BW-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512BW-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512BW-NEXT: vptest %xmm1, %xmm0
-; AVX512BW-NEXT: setb %al
-; AVX512BW-NEXT: vzeroupper
-; AVX512BW-NEXT: retq
-;
-; AVX512VL-LABEL: test_v2i64:
-; AVX512VL: # %bb.0:
-; AVX512VL-NEXT: vmovdqa (%rdi), %xmm0
-; AVX512VL-NEXT: vmovdqa %xmm0, %xmm1
-; AVX512VL-NEXT: vpternlogq $15, %xmm0, %xmm0, %xmm1
-; AVX512VL-NEXT: vptest %xmm1, %xmm0
-; AVX512VL-NEXT: setb %al
-; AVX512VL-NEXT: retq
+; AVX-LABEL: test_v2i64:
+; AVX: # %bb.0:
+; AVX-NEXT: vmovdqa (%rdi), %xmm0
+; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
+; AVX-NEXT: vptest %xmm1, %xmm0
+; AVX-NEXT: setb %al
+; AVX-NEXT: retq
%vload = load <2 x i64>, ptr %ptr
%v0 = extractelement <2 x i64> %vload, i32 0
%v1 = extractelement <2 x i64> %vload, i32 1
@@ -92,17 +61,15 @@ define i1 @test_v4i64(ptr %ptr) nounwind {
; SSE41-NEXT: movdqa (%rdi), %xmm0
; SSE41-NEXT: pand 16(%rdi), %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
;
; AVX1-LABEL: test_v4i64:
; AVX1: # %bb.0:
-; AVX1-NEXT: vmovaps (%rdi), %ymm0
+; AVX1-NEXT: vmovdqa (%rdi), %ymm0
; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1
-; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm1
; AVX1-NEXT: vptest %ymm1, %ymm0
; AVX1-NEXT: setb %al
; AVX1-NEXT: vzeroupper
@@ -112,41 +79,19 @@ define i1 @test_v4i64(ptr %ptr) nounwind {
; AVX2: # %bb.0:
; AVX2-NEXT: vmovdqa (%rdi), %ymm0
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setb %al
; AVX2-NEXT: vzeroupper
; AVX2-NEXT: retq
;
-; AVX512F-LABEL: test_v4i64:
-; AVX512F: # %bb.0:
-; AVX512F-NEXT: vmovdqa (%rdi), %ymm0
-; AVX512F-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512F-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512F-NEXT: vptest %ymm1, %ymm0
-; AVX512F-NEXT: setb %al
-; AVX512F-NEXT: vzeroupper
-; AVX512F-NEXT: retq
-;
-; AVX512BW-LABEL: test_v4i64:
-; AVX512BW: # %bb.0:
-; AVX512BW-NEXT: vmovdqa (%rdi), %ymm0
-; AVX512BW-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512BW-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512BW-NEXT: vptest %ymm1, %ymm0
-; AVX512BW-NEXT: setb %al
-; AVX512BW-NEXT: vzeroupper
-; AVX512BW-NEXT: retq
-;
-; AVX512VL-LABEL: test_v4i64:
-; AVX512VL: # %bb.0:
-; AVX512VL-NEXT: vmovdqa (%rdi), %ymm0
-; AVX512VL-NEXT: vmovdqa %ymm0, %ymm1
-; AVX512VL-NEXT: vpternlogq $15, %ymm0, %ymm0, %ymm1
-; AVX512VL-NEXT: vptest %ymm1, %ymm0
-; AVX512VL-NEXT: setb %al
-; AVX512VL-NEXT: vzeroupper
-; AVX512VL-NEXT: retq
+; AVX512-LABEL: test_v4i64:
+; AVX512: # %bb.0:
+; AVX512-NEXT: vmovdqa (%rdi), %ymm0
+; AVX512-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
+; AVX512-NEXT: vptest %ymm1, %ymm0
+; AVX512-NEXT: setb %al
+; AVX512-NEXT: vzeroupper
+; AVX512-NEXT: retq
%vload = load <4 x i64>, ptr %ptr
%v0 = extractelement <4 x i64> %vload, i32 0
%v1 = extractelement <4 x i64> %vload, i32 1
@@ -182,7 +127,6 @@ define i1 @test_v8i64(ptr %ptr) nounwind {
; SSE41-NEXT: pand 32(%rdi), %xmm0
; SSE41-NEXT: pand %xmm1, %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
@@ -193,7 +137,6 @@ define i1 @test_v8i64(ptr %ptr) nounwind {
; AVX1-NEXT: vandps 32(%rdi), %ymm0, %ymm0
; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1
-; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm1
; AVX1-NEXT: vptest %ymm1, %ymm0
; AVX1-NEXT: setb %al
; AVX1-NEXT: vzeroupper
@@ -204,7 +147,6 @@ define i1 @test_v8i64(ptr %ptr) nounwind {
; AVX2-NEXT: vmovdqa (%rdi), %ymm0
; AVX2-NEXT: vpand 32(%rdi), %ymm0, %ymm0
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setb %al
; AVX2-NEXT: vzeroupper
@@ -273,7 +215,6 @@ define i1 @test_v16i64(ptr %ptr) nounwind {
; SSE41-NEXT: pand %xmm2, %xmm0
; SSE41-NEXT: pand %xmm1, %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
@@ -287,7 +228,6 @@ define i1 @test_v16i64(ptr %ptr) nounwind {
; AVX1-NEXT: vandps %ymm1, %ymm0, %ymm0
; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1
-; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm1
; AVX1-NEXT: vptest %ymm1, %ymm0
; AVX1-NEXT: setb %al
; AVX1-NEXT: vzeroupper
@@ -301,7 +241,6 @@ define i1 @test_v16i64(ptr %ptr) nounwind {
; AVX2-NEXT: vpand 64(%rdi), %ymm0, %ymm0
; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setb %al
; AVX2-NEXT: vzeroupper
@@ -391,48 +330,17 @@ define i1 @test_v4i32(ptr %ptr) nounwind {
; SSE41: # %bb.0:
; SSE41-NEXT: movdqa (%rdi), %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
;
-; AVX1OR2-LABEL: test_v4i32:
-; AVX1OR2: # %bb.0:
-; AVX1OR2-NEXT: vmovdqa (%rdi), %xmm0
-; AVX1OR2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
-; AVX1OR2-NEXT: vpxor %xmm1, %xmm0, %xmm1
-; AVX1OR2-NEXT: vptest %xmm1, %xmm0
-; AVX1OR2-NEXT: setb %al
-; AVX1OR2-NEXT: retq
-;
-; AVX512F-LABEL: test_v4i32:
-; AVX512F: # %bb.0:
-; AVX512F-NEXT: vmovdqa (%rdi), %xmm0
-; AVX512F-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512F-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512F-NEXT: vptest %xmm1, %xmm0
-; AVX512F-NEXT: setb %al
-; AVX512F-NEXT: vzeroupper
-; AVX512F-NEXT: retq
-;
-; AVX512BW-LABEL: test_v4i32:
-; AVX512BW: # %bb.0:
-; AVX512BW-NEXT: vmovdqa (%rdi), %xmm0
-; AVX512BW-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512BW-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512BW-NEXT: vptest %xmm1, %xmm0
-; AVX512BW-NEXT: setb %al
-; AVX512BW-NEXT: vzeroupper
-; AVX512BW-NEXT: retq
-;
-; AVX512VL-LABEL: test_v4i32:
-; AVX512VL: # %bb.0:
-; AVX512VL-NEXT: vmovdqa (%rdi), %xmm0
-; AVX512VL-NEXT: vmovdqa %xmm0, %xmm1
-; AVX512VL-NEXT: vpternlogq $15, %xmm0, %xmm0, %xmm1
-; AVX512VL-NEXT: vptest %xmm1, %xmm0
-; AVX512VL-NEXT: setb %al
-; AVX512VL-NEXT: retq
+; AVX-LABEL: test_v4i32:
+; AVX: # %bb.0:
+; AVX-NEXT: vmovdqa (%rdi), %xmm0
+; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
+; AVX-NEXT: vptest %xmm1, %xmm0
+; AVX-NEXT: setb %al
+; AVX-NEXT: retq
%vload = load <4 x i32>, ptr %ptr
%v0 = extractelement <4 x i32> %vload, i32 0
%v1 = extractelement <4 x i32> %vload, i32 1
@@ -462,17 +370,15 @@ define i1 @test_v8i32(ptr %ptr) nounwind {
; SSE41-NEXT: movdqa (%rdi), %xmm0
; SSE41-NEXT: pand 16(%rdi), %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
;
; AVX1-LABEL: test_v8i32:
; AVX1: # %bb.0:
-; AVX1-NEXT: vmovaps (%rdi), %ymm0
+; AVX1-NEXT: vmovdqa (%rdi), %ymm0
; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1
-; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm1
; AVX1-NEXT: vptest %ymm1, %ymm0
; AVX1-NEXT: setb %al
; AVX1-NEXT: vzeroupper
@@ -482,41 +388,19 @@ define i1 @test_v8i32(ptr %ptr) nounwind {
; AVX2: # %bb.0:
; AVX2-NEXT: vmovdqa (%rdi), %ymm0
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setb %al
; AVX2-NEXT: vzeroupper
; AVX2-NEXT: retq
;
-; AVX512F-LABEL: test_v8i32:
-; AVX512F: # %bb.0:
-; AVX512F-NEXT: vmovdqa (%rdi), %ymm0
-; AVX512F-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512F-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512F-NEXT: vptest %ymm1, %ymm0
-; AVX512F-NEXT: setb %al
-; AVX512F-NEXT: vzeroupper
-; AVX512F-NEXT: retq
-;
-; AVX512BW-LABEL: test_v8i32:
-; AVX512BW: # %bb.0:
-; AVX512BW-NEXT: vmovdqa (%rdi), %ymm0
-; AVX512BW-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512BW-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512BW-NEXT: vptest %ymm1, %ymm0
-; AVX512BW-NEXT: setb %al
-; AVX512BW-NEXT: vzeroupper
-; AVX512BW-NEXT: retq
-;
-; AVX512VL-LABEL: test_v8i32:
-; AVX512VL: # %bb.0:
-; AVX512VL-NEXT: vmovdqa (%rdi), %ymm0
-; AVX512VL-NEXT: vmovdqa %ymm0, %ymm1
-; AVX512VL-NEXT: vpternlogq $15, %ymm0, %ymm0, %ymm1
-; AVX512VL-NEXT: vptest %ymm1, %ymm0
-; AVX512VL-NEXT: setb %al
-; AVX512VL-NEXT: vzeroupper
-; AVX512VL-NEXT: retq
+; AVX512-LABEL: test_v8i32:
+; AVX512: # %bb.0:
+; AVX512-NEXT: vmovdqa (%rdi), %ymm0
+; AVX512-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
+; AVX512-NEXT: vptest %ymm1, %ymm0
+; AVX512-NEXT: setb %al
+; AVX512-NEXT: vzeroupper
+; AVX512-NEXT: retq
%vload = load <8 x i32>, ptr %ptr
%v0 = extractelement <8 x i32> %vload, i32 0
%v1 = extractelement <8 x i32> %vload, i32 1
@@ -560,7 +444,6 @@ define i1 @test_v16i32(ptr %ptr) nounwind {
; SSE41-NEXT: pand 32(%rdi), %xmm0
; SSE41-NEXT: pand %xmm1, %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
@@ -571,7 +454,6 @@ define i1 @test_v16i32(ptr %ptr) nounwind {
; AVX1-NEXT: vandps 32(%rdi), %ymm0, %ymm0
; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1
-; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm1
; AVX1-NEXT: vptest %ymm1, %ymm0
; AVX1-NEXT: setb %al
; AVX1-NEXT: vzeroupper
@@ -582,7 +464,6 @@ define i1 @test_v16i32(ptr %ptr) nounwind {
; AVX2-NEXT: vmovdqa (%rdi), %ymm0
; AVX2-NEXT: vpand 32(%rdi), %ymm0, %ymm0
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setb %al
; AVX2-NEXT: vzeroupper
@@ -694,48 +575,17 @@ define i1 @test_v8i16(ptr %ptr) nounwind {
; SSE41: # %bb.0:
; SSE41-NEXT: movdqa (%rdi), %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
;
-; AVX1OR2-LABEL: test_v8i16:
-; AVX1OR2: # %bb.0:
-; AVX1OR2-NEXT: vmovdqa (%rdi), %xmm0
-; AVX1OR2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
-; AVX1OR2-NEXT: vpxor %xmm1, %xmm0, %xmm1
-; AVX1OR2-NEXT: vptest %xmm1, %xmm0
-; AVX1OR2-NEXT: setb %al
-; AVX1OR2-NEXT: retq
-;
-; AVX512F-LABEL: test_v8i16:
-; AVX512F: # %bb.0:
-; AVX512F-NEXT: vmovdqa (%rdi), %xmm0
-; AVX512F-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512F-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512F-NEXT: vptest %xmm1, %xmm0
-; AVX512F-NEXT: setb %al
-; AVX512F-NEXT: vzeroupper
-; AVX512F-NEXT: retq
-;
-; AVX512BW-LABEL: test_v8i16:
-; AVX512BW: # %bb.0:
-; AVX512BW-NEXT: vmovdqa (%rdi), %xmm0
-; AVX512BW-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512BW-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512BW-NEXT: vptest %xmm1, %xmm0
-; AVX512BW-NEXT: setb %al
-; AVX512BW-NEXT: vzeroupper
-; AVX512BW-NEXT: retq
-;
-; AVX512VL-LABEL: test_v8i16:
-; AVX512VL: # %bb.0:
-; AVX512VL-NEXT: vmovdqa (%rdi), %xmm0
-; AVX512VL-NEXT: vmovdqa %xmm0, %xmm1
-; AVX512VL-NEXT: vpternlogq $15, %xmm0, %xmm0, %xmm1
-; AVX512VL-NEXT: vptest %xmm1, %xmm0
-; AVX512VL-NEXT: setb %al
-; AVX512VL-NEXT: retq
+; AVX-LABEL: test_v8i16:
+; AVX: # %bb.0:
+; AVX-NEXT: vmovdqa (%rdi), %xmm0
+; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
+; AVX-NEXT: vptest %xmm1, %xmm0
+; AVX-NEXT: setb %al
+; AVX-NEXT: retq
%vload = load <8 x i16>, ptr %ptr
%v0 = extractelement <8 x i16> %vload, i32 0
%v1 = extractelement <8 x i16> %vload, i32 1
@@ -773,17 +623,15 @@ define i1 @test_v16i16(ptr %ptr) nounwind {
; SSE41-NEXT: movdqa (%rdi), %xmm0
; SSE41-NEXT: pand 16(%rdi), %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
;
; AVX1-LABEL: test_v16i16:
; AVX1: # %bb.0:
-; AVX1-NEXT: vmovaps (%rdi), %ymm0
+; AVX1-NEXT: vmovdqa (%rdi), %ymm0
; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1
-; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm1
; AVX1-NEXT: vptest %ymm1, %ymm0
; AVX1-NEXT: setb %al
; AVX1-NEXT: vzeroupper
@@ -793,41 +641,19 @@ define i1 @test_v16i16(ptr %ptr) nounwind {
; AVX2: # %bb.0:
; AVX2-NEXT: vmovdqa (%rdi), %ymm0
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vptest %ymm1, %ymm0
; AVX2-NEXT: setb %al
; AVX2-NEXT: vzeroupper
; AVX2-NEXT: retq
;
-; AVX512F-LABEL: test_v16i16:
-; AVX512F: # %bb.0:
-; AVX512F-NEXT: vmovdqa (%rdi), %ymm0
-; AVX512F-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512F-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512F-NEXT: vptest %ymm1, %ymm0
-; AVX512F-NEXT: setb %al
-; AVX512F-NEXT: vzeroupper
-; AVX512F-NEXT: retq
-;
-; AVX512BW-LABEL: test_v16i16:
-; AVX512BW: # %bb.0:
-; AVX512BW-NEXT: vmovdqa (%rdi), %ymm0
-; AVX512BW-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512BW-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512BW-NEXT: vptest %ymm1, %ymm0
-; AVX512BW-NEXT: setb %al
-; AVX512BW-NEXT: vzeroupper
-; AVX512BW-NEXT: retq
-;
-; AVX512VL-LABEL: test_v16i16:
-; AVX512VL: # %bb.0:
-; AVX512VL-NEXT: vmovdqa (%rdi), %ymm0
-; AVX512VL-NEXT: vmovdqa %ymm0, %ymm1
-; AVX512VL-NEXT: vpternlogq $15, %ymm0, %ymm0, %ymm1
-; AVX512VL-NEXT: vptest %ymm1, %ymm0
-; AVX512VL-NEXT: setb %al
-; AVX512VL-NEXT: vzeroupper
-; AVX512VL-NEXT: retq
+; AVX512-LABEL: test_v16i16:
+; AVX512: # %bb.0:
+; AVX512-NEXT: vmovdqa (%rdi), %ymm0
+; AVX512-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
+; AVX512-NEXT: vptest %ymm1, %ymm0
+; AVX512-NEXT: setb %al
+; AVX512-NEXT: vzeroupper
+; AVX512-NEXT: retq
%vload = load <16 x i16>, ptr %ptr
%v0 = extractelement <16 x i16> %vload, i32 0
%v1 = extractelement <16 x i16> %vload, i32 1
@@ -958,48 +784,17 @@ define i1 @test_v16i8(ptr %ptr) nounwind {
; SSE41: # %bb.0:
; SSE41-NEXT: movdqa (%rdi), %xmm0
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE41-NEXT: pxor %xmm0, %xmm1
; SSE41-NEXT: ptest %xmm1, %xmm0
; SSE41-NEXT: setb %al
; SSE41-NEXT: retq
;
-; AVX1OR2-LABEL: test_v16i8:
-; AVX1OR2: # %bb.0:
-; AVX1OR2-NEXT: vmovdqa (%rdi), %xmm0
-; AVX1OR2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
-; AVX1OR2-NEXT: vpxor %xmm1, %xmm0, %xmm1
-; AVX1OR2-NEXT: vptest %xmm1, %xmm0
-; AVX1OR2-NEXT: setb %al
-; AVX1OR2-NEXT: retq
-;
-; AVX512F-LABEL: test_v16i8:
-; AVX512F: # %bb.0:
-; AVX512F-NEXT: vmovdqa (%rdi), %xmm0
-; AVX512F-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512F-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512F-NEXT: vptest %xmm1, %xmm0
-; AVX512F-NEXT: setb %al
-; AVX512F-NEXT: vzeroupper
-; AVX512F-NEXT: retq
-;
-; AVX512BW-LABEL: test_v16i8:
-; AVX512BW: # %bb.0:
-; AVX512BW-NEXT: vmovdqa (%rdi), %xmm0
-; AVX512BW-NEXT: vmovdqa64 %zmm0, %zmm1
-; AVX512BW-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm1
-; AVX512BW-NEXT: vptest %xmm1, %xmm0
-; AVX512BW-NEXT: setb %al
-; AVX512BW-NEXT: vzeroupper
-; AVX512BW-NEXT: retq
-;
-; AVX512VL-LABEL: test_v16i8:
-; AVX512VL: # %bb.0:
-; AVX512VL-NEXT: vmovdqa (%rdi), %xmm0
-; AVX512VL-NEXT: vmovdqa %xmm0, %xmm1
-; AVX512VL-NEXT: vpternlogq $15, %xmm0, %xmm0, %xmm1
-; AVX512VL-NEXT: vptest %xmm1, %xmm0
-; AVX512VL-NEXT: setb %al
-; AVX512VL-NEXT: retq
+; AVX-LABEL: test_v16i8:
+; AVX: # %bb.0:
+; AVX-NEXT: vmovdqa (%rdi), %xmm0
+; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
+; AVX-NEXT: vptest %xmm1, %xmm0
+; AVX-NEXT: setb %al
+; AVX-NEXT: retq
%vload = load <16 x i8>, ptr %ptr
%v0 = extractelement <16 x i8> %vload, i32 0
%v1 = extractelement <16 x i8> %vload, i32 1
@@ -1036,3 +831,8 @@ define i1 @test_v16i8(ptr %ptr) nounwind {
ret i1 %vcheck
}
+;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
+; AVX1OR2: {{.*}}
+; AVX512BW: {{.*}}
+; AVX512F: {{.*}}
+; AVX512VL: {{.*}}
More information about the llvm-commits
mailing list