[llvm] r348104 - [X86] Add a DAG combine to turn stores of vXi1 on pre-avx512 targets into a bitcast and a store of a iX scalar.

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Sun Dec 2 11:47:15 PST 2018


Author: ctopper
Date: Sun Dec  2 11:47:14 2018
New Revision: 348104

URL: http://llvm.org/viewvc/llvm-project?rev=348104&view=rev
Log:
[X86] Add a DAG combine to turn stores of vXi1 on pre-avx512 targets into a bitcast and a store of a iX scalar.

Modified:
    llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
    llvm/trunk/test/CodeGen/X86/vector-compare-results.ll

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=348104&r1=348103&r2=348104&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Sun Dec  2 11:47:14 2018
@@ -37296,6 +37296,18 @@ static SDValue combineStore(SDNode *N, S
   SDValue StoredVal = St->getOperand(1);
   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
 
+  // Convert a store of vXi1 into a store of iX and a bitcast.
+  if (!Subtarget.hasAVX512() && VT == StVT && VT.isVector() &&
+      VT.getVectorElementType() == MVT::i1) {
+
+    EVT NewVT = EVT::getIntegerVT(*DAG.getContext(), VT.getVectorNumElements());
+    StoredVal = DAG.getBitcast(NewVT, StoredVal);
+
+    return DAG.getStore(St->getChain(), dl, StoredVal, St->getBasePtr(),
+                        St->getPointerInfo(), St->getAlignment(),
+                        St->getMemOperand()->getFlags());
+  }
+
   // If this is a store of a scalar_to_vector to v1i1, just use a scalar store.
   // This will avoid a copy to k-register.
   if (VT == MVT::v1i1 && VT == StVT && Subtarget.hasAVX512() &&

Modified: llvm/trunk/test/CodeGen/X86/vector-compare-results.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-compare-results.ll?rev=348104&r1=348103&r2=348104&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vector-compare-results.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vector-compare-results.ll Sun Dec  2 11:47:14 2018
@@ -342,257 +342,17 @@ define <16 x i1> @test_cmp_v16i16(<16 x
 }
 
 define <32 x i1> @test_cmp_v32i8(<32 x i8> %a0, <32 x i8> %a1) nounwind {
-; SSE2-LABEL: test_cmp_v32i8:
-; SSE2:       # %bb.0:
-; SSE2-NEXT:    movq %rdi, %rax
-; SSE2-NEXT:    pcmpgtb %xmm2, %xmm0
-; SSE2-NEXT:    pcmpgtb %xmm3, %xmm1
-; SSE2-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, 2(%rdi)
-; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, (%rdi)
-; SSE2-NEXT:    retq
-;
-; SSE42-LABEL: test_cmp_v32i8:
-; SSE42:       # %bb.0:
-; SSE42-NEXT:    movq %rdi, %rax
-; SSE42-NEXT:    pcmpgtb %xmm2, %xmm0
-; SSE42-NEXT:    pcmpgtb %xmm3, %xmm1
-; SSE42-NEXT:    pextrb $1, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $2, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $3, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $4, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $5, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $6, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $7, %xmm1, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $9, %xmm1, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $10, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $11, %xmm1, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $12, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $13, %xmm1, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $14, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $15, %xmm1, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, 2(%rdi)
-; SSE42-NEXT:    pextrb $1, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $2, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $3, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $4, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $5, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $6, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $7, %xmm0, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $9, %xmm0, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $10, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $11, %xmm0, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $12, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $13, %xmm0, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $14, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $15, %xmm0, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, (%rdi)
-; SSE42-NEXT:    retq
+; SSE-LABEL: test_cmp_v32i8:
+; SSE:       # %bb.0:
+; SSE-NEXT:    movq %rdi, %rax
+; SSE-NEXT:    pcmpgtb %xmm2, %xmm0
+; SSE-NEXT:    pmovmskb %xmm0, %ecx
+; SSE-NEXT:    pcmpgtb %xmm3, %xmm1
+; SSE-NEXT:    pmovmskb %xmm1, %edx
+; SSE-NEXT:    shll $16, %edx
+; SSE-NEXT:    orl %ecx, %edx
+; SSE-NEXT:    movl %edx, (%rdi)
+; SSE-NEXT:    retq
 ;
 ; AVX1-LABEL: test_cmp_v32i8:
 ; AVX1:       # %bb.0:
@@ -931,263 +691,21 @@ define <16 x i1> @test_cmp_v16i32(<16 x
 }
 
 define <32 x i1> @test_cmp_v32i16(<32 x i16> %a0, <32 x i16> %a1) nounwind {
-; SSE2-LABEL: test_cmp_v32i16:
-; SSE2:       # %bb.0:
-; SSE2-NEXT:    movq %rdi, %rax
-; SSE2-NEXT:    pcmpgtw %xmm5, %xmm1
-; SSE2-NEXT:    pcmpgtw %xmm4, %xmm0
-; SSE2-NEXT:    packsswb %xmm1, %xmm0
-; SSE2-NEXT:    pcmpgtw %xmm7, %xmm3
-; SSE2-NEXT:    pcmpgtw %xmm6, %xmm2
-; SSE2-NEXT:    packsswb %xmm3, %xmm2
-; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, 2(%rdi)
-; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, (%rdi)
-; SSE2-NEXT:    retq
-;
-; SSE42-LABEL: test_cmp_v32i16:
-; SSE42:       # %bb.0:
-; SSE42-NEXT:    movq %rdi, %rax
-; SSE42-NEXT:    pcmpgtw %xmm5, %xmm1
-; SSE42-NEXT:    pcmpgtw %xmm4, %xmm0
-; SSE42-NEXT:    pcmpgtw %xmm7, %xmm3
-; SSE42-NEXT:    pcmpgtw %xmm6, %xmm2
-; SSE42-NEXT:    pextrb $2, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $4, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $6, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $8, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $10, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $12, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $14, %xmm2, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $0, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $2, %xmm3, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $4, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $6, %xmm3, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $10, %xmm3, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $12, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $14, %xmm3, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, 2(%rdi)
-; SSE42-NEXT:    pextrb $2, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $4, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $6, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $8, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $10, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $12, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $14, %xmm0, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $0, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $2, %xmm1, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $4, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $6, %xmm1, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $10, %xmm1, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $12, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $14, %xmm1, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, (%rdi)
-; SSE42-NEXT:    retq
+; SSE-LABEL: test_cmp_v32i16:
+; SSE:       # %bb.0:
+; SSE-NEXT:    movq %rdi, %rax
+; SSE-NEXT:    pcmpgtw %xmm5, %xmm1
+; SSE-NEXT:    pcmpgtw %xmm4, %xmm0
+; SSE-NEXT:    packsswb %xmm1, %xmm0
+; SSE-NEXT:    pmovmskb %xmm0, %ecx
+; SSE-NEXT:    pcmpgtw %xmm7, %xmm3
+; SSE-NEXT:    pcmpgtw %xmm6, %xmm2
+; SSE-NEXT:    packsswb %xmm3, %xmm2
+; SSE-NEXT:    pmovmskb %xmm2, %edx
+; SSE-NEXT:    shll $16, %edx
+; SSE-NEXT:    orl %ecx, %edx
+; SSE-NEXT:    movl %edx, (%rdi)
+; SSE-NEXT:    retq
 ;
 ; AVX1-LABEL: test_cmp_v32i16:
 ; AVX1:       # %bb.0:
@@ -1245,757 +763,48 @@ define <32 x i1> @test_cmp_v32i16(<32 x
 }
 
 define <64 x i1> @test_cmp_v64i8(<64 x i8> %a0, <64 x i8> %a1) nounwind {
-; SSE2-LABEL: test_cmp_v64i8:
-; SSE2:       # %bb.0:
-; SSE2-NEXT:    movq %rdi, %rax
-; SSE2-NEXT:    pcmpgtb %xmm4, %xmm0
-; SSE2-NEXT:    pcmpgtb %xmm5, %xmm1
-; SSE2-NEXT:    pcmpgtb %xmm6, %xmm2
-; SSE2-NEXT:    pcmpgtb %xmm7, %xmm3
-; SSE2-NEXT:    movdqa %xmm3, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, 6(%rdi)
-; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, 4(%rdi)
-; SSE2-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, 2(%rdi)
-; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, (%rdi)
-; SSE2-NEXT:    retq
-;
-; SSE42-LABEL: test_cmp_v64i8:
-; SSE42:       # %bb.0:
-; SSE42-NEXT:    movq %rdi, %rax
-; SSE42-NEXT:    pcmpgtb %xmm4, %xmm0
-; SSE42-NEXT:    pcmpgtb %xmm5, %xmm1
-; SSE42-NEXT:    pcmpgtb %xmm6, %xmm2
-; SSE42-NEXT:    pcmpgtb %xmm7, %xmm3
-; SSE42-NEXT:    pextrb $1, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $2, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $3, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $4, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $5, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $6, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $7, %xmm3, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $9, %xmm3, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $10, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $11, %xmm3, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $12, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $13, %xmm3, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $14, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $15, %xmm3, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, 6(%rdi)
-; SSE42-NEXT:    pextrb $1, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $2, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $3, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $4, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $5, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $6, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $7, %xmm2, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $9, %xmm2, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $10, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $11, %xmm2, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $12, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $13, %xmm2, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $14, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $15, %xmm2, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, 4(%rdi)
-; SSE42-NEXT:    pextrb $1, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $2, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $3, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $4, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $5, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $6, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $7, %xmm1, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $9, %xmm1, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $10, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $11, %xmm1, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $12, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $13, %xmm1, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $14, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $15, %xmm1, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, 2(%rdi)
-; SSE42-NEXT:    pextrb $1, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $2, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $3, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $4, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $5, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $6, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $7, %xmm0, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $9, %xmm0, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $10, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $11, %xmm0, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $12, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $13, %xmm0, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $14, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $15, %xmm0, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, (%rdi)
-; SSE42-NEXT:    retq
+; SSE-LABEL: test_cmp_v64i8:
+; SSE:       # %bb.0:
+; SSE-NEXT:    movq %rdi, %rax
+; SSE-NEXT:    pcmpgtb %xmm4, %xmm0
+; SSE-NEXT:    pmovmskb %xmm0, %ecx
+; SSE-NEXT:    pcmpgtb %xmm5, %xmm1
+; SSE-NEXT:    pmovmskb %xmm1, %edx
+; SSE-NEXT:    shll $16, %edx
+; SSE-NEXT:    orl %ecx, %edx
+; SSE-NEXT:    pcmpgtb %xmm6, %xmm2
+; SSE-NEXT:    pmovmskb %xmm2, %ecx
+; SSE-NEXT:    pcmpgtb %xmm7, %xmm3
+; SSE-NEXT:    pmovmskb %xmm3, %esi
+; SSE-NEXT:    shll $16, %esi
+; SSE-NEXT:    orl %ecx, %esi
+; SSE-NEXT:    shlq $32, %rsi
+; SSE-NEXT:    orq %rdx, %rsi
+; SSE-NEXT:    movq %rsi, (%rdi)
+; SSE-NEXT:    retq
 ;
 ; AVX1-LABEL: test_cmp_v64i8:
 ; AVX1:       # %bb.0:
 ; AVX1-NEXT:    movq %rdi, %rax
-; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
-; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
-; AVX1-NEXT:    vpcmpgtb %xmm4, %xmm5, %xmm4
+; AVX1-NEXT:    vpcmpgtb %xmm2, %xmm0, %xmm4
+; AVX1-NEXT:    vpmovmskb %xmm4, %ecx
+; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
+; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
 ; AVX1-NEXT:    vpcmpgtb %xmm2, %xmm0, %xmm0
-; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
-; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
-; AVX1-NEXT:    vpcmpgtb %xmm2, %xmm5, %xmm2
-; AVX1-NEXT:    vpcmpgtb %xmm3, %xmm1, %xmm1
-; AVX1-NEXT:    vpextrb $1, %xmm1, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    vpextrb $0, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rdx,%rcx,2), %ecx
-; AVX1-NEXT:    vpextrb $2, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rcx,%rdx,4), %ecx
-; AVX1-NEXT:    vpextrb $3, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rcx,%rdx,8), %ecx
-; AVX1-NEXT:    vpextrb $4, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $4, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $5, %xmm1, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $5, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $6, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $6, %edx
-; AVX1-NEXT:    vpextrb $7, %xmm1, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $7, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $8, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $8, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $9, %xmm1, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $9, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $10, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $10, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $11, %xmm1, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $11, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $12, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $12, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $13, %xmm1, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $13, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $14, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $14, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $15, %xmm1, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $15, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $0, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
+; AVX1-NEXT:    vpmovmskb %xmm0, %edx
 ; AVX1-NEXT:    shll $16, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $1, %xmm2, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $17, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $2, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $18, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $3, %xmm2, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $19, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $4, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $20, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $5, %xmm2, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $21, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $6, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $22, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $7, %xmm2, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $23, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $8, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $24, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $9, %xmm2, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $25, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $10, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $26, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $11, %xmm2, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $27, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $12, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $28, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $13, %xmm2, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $29, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $14, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $30, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $15, %xmm2, %esi
-; AVX1-NEXT:    shll $31, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    orl %ecx, %esi
-; AVX1-NEXT:    movl %esi, 4(%rdi)
-; AVX1-NEXT:    vpextrb $1, %xmm0, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    vpextrb $0, %xmm0, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rdx,%rcx,2), %ecx
-; AVX1-NEXT:    vpextrb $2, %xmm0, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rcx,%rdx,4), %ecx
-; AVX1-NEXT:    vpextrb $3, %xmm0, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rcx,%rdx,8), %ecx
-; AVX1-NEXT:    vpextrb $4, %xmm0, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $4, %edx
 ; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $5, %xmm0, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $5, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $6, %xmm0, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $6, %edx
-; AVX1-NEXT:    vpextrb $7, %xmm0, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $7, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $8, %xmm0, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $8, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $9, %xmm0, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $9, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $10, %xmm0, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $10, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $11, %xmm0, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $11, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $12, %xmm0, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $12, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $13, %xmm0, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $13, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $14, %xmm0, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $14, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $15, %xmm0, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $15, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $0, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $16, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $1, %xmm4, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $17, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $2, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $18, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $3, %xmm4, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $19, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $4, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $20, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $5, %xmm4, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $21, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $6, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $22, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $7, %xmm4, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $23, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $8, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $24, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $9, %xmm4, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $25, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $10, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $26, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $11, %xmm4, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $27, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $12, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $28, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $13, %xmm4, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $29, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $14, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $30, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $15, %xmm4, %esi
-; AVX1-NEXT:    shll $31, %esi
-; AVX1-NEXT:    orl %edx, %esi
+; AVX1-NEXT:    vpcmpgtb %xmm3, %xmm1, %xmm0
+; AVX1-NEXT:    vpmovmskb %xmm0, %ecx
+; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm0
+; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
+; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
+; AVX1-NEXT:    vpmovmskb %xmm0, %esi
+; AVX1-NEXT:    shll $16, %esi
 ; AVX1-NEXT:    orl %ecx, %esi
-; AVX1-NEXT:    movl %esi, (%rdi)
+; AVX1-NEXT:    shlq $32, %rsi
+; AVX1-NEXT:    orq %rdx, %rsi
+; AVX1-NEXT:    movq %rsi, (%rdi)
 ; AVX1-NEXT:    vzeroupper
 ; AVX1-NEXT:    retq
 ;
@@ -2003,255 +812,12 @@ define <64 x i1> @test_cmp_v64i8(<64 x i
 ; AVX2:       # %bb.0:
 ; AVX2-NEXT:    movq %rdi, %rax
 ; AVX2-NEXT:    vpcmpgtb %ymm2, %ymm0, %ymm0
-; AVX2-NEXT:    vpcmpgtb %ymm3, %ymm1, %ymm1
-; AVX2-NEXT:    vpextrb $1, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    vpextrb $0, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; AVX2-NEXT:    vpextrb $2, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; AVX2-NEXT:    vpextrb $3, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; AVX2-NEXT:    vpextrb $4, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $4, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $5, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $5, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $6, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $6, %edx
-; AVX2-NEXT:    vpextrb $7, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $7, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $8, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $8, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $9, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $9, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $10, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $10, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $11, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $11, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $12, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $12, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $13, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $13, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $14, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $14, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $15, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $15, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $0, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $16, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $1, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $17, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $2, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $18, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $3, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $19, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $4, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $20, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $5, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $21, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $6, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $22, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $7, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $23, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $8, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $24, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $9, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $25, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $10, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $26, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $11, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $27, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $12, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $28, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $13, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $29, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $14, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $30, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $15, %xmm1, %esi
-; AVX2-NEXT:    shll $31, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    orl %ecx, %esi
-; AVX2-NEXT:    movl %esi, 4(%rdi)
-; AVX2-NEXT:    vpextrb $1, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    vpextrb $0, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; AVX2-NEXT:    vpextrb $2, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; AVX2-NEXT:    vpextrb $3, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; AVX2-NEXT:    vpextrb $4, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $4, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $5, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $5, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $6, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $6, %edx
-; AVX2-NEXT:    vpextrb $7, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $7, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $8, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $8, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $9, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $9, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $10, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $10, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $11, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $11, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $12, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $12, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $13, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $13, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $14, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $14, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $15, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $15, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
-; AVX2-NEXT:    vpextrb $0, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $16, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $1, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $17, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $2, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $18, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $3, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $19, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $4, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $20, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $5, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $21, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $6, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $22, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $7, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $23, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $8, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $24, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $9, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $25, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $10, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $26, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $11, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $27, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $12, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $28, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $13, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $29, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $14, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $30, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $15, %xmm0, %esi
-; AVX2-NEXT:    shll $31, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    orl %ecx, %esi
-; AVX2-NEXT:    movl %esi, (%rdi)
+; AVX2-NEXT:    vpmovmskb %ymm0, %ecx
+; AVX2-NEXT:    vpcmpgtb %ymm3, %ymm1, %ymm0
+; AVX2-NEXT:    vpmovmskb %ymm0, %edx
+; AVX2-NEXT:    shlq $32, %rdx
+; AVX2-NEXT:    orq %rcx, %rdx
+; AVX2-NEXT:    movq %rdx, (%rdi)
 ; AVX2-NEXT:    vzeroupper
 ; AVX2-NEXT:    retq
 ;
@@ -2392,300 +958,37 @@ define <16 x i1> @test_cmp_v16f64(<16 x
 }
 
 define <32 x i1> @test_cmp_v32f32(<32 x float> %a0, <32 x float> %a1) nounwind {
-; SSE2-LABEL: test_cmp_v32f32:
-; SSE2:       # %bb.0:
-; SSE2-NEXT:    movq %rdi, %rax
-; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm9
-; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm11
-; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm10
-; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm12
-; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm8
-; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm13
-; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm14
-; SSE2-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm15
-; SSE2-NEXT:    cmpltps %xmm3, %xmm15
-; SSE2-NEXT:    movaps {{.*#+}} xmm3 = [255,255,255,255]
-; SSE2-NEXT:    andps %xmm3, %xmm15
-; SSE2-NEXT:    cmpltps %xmm2, %xmm14
-; SSE2-NEXT:    andps %xmm3, %xmm14
-; SSE2-NEXT:    packuswb %xmm15, %xmm14
-; SSE2-NEXT:    cmpltps %xmm1, %xmm13
-; SSE2-NEXT:    andps %xmm3, %xmm13
-; SSE2-NEXT:    cmpltps %xmm0, %xmm8
-; SSE2-NEXT:    andps %xmm3, %xmm8
-; SSE2-NEXT:    packuswb %xmm13, %xmm8
-; SSE2-NEXT:    packuswb %xmm14, %xmm8
-; SSE2-NEXT:    cmpltps %xmm7, %xmm12
-; SSE2-NEXT:    andps %xmm3, %xmm12
-; SSE2-NEXT:    cmpltps %xmm6, %xmm10
-; SSE2-NEXT:    andps %xmm3, %xmm10
-; SSE2-NEXT:    packuswb %xmm12, %xmm10
-; SSE2-NEXT:    cmpltps %xmm5, %xmm11
-; SSE2-NEXT:    andps %xmm3, %xmm11
-; SSE2-NEXT:    cmpltps %xmm4, %xmm9
-; SSE2-NEXT:    andps %xmm3, %xmm9
-; SSE2-NEXT:    packuswb %xmm11, %xmm9
-; SSE2-NEXT:    packuswb %xmm10, %xmm9
-; SSE2-NEXT:    movdqa %xmm9, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, 2(%rdi)
-; SSE2-NEXT:    movdqa %xmm8, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, (%rdi)
-; SSE2-NEXT:    retq
-;
-; SSE42-LABEL: test_cmp_v32f32:
-; SSE42:       # %bb.0:
-; SSE42-NEXT:    movq %rdi, %rax
-; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm15
-; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm14
-; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm13
-; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm12
-; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm11
-; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm10
-; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm9
-; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm8
-; SSE42-NEXT:    cmpltps %xmm3, %xmm8
-; SSE42-NEXT:    cmpltps %xmm2, %xmm9
-; SSE42-NEXT:    cmpltps %xmm1, %xmm10
-; SSE42-NEXT:    cmpltps %xmm0, %xmm11
-; SSE42-NEXT:    cmpltps %xmm7, %xmm12
-; SSE42-NEXT:    cmpltps %xmm6, %xmm13
-; SSE42-NEXT:    cmpltps %xmm5, %xmm14
-; SSE42-NEXT:    cmpltps %xmm4, %xmm15
-; SSE42-NEXT:    pextrb $4, %xmm15, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm15, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $8, %xmm15, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $12, %xmm15, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $0, %xmm14, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $4, %xmm14, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $8, %xmm14, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $12, %xmm14, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $0, %xmm13, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $4, %xmm13, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm13, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $12, %xmm13, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $0, %xmm12, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $4, %xmm12, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm12, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $12, %xmm12, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, 2(%rdi)
-; SSE42-NEXT:    pextrb $4, %xmm11, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm11, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $8, %xmm11, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $12, %xmm11, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $0, %xmm10, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $4, %xmm10, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $8, %xmm10, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $12, %xmm10, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $0, %xmm9, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $4, %xmm9, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm9, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $12, %xmm9, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $0, %xmm8, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $4, %xmm8, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm8, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $12, %xmm8, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, (%rdi)
-; SSE42-NEXT:    retq
+; SSE-LABEL: test_cmp_v32f32:
+; SSE:       # %bb.0:
+; SSE-NEXT:    movq %rdi, %rax
+; SSE-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm8
+; SSE-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm10
+; SSE-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm9
+; SSE-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm11
+; SSE-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm12
+; SSE-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm13
+; SSE-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm14
+; SSE-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm15
+; SSE-NEXT:    cmpltps %xmm3, %xmm15
+; SSE-NEXT:    cmpltps %xmm2, %xmm14
+; SSE-NEXT:    packssdw %xmm15, %xmm14
+; SSE-NEXT:    cmpltps %xmm1, %xmm13
+; SSE-NEXT:    cmpltps %xmm0, %xmm12
+; SSE-NEXT:    packssdw %xmm13, %xmm12
+; SSE-NEXT:    packsswb %xmm14, %xmm12
+; SSE-NEXT:    pmovmskb %xmm12, %ecx
+; SSE-NEXT:    cmpltps %xmm7, %xmm11
+; SSE-NEXT:    cmpltps %xmm6, %xmm9
+; SSE-NEXT:    packssdw %xmm11, %xmm9
+; SSE-NEXT:    cmpltps %xmm5, %xmm10
+; SSE-NEXT:    cmpltps %xmm4, %xmm8
+; SSE-NEXT:    packssdw %xmm10, %xmm8
+; SSE-NEXT:    packsswb %xmm9, %xmm8
+; SSE-NEXT:    pmovmskb %xmm8, %edx
+; SSE-NEXT:    shll $16, %edx
+; SSE-NEXT:    orl %ecx, %edx
+; SSE-NEXT:    movl %edx, (%rdi)
+; SSE-NEXT:    retq
 ;
 ; AVX1-LABEL: test_cmp_v32f32:
 ; AVX1:       # %bb.0:
@@ -2952,284 +1255,29 @@ define <16 x i1> @test_cmp_v16i64(<16 x
 }
 
 define <32 x i1> @test_cmp_v32i32(<32 x i32> %a0, <32 x i32> %a1) nounwind {
-; SSE2-LABEL: test_cmp_v32i32:
-; SSE2:       # %bb.0:
-; SSE2-NEXT:    movq %rdi, %rax
-; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm3
-; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [255,255,255,255]
-; SSE2-NEXT:    pand %xmm8, %xmm3
-; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm2
-; SSE2-NEXT:    pand %xmm8, %xmm2
-; SSE2-NEXT:    packuswb %xmm3, %xmm2
-; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm1
-; SSE2-NEXT:    pand %xmm8, %xmm1
-; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm0
-; SSE2-NEXT:    pand %xmm8, %xmm0
-; SSE2-NEXT:    packuswb %xmm1, %xmm0
-; SSE2-NEXT:    packuswb %xmm2, %xmm0
-; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm7
-; SSE2-NEXT:    pand %xmm8, %xmm7
-; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm6
-; SSE2-NEXT:    pand %xmm8, %xmm6
-; SSE2-NEXT:    packuswb %xmm7, %xmm6
-; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm5
-; SSE2-NEXT:    pand %xmm8, %xmm5
-; SSE2-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm4
-; SSE2-NEXT:    pand %xmm8, %xmm4
-; SSE2-NEXT:    packuswb %xmm5, %xmm4
-; SSE2-NEXT:    packuswb %xmm6, %xmm4
-; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, 2(%rdi)
-; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, (%rdi)
-; SSE2-NEXT:    retq
-;
-; SSE42-LABEL: test_cmp_v32i32:
-; SSE42:       # %bb.0:
-; SSE42-NEXT:    movq %rdi, %rax
-; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm3
-; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm2
-; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm1
-; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm0
-; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm7
-; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm6
-; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm5
-; SSE42-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm4
-; SSE42-NEXT:    pextrb $4, %xmm4, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm4, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $8, %xmm4, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $12, %xmm4, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $0, %xmm5, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $4, %xmm5, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $8, %xmm5, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $12, %xmm5, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $0, %xmm6, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $4, %xmm6, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm6, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $12, %xmm6, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $0, %xmm7, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $4, %xmm7, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm7, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $12, %xmm7, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, 2(%rdi)
-; SSE42-NEXT:    pextrb $4, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $8, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $12, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $0, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $4, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $8, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $12, %xmm1, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $0, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $4, %xmm2, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $12, %xmm2, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $0, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $4, %xmm3, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $12, %xmm3, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, (%rdi)
-; SSE42-NEXT:    retq
+; SSE-LABEL: test_cmp_v32i32:
+; SSE:       # %bb.0:
+; SSE-NEXT:    movq %rdi, %rax
+; SSE-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm3
+; SSE-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm2
+; SSE-NEXT:    packssdw %xmm3, %xmm2
+; SSE-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm1
+; SSE-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm0
+; SSE-NEXT:    packssdw %xmm1, %xmm0
+; SSE-NEXT:    packsswb %xmm2, %xmm0
+; SSE-NEXT:    pmovmskb %xmm0, %ecx
+; SSE-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm7
+; SSE-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm6
+; SSE-NEXT:    packssdw %xmm7, %xmm6
+; SSE-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm5
+; SSE-NEXT:    pcmpgtd {{[0-9]+}}(%rsp), %xmm4
+; SSE-NEXT:    packssdw %xmm5, %xmm4
+; SSE-NEXT:    packsswb %xmm6, %xmm4
+; SSE-NEXT:    pmovmskb %xmm4, %edx
+; SSE-NEXT:    shll $16, %edx
+; SSE-NEXT:    orl %ecx, %edx
+; SSE-NEXT:    movl %edx, (%rdi)
+; SSE-NEXT:    retq
 ;
 ; AVX1-LABEL: test_cmp_v32i32:
 ; AVX1:       # %bb.0:
@@ -3307,1037 +1355,93 @@ define <32 x i1> @test_cmp_v32i32(<32 x
 }
 
 define <64 x i1> @test_cmp_v64i16(<64 x i16> %a0, <64 x i16> %a1) nounwind {
-; SSE2-LABEL: test_cmp_v64i16:
-; SSE2:       # %bb.0:
-; SSE2-NEXT:    movq %rdi, %rax
-; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm1
-; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm0
-; SSE2-NEXT:    packsswb %xmm1, %xmm0
-; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm3
-; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm2
-; SSE2-NEXT:    packsswb %xmm3, %xmm2
-; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm5
-; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm4
-; SSE2-NEXT:    packsswb %xmm5, %xmm4
-; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm7
-; SSE2-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm6
-; SSE2-NEXT:    packsswb %xmm7, %xmm6
-; SSE2-NEXT:    movdqa %xmm6, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, 6(%rdi)
-; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, 4(%rdi)
-; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, 2(%rdi)
-; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, (%rdi)
-; SSE2-NEXT:    retq
-;
-; SSE42-LABEL: test_cmp_v64i16:
-; SSE42:       # %bb.0:
-; SSE42-NEXT:    movq %rdi, %rax
-; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm1
-; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm0
-; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm3
-; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm2
-; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm5
-; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm4
-; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm7
-; SSE42-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm6
-; SSE42-NEXT:    pextrb $2, %xmm6, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm6, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $4, %xmm6, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $6, %xmm6, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $8, %xmm6, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $10, %xmm6, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $12, %xmm6, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $14, %xmm6, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $0, %xmm7, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $2, %xmm7, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $4, %xmm7, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $6, %xmm7, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm7, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $10, %xmm7, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $12, %xmm7, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $14, %xmm7, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, 6(%rdi)
-; SSE42-NEXT:    pextrb $2, %xmm4, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm4, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $4, %xmm4, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $6, %xmm4, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $8, %xmm4, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $10, %xmm4, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $12, %xmm4, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $14, %xmm4, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $0, %xmm5, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $2, %xmm5, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $4, %xmm5, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $6, %xmm5, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm5, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $10, %xmm5, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $12, %xmm5, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $14, %xmm5, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, 4(%rdi)
-; SSE42-NEXT:    pextrb $2, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $4, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $6, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $8, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $10, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $12, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $14, %xmm2, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $0, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $2, %xmm3, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $4, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $6, %xmm3, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $10, %xmm3, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $12, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $14, %xmm3, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, 2(%rdi)
-; SSE42-NEXT:    pextrb $2, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $4, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $6, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $8, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $10, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $12, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $14, %xmm0, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $0, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $2, %xmm1, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $4, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $6, %xmm1, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $10, %xmm1, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $12, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $14, %xmm1, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, (%rdi)
-; SSE42-NEXT:    retq
+; SSE-LABEL: test_cmp_v64i16:
+; SSE:       # %bb.0:
+; SSE-NEXT:    movq %rdi, %rax
+; SSE-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm1
+; SSE-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm0
+; SSE-NEXT:    packsswb %xmm1, %xmm0
+; SSE-NEXT:    pmovmskb %xmm0, %ecx
+; SSE-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm3
+; SSE-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm2
+; SSE-NEXT:    packsswb %xmm3, %xmm2
+; SSE-NEXT:    pmovmskb %xmm2, %edx
+; SSE-NEXT:    shll $16, %edx
+; SSE-NEXT:    orl %ecx, %edx
+; SSE-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm5
+; SSE-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm4
+; SSE-NEXT:    packsswb %xmm5, %xmm4
+; SSE-NEXT:    pmovmskb %xmm4, %ecx
+; SSE-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm7
+; SSE-NEXT:    pcmpgtw {{[0-9]+}}(%rsp), %xmm6
+; SSE-NEXT:    packsswb %xmm7, %xmm6
+; SSE-NEXT:    pmovmskb %xmm6, %esi
+; SSE-NEXT:    shll $16, %esi
+; SSE-NEXT:    orl %ecx, %esi
+; SSE-NEXT:    shlq $32, %rsi
+; SSE-NEXT:    orq %rdx, %rsi
+; SSE-NEXT:    movq %rsi, (%rdi)
+; SSE-NEXT:    retq
 ;
 ; AVX1-LABEL: test_cmp_v64i16:
 ; AVX1:       # %bb.0:
 ; AVX1-NEXT:    movq %rdi, %rax
-; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm8
-; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm9
+; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm8
+; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm9
 ; AVX1-NEXT:    vpcmpgtw %xmm8, %xmm9, %xmm8
-; AVX1-NEXT:    vpcmpgtw %xmm5, %xmm1, %xmm9
-; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm5
-; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
-; AVX1-NEXT:    vpcmpgtw %xmm5, %xmm1, %xmm5
 ; AVX1-NEXT:    vpcmpgtw %xmm4, %xmm0, %xmm0
-; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm1
-; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
-; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm4, %xmm4
-; AVX1-NEXT:    vpcmpgtw %xmm7, %xmm3, %xmm3
-; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm1
-; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7
-; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm7, %xmm7
-; AVX1-NEXT:    vpcmpgtw %xmm6, %xmm2, %xmm2
-; AVX1-NEXT:    vpextrb $2, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    vpextrb $0, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rdx,%rcx,2), %ecx
-; AVX1-NEXT:    vpextrb $4, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rcx,%rdx,4), %ecx
-; AVX1-NEXT:    vpextrb $6, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rcx,%rdx,8), %ecx
-; AVX1-NEXT:    vpextrb $8, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $4, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $10, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $5, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $12, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $6, %edx
-; AVX1-NEXT:    vpextrb $14, %xmm2, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $7, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $0, %xmm7, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $8, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $2, %xmm7, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $9, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $4, %xmm7, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $10, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $6, %xmm7, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $11, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $8, %xmm7, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $12, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $10, %xmm7, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $13, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $12, %xmm7, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $14, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $14, %xmm7, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $15, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $0, %xmm3, %edx
-; AVX1-NEXT:    andl $1, %edx
+; AVX1-NEXT:    vpacksswb %xmm8, %xmm0, %xmm0
+; AVX1-NEXT:    vpmovmskb %xmm0, %ecx
+; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm0
+; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
+; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm4, %xmm0
+; AVX1-NEXT:    vpcmpgtw %xmm5, %xmm1, %xmm1
+; AVX1-NEXT:    vpacksswb %xmm0, %xmm1, %xmm0
+; AVX1-NEXT:    vpmovmskb %xmm0, %edx
 ; AVX1-NEXT:    shll $16, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $2, %xmm3, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $17, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $4, %xmm3, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $18, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $6, %xmm3, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $19, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $8, %xmm3, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $20, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $10, %xmm3, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $21, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $12, %xmm3, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $22, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $14, %xmm3, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $23, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $0, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $24, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $2, %xmm4, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $25, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $4, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $26, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $6, %xmm4, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $27, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $8, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $28, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $10, %xmm4, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $29, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $12, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $30, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $14, %xmm4, %esi
-; AVX1-NEXT:    shll $31, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    orl %ecx, %esi
-; AVX1-NEXT:    movl %esi, 4(%rdi)
-; AVX1-NEXT:    vpextrb $2, %xmm0, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    vpextrb $0, %xmm0, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rdx,%rcx,2), %ecx
-; AVX1-NEXT:    vpextrb $4, %xmm0, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rcx,%rdx,4), %ecx
-; AVX1-NEXT:    vpextrb $6, %xmm0, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rcx,%rdx,8), %ecx
-; AVX1-NEXT:    vpextrb $8, %xmm0, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $4, %edx
 ; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $10, %xmm0, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $5, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $12, %xmm0, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $6, %edx
-; AVX1-NEXT:    vpextrb $14, %xmm0, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $7, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $0, %xmm5, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $8, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $2, %xmm5, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $9, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $4, %xmm5, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $10, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $6, %xmm5, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $11, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $8, %xmm5, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $12, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $10, %xmm5, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $13, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $12, %xmm5, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $14, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $14, %xmm5, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $15, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $0, %xmm9, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $16, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $2, %xmm9, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $17, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $4, %xmm9, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $18, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $6, %xmm9, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $19, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $8, %xmm9, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $20, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $10, %xmm9, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $21, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $12, %xmm9, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $22, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $14, %xmm9, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $23, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $0, %xmm8, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $24, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $2, %xmm8, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $25, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $4, %xmm8, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $26, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $6, %xmm8, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $27, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $8, %xmm8, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $28, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $10, %xmm8, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $29, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $12, %xmm8, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $30, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $14, %xmm8, %esi
-; AVX1-NEXT:    shll $31, %esi
-; AVX1-NEXT:    orl %edx, %esi
+; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm0
+; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm1
+; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
+; AVX1-NEXT:    vpcmpgtw %xmm6, %xmm2, %xmm1
+; AVX1-NEXT:    vpacksswb %xmm0, %xmm1, %xmm0
+; AVX1-NEXT:    vpmovmskb %xmm0, %ecx
+; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm0
+; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm1
+; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
+; AVX1-NEXT:    vpcmpgtw %xmm7, %xmm3, %xmm1
+; AVX1-NEXT:    vpacksswb %xmm0, %xmm1, %xmm0
+; AVX1-NEXT:    vpmovmskb %xmm0, %esi
+; AVX1-NEXT:    shll $16, %esi
 ; AVX1-NEXT:    orl %ecx, %esi
-; AVX1-NEXT:    movl %esi, (%rdi)
+; AVX1-NEXT:    shlq $32, %rsi
+; AVX1-NEXT:    orq %rdx, %rsi
+; AVX1-NEXT:    movq %rsi, (%rdi)
 ; AVX1-NEXT:    vzeroupper
 ; AVX1-NEXT:    retq
 ;
 ; AVX2-LABEL: test_cmp_v64i16:
 ; AVX2:       # %bb.0:
 ; AVX2-NEXT:    movq %rdi, %rax
-; AVX2-NEXT:    vpcmpgtw %ymm5, %ymm1, %ymm5
-; AVX2-NEXT:    vextracti128 $1, %ymm5, %xmm1
-; AVX2-NEXT:    vpcmpgtw %ymm4, %ymm0, %ymm4
-; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm0
-; AVX2-NEXT:    vpcmpgtw %ymm7, %ymm3, %ymm7
-; AVX2-NEXT:    vextracti128 $1, %ymm7, %xmm3
-; AVX2-NEXT:    vpcmpgtw %ymm6, %ymm2, %ymm6
-; AVX2-NEXT:    vextracti128 $1, %ymm6, %xmm2
-; AVX2-NEXT:    vpextrb $2, %xmm6, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    vpextrb $0, %xmm6, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; AVX2-NEXT:    vpextrb $4, %xmm6, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; AVX2-NEXT:    vpextrb $6, %xmm6, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; AVX2-NEXT:    vpextrb $8, %xmm6, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $4, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $10, %xmm6, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $5, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $12, %xmm6, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $6, %edx
-; AVX2-NEXT:    vpextrb $14, %xmm6, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $7, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $0, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $8, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $2, %xmm2, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $9, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $4, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $10, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $6, %xmm2, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $11, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $8, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $12, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $10, %xmm2, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $13, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $12, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $14, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $14, %xmm2, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $15, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $0, %xmm7, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $16, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $2, %xmm7, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $17, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $4, %xmm7, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $18, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $6, %xmm7, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $19, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $8, %xmm7, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $20, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $10, %xmm7, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $21, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $12, %xmm7, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $22, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $14, %xmm7, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $23, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $0, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $24, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $2, %xmm3, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $25, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $4, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $26, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $6, %xmm3, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $27, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $8, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $28, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $10, %xmm3, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $29, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $12, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $30, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $14, %xmm3, %esi
-; AVX2-NEXT:    shll $31, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    orl %ecx, %esi
-; AVX2-NEXT:    movl %esi, 4(%rdi)
-; AVX2-NEXT:    vpextrb $2, %xmm4, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    vpextrb $0, %xmm4, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; AVX2-NEXT:    vpextrb $4, %xmm4, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; AVX2-NEXT:    vpextrb $6, %xmm4, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; AVX2-NEXT:    vpextrb $8, %xmm4, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $4, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $10, %xmm4, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $5, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $12, %xmm4, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $6, %edx
-; AVX2-NEXT:    vpextrb $14, %xmm4, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $7, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $0, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $8, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $2, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $9, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $4, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $10, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $6, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $11, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $8, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $12, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $10, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $13, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $12, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $14, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $14, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $15, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $0, %xmm5, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $16, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $2, %xmm5, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $17, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $4, %xmm5, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $18, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $6, %xmm5, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $19, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $8, %xmm5, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $20, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $10, %xmm5, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $21, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $12, %xmm5, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $22, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $14, %xmm5, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $23, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $0, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $24, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $2, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $25, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $4, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $26, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $6, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $27, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $8, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $28, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $10, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $29, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $12, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $30, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $14, %xmm1, %esi
-; AVX2-NEXT:    shll $31, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    orl %ecx, %esi
-; AVX2-NEXT:    movl %esi, (%rdi)
+; AVX2-NEXT:    vpcmpgtw %ymm5, %ymm1, %ymm1
+; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm5
+; AVX2-NEXT:    vpacksswb %xmm5, %xmm1, %xmm1
+; AVX2-NEXT:    vpcmpgtw %ymm4, %ymm0, %ymm0
+; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm4
+; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm0
+; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
+; AVX2-NEXT:    vpmovmskb %ymm0, %ecx
+; AVX2-NEXT:    vpcmpgtw %ymm7, %ymm3, %ymm0
+; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
+; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
+; AVX2-NEXT:    vpcmpgtw %ymm6, %ymm2, %ymm1
+; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
+; AVX2-NEXT:    vpacksswb %xmm2, %xmm1, %xmm1
+; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
+; AVX2-NEXT:    vpmovmskb %ymm0, %edx
+; AVX2-NEXT:    shlq $32, %rdx
+; AVX2-NEXT:    orq %rcx, %rdx
+; AVX2-NEXT:    movq %rdx, (%rdi)
 ; AVX2-NEXT:    vzeroupper
 ; AVX2-NEXT:    retq
 ;
@@ -4387,1497 +1491,82 @@ define <64 x i1> @test_cmp_v64i16(<64 x
 }
 
 define <128 x i1> @test_cmp_v128i8(<128 x i8> %a0, <128 x i8> %a1) nounwind {
-; SSE2-LABEL: test_cmp_v128i8:
-; SSE2:       # %bb.0:
-; SSE2-NEXT:    pushq %rax
-; SSE2-NEXT:    movq %rdi, %rax
-; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm0
-; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm1
-; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm2
-; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm3
-; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm4
-; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm5
-; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm6
-; SSE2-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm7
-; SSE2-NEXT:    movdqa %xmm7, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, 14(%rdi)
-; SSE2-NEXT:    movdqa %xmm6, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, 12(%rdi)
-; SSE2-NEXT:    movdqa %xmm5, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, 10(%rdi)
-; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, 8(%rdi)
-; SSE2-NEXT:    movdqa %xmm3, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, 6(%rdi)
-; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, 4(%rdi)
-; SSE2-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, 2(%rdi)
-; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, (%rdi)
-; SSE2-NEXT:    popq %rcx
-; SSE2-NEXT:    retq
-;
-; SSE42-LABEL: test_cmp_v128i8:
-; SSE42:       # %bb.0:
-; SSE42-NEXT:    movq %rdi, %rax
-; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm0
-; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm1
-; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm2
-; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm3
-; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm4
-; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm5
-; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm6
-; SSE42-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm7
-; SSE42-NEXT:    pextrb $1, %xmm7, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm7, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $2, %xmm7, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $3, %xmm7, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $4, %xmm7, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $5, %xmm7, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $6, %xmm7, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $7, %xmm7, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm7, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $9, %xmm7, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $10, %xmm7, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $11, %xmm7, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $12, %xmm7, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $13, %xmm7, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $14, %xmm7, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $15, %xmm7, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, 14(%rdi)
-; SSE42-NEXT:    pextrb $1, %xmm6, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm6, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $2, %xmm6, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $3, %xmm6, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $4, %xmm6, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $5, %xmm6, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $6, %xmm6, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $7, %xmm6, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm6, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $9, %xmm6, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $10, %xmm6, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $11, %xmm6, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $12, %xmm6, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $13, %xmm6, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $14, %xmm6, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $15, %xmm6, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, 12(%rdi)
-; SSE42-NEXT:    pextrb $1, %xmm5, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm5, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $2, %xmm5, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $3, %xmm5, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $4, %xmm5, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $5, %xmm5, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $6, %xmm5, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $7, %xmm5, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm5, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $9, %xmm5, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $10, %xmm5, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $11, %xmm5, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $12, %xmm5, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $13, %xmm5, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $14, %xmm5, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $15, %xmm5, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, 10(%rdi)
-; SSE42-NEXT:    pextrb $1, %xmm4, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm4, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $2, %xmm4, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $3, %xmm4, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $4, %xmm4, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $5, %xmm4, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $6, %xmm4, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $7, %xmm4, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm4, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $9, %xmm4, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $10, %xmm4, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $11, %xmm4, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $12, %xmm4, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $13, %xmm4, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $14, %xmm4, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $15, %xmm4, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, 8(%rdi)
-; SSE42-NEXT:    pextrb $1, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $2, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $3, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $4, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $5, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $6, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $7, %xmm3, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $9, %xmm3, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $10, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $11, %xmm3, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $12, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $13, %xmm3, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $14, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $15, %xmm3, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, 6(%rdi)
-; SSE42-NEXT:    pextrb $1, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $2, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $3, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $4, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $5, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $6, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $7, %xmm2, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $9, %xmm2, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $10, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $11, %xmm2, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $12, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $13, %xmm2, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $14, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $15, %xmm2, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, 4(%rdi)
-; SSE42-NEXT:    pextrb $1, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $2, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $3, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $4, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $5, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $6, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $7, %xmm1, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $9, %xmm1, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $10, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $11, %xmm1, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $12, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $13, %xmm1, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $14, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $15, %xmm1, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, 2(%rdi)
-; SSE42-NEXT:    pextrb $1, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $2, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $3, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $4, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $5, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $6, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $7, %xmm0, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $8, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $9, %xmm0, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $10, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $11, %xmm0, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $12, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $13, %xmm0, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $14, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $15, %xmm0, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, (%rdi)
-; SSE42-NEXT:    retq
+; SSE-LABEL: test_cmp_v128i8:
+; SSE:       # %bb.0:
+; SSE-NEXT:    movq %rdi, %rax
+; SSE-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm0
+; SSE-NEXT:    pmovmskb %xmm0, %ecx
+; SSE-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm1
+; SSE-NEXT:    pmovmskb %xmm1, %edx
+; SSE-NEXT:    shll $16, %edx
+; SSE-NEXT:    orl %ecx, %edx
+; SSE-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm2
+; SSE-NEXT:    pmovmskb %xmm2, %esi
+; SSE-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm3
+; SSE-NEXT:    pmovmskb %xmm3, %ecx
+; SSE-NEXT:    shll $16, %ecx
+; SSE-NEXT:    orl %esi, %ecx
+; SSE-NEXT:    shlq $32, %rcx
+; SSE-NEXT:    orq %rdx, %rcx
+; SSE-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm4
+; SSE-NEXT:    pmovmskb %xmm4, %edx
+; SSE-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm5
+; SSE-NEXT:    pmovmskb %xmm5, %esi
+; SSE-NEXT:    shll $16, %esi
+; SSE-NEXT:    orl %edx, %esi
+; SSE-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm6
+; SSE-NEXT:    pmovmskb %xmm6, %edx
+; SSE-NEXT:    pcmpgtb {{[0-9]+}}(%rsp), %xmm7
+; SSE-NEXT:    pmovmskb %xmm7, %edi
+; SSE-NEXT:    shll $16, %edi
+; SSE-NEXT:    orl %edx, %edi
+; SSE-NEXT:    shlq $32, %rdi
+; SSE-NEXT:    orq %rsi, %rdi
+; SSE-NEXT:    movq %rdi, 8(%rax)
+; SSE-NEXT:    movq %rcx, (%rax)
+; SSE-NEXT:    retq
 ;
 ; AVX1-LABEL: test_cmp_v128i8:
 ; AVX1:       # %bb.0:
 ; AVX1-NEXT:    movq %rdi, %rax
-; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm8
-; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm9
-; AVX1-NEXT:    vpcmpgtb %xmm8, %xmm9, %xmm8
-; AVX1-NEXT:    vpcmpgtb %xmm4, %xmm0, %xmm9
-; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm4
-; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm0
-; AVX1-NEXT:    vpcmpgtb %xmm4, %xmm0, %xmm4
-; AVX1-NEXT:    vpcmpgtb %xmm5, %xmm1, %xmm1
-; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm0
-; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
-; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm5, %xmm5
-; AVX1-NEXT:    vpcmpgtb %xmm6, %xmm2, %xmm2
-; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm0
-; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm6
-; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm6, %xmm6
-; AVX1-NEXT:    vpcmpgtb %xmm7, %xmm3, %xmm3
-; AVX1-NEXT:    vpextrb $1, %xmm3, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    vpextrb $0, %xmm3, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rdx,%rcx,2), %ecx
-; AVX1-NEXT:    vpextrb $2, %xmm3, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rcx,%rdx,4), %ecx
-; AVX1-NEXT:    vpextrb $3, %xmm3, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rcx,%rdx,8), %ecx
-; AVX1-NEXT:    vpextrb $4, %xmm3, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $4, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $5, %xmm3, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $5, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $6, %xmm3, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $6, %edx
-; AVX1-NEXT:    vpextrb $7, %xmm3, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $7, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $8, %xmm3, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $8, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $9, %xmm3, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $9, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $10, %xmm3, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $10, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $11, %xmm3, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $11, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $12, %xmm3, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $12, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $13, %xmm3, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $13, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $14, %xmm3, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $14, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $15, %xmm3, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $15, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $0, %xmm6, %edx
-; AVX1-NEXT:    andl $1, %edx
+; AVX1-NEXT:    vpcmpgtb %xmm4, %xmm0, %xmm8
+; AVX1-NEXT:    vpmovmskb %xmm8, %ecx
+; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm4
+; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
+; AVX1-NEXT:    vpcmpgtb %xmm4, %xmm0, %xmm0
+; AVX1-NEXT:    vpmovmskb %xmm0, %edx
 ; AVX1-NEXT:    shll $16, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $1, %xmm6, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $17, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $2, %xmm6, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $18, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $3, %xmm6, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $19, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $4, %xmm6, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $20, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $5, %xmm6, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $21, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $6, %xmm6, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $22, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $7, %xmm6, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $23, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $8, %xmm6, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $24, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $9, %xmm6, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $25, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $10, %xmm6, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $26, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $11, %xmm6, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $27, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $12, %xmm6, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $28, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $13, %xmm6, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $29, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $14, %xmm6, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $30, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $15, %xmm6, %esi
-; AVX1-NEXT:    shll $31, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    orl %ecx, %esi
-; AVX1-NEXT:    movl %esi, 12(%rdi)
-; AVX1-NEXT:    vpextrb $1, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    vpextrb $0, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rdx,%rcx,2), %ecx
-; AVX1-NEXT:    vpextrb $2, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rcx,%rdx,4), %ecx
-; AVX1-NEXT:    vpextrb $3, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rcx,%rdx,8), %ecx
-; AVX1-NEXT:    vpextrb $4, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $4, %edx
 ; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $5, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $5, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $6, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $6, %edx
-; AVX1-NEXT:    vpextrb $7, %xmm2, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $7, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $8, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $8, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $9, %xmm2, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $9, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $10, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $10, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $11, %xmm2, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $11, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $12, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $12, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $13, %xmm2, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $13, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $14, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $14, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $15, %xmm2, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $15, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $0, %xmm5, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $16, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $1, %xmm5, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $17, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $2, %xmm5, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $18, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $3, %xmm5, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $19, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $4, %xmm5, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $20, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $5, %xmm5, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $21, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $6, %xmm5, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $22, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $7, %xmm5, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $23, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $8, %xmm5, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $24, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $9, %xmm5, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $25, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $10, %xmm5, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $26, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $11, %xmm5, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $27, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $12, %xmm5, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $28, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $13, %xmm5, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $29, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $14, %xmm5, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $30, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $15, %xmm5, %esi
-; AVX1-NEXT:    shll $31, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    orl %ecx, %esi
-; AVX1-NEXT:    movl %esi, 8(%rdi)
-; AVX1-NEXT:    vpextrb $1, %xmm1, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    vpextrb $0, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rdx,%rcx,2), %ecx
-; AVX1-NEXT:    vpextrb $2, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rcx,%rdx,4), %ecx
-; AVX1-NEXT:    vpextrb $3, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rcx,%rdx,8), %ecx
-; AVX1-NEXT:    vpextrb $4, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $4, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $5, %xmm1, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $5, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $6, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $6, %edx
-; AVX1-NEXT:    vpextrb $7, %xmm1, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $7, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $8, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $8, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $9, %xmm1, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $9, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $10, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $10, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $11, %xmm1, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $11, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $12, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $12, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $13, %xmm1, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $13, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $14, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $14, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $15, %xmm1, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $15, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $0, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $16, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $1, %xmm4, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $17, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $2, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $18, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $3, %xmm4, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $19, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $4, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $20, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $5, %xmm4, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $21, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $6, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $22, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $7, %xmm4, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $23, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $8, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $24, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $9, %xmm4, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $25, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $10, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $26, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $11, %xmm4, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $27, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $12, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $28, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $13, %xmm4, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $29, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $14, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $30, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $15, %xmm4, %esi
-; AVX1-NEXT:    shll $31, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    orl %ecx, %esi
-; AVX1-NEXT:    movl %esi, 4(%rdi)
-; AVX1-NEXT:    vpextrb $1, %xmm9, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    vpextrb $0, %xmm9, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rdx,%rcx,2), %ecx
-; AVX1-NEXT:    vpextrb $2, %xmm9, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rcx,%rdx,4), %ecx
-; AVX1-NEXT:    vpextrb $3, %xmm9, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    leal (%rcx,%rdx,8), %ecx
-; AVX1-NEXT:    vpextrb $4, %xmm9, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $4, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $5, %xmm9, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $5, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $6, %xmm9, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $6, %edx
-; AVX1-NEXT:    vpextrb $7, %xmm9, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $7, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $8, %xmm9, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $8, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $9, %xmm9, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $9, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $10, %xmm9, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $10, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $11, %xmm9, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $11, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $12, %xmm9, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $12, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $13, %xmm9, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $13, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $14, %xmm9, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $14, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $15, %xmm9, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $15, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $0, %xmm8, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $16, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $1, %xmm8, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $17, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $2, %xmm8, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $18, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $3, %xmm8, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $19, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $4, %xmm8, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $20, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $5, %xmm8, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $21, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $6, %xmm8, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $22, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $7, %xmm8, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $23, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $8, %xmm8, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $24, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $9, %xmm8, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $25, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $10, %xmm8, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $26, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $11, %xmm8, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $27, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $12, %xmm8, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $28, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $13, %xmm8, %esi
-; AVX1-NEXT:    andl $1, %esi
-; AVX1-NEXT:    shll $29, %esi
-; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    vpextrb $14, %xmm8, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $30, %edx
-; AVX1-NEXT:    orl %esi, %edx
-; AVX1-NEXT:    vpextrb $15, %xmm8, %esi
-; AVX1-NEXT:    shll $31, %esi
+; AVX1-NEXT:    vpcmpgtb %xmm5, %xmm1, %xmm0
+; AVX1-NEXT:    vpmovmskb %xmm0, %esi
+; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm0
+; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
+; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
+; AVX1-NEXT:    vpmovmskb %xmm0, %ecx
+; AVX1-NEXT:    shll $16, %ecx
+; AVX1-NEXT:    orl %esi, %ecx
+; AVX1-NEXT:    shlq $32, %rcx
+; AVX1-NEXT:    orq %rdx, %rcx
+; AVX1-NEXT:    vpcmpgtb %xmm6, %xmm2, %xmm0
+; AVX1-NEXT:    vpmovmskb %xmm0, %edx
+; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm0
+; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm1
+; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
+; AVX1-NEXT:    vpmovmskb %xmm0, %esi
+; AVX1-NEXT:    shll $16, %esi
 ; AVX1-NEXT:    orl %edx, %esi
-; AVX1-NEXT:    orl %ecx, %esi
-; AVX1-NEXT:    movl %esi, (%rdi)
+; AVX1-NEXT:    vpcmpgtb %xmm7, %xmm3, %xmm0
+; AVX1-NEXT:    vpmovmskb %xmm0, %edx
+; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm0
+; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm1
+; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
+; AVX1-NEXT:    vpmovmskb %xmm0, %edi
+; AVX1-NEXT:    shll $16, %edi
+; AVX1-NEXT:    orl %edx, %edi
+; AVX1-NEXT:    shlq $32, %rdi
+; AVX1-NEXT:    orq %rsi, %rdi
+; AVX1-NEXT:    movq %rdi, 8(%rax)
+; AVX1-NEXT:    movq %rcx, (%rax)
 ; AVX1-NEXT:    vzeroupper
 ; AVX1-NEXT:    retq
 ;
@@ -5885,505 +1574,19 @@ define <128 x i1> @test_cmp_v128i8(<128
 ; AVX2:       # %bb.0:
 ; AVX2-NEXT:    movq %rdi, %rax
 ; AVX2-NEXT:    vpcmpgtb %ymm4, %ymm0, %ymm0
-; AVX2-NEXT:    vpcmpgtb %ymm5, %ymm1, %ymm1
-; AVX2-NEXT:    vpcmpgtb %ymm6, %ymm2, %ymm2
-; AVX2-NEXT:    vpcmpgtb %ymm7, %ymm3, %ymm3
-; AVX2-NEXT:    vpextrb $1, %xmm3, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    vpextrb $0, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; AVX2-NEXT:    vpextrb $2, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; AVX2-NEXT:    vpextrb $3, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; AVX2-NEXT:    vpextrb $4, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $4, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $5, %xmm3, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $5, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $6, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $6, %edx
-; AVX2-NEXT:    vpextrb $7, %xmm3, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $7, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $8, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $8, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $9, %xmm3, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $9, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $10, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $10, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $11, %xmm3, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $11, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $12, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $12, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $13, %xmm3, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $13, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $14, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $14, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $15, %xmm3, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $15, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm3
-; AVX2-NEXT:    vpextrb $0, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $16, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $1, %xmm3, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $17, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $2, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $18, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $3, %xmm3, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $19, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $4, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $20, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $5, %xmm3, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $21, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $6, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $22, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $7, %xmm3, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $23, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $8, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $24, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $9, %xmm3, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $25, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $10, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $26, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $11, %xmm3, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $27, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $12, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $28, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $13, %xmm3, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $29, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $14, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $30, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $15, %xmm3, %esi
-; AVX2-NEXT:    shll $31, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    orl %ecx, %esi
-; AVX2-NEXT:    movl %esi, 12(%rdi)
-; AVX2-NEXT:    vpextrb $1, %xmm2, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    vpextrb $0, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; AVX2-NEXT:    vpextrb $2, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; AVX2-NEXT:    vpextrb $3, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; AVX2-NEXT:    vpextrb $4, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $4, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $5, %xmm2, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $5, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $6, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $6, %edx
-; AVX2-NEXT:    vpextrb $7, %xmm2, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $7, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $8, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $8, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $9, %xmm2, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $9, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $10, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $10, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $11, %xmm2, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $11, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $12, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $12, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $13, %xmm2, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $13, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $14, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $14, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $15, %xmm2, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $15, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX2-NEXT:    vpextrb $0, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $16, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $1, %xmm2, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $17, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $2, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $18, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $3, %xmm2, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $19, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $4, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $20, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $5, %xmm2, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $21, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $6, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $22, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $7, %xmm2, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $23, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $8, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $24, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $9, %xmm2, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $25, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $10, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $26, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $11, %xmm2, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $27, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $12, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $28, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $13, %xmm2, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $29, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $14, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $30, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $15, %xmm2, %esi
-; AVX2-NEXT:    shll $31, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    orl %ecx, %esi
-; AVX2-NEXT:    movl %esi, 8(%rdi)
-; AVX2-NEXT:    vpextrb $1, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    vpextrb $0, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; AVX2-NEXT:    vpextrb $2, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; AVX2-NEXT:    vpextrb $3, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; AVX2-NEXT:    vpextrb $4, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $4, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $5, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $5, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $6, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $6, %edx
-; AVX2-NEXT:    vpextrb $7, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $7, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $8, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $8, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $9, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $9, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $10, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $10, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $11, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $11, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $12, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $12, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $13, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $13, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $14, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $14, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $15, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $15, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $0, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $16, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $1, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $17, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $2, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $18, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $3, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $19, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $4, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $20, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $5, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $21, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $6, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $22, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $7, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $23, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $8, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $24, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $9, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $25, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $10, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $26, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $11, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $27, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $12, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $28, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $13, %xmm1, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $29, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $14, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $30, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $15, %xmm1, %esi
-; AVX2-NEXT:    shll $31, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    orl %ecx, %esi
-; AVX2-NEXT:    movl %esi, 4(%rdi)
-; AVX2-NEXT:    vpextrb $1, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    vpextrb $0, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; AVX2-NEXT:    vpextrb $2, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; AVX2-NEXT:    vpextrb $3, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; AVX2-NEXT:    vpextrb $4, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $4, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $5, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $5, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $6, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $6, %edx
-; AVX2-NEXT:    vpextrb $7, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $7, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $8, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $8, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $9, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $9, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $10, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $10, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $11, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $11, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $12, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $12, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $13, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $13, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $14, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $14, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $15, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $15, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
-; AVX2-NEXT:    vpextrb $0, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $16, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $1, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $17, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $2, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $18, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $3, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $19, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $4, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $20, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $5, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $21, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $6, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $22, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $7, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $23, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $8, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $24, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $9, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $25, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $10, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $26, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $11, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $27, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $12, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $28, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $13, %xmm0, %esi
-; AVX2-NEXT:    andl $1, %esi
-; AVX2-NEXT:    shll $29, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    vpextrb $14, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $30, %edx
-; AVX2-NEXT:    orl %esi, %edx
-; AVX2-NEXT:    vpextrb $15, %xmm0, %esi
-; AVX2-NEXT:    shll $31, %esi
-; AVX2-NEXT:    orl %edx, %esi
-; AVX2-NEXT:    orl %ecx, %esi
-; AVX2-NEXT:    movl %esi, (%rdi)
+; AVX2-NEXT:    vpmovmskb %ymm0, %ecx
+; AVX2-NEXT:    vpcmpgtb %ymm5, %ymm1, %ymm0
+; AVX2-NEXT:    vpmovmskb %ymm0, %edx
+; AVX2-NEXT:    shlq $32, %rdx
+; AVX2-NEXT:    orq %rcx, %rdx
+; AVX2-NEXT:    vpcmpgtb %ymm6, %ymm2, %ymm0
+; AVX2-NEXT:    vpmovmskb %ymm0, %ecx
+; AVX2-NEXT:    vpcmpgtb %ymm7, %ymm3, %ymm0
+; AVX2-NEXT:    vpmovmskb %ymm0, %esi
+; AVX2-NEXT:    shlq $32, %rsi
+; AVX2-NEXT:    orq %rcx, %rsi
+; AVX2-NEXT:    movq %rsi, 8(%rdi)
+; AVX2-NEXT:    movq %rdx, (%rdi)
 ; AVX2-NEXT:    vzeroupper
 ; AVX2-NEXT:    retq
 ;
@@ -6479,386 +1682,61 @@ define <128 x i1> @test_cmp_v128i8(<128
 ;
 
 define <32 x i1> @test_cmp_v32f64(<32 x double> %a0, <32 x double> %a1) nounwind {
-; SSE2-LABEL: test_cmp_v32f64:
-; SSE2:       # %bb.0:
-; SSE2-NEXT:    movq %rdi, %rax
-; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm8
-; SSE2-NEXT:    cmpltpd %xmm1, %xmm8
-; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm1
-; SSE2-NEXT:    cmpltpd %xmm0, %xmm1
-; SSE2-NEXT:    movapd {{.*#+}} xmm9 = [255,255]
-; SSE2-NEXT:    andpd %xmm9, %xmm8
-; SSE2-NEXT:    andpd %xmm9, %xmm1
-; SSE2-NEXT:    packuswb %xmm8, %xmm1
-; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
-; SSE2-NEXT:    cmpltpd %xmm3, %xmm0
-; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm3
-; SSE2-NEXT:    cmpltpd %xmm2, %xmm3
-; SSE2-NEXT:    andpd %xmm9, %xmm0
-; SSE2-NEXT:    andpd %xmm9, %xmm3
-; SSE2-NEXT:    packuswb %xmm0, %xmm3
-; SSE2-NEXT:    packuswb %xmm1, %xmm1
-; SSE2-NEXT:    packuswb %xmm1, %xmm1
-; SSE2-NEXT:    packuswb %xmm3, %xmm3
-; SSE2-NEXT:    packuswb %xmm3, %xmm3
-; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,2,3]
-; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
-; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
-; SSE2-NEXT:    cmpltpd %xmm7, %xmm0
-; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm3
-; SSE2-NEXT:    cmpltpd %xmm6, %xmm3
-; SSE2-NEXT:    andpd %xmm9, %xmm0
-; SSE2-NEXT:    andpd %xmm9, %xmm3
-; SSE2-NEXT:    packuswb %xmm0, %xmm3
-; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
-; SSE2-NEXT:    cmpltpd %xmm5, %xmm0
-; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm6
-; SSE2-NEXT:    cmpltpd %xmm4, %xmm6
-; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm2
-; SSE2-NEXT:    andpd %xmm9, %xmm0
-; SSE2-NEXT:    andpd %xmm9, %xmm6
-; SSE2-NEXT:    packuswb %xmm0, %xmm6
-; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
-; SSE2-NEXT:    packuswb %xmm3, %xmm3
-; SSE2-NEXT:    packuswb %xmm3, %xmm3
-; SSE2-NEXT:    packuswb %xmm6, %xmm6
-; SSE2-NEXT:    packuswb %xmm6, %xmm6
-; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm6[0,1,2,2]
-; SSE2-NEXT:    punpckhdq {{.*#+}} xmm4 = xmm4[2],xmm3[2],xmm4[3],xmm3[3]
-; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm3
-; SSE2-NEXT:    movsd {{.*#+}} xmm4 = xmm1[0],xmm4[1]
-; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
-; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
-; SSE2-NEXT:    andpd %xmm9, %xmm0
-; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm3
-; SSE2-NEXT:    andpd %xmm9, %xmm3
-; SSE2-NEXT:    packuswb %xmm0, %xmm3
-; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
-; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
-; SSE2-NEXT:    andpd %xmm9, %xmm0
-; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm5
-; SSE2-NEXT:    andpd %xmm9, %xmm5
-; SSE2-NEXT:    packuswb %xmm0, %xmm5
-; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm1
-; SSE2-NEXT:    packuswb %xmm3, %xmm3
-; SSE2-NEXT:    packuswb %xmm3, %xmm3
-; SSE2-NEXT:    packuswb %xmm5, %xmm5
-; SSE2-NEXT:    packuswb %xmm5, %xmm5
-; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[1,1,2,3]
-; SSE2-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
-; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
-; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
-; SSE2-NEXT:    andpd %xmm9, %xmm0
-; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm1
-; SSE2-NEXT:    andpd %xmm9, %xmm1
-; SSE2-NEXT:    packuswb %xmm0, %xmm1
-; SSE2-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
-; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
-; SSE2-NEXT:    andpd %xmm9, %xmm0
-; SSE2-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm2
-; SSE2-NEXT:    andpd %xmm9, %xmm2
-; SSE2-NEXT:    packuswb %xmm0, %xmm2
-; SSE2-NEXT:    packuswb %xmm1, %xmm1
-; SSE2-NEXT:    packuswb %xmm1, %xmm1
-; SSE2-NEXT:    packuswb %xmm2, %xmm2
-; SSE2-NEXT:    packuswb %xmm2, %xmm2
-; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,1,2,2]
-; SSE2-NEXT:    punpckhdq {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
-; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm3[0],xmm0[1]
-; SSE2-NEXT:    movapd %xmm0, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, 2(%rdi)
-; SSE2-NEXT:    movapd %xmm4, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, (%rdi)
-; SSE2-NEXT:    retq
-;
-; SSE42-LABEL: test_cmp_v32f64:
-; SSE42:       # %bb.0:
-; SSE42-NEXT:    pushq %rbp
-; SSE42-NEXT:    pushq %r15
-; SSE42-NEXT:    pushq %r14
-; SSE42-NEXT:    pushq %r13
-; SSE42-NEXT:    pushq %r12
-; SSE42-NEXT:    pushq %rbx
-; SSE42-NEXT:    movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
-; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm8
-; SSE42-NEXT:    cmpltpd %xmm7, %xmm8
-; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm7
-; SSE42-NEXT:    cmpltpd %xmm6, %xmm7
-; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm6
-; SSE42-NEXT:    cmpltpd %xmm5, %xmm6
-; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
-; SSE42-NEXT:    cmpltpd %xmm4, %xmm5
-; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm4
-; SSE42-NEXT:    cmpltpd %xmm3, %xmm4
-; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm3
-; SSE42-NEXT:    cmpltpd %xmm2, %xmm3
-; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm2
-; SSE42-NEXT:    cmpltpd %xmm1, %xmm2
-; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm1
-; SSE42-NEXT:    cmpltpd %xmm0, %xmm1
-; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
-; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
-; SSE42-NEXT:    pextrb $8, %xmm0, %r8d
-; SSE42-NEXT:    pextrb $0, %xmm0, %r10d
-; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
-; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
-; SSE42-NEXT:    pextrb $0, %xmm0, %ebp
-; SSE42-NEXT:    pextrb $8, %xmm0, %edi
-; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
-; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
-; SSE42-NEXT:    pextrb $0, %xmm0, %r15d
-; SSE42-NEXT:    pextrb $8, %xmm0, %r11d
-; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
-; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
-; SSE42-NEXT:    pextrb $0, %xmm0, %r14d
-; SSE42-NEXT:    pextrb $8, %xmm0, %r9d
-; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
-; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
-; SSE42-NEXT:    pextrb $0, %xmm0, %edx
-; SSE42-NEXT:    pextrb $8, %xmm0, %r12d
-; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
-; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
-; SSE42-NEXT:    pextrb $0, %xmm0, %esi
-; SSE42-NEXT:    pextrb $8, %xmm0, %ebx
-; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
-; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
-; SSE42-NEXT:    pextrb $0, %xmm0, %ecx
-; SSE42-NEXT:    pextrb $8, %xmm0, %r13d
-; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
-; SSE42-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
-; SSE42-NEXT:    andl $1, %r8d
-; SSE42-NEXT:    andl $1, %r10d
-; SSE42-NEXT:    leal (%r10,%r8,2), %eax
-; SSE42-NEXT:    andl $1, %ebp
-; SSE42-NEXT:    leal (%rax,%rbp,4), %r8d
-; SSE42-NEXT:    pextrb $0, %xmm0, %eax
-; SSE42-NEXT:    pextrb $8, %xmm0, %ebp
-; SSE42-NEXT:    andl $1, %edi
-; SSE42-NEXT:    leal (%r8,%rdi,8), %r8d
-; SSE42-NEXT:    andl $1, %r15d
-; SSE42-NEXT:    shll $4, %r15d
-; SSE42-NEXT:    orl %r8d, %r15d
-; SSE42-NEXT:    pextrb $8, %xmm1, %edi
-; SSE42-NEXT:    movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
-; SSE42-NEXT:    pextrb $0, %xmm1, %r8d
-; SSE42-NEXT:    andl $1, %r11d
-; SSE42-NEXT:    shll $5, %r11d
-; SSE42-NEXT:    orl %r15d, %r11d
-; SSE42-NEXT:    andl $1, %r14d
-; SSE42-NEXT:    shll $6, %r14d
-; SSE42-NEXT:    andl $1, %r9d
-; SSE42-NEXT:    shll $7, %r9d
-; SSE42-NEXT:    orl %r14d, %r9d
-; SSE42-NEXT:    pextrb $0, %xmm2, %r10d
-; SSE42-NEXT:    pextrb $8, %xmm2, %edi
-; SSE42-NEXT:    movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %r9d, %edx
-; SSE42-NEXT:    andl $1, %r12d
-; SSE42-NEXT:    shll $9, %r12d
-; SSE42-NEXT:    orl %edx, %r12d
-; SSE42-NEXT:    pextrb $0, %xmm3, %edi
-; SSE42-NEXT:    pextrb $8, %xmm3, %r9d
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $10, %esi
-; SSE42-NEXT:    orl %r12d, %esi
-; SSE42-NEXT:    andl $1, %ebx
-; SSE42-NEXT:    shll $11, %ebx
-; SSE42-NEXT:    orl %esi, %ebx
-; SSE42-NEXT:    pextrb $0, %xmm4, %r15d
-; SSE42-NEXT:    pextrb $8, %xmm4, %r12d
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $12, %ecx
-; SSE42-NEXT:    orl %ebx, %ecx
-; SSE42-NEXT:    andl $1, %r13d
-; SSE42-NEXT:    shll $13, %r13d
-; SSE42-NEXT:    orl %ecx, %r13d
-; SSE42-NEXT:    pextrb $0, %xmm5, %ecx
-; SSE42-NEXT:    pextrb $8, %xmm5, %ebx
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $14, %eax
-; SSE42-NEXT:    orl %r13d, %eax
-; SSE42-NEXT:    shll $15, %ebp
-; SSE42-NEXT:    orl %eax, %ebp
-; SSE42-NEXT:    pextrb $0, %xmm6, %r13d
-; SSE42-NEXT:    pextrb $8, %xmm6, %esi
-; SSE42-NEXT:    orl %r11d, %ebp
-; SSE42-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %r14 # 8-byte Reload
-; SSE42-NEXT:    movw %bp, 2(%r14)
-; SSE42-NEXT:    pextrb $0, %xmm7, %r11d
-; SSE42-NEXT:    pextrb $8, %xmm7, %eax
-; SSE42-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rdx # 8-byte Reload
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    andl $1, %r8d
-; SSE42-NEXT:    leal (%r8,%rdx,2), %r8d
-; SSE42-NEXT:    andl $1, %r10d
-; SSE42-NEXT:    leal (%r8,%r10,4), %r8d
-; SSE42-NEXT:    pextrb $0, %xmm8, %r10d
-; SSE42-NEXT:    pextrb $8, %xmm8, %ebp
-; SSE42-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rdx # 8-byte Reload
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%r8,%rdx,8), %r8d
-; SSE42-NEXT:    andl $1, %edi
-; SSE42-NEXT:    shll $4, %edi
-; SSE42-NEXT:    orl %r8d, %edi
-; SSE42-NEXT:    andl $1, %r9d
-; SSE42-NEXT:    shll $5, %r9d
-; SSE42-NEXT:    orl %edi, %r9d
-; SSE42-NEXT:    andl $1, %r15d
-; SSE42-NEXT:    shll $6, %r15d
-; SSE42-NEXT:    andl $1, %r12d
-; SSE42-NEXT:    shll $7, %r12d
-; SSE42-NEXT:    orl %r15d, %r12d
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
-; SSE42-NEXT:    orl %r12d, %ecx
-; SSE42-NEXT:    andl $1, %ebx
-; SSE42-NEXT:    shll $9, %ebx
-; SSE42-NEXT:    orl %ecx, %ebx
-; SSE42-NEXT:    andl $1, %r13d
-; SSE42-NEXT:    shll $10, %r13d
-; SSE42-NEXT:    orl %ebx, %r13d
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %r13d, %esi
-; SSE42-NEXT:    andl $1, %r11d
-; SSE42-NEXT:    shll $12, %r11d
-; SSE42-NEXT:    orl %esi, %r11d
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $13, %eax
-; SSE42-NEXT:    orl %r11d, %eax
-; SSE42-NEXT:    andl $1, %r10d
-; SSE42-NEXT:    shll $14, %r10d
-; SSE42-NEXT:    orl %eax, %r10d
-; SSE42-NEXT:    shll $15, %ebp
-; SSE42-NEXT:    orl %r10d, %ebp
-; SSE42-NEXT:    orl %r9d, %ebp
-; SSE42-NEXT:    movw %bp, (%r14)
-; SSE42-NEXT:    movq %r14, %rax
-; SSE42-NEXT:    popq %rbx
-; SSE42-NEXT:    popq %r12
-; SSE42-NEXT:    popq %r13
-; SSE42-NEXT:    popq %r14
-; SSE42-NEXT:    popq %r15
-; SSE42-NEXT:    popq %rbp
-; SSE42-NEXT:    retq
+; SSE-LABEL: test_cmp_v32f64:
+; SSE:       # %bb.0:
+; SSE-NEXT:    movq %rdi, %rax
+; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm8
+; SSE-NEXT:    cmpltpd %xmm7, %xmm8
+; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm7
+; SSE-NEXT:    cmpltpd %xmm6, %xmm7
+; SSE-NEXT:    packssdw %xmm8, %xmm7
+; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm6
+; SSE-NEXT:    cmpltpd %xmm5, %xmm6
+; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm5
+; SSE-NEXT:    cmpltpd %xmm4, %xmm5
+; SSE-NEXT:    packssdw %xmm6, %xmm5
+; SSE-NEXT:    packssdw %xmm7, %xmm5
+; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm4
+; SSE-NEXT:    cmpltpd %xmm3, %xmm4
+; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm3
+; SSE-NEXT:    cmpltpd %xmm2, %xmm3
+; SSE-NEXT:    packssdw %xmm4, %xmm3
+; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm2
+; SSE-NEXT:    cmpltpd %xmm1, %xmm2
+; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm1
+; SSE-NEXT:    cmpltpd %xmm0, %xmm1
+; SSE-NEXT:    packssdw %xmm2, %xmm1
+; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm0
+; SSE-NEXT:    packssdw %xmm3, %xmm1
+; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm2
+; SSE-NEXT:    packsswb %xmm5, %xmm1
+; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm3
+; SSE-NEXT:    pmovmskb %xmm1, %ecx
+; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm1
+; SSE-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm1
+; SSE-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm3
+; SSE-NEXT:    packssdw %xmm1, %xmm3
+; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm1
+; SSE-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm1
+; SSE-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm2
+; SSE-NEXT:    packssdw %xmm1, %xmm2
+; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm1
+; SSE-NEXT:    packssdw %xmm3, %xmm2
+; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm3
+; SSE-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm3
+; SSE-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm1
+; SSE-NEXT:    packssdw %xmm3, %xmm1
+; SSE-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm3
+; SSE-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm3
+; SSE-NEXT:    cmpltpd {{[0-9]+}}(%rsp), %xmm0
+; SSE-NEXT:    packssdw %xmm3, %xmm0
+; SSE-NEXT:    packssdw %xmm1, %xmm0
+; SSE-NEXT:    packsswb %xmm2, %xmm0
+; SSE-NEXT:    pmovmskb %xmm0, %edx
+; SSE-NEXT:    shll $16, %edx
+; SSE-NEXT:    orl %ecx, %edx
+; SSE-NEXT:    movl %edx, (%rdi)
+; SSE-NEXT:    retq
 ;
 ; AVX1-LABEL: test_cmp_v32f64:
 ; AVX1:       # %bb.0:
@@ -7000,507 +1878,256 @@ define <32 x i1> @test_cmp_v32i64(<32 x
 ; SSE2:       # %bb.0:
 ; SSE2-NEXT:    movq %rdi, %rax
 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
-; SSE2-NEXT:    pxor %xmm8, %xmm1
+; SSE2-NEXT:    pxor %xmm8, %xmm7
 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
 ; SSE2-NEXT:    pxor %xmm8, %xmm9
-; SSE2-NEXT:    movdqa %xmm1, %xmm10
+; SSE2-NEXT:    movdqa %xmm7, %xmm10
 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
-; SSE2-NEXT:    pcmpeqd %xmm1, %xmm9
-; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm9[1,1,3,3]
-; SSE2-NEXT:    pand %xmm11, %xmm1
+; SSE2-NEXT:    pcmpeqd %xmm7, %xmm9
+; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm9[1,1,3,3]
+; SSE2-NEXT:    pand %xmm11, %xmm7
 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
-; SSE2-NEXT:    por %xmm1, %xmm9
-; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [255,255]
-; SSE2-NEXT:    pand %xmm10, %xmm9
-; SSE2-NEXT:    pxor %xmm8, %xmm0
-; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
-; SSE2-NEXT:    pxor %xmm8, %xmm1
-; SSE2-NEXT:    movdqa %xmm0, %xmm11
-; SSE2-NEXT:    pcmpgtd %xmm1, %xmm11
-; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
-; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
-; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
-; SSE2-NEXT:    pand %xmm12, %xmm1
-; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
-; SSE2-NEXT:    por %xmm1, %xmm11
-; SSE2-NEXT:    pand %xmm10, %xmm11
-; SSE2-NEXT:    packuswb %xmm9, %xmm11
-; SSE2-NEXT:    packuswb %xmm11, %xmm11
-; SSE2-NEXT:    packuswb %xmm11, %xmm11
+; SSE2-NEXT:    por %xmm7, %xmm9
+; SSE2-NEXT:    pxor %xmm8, %xmm6
+; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm7
+; SSE2-NEXT:    pxor %xmm8, %xmm7
+; SSE2-NEXT:    movdqa %xmm6, %xmm10
+; SSE2-NEXT:    pcmpgtd %xmm7, %xmm10
+; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
+; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
+; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
+; SSE2-NEXT:    pand %xmm11, %xmm7
+; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
+; SSE2-NEXT:    por %xmm7, %xmm10
+; SSE2-NEXT:    packssdw %xmm9, %xmm10
+; SSE2-NEXT:    pxor %xmm8, %xmm5
+; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm7
+; SSE2-NEXT:    pxor %xmm8, %xmm7
+; SSE2-NEXT:    movdqa %xmm5, %xmm6
+; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
+; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm6[0,0,2,2]
+; SSE2-NEXT:    pcmpeqd %xmm5, %xmm7
+; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
+; SSE2-NEXT:    pand %xmm9, %xmm5
+; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
+; SSE2-NEXT:    por %xmm5, %xmm6
+; SSE2-NEXT:    pxor %xmm8, %xmm4
+; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm5
+; SSE2-NEXT:    pxor %xmm8, %xmm5
+; SSE2-NEXT:    movdqa %xmm4, %xmm7
+; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
+; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm7[0,0,2,2]
+; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
+; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
+; SSE2-NEXT:    pand %xmm9, %xmm5
+; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
+; SSE2-NEXT:    por %xmm5, %xmm4
+; SSE2-NEXT:    packssdw %xmm6, %xmm4
+; SSE2-NEXT:    packssdw %xmm10, %xmm4
 ; SSE2-NEXT:    pxor %xmm8, %xmm3
-; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
-; SSE2-NEXT:    pxor %xmm8, %xmm1
-; SSE2-NEXT:    movdqa %xmm3, %xmm0
-; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
-; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm0[0,0,2,2]
-; SSE2-NEXT:    pcmpeqd %xmm3, %xmm1
-; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
-; SSE2-NEXT:    pand %xmm9, %xmm1
-; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
-; SSE2-NEXT:    por %xmm1, %xmm0
-; SSE2-NEXT:    pand %xmm10, %xmm0
+; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm5
+; SSE2-NEXT:    pxor %xmm8, %xmm5
+; SSE2-NEXT:    movdqa %xmm3, %xmm6
+; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
+; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
+; SSE2-NEXT:    pcmpeqd %xmm3, %xmm5
+; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3]
+; SSE2-NEXT:    pand %xmm7, %xmm3
+; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
+; SSE2-NEXT:    por %xmm3, %xmm5
 ; SSE2-NEXT:    pxor %xmm8, %xmm2
-; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
+; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
+; SSE2-NEXT:    pxor %xmm8, %xmm3
+; SSE2-NEXT:    movdqa %xmm2, %xmm6
+; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6
+; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
+; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3
+; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
+; SSE2-NEXT:    pand %xmm7, %xmm3
+; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]
+; SSE2-NEXT:    por %xmm3, %xmm2
+; SSE2-NEXT:    packssdw %xmm5, %xmm2
 ; SSE2-NEXT:    pxor %xmm8, %xmm1
-; SSE2-NEXT:    movdqa %xmm2, %xmm3
-; SSE2-NEXT:    pcmpgtd %xmm1, %xmm3
-; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm3[0,0,2,2]
-; SSE2-NEXT:    pcmpeqd %xmm2, %xmm1
-; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
-; SSE2-NEXT:    pand %xmm9, %xmm1
-; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
-; SSE2-NEXT:    por %xmm1, %xmm2
-; SSE2-NEXT:    pand %xmm10, %xmm2
-; SSE2-NEXT:    packuswb %xmm0, %xmm2
-; SSE2-NEXT:    packuswb %xmm2, %xmm2
-; SSE2-NEXT:    packuswb %xmm2, %xmm2
-; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,2,3]
-; SSE2-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm0[0],xmm11[1],xmm0[1]
-; SSE2-NEXT:    pxor %xmm8, %xmm7
-; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm0
+; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
+; SSE2-NEXT:    pxor %xmm8, %xmm3
+; SSE2-NEXT:    movdqa %xmm1, %xmm5
+; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5
+; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
+; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3
+; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
+; SSE2-NEXT:    pand %xmm6, %xmm1
+; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3]
+; SSE2-NEXT:    por %xmm1, %xmm3
 ; SSE2-NEXT:    pxor %xmm8, %xmm0
-; SSE2-NEXT:    movdqa %xmm7, %xmm1
-; SSE2-NEXT:    pcmpgtd %xmm0, %xmm1
-; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2]
-; SSE2-NEXT:    pcmpeqd %xmm7, %xmm0
-; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
-; SSE2-NEXT:    pand %xmm2, %xmm0
-; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
+; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
+; SSE2-NEXT:    pxor %xmm8, %xmm1
+; SSE2-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NEXT:    pcmpgtd %xmm1, %xmm5
+; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
+; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
+; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
+; SSE2-NEXT:    pand %xmm6, %xmm0
+; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm5[1,1,3,3]
 ; SSE2-NEXT:    por %xmm0, %xmm1
-; SSE2-NEXT:    pand %xmm10, %xmm1
-; SSE2-NEXT:    pxor %xmm8, %xmm6
+; SSE2-NEXT:    packssdw %xmm3, %xmm1
+; SSE2-NEXT:    packssdw %xmm2, %xmm1
+; SSE2-NEXT:    packsswb %xmm4, %xmm1
+; SSE2-NEXT:    pmovmskb %xmm1, %ecx
 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm0
 ; SSE2-NEXT:    pxor %xmm8, %xmm0
-; SSE2-NEXT:    movdqa %xmm6, %xmm2
+; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
+; SSE2-NEXT:    pxor %xmm8, %xmm1
+; SSE2-NEXT:    movdqa %xmm1, %xmm2
 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
-; SSE2-NEXT:    pcmpeqd %xmm6, %xmm0
-; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
+; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
+; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
 ; SSE2-NEXT:    pand %xmm3, %xmm0
 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
 ; SSE2-NEXT:    por %xmm0, %xmm2
-; SSE2-NEXT:    pand %xmm10, %xmm2
-; SSE2-NEXT:    packuswb %xmm1, %xmm2
-; SSE2-NEXT:    packuswb %xmm2, %xmm2
-; SSE2-NEXT:    packuswb %xmm2, %xmm2
-; SSE2-NEXT:    pxor %xmm8, %xmm5
-; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm0
-; SSE2-NEXT:    pxor %xmm8, %xmm0
-; SSE2-NEXT:    movdqa %xmm5, %xmm1
-; SSE2-NEXT:    pcmpgtd %xmm0, %xmm1
-; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[0,0,2,2]
-; SSE2-NEXT:    pcmpeqd %xmm5, %xmm0
-; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
-; SSE2-NEXT:    pand %xmm3, %xmm0
-; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
-; SSE2-NEXT:    por %xmm0, %xmm1
-; SSE2-NEXT:    pand %xmm10, %xmm1
-; SSE2-NEXT:    pxor %xmm8, %xmm4
-; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm0
-; SSE2-NEXT:    pxor %xmm8, %xmm0
-; SSE2-NEXT:    movdqa %xmm4, %xmm3
-; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3
-; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]
-; SSE2-NEXT:    pcmpeqd %xmm4, %xmm0
-; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
-; SSE2-NEXT:    pand %xmm5, %xmm0
-; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
-; SSE2-NEXT:    por %xmm0, %xmm3
-; SSE2-NEXT:    pand %xmm10, %xmm3
-; SSE2-NEXT:    packuswb %xmm1, %xmm3
-; SSE2-NEXT:    packuswb %xmm3, %xmm3
-; SSE2-NEXT:    packuswb %xmm3, %xmm3
-; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,1,2,2]
-; SSE2-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm2[2],xmm3[3],xmm2[3]
-; SSE2-NEXT:    movsd {{.*#+}} xmm3 = xmm11[0],xmm3[1]
 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm0
 ; SSE2-NEXT:    pxor %xmm8, %xmm0
 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
 ; SSE2-NEXT:    pxor %xmm8, %xmm1
-; SSE2-NEXT:    movdqa %xmm1, %xmm2
-; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
-; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
+; SSE2-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3
+; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
 ; SSE2-NEXT:    pand %xmm4, %xmm0
-; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
+; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
 ; SSE2-NEXT:    por %xmm0, %xmm1
-; SSE2-NEXT:    pand %xmm10, %xmm1
+; SSE2-NEXT:    packssdw %xmm2, %xmm1
 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm0
 ; SSE2-NEXT:    pxor %xmm8, %xmm0
 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm2
 ; SSE2-NEXT:    pxor %xmm8, %xmm2
-; SSE2-NEXT:    movdqa %xmm2, %xmm4
-; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
-; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
+; SSE2-NEXT:    movdqa %xmm2, %xmm3
+; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3
+; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm2
 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
-; SSE2-NEXT:    pand %xmm5, %xmm0
-; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
+; SSE2-NEXT:    pand %xmm4, %xmm0
+; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
 ; SSE2-NEXT:    por %xmm0, %xmm2
-; SSE2-NEXT:    pand %xmm10, %xmm2
-; SSE2-NEXT:    packuswb %xmm1, %xmm2
-; SSE2-NEXT:    packuswb %xmm2, %xmm2
-; SSE2-NEXT:    packuswb %xmm2, %xmm2
 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm0
 ; SSE2-NEXT:    pxor %xmm8, %xmm0
-; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
-; SSE2-NEXT:    pxor %xmm8, %xmm1
-; SSE2-NEXT:    movdqa %xmm1, %xmm4
+; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
+; SSE2-NEXT:    pxor %xmm8, %xmm3
+; SSE2-NEXT:    movdqa %xmm3, %xmm4
 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
-; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
-; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
-; SSE2-NEXT:    pand %xmm5, %xmm0
-; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]
-; SSE2-NEXT:    por %xmm0, %xmm1
-; SSE2-NEXT:    pand %xmm10, %xmm1
-; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm0
-; SSE2-NEXT:    pxor %xmm8, %xmm0
-; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm4
-; SSE2-NEXT:    pxor %xmm8, %xmm4
-; SSE2-NEXT:    movdqa %xmm4, %xmm5
-; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
-; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
-; SSE2-NEXT:    pcmpeqd %xmm0, %xmm4
+; SSE2-NEXT:    pcmpeqd %xmm0, %xmm3
+; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
+; SSE2-NEXT:    pand %xmm5, %xmm3
 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
-; SSE2-NEXT:    pand %xmm6, %xmm0
-; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
-; SSE2-NEXT:    por %xmm0, %xmm4
-; SSE2-NEXT:    pand %xmm10, %xmm4
-; SSE2-NEXT:    packuswb %xmm1, %xmm4
-; SSE2-NEXT:    packuswb %xmm4, %xmm4
-; SSE2-NEXT:    packuswb %xmm4, %xmm4
-; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,2,3]
-; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]
-; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm0
-; SSE2-NEXT:    pxor %xmm8, %xmm0
+; SSE2-NEXT:    por %xmm3, %xmm0
+; SSE2-NEXT:    packssdw %xmm2, %xmm0
+; SSE2-NEXT:    packssdw %xmm1, %xmm0
 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
 ; SSE2-NEXT:    pxor %xmm8, %xmm1
-; SSE2-NEXT:    movdqa %xmm1, %xmm4
-; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
-; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
-; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
-; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
-; SSE2-NEXT:    pand %xmm5, %xmm0
-; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]
-; SSE2-NEXT:    por %xmm0, %xmm1
-; SSE2-NEXT:    pand %xmm10, %xmm1
-; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm0
-; SSE2-NEXT:    pxor %xmm8, %xmm0
-; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm4
-; SSE2-NEXT:    pxor %xmm8, %xmm4
-; SSE2-NEXT:    movdqa %xmm4, %xmm5
-; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
-; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
-; SSE2-NEXT:    pcmpeqd %xmm0, %xmm4
-; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
-; SSE2-NEXT:    pand %xmm6, %xmm4
-; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[1,1,3,3]
-; SSE2-NEXT:    por %xmm4, %xmm0
-; SSE2-NEXT:    pand %xmm10, %xmm0
-; SSE2-NEXT:    packuswb %xmm1, %xmm0
-; SSE2-NEXT:    packuswb %xmm0, %xmm0
-; SSE2-NEXT:    packuswb %xmm0, %xmm0
+; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm2
+; SSE2-NEXT:    pxor %xmm8, %xmm2
+; SSE2-NEXT:    movdqa %xmm2, %xmm3
+; SSE2-NEXT:    pcmpgtd %xmm1, %xmm3
+; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
+; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
+; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
+; SSE2-NEXT:    pand %xmm4, %xmm1
+; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
+; SSE2-NEXT:    por %xmm1, %xmm2
 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
 ; SSE2-NEXT:    pxor %xmm8, %xmm1
-; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm4
-; SSE2-NEXT:    pxor %xmm8, %xmm4
-; SSE2-NEXT:    movdqa %xmm4, %xmm5
-; SSE2-NEXT:    pcmpgtd %xmm1, %xmm5
-; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
-; SSE2-NEXT:    pcmpeqd %xmm1, %xmm4
+; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
+; SSE2-NEXT:    pxor %xmm8, %xmm3
+; SSE2-NEXT:    movdqa %xmm3, %xmm4
+; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
+; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
+; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3
+; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
+; SSE2-NEXT:    pand %xmm5, %xmm3
 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]
-; SSE2-NEXT:    pand %xmm6, %xmm1
-; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
-; SSE2-NEXT:    por %xmm1, %xmm4
-; SSE2-NEXT:    pand %xmm10, %xmm4
-; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm1
-; SSE2-NEXT:    pxor %xmm8, %xmm1
+; SSE2-NEXT:    por %xmm3, %xmm1
+; SSE2-NEXT:    packssdw %xmm2, %xmm1
+; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm2
+; SSE2-NEXT:    pxor %xmm8, %xmm2
+; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm3
+; SSE2-NEXT:    pxor %xmm8, %xmm3
+; SSE2-NEXT:    movdqa %xmm3, %xmm4
+; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
+; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
+; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3
+; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
+; SSE2-NEXT:    pand %xmm5, %xmm2
+; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
+; SSE2-NEXT:    por %xmm2, %xmm3
+; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm2
+; SSE2-NEXT:    pxor %xmm8, %xmm2
 ; SSE2-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm8
-; SSE2-NEXT:    movdqa %xmm8, %xmm5
-; SSE2-NEXT:    pcmpgtd %xmm1, %xmm5
-; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
-; SSE2-NEXT:    pcmpeqd %xmm1, %xmm8
-; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm8[1,1,3,3]
-; SSE2-NEXT:    pand %xmm6, %xmm1
-; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
-; SSE2-NEXT:    por %xmm1, %xmm5
-; SSE2-NEXT:    pand %xmm10, %xmm5
-; SSE2-NEXT:    packuswb %xmm4, %xmm5
-; SSE2-NEXT:    packuswb %xmm5, %xmm5
-; SSE2-NEXT:    packuswb %xmm5, %xmm5
-; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm5[0,1,2,2]
-; SSE2-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
-; SSE2-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]
-; SSE2-NEXT:    movapd %xmm1, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, 2(%rdi)
-; SSE2-NEXT:    movapd %xmm3, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $4, %edx
+; SSE2-NEXT:    movdqa %xmm8, %xmm4
+; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
+; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
+; SSE2-NEXT:    pcmpeqd %xmm2, %xmm8
+; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm8[1,1,3,3]
+; SSE2-NEXT:    pand %xmm5, %xmm2
+; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
+; SSE2-NEXT:    por %xmm2, %xmm4
+; SSE2-NEXT:    packssdw %xmm3, %xmm4
+; SSE2-NEXT:    packssdw %xmm1, %xmm4
+; SSE2-NEXT:    packsswb %xmm0, %xmm4
+; SSE2-NEXT:    pmovmskb %xmm4, %edx
+; SSE2-NEXT:    shll $16, %edx
 ; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $5, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $6, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $7, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $8, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $9, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $10, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $11, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $12, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    andl $1, %esi
-; SSE2-NEXT:    shll $13, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $14, %edx
-; SSE2-NEXT:    orl %esi, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
-; SSE2-NEXT:    shll $15, %esi
-; SSE2-NEXT:    orl %edx, %esi
-; SSE2-NEXT:    orl %ecx, %esi
-; SSE2-NEXT:    movw %si, (%rdi)
+; SSE2-NEXT:    movl %edx, (%rdi)
 ; SSE2-NEXT:    retq
 ;
 ; SSE42-LABEL: test_cmp_v32i64:
 ; SSE42:       # %bb.0:
 ; SSE42-NEXT:    movq %rdi, %rax
-; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm15
-; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm14
-; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm13
-; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm12
+; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm8
 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm11
 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm10
+; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm12
 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
-; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm8
+; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm14
+; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm13
+; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm15
 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm7
 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm6
+; SSE42-NEXT:    packssdw %xmm7, %xmm6
 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm5
 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm4
+; SSE42-NEXT:    packssdw %xmm5, %xmm4
+; SSE42-NEXT:    packssdw %xmm6, %xmm4
 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm3
 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm2
+; SSE42-NEXT:    packssdw %xmm3, %xmm2
 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm1
 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm0
-; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm8
+; SSE42-NEXT:    packssdw %xmm1, %xmm0
+; SSE42-NEXT:    packssdw %xmm2, %xmm0
+; SSE42-NEXT:    packsswb %xmm4, %xmm0
+; SSE42-NEXT:    pmovmskb %xmm0, %ecx
+; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm15
+; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm13
+; SSE42-NEXT:    packssdw %xmm15, %xmm13
+; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm14
 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm9
+; SSE42-NEXT:    packssdw %xmm14, %xmm9
+; SSE42-NEXT:    packssdw %xmm13, %xmm9
+; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm12
 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm10
+; SSE42-NEXT:    packssdw %xmm12, %xmm10
 ; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm11
-; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm12
-; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm13
-; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm14
-; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm15
-; SSE42-NEXT:    pextrb $8, %xmm15, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm15, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $0, %xmm14, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $8, %xmm14, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $0, %xmm13, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm13, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm12, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $8, %xmm12, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $0, %xmm11, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $8, %xmm11, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $0, %xmm10, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $8, %xmm10, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $0, %xmm9, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $8, %xmm9, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $0, %xmm8, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $8, %xmm8, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, 2(%rdi)
-; SSE42-NEXT:    pextrb $8, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
-; SSE42-NEXT:    pextrb $0, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
-; SSE42-NEXT:    pextrb $8, %xmm1, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
-; SSE42-NEXT:    pextrb $0, %xmm2, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $4, %edx
+; SSE42-NEXT:    pcmpgtq {{[0-9]+}}(%rsp), %xmm8
+; SSE42-NEXT:    packssdw %xmm11, %xmm8
+; SSE42-NEXT:    packssdw %xmm10, %xmm8
+; SSE42-NEXT:    packsswb %xmm9, %xmm8
+; SSE42-NEXT:    pmovmskb %xmm8, %edx
+; SSE42-NEXT:    shll $16, %edx
 ; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $5, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $0, %xmm3, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $6, %edx
-; SSE42-NEXT:    pextrb $8, %xmm3, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $7, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $0, %xmm4, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $8, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $8, %xmm4, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $9, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $0, %xmm5, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $8, %xmm5, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $11, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $0, %xmm6, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $12, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $8, %xmm6, %esi
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $13, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    pextrb $0, %xmm7, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $14, %edx
-; SSE42-NEXT:    orl %esi, %edx
-; SSE42-NEXT:    pextrb $8, %xmm7, %esi
-; SSE42-NEXT:    shll $15, %esi
-; SSE42-NEXT:    orl %edx, %esi
-; SSE42-NEXT:    orl %ecx, %esi
-; SSE42-NEXT:    movw %si, (%rdi)
+; SSE42-NEXT:    movl %edx, (%rdi)
 ; SSE42-NEXT:    retq
 ;
 ; AVX1-LABEL: test_cmp_v32i64:




More information about the llvm-commits mailing list