[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