[llvm] r342578 - [X86] Handle COPYs of physregs better (regalloc hints)

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 19 11:59:11 PDT 2018


Modified: llvm/trunk/test/CodeGen/X86/unfold-masked-merge-vector-variablemask.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/unfold-masked-merge-vector-variablemask.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/unfold-masked-merge-vector-variablemask.ll (original)
+++ llvm/trunk/test/CodeGen/X86/unfold-masked-merge-vector-variablemask.ll Wed Sep 19 11:59:08 2018
@@ -16,11 +16,12 @@
 define <1 x i8> @out_v1i8(<1 x i8> %x, <1 x i8> %y, <1 x i8> %mask) nounwind {
 ; CHECK-LABEL: out_v1i8:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    andl %edx, %edi
-; CHECK-NEXT:    notb %dl
-; CHECK-NEXT:    andb %sil, %dl
-; CHECK-NEXT:    orb %dil, %dl
 ; CHECK-NEXT:    movl %edx, %eax
+; CHECK-NEXT:    andl %edx, %edi
+; CHECK-NEXT:    notb %al
+; CHECK-NEXT:    andb %sil, %al
+; CHECK-NEXT:    orb %dil, %al
+; CHECK-NEXT:    # kill: def $al killed $al killed $eax
 ; CHECK-NEXT:    retq
   %mx = and <1 x i8> %x, %mask
   %notmask = xor <1 x i8> %mask, <i8 -1>
@@ -36,29 +37,31 @@ define <1 x i8> @out_v1i8(<1 x i8> %x, <
 define <2 x i8> @out_v2i8(<2 x i8> %x, <2 x i8> %y, <2 x i8> %mask) nounwind {
 ; CHECK-BASELINE-LABEL: out_v2i8:
 ; CHECK-BASELINE:       # %bb.0:
+; CHECK-BASELINE-NEXT:    movl %r8d, %eax
 ; CHECK-BASELINE-NEXT:    andl %r8d, %edi
 ; CHECK-BASELINE-NEXT:    andl %r9d, %esi
-; CHECK-BASELINE-NEXT:    notb %r8b
+; CHECK-BASELINE-NEXT:    notb %al
 ; CHECK-BASELINE-NEXT:    notb %r9b
 ; CHECK-BASELINE-NEXT:    andb %cl, %r9b
-; CHECK-BASELINE-NEXT:    andb %dl, %r8b
-; CHECK-BASELINE-NEXT:    orb %dil, %r8b
+; CHECK-BASELINE-NEXT:    andb %dl, %al
+; CHECK-BASELINE-NEXT:    orb %dil, %al
 ; CHECK-BASELINE-NEXT:    orb %sil, %r9b
-; CHECK-BASELINE-NEXT:    movl %r8d, %eax
+; CHECK-BASELINE-NEXT:    # kill: def $al killed $al killed $eax
 ; CHECK-BASELINE-NEXT:    movl %r9d, %edx
 ; CHECK-BASELINE-NEXT:    retq
 ;
 ; CHECK-SSE1-LABEL: out_v2i8:
 ; CHECK-SSE1:       # %bb.0:
+; CHECK-SSE1-NEXT:    movl %r8d, %eax
 ; CHECK-SSE1-NEXT:    andl %r8d, %edi
 ; CHECK-SSE1-NEXT:    andl %r9d, %esi
-; CHECK-SSE1-NEXT:    notb %r8b
+; CHECK-SSE1-NEXT:    notb %al
 ; CHECK-SSE1-NEXT:    notb %r9b
 ; CHECK-SSE1-NEXT:    andb %cl, %r9b
-; CHECK-SSE1-NEXT:    andb %dl, %r8b
-; CHECK-SSE1-NEXT:    orb %dil, %r8b
+; CHECK-SSE1-NEXT:    andb %dl, %al
+; CHECK-SSE1-NEXT:    orb %dil, %al
 ; CHECK-SSE1-NEXT:    orb %sil, %r9b
-; CHECK-SSE1-NEXT:    movl %r8d, %eax
+; CHECK-SSE1-NEXT:    # kill: def $al killed $al killed $eax
 ; CHECK-SSE1-NEXT:    movl %r9d, %edx
 ; CHECK-SSE1-NEXT:    retq
 ;
@@ -87,11 +90,12 @@ define <2 x i8> @out_v2i8(<2 x i8> %x, <
 define <1 x i16> @out_v1i16(<1 x i16> %x, <1 x i16> %y, <1 x i16> %mask) nounwind {
 ; CHECK-LABEL: out_v1i16:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    andl %edx, %edi
-; CHECK-NEXT:    notl %edx
-; CHECK-NEXT:    andl %esi, %edx
-; CHECK-NEXT:    orl %edi, %edx
 ; CHECK-NEXT:    movl %edx, %eax
+; CHECK-NEXT:    andl %edx, %edi
+; CHECK-NEXT:    notl %eax
+; CHECK-NEXT:    andl %esi, %eax
+; CHECK-NEXT:    orl %edi, %eax
+; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
 ; CHECK-NEXT:    retq
   %mx = and <1 x i16> %x, %mask
   %notmask = xor <1 x i16> %mask, <i16 -1>
@@ -108,62 +112,62 @@ define <4 x i8> @out_v4i8(<4 x i8> %x, <
 ; CHECK-BASELINE-LABEL: out_v4i8:
 ; CHECK-BASELINE:       # %bb.0:
 ; CHECK-BASELINE-NEXT:    pushq %rbx
+; CHECK-BASELINE-NEXT:    movq %rdi, %rax
+; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %dil
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r10b
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r11b
-; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %al
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %bl
 ; CHECK-BASELINE-NEXT:    andb %bl, %r8b
-; CHECK-BASELINE-NEXT:    andb %al, %cl
-; CHECK-BASELINE-NEXT:    andb %r11b, %dl
-; CHECK-BASELINE-NEXT:    andb %r10b, %sil
+; CHECK-BASELINE-NEXT:    andb %r11b, %cl
+; CHECK-BASELINE-NEXT:    andb %r10b, %dl
+; CHECK-BASELINE-NEXT:    andb %dil, %sil
+; CHECK-BASELINE-NEXT:    notb %r10b
 ; CHECK-BASELINE-NEXT:    notb %r11b
-; CHECK-BASELINE-NEXT:    notb %al
 ; CHECK-BASELINE-NEXT:    notb %bl
-; CHECK-BASELINE-NEXT:    notb %r10b
-; CHECK-BASELINE-NEXT:    andb %r9b, %r10b
-; CHECK-BASELINE-NEXT:    orb %sil, %r10b
+; CHECK-BASELINE-NEXT:    notb %dil
+; CHECK-BASELINE-NEXT:    andb %r9b, %dil
+; CHECK-BASELINE-NEXT:    orb %sil, %dil
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %bl
 ; CHECK-BASELINE-NEXT:    orb %r8b, %bl
-; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %al
-; CHECK-BASELINE-NEXT:    orb %cl, %al
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r11b
-; CHECK-BASELINE-NEXT:    orb %dl, %r11b
-; CHECK-BASELINE-NEXT:    movb %bl, 3(%rdi)
-; CHECK-BASELINE-NEXT:    movb %al, 2(%rdi)
-; CHECK-BASELINE-NEXT:    movb %r11b, 1(%rdi)
-; CHECK-BASELINE-NEXT:    movb %r10b, (%rdi)
-; CHECK-BASELINE-NEXT:    movq %rdi, %rax
+; CHECK-BASELINE-NEXT:    orb %cl, %r11b
+; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r10b
+; CHECK-BASELINE-NEXT:    orb %dl, %r10b
+; CHECK-BASELINE-NEXT:    movb %bl, 3(%rax)
+; CHECK-BASELINE-NEXT:    movb %r11b, 2(%rax)
+; CHECK-BASELINE-NEXT:    movb %r10b, 1(%rax)
+; CHECK-BASELINE-NEXT:    movb %dil, (%rax)
 ; CHECK-BASELINE-NEXT:    popq %rbx
 ; CHECK-BASELINE-NEXT:    retq
 ;
 ; CHECK-SSE1-LABEL: out_v4i8:
 ; CHECK-SSE1:       # %bb.0:
 ; CHECK-SSE1-NEXT:    pushq %rbx
+; CHECK-SSE1-NEXT:    movq %rdi, %rax
+; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %dil
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r10b
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r11b
-; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %al
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %bl
 ; CHECK-SSE1-NEXT:    andb %bl, %r8b
-; CHECK-SSE1-NEXT:    andb %al, %cl
-; CHECK-SSE1-NEXT:    andb %r11b, %dl
-; CHECK-SSE1-NEXT:    andb %r10b, %sil
+; CHECK-SSE1-NEXT:    andb %r11b, %cl
+; CHECK-SSE1-NEXT:    andb %r10b, %dl
+; CHECK-SSE1-NEXT:    andb %dil, %sil
+; CHECK-SSE1-NEXT:    notb %r10b
 ; CHECK-SSE1-NEXT:    notb %r11b
-; CHECK-SSE1-NEXT:    notb %al
 ; CHECK-SSE1-NEXT:    notb %bl
-; CHECK-SSE1-NEXT:    notb %r10b
-; CHECK-SSE1-NEXT:    andb %r9b, %r10b
-; CHECK-SSE1-NEXT:    orb %sil, %r10b
+; CHECK-SSE1-NEXT:    notb %dil
+; CHECK-SSE1-NEXT:    andb %r9b, %dil
+; CHECK-SSE1-NEXT:    orb %sil, %dil
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %bl
 ; CHECK-SSE1-NEXT:    orb %r8b, %bl
-; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %al
-; CHECK-SSE1-NEXT:    orb %cl, %al
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r11b
-; CHECK-SSE1-NEXT:    orb %dl, %r11b
-; CHECK-SSE1-NEXT:    movb %bl, 3(%rdi)
-; CHECK-SSE1-NEXT:    movb %al, 2(%rdi)
-; CHECK-SSE1-NEXT:    movb %r11b, 1(%rdi)
-; CHECK-SSE1-NEXT:    movb %r10b, (%rdi)
-; CHECK-SSE1-NEXT:    movq %rdi, %rax
+; CHECK-SSE1-NEXT:    orb %cl, %r11b
+; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r10b
+; CHECK-SSE1-NEXT:    orb %dl, %r10b
+; CHECK-SSE1-NEXT:    movb %bl, 3(%rax)
+; CHECK-SSE1-NEXT:    movb %r11b, 2(%rax)
+; CHECK-SSE1-NEXT:    movb %r10b, 1(%rax)
+; CHECK-SSE1-NEXT:    movb %dil, (%rax)
 ; CHECK-SSE1-NEXT:    popq %rbx
 ; CHECK-SSE1-NEXT:    retq
 ;
@@ -192,52 +196,52 @@ define <4 x i8> @out_v4i8(<4 x i8> %x, <
 define <4 x i8> @out_v4i8_undef(<4 x i8> %x, <4 x i8> %y, <4 x i8> %mask) nounwind {
 ; CHECK-BASELINE-LABEL: out_v4i8_undef:
 ; CHECK-BASELINE:       # %bb.0:
+; CHECK-BASELINE-NEXT:    movq %rdi, %rax
+; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %dil
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r10b
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r11b
-; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %al
-; CHECK-BASELINE-NEXT:    andb %al, %r8b
-; CHECK-BASELINE-NEXT:    andb %r11b, %dl
-; CHECK-BASELINE-NEXT:    andb %r10b, %sil
+; CHECK-BASELINE-NEXT:    andb %r11b, %r8b
+; CHECK-BASELINE-NEXT:    andb %r10b, %dl
+; CHECK-BASELINE-NEXT:    andb %dil, %sil
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %cl
-; CHECK-BASELINE-NEXT:    notb %r11b
-; CHECK-BASELINE-NEXT:    notb %al
 ; CHECK-BASELINE-NEXT:    notb %r10b
-; CHECK-BASELINE-NEXT:    andb %r9b, %r10b
-; CHECK-BASELINE-NEXT:    orb %sil, %r10b
-; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %al
-; CHECK-BASELINE-NEXT:    orb %r8b, %al
+; CHECK-BASELINE-NEXT:    notb %r11b
+; CHECK-BASELINE-NEXT:    notb %dil
+; CHECK-BASELINE-NEXT:    andb %r9b, %dil
+; CHECK-BASELINE-NEXT:    orb %sil, %dil
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r11b
-; CHECK-BASELINE-NEXT:    orb %dl, %r11b
-; CHECK-BASELINE-NEXT:    movb %cl, 2(%rdi)
-; CHECK-BASELINE-NEXT:    movb %al, 3(%rdi)
-; CHECK-BASELINE-NEXT:    movb %r11b, 1(%rdi)
-; CHECK-BASELINE-NEXT:    movb %r10b, (%rdi)
-; CHECK-BASELINE-NEXT:    movq %rdi, %rax
+; CHECK-BASELINE-NEXT:    orb %r8b, %r11b
+; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r10b
+; CHECK-BASELINE-NEXT:    orb %dl, %r10b
+; CHECK-BASELINE-NEXT:    movb %cl, 2(%rax)
+; CHECK-BASELINE-NEXT:    movb %r11b, 3(%rax)
+; CHECK-BASELINE-NEXT:    movb %r10b, 1(%rax)
+; CHECK-BASELINE-NEXT:    movb %dil, (%rax)
 ; CHECK-BASELINE-NEXT:    retq
 ;
 ; CHECK-SSE1-LABEL: out_v4i8_undef:
 ; CHECK-SSE1:       # %bb.0:
+; CHECK-SSE1-NEXT:    movq %rdi, %rax
+; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %dil
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r10b
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r11b
-; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %al
-; CHECK-SSE1-NEXT:    andb %al, %r8b
-; CHECK-SSE1-NEXT:    andb %r11b, %dl
-; CHECK-SSE1-NEXT:    andb %r10b, %sil
+; CHECK-SSE1-NEXT:    andb %r11b, %r8b
+; CHECK-SSE1-NEXT:    andb %r10b, %dl
+; CHECK-SSE1-NEXT:    andb %dil, %sil
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %cl
-; CHECK-SSE1-NEXT:    notb %r11b
-; CHECK-SSE1-NEXT:    notb %al
 ; CHECK-SSE1-NEXT:    notb %r10b
-; CHECK-SSE1-NEXT:    andb %r9b, %r10b
-; CHECK-SSE1-NEXT:    orb %sil, %r10b
-; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %al
-; CHECK-SSE1-NEXT:    orb %r8b, %al
+; CHECK-SSE1-NEXT:    notb %r11b
+; CHECK-SSE1-NEXT:    notb %dil
+; CHECK-SSE1-NEXT:    andb %r9b, %dil
+; CHECK-SSE1-NEXT:    orb %sil, %dil
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r11b
-; CHECK-SSE1-NEXT:    orb %dl, %r11b
-; CHECK-SSE1-NEXT:    movb %cl, 2(%rdi)
-; CHECK-SSE1-NEXT:    movb %al, 3(%rdi)
-; CHECK-SSE1-NEXT:    movb %r11b, 1(%rdi)
-; CHECK-SSE1-NEXT:    movb %r10b, (%rdi)
-; CHECK-SSE1-NEXT:    movq %rdi, %rax
+; CHECK-SSE1-NEXT:    orb %r8b, %r11b
+; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r10b
+; CHECK-SSE1-NEXT:    orb %dl, %r10b
+; CHECK-SSE1-NEXT:    movb %cl, 2(%rax)
+; CHECK-SSE1-NEXT:    movb %r11b, 3(%rax)
+; CHECK-SSE1-NEXT:    movb %r10b, 1(%rax)
+; CHECK-SSE1-NEXT:    movb %dil, (%rax)
 ; CHECK-SSE1-NEXT:    retq
 ;
 ; CHECK-SSE2-LABEL: out_v4i8_undef:
@@ -265,29 +269,31 @@ define <4 x i8> @out_v4i8_undef(<4 x i8>
 define <2 x i16> @out_v2i16(<2 x i16> %x, <2 x i16> %y, <2 x i16> %mask) nounwind {
 ; CHECK-BASELINE-LABEL: out_v2i16:
 ; CHECK-BASELINE:       # %bb.0:
+; CHECK-BASELINE-NEXT:    movl %r8d, %eax
 ; CHECK-BASELINE-NEXT:    andl %r9d, %esi
 ; CHECK-BASELINE-NEXT:    andl %r8d, %edi
-; CHECK-BASELINE-NEXT:    notl %r8d
+; CHECK-BASELINE-NEXT:    notl %eax
 ; CHECK-BASELINE-NEXT:    notl %r9d
 ; CHECK-BASELINE-NEXT:    andl %ecx, %r9d
 ; CHECK-BASELINE-NEXT:    orl %esi, %r9d
-; CHECK-BASELINE-NEXT:    andl %edx, %r8d
-; CHECK-BASELINE-NEXT:    orl %edi, %r8d
-; CHECK-BASELINE-NEXT:    movl %r8d, %eax
+; CHECK-BASELINE-NEXT:    andl %edx, %eax
+; CHECK-BASELINE-NEXT:    orl %edi, %eax
+; CHECK-BASELINE-NEXT:    # kill: def $ax killed $ax killed $eax
 ; CHECK-BASELINE-NEXT:    movl %r9d, %edx
 ; CHECK-BASELINE-NEXT:    retq
 ;
 ; CHECK-SSE1-LABEL: out_v2i16:
 ; CHECK-SSE1:       # %bb.0:
+; CHECK-SSE1-NEXT:    movl %r8d, %eax
 ; CHECK-SSE1-NEXT:    andl %r9d, %esi
 ; CHECK-SSE1-NEXT:    andl %r8d, %edi
-; CHECK-SSE1-NEXT:    notl %r8d
+; CHECK-SSE1-NEXT:    notl %eax
 ; CHECK-SSE1-NEXT:    notl %r9d
 ; CHECK-SSE1-NEXT:    andl %ecx, %r9d
 ; CHECK-SSE1-NEXT:    orl %esi, %r9d
-; CHECK-SSE1-NEXT:    andl %edx, %r8d
-; CHECK-SSE1-NEXT:    orl %edi, %r8d
-; CHECK-SSE1-NEXT:    movl %r8d, %eax
+; CHECK-SSE1-NEXT:    andl %edx, %eax
+; CHECK-SSE1-NEXT:    orl %edi, %eax
+; CHECK-SSE1-NEXT:    # kill: def $ax killed $ax killed $eax
 ; CHECK-SSE1-NEXT:    movl %r9d, %edx
 ; CHECK-SSE1-NEXT:    retq
 ;
@@ -316,11 +322,11 @@ define <2 x i16> @out_v2i16(<2 x i16> %x
 define <1 x i32> @out_v1i32(<1 x i32> %x, <1 x i32> %y, <1 x i32> %mask) nounwind {
 ; CHECK-LABEL: out_v1i32:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    andl %edx, %edi
-; CHECK-NEXT:    notl %edx
-; CHECK-NEXT:    andl %esi, %edx
-; CHECK-NEXT:    orl %edi, %edx
 ; CHECK-NEXT:    movl %edx, %eax
+; CHECK-NEXT:    andl %edx, %edi
+; CHECK-NEXT:    notl %eax
+; CHECK-NEXT:    andl %esi, %eax
+; CHECK-NEXT:    orl %edi, %eax
 ; CHECK-NEXT:    retq
   %mx = and <1 x i32> %x, %mask
   %notmask = xor <1 x i32> %mask, <i32 -1>
@@ -342,60 +348,60 @@ define <8 x i8> @out_v8i8(<8 x i8> %x, <
 ; CHECK-BASELINE-NEXT:    pushq %r13
 ; CHECK-BASELINE-NEXT:    pushq %r12
 ; CHECK-BASELINE-NEXT:    pushq %rbx
-; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %bpl
-; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r15b
-; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r12b
+; CHECK-BASELINE-NEXT:    movq %rdi, %rax
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r10b
-; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r11b
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r14b
+; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r12b
+; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %dil
+; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r11b
+; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %bpl
+; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r15b
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %bl
-; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %al
-; CHECK-BASELINE-NEXT:    andb %al, %r9b
-; CHECK-BASELINE-NEXT:    andb %bl, %r8b
-; CHECK-BASELINE-NEXT:    andb %r14b, %cl
+; CHECK-BASELINE-NEXT:    andb %bl, %r9b
+; CHECK-BASELINE-NEXT:    andb %r15b, %r8b
+; CHECK-BASELINE-NEXT:    andb %bpl, %cl
 ; CHECK-BASELINE-NEXT:    movl %ecx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
 ; CHECK-BASELINE-NEXT:    andb %r11b, %dl
 ; CHECK-BASELINE-NEXT:    movl %edx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-BASELINE-NEXT:    andb %r10b, %sil
+; CHECK-BASELINE-NEXT:    andb %dil, %sil
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r13b
 ; CHECK-BASELINE-NEXT:    andb %r12b, %r13b
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %cl
-; CHECK-BASELINE-NEXT:    andb %r15b, %cl
+; CHECK-BASELINE-NEXT:    andb %r14b, %cl
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %dl
-; CHECK-BASELINE-NEXT:    andb %bpl, %dl
-; CHECK-BASELINE-NEXT:    notb %r10b
+; CHECK-BASELINE-NEXT:    andb %r10b, %dl
+; CHECK-BASELINE-NEXT:    notb %dil
 ; CHECK-BASELINE-NEXT:    notb %r11b
-; CHECK-BASELINE-NEXT:    notb %r14b
-; CHECK-BASELINE-NEXT:    notb %bl
-; CHECK-BASELINE-NEXT:    notb %al
 ; CHECK-BASELINE-NEXT:    notb %bpl
 ; CHECK-BASELINE-NEXT:    notb %r15b
+; CHECK-BASELINE-NEXT:    notb %bl
+; CHECK-BASELINE-NEXT:    notb %r10b
+; CHECK-BASELINE-NEXT:    notb %r14b
 ; CHECK-BASELINE-NEXT:    notb %r12b
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r12b
 ; CHECK-BASELINE-NEXT:    orb %r13b, %r12b
+; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r14b
+; CHECK-BASELINE-NEXT:    orb %cl, %r14b
+; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r10b
+; CHECK-BASELINE-NEXT:    orb %dl, %r10b
+; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %bl
+; CHECK-BASELINE-NEXT:    orb %r9b, %bl
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r15b
-; CHECK-BASELINE-NEXT:    orb %cl, %r15b
+; CHECK-BASELINE-NEXT:    orb %r8b, %r15b
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %bpl
-; CHECK-BASELINE-NEXT:    orb %dl, %bpl
-; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %al
-; CHECK-BASELINE-NEXT:    orb %r9b, %al
-; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %bl
-; CHECK-BASELINE-NEXT:    orb %r8b, %bl
-; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r14b
-; CHECK-BASELINE-NEXT:    orb {{[-0-9]+}}(%r{{[sb]}}p), %r14b # 1-byte Folded Reload
+; CHECK-BASELINE-NEXT:    orb {{[-0-9]+}}(%r{{[sb]}}p), %bpl # 1-byte Folded Reload
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r11b
 ; CHECK-BASELINE-NEXT:    orb {{[-0-9]+}}(%r{{[sb]}}p), %r11b # 1-byte Folded Reload
-; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r10b
-; CHECK-BASELINE-NEXT:    orb %sil, %r10b
-; CHECK-BASELINE-NEXT:    movb %r12b, 7(%rdi)
-; CHECK-BASELINE-NEXT:    movb %r15b, 6(%rdi)
-; CHECK-BASELINE-NEXT:    movb %bpl, 5(%rdi)
-; CHECK-BASELINE-NEXT:    movb %al, 4(%rdi)
-; CHECK-BASELINE-NEXT:    movb %bl, 3(%rdi)
-; CHECK-BASELINE-NEXT:    movb %r14b, 2(%rdi)
-; CHECK-BASELINE-NEXT:    movb %r11b, 1(%rdi)
-; CHECK-BASELINE-NEXT:    movb %r10b, (%rdi)
-; CHECK-BASELINE-NEXT:    movq %rdi, %rax
+; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %dil
+; CHECK-BASELINE-NEXT:    orb %sil, %dil
+; CHECK-BASELINE-NEXT:    movb %r12b, 7(%rax)
+; CHECK-BASELINE-NEXT:    movb %r14b, 6(%rax)
+; CHECK-BASELINE-NEXT:    movb %r10b, 5(%rax)
+; CHECK-BASELINE-NEXT:    movb %bl, 4(%rax)
+; CHECK-BASELINE-NEXT:    movb %r15b, 3(%rax)
+; CHECK-BASELINE-NEXT:    movb %bpl, 2(%rax)
+; CHECK-BASELINE-NEXT:    movb %r11b, 1(%rax)
+; CHECK-BASELINE-NEXT:    movb %dil, (%rax)
 ; CHECK-BASELINE-NEXT:    popq %rbx
 ; CHECK-BASELINE-NEXT:    popq %r12
 ; CHECK-BASELINE-NEXT:    popq %r13
@@ -412,60 +418,60 @@ define <8 x i8> @out_v8i8(<8 x i8> %x, <
 ; CHECK-SSE1-NEXT:    pushq %r13
 ; CHECK-SSE1-NEXT:    pushq %r12
 ; CHECK-SSE1-NEXT:    pushq %rbx
-; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %bpl
-; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r15b
-; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r12b
+; CHECK-SSE1-NEXT:    movq %rdi, %rax
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r10b
-; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r11b
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r14b
+; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r12b
+; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %dil
+; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r11b
+; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %bpl
+; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r15b
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %bl
-; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %al
-; CHECK-SSE1-NEXT:    andb %al, %r9b
-; CHECK-SSE1-NEXT:    andb %bl, %r8b
-; CHECK-SSE1-NEXT:    andb %r14b, %cl
+; CHECK-SSE1-NEXT:    andb %bl, %r9b
+; CHECK-SSE1-NEXT:    andb %r15b, %r8b
+; CHECK-SSE1-NEXT:    andb %bpl, %cl
 ; CHECK-SSE1-NEXT:    movl %ecx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
 ; CHECK-SSE1-NEXT:    andb %r11b, %dl
 ; CHECK-SSE1-NEXT:    movl %edx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-SSE1-NEXT:    andb %r10b, %sil
+; CHECK-SSE1-NEXT:    andb %dil, %sil
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r13b
 ; CHECK-SSE1-NEXT:    andb %r12b, %r13b
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %cl
-; CHECK-SSE1-NEXT:    andb %r15b, %cl
+; CHECK-SSE1-NEXT:    andb %r14b, %cl
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %dl
-; CHECK-SSE1-NEXT:    andb %bpl, %dl
-; CHECK-SSE1-NEXT:    notb %r10b
+; CHECK-SSE1-NEXT:    andb %r10b, %dl
+; CHECK-SSE1-NEXT:    notb %dil
 ; CHECK-SSE1-NEXT:    notb %r11b
-; CHECK-SSE1-NEXT:    notb %r14b
-; CHECK-SSE1-NEXT:    notb %bl
-; CHECK-SSE1-NEXT:    notb %al
 ; CHECK-SSE1-NEXT:    notb %bpl
 ; CHECK-SSE1-NEXT:    notb %r15b
+; CHECK-SSE1-NEXT:    notb %bl
+; CHECK-SSE1-NEXT:    notb %r10b
+; CHECK-SSE1-NEXT:    notb %r14b
 ; CHECK-SSE1-NEXT:    notb %r12b
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r12b
 ; CHECK-SSE1-NEXT:    orb %r13b, %r12b
+; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r14b
+; CHECK-SSE1-NEXT:    orb %cl, %r14b
+; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r10b
+; CHECK-SSE1-NEXT:    orb %dl, %r10b
+; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %bl
+; CHECK-SSE1-NEXT:    orb %r9b, %bl
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r15b
-; CHECK-SSE1-NEXT:    orb %cl, %r15b
+; CHECK-SSE1-NEXT:    orb %r8b, %r15b
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %bpl
-; CHECK-SSE1-NEXT:    orb %dl, %bpl
-; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %al
-; CHECK-SSE1-NEXT:    orb %r9b, %al
-; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %bl
-; CHECK-SSE1-NEXT:    orb %r8b, %bl
-; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r14b
-; CHECK-SSE1-NEXT:    orb {{[-0-9]+}}(%r{{[sb]}}p), %r14b # 1-byte Folded Reload
+; CHECK-SSE1-NEXT:    orb {{[-0-9]+}}(%r{{[sb]}}p), %bpl # 1-byte Folded Reload
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r11b
 ; CHECK-SSE1-NEXT:    orb {{[-0-9]+}}(%r{{[sb]}}p), %r11b # 1-byte Folded Reload
-; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r10b
-; CHECK-SSE1-NEXT:    orb %sil, %r10b
-; CHECK-SSE1-NEXT:    movb %r12b, 7(%rdi)
-; CHECK-SSE1-NEXT:    movb %r15b, 6(%rdi)
-; CHECK-SSE1-NEXT:    movb %bpl, 5(%rdi)
-; CHECK-SSE1-NEXT:    movb %al, 4(%rdi)
-; CHECK-SSE1-NEXT:    movb %bl, 3(%rdi)
-; CHECK-SSE1-NEXT:    movb %r14b, 2(%rdi)
-; CHECK-SSE1-NEXT:    movb %r11b, 1(%rdi)
-; CHECK-SSE1-NEXT:    movb %r10b, (%rdi)
-; CHECK-SSE1-NEXT:    movq %rdi, %rax
+; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %dil
+; CHECK-SSE1-NEXT:    orb %sil, %dil
+; CHECK-SSE1-NEXT:    movb %r12b, 7(%rax)
+; CHECK-SSE1-NEXT:    movb %r14b, 6(%rax)
+; CHECK-SSE1-NEXT:    movb %r10b, 5(%rax)
+; CHECK-SSE1-NEXT:    movb %bl, 4(%rax)
+; CHECK-SSE1-NEXT:    movb %r15b, 3(%rax)
+; CHECK-SSE1-NEXT:    movb %bpl, 2(%rax)
+; CHECK-SSE1-NEXT:    movb %r11b, 1(%rax)
+; CHECK-SSE1-NEXT:    movb %dil, (%rax)
 ; CHECK-SSE1-NEXT:    popq %rbx
 ; CHECK-SSE1-NEXT:    popq %r12
 ; CHECK-SSE1-NEXT:    popq %r13
@@ -500,62 +506,62 @@ define <4 x i16> @out_v4i16(<4 x i16> %x
 ; CHECK-BASELINE-LABEL: out_v4i16:
 ; CHECK-BASELINE:       # %bb.0:
 ; CHECK-BASELINE-NEXT:    pushq %rbx
+; CHECK-BASELINE-NEXT:    movq %rdi, %rax
 ; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %r10d
 ; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %r11d
-; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %eax
+; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %edi
 ; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %ebx
 ; CHECK-BASELINE-NEXT:    andl %ebx, %esi
-; CHECK-BASELINE-NEXT:    andl %eax, %r8d
+; CHECK-BASELINE-NEXT:    andl %edi, %r8d
 ; CHECK-BASELINE-NEXT:    andl %r11d, %ecx
 ; CHECK-BASELINE-NEXT:    andl %r10d, %edx
 ; CHECK-BASELINE-NEXT:    notl %r10d
 ; CHECK-BASELINE-NEXT:    notl %r11d
-; CHECK-BASELINE-NEXT:    notl %eax
+; CHECK-BASELINE-NEXT:    notl %edi
 ; CHECK-BASELINE-NEXT:    notl %ebx
 ; CHECK-BASELINE-NEXT:    andl %r9d, %ebx
 ; CHECK-BASELINE-NEXT:    orl %esi, %ebx
-; CHECK-BASELINE-NEXT:    andw {{[0-9]+}}(%rsp), %ax
-; CHECK-BASELINE-NEXT:    orl %r8d, %eax
+; CHECK-BASELINE-NEXT:    andw {{[0-9]+}}(%rsp), %di
+; CHECK-BASELINE-NEXT:    orl %r8d, %edi
 ; CHECK-BASELINE-NEXT:    andw {{[0-9]+}}(%rsp), %r11w
 ; CHECK-BASELINE-NEXT:    orl %ecx, %r11d
 ; CHECK-BASELINE-NEXT:    andw {{[0-9]+}}(%rsp), %r10w
 ; CHECK-BASELINE-NEXT:    orl %edx, %r10d
-; CHECK-BASELINE-NEXT:    movw %bx, (%rdi)
-; CHECK-BASELINE-NEXT:    movw %ax, 6(%rdi)
-; CHECK-BASELINE-NEXT:    movw %r11w, 4(%rdi)
-; CHECK-BASELINE-NEXT:    movw %r10w, 2(%rdi)
-; CHECK-BASELINE-NEXT:    movq %rdi, %rax
+; CHECK-BASELINE-NEXT:    movw %bx, (%rax)
+; CHECK-BASELINE-NEXT:    movw %di, 6(%rax)
+; CHECK-BASELINE-NEXT:    movw %r11w, 4(%rax)
+; CHECK-BASELINE-NEXT:    movw %r10w, 2(%rax)
 ; CHECK-BASELINE-NEXT:    popq %rbx
 ; CHECK-BASELINE-NEXT:    retq
 ;
 ; CHECK-SSE1-LABEL: out_v4i16:
 ; CHECK-SSE1:       # %bb.0:
 ; CHECK-SSE1-NEXT:    pushq %rbx
+; CHECK-SSE1-NEXT:    movq %rdi, %rax
 ; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %r10d
 ; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %r11d
-; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %eax
+; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %edi
 ; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %ebx
 ; CHECK-SSE1-NEXT:    andl %ebx, %esi
-; CHECK-SSE1-NEXT:    andl %eax, %r8d
+; CHECK-SSE1-NEXT:    andl %edi, %r8d
 ; CHECK-SSE1-NEXT:    andl %r11d, %ecx
 ; CHECK-SSE1-NEXT:    andl %r10d, %edx
 ; CHECK-SSE1-NEXT:    notl %r10d
 ; CHECK-SSE1-NEXT:    notl %r11d
-; CHECK-SSE1-NEXT:    notl %eax
+; CHECK-SSE1-NEXT:    notl %edi
 ; CHECK-SSE1-NEXT:    notl %ebx
 ; CHECK-SSE1-NEXT:    andl %r9d, %ebx
 ; CHECK-SSE1-NEXT:    orl %esi, %ebx
-; CHECK-SSE1-NEXT:    andw {{[0-9]+}}(%rsp), %ax
-; CHECK-SSE1-NEXT:    orl %r8d, %eax
+; CHECK-SSE1-NEXT:    andw {{[0-9]+}}(%rsp), %di
+; CHECK-SSE1-NEXT:    orl %r8d, %edi
 ; CHECK-SSE1-NEXT:    andw {{[0-9]+}}(%rsp), %r11w
 ; CHECK-SSE1-NEXT:    orl %ecx, %r11d
 ; CHECK-SSE1-NEXT:    andw {{[0-9]+}}(%rsp), %r10w
 ; CHECK-SSE1-NEXT:    orl %edx, %r10d
-; CHECK-SSE1-NEXT:    movw %bx, (%rdi)
-; CHECK-SSE1-NEXT:    movw %ax, 6(%rdi)
-; CHECK-SSE1-NEXT:    movw %r11w, 4(%rdi)
-; CHECK-SSE1-NEXT:    movw %r10w, 2(%rdi)
-; CHECK-SSE1-NEXT:    movq %rdi, %rax
+; CHECK-SSE1-NEXT:    movw %bx, (%rax)
+; CHECK-SSE1-NEXT:    movw %di, 6(%rax)
+; CHECK-SSE1-NEXT:    movw %r11w, 4(%rax)
+; CHECK-SSE1-NEXT:    movw %r10w, 2(%rax)
 ; CHECK-SSE1-NEXT:    popq %rbx
 ; CHECK-SSE1-NEXT:    retq
 ;
@@ -584,52 +590,52 @@ define <4 x i16> @out_v4i16(<4 x i16> %x
 define <4 x i16> @out_v4i16_undef(<4 x i16> %x, <4 x i16> %y, <4 x i16> %mask) nounwind {
 ; CHECK-BASELINE-LABEL: out_v4i16_undef:
 ; CHECK-BASELINE:       # %bb.0:
+; CHECK-BASELINE-NEXT:    movq %rdi, %rax
 ; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %r10d
 ; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %r11d
-; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %eax
-; CHECK-BASELINE-NEXT:    andl %eax, %esi
+; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %edi
+; CHECK-BASELINE-NEXT:    andl %edi, %esi
 ; CHECK-BASELINE-NEXT:    andl %r11d, %r8d
 ; CHECK-BASELINE-NEXT:    andl %r10d, %edx
 ; CHECK-BASELINE-NEXT:    andw {{[0-9]+}}(%rsp), %cx
 ; CHECK-BASELINE-NEXT:    notl %r10d
 ; CHECK-BASELINE-NEXT:    notl %r11d
-; CHECK-BASELINE-NEXT:    notl %eax
-; CHECK-BASELINE-NEXT:    andl %r9d, %eax
-; CHECK-BASELINE-NEXT:    orl %esi, %eax
+; CHECK-BASELINE-NEXT:    notl %edi
+; CHECK-BASELINE-NEXT:    andl %r9d, %edi
+; CHECK-BASELINE-NEXT:    orl %esi, %edi
 ; CHECK-BASELINE-NEXT:    andw {{[0-9]+}}(%rsp), %r11w
 ; CHECK-BASELINE-NEXT:    orl %r8d, %r11d
 ; CHECK-BASELINE-NEXT:    andw {{[0-9]+}}(%rsp), %r10w
 ; CHECK-BASELINE-NEXT:    orl %edx, %r10d
-; CHECK-BASELINE-NEXT:    movw %cx, 4(%rdi)
-; CHECK-BASELINE-NEXT:    movw %ax, (%rdi)
-; CHECK-BASELINE-NEXT:    movw %r11w, 6(%rdi)
-; CHECK-BASELINE-NEXT:    movw %r10w, 2(%rdi)
-; CHECK-BASELINE-NEXT:    movq %rdi, %rax
+; CHECK-BASELINE-NEXT:    movw %cx, 4(%rax)
+; CHECK-BASELINE-NEXT:    movw %di, (%rax)
+; CHECK-BASELINE-NEXT:    movw %r11w, 6(%rax)
+; CHECK-BASELINE-NEXT:    movw %r10w, 2(%rax)
 ; CHECK-BASELINE-NEXT:    retq
 ;
 ; CHECK-SSE1-LABEL: out_v4i16_undef:
 ; CHECK-SSE1:       # %bb.0:
+; CHECK-SSE1-NEXT:    movq %rdi, %rax
 ; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %r10d
 ; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %r11d
-; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %eax
-; CHECK-SSE1-NEXT:    andl %eax, %esi
+; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %edi
+; CHECK-SSE1-NEXT:    andl %edi, %esi
 ; CHECK-SSE1-NEXT:    andl %r11d, %r8d
 ; CHECK-SSE1-NEXT:    andl %r10d, %edx
 ; CHECK-SSE1-NEXT:    andw {{[0-9]+}}(%rsp), %cx
 ; CHECK-SSE1-NEXT:    notl %r10d
 ; CHECK-SSE1-NEXT:    notl %r11d
-; CHECK-SSE1-NEXT:    notl %eax
-; CHECK-SSE1-NEXT:    andl %r9d, %eax
-; CHECK-SSE1-NEXT:    orl %esi, %eax
+; CHECK-SSE1-NEXT:    notl %edi
+; CHECK-SSE1-NEXT:    andl %r9d, %edi
+; CHECK-SSE1-NEXT:    orl %esi, %edi
 ; CHECK-SSE1-NEXT:    andw {{[0-9]+}}(%rsp), %r11w
 ; CHECK-SSE1-NEXT:    orl %r8d, %r11d
 ; CHECK-SSE1-NEXT:    andw {{[0-9]+}}(%rsp), %r10w
 ; CHECK-SSE1-NEXT:    orl %edx, %r10d
-; CHECK-SSE1-NEXT:    movw %cx, 4(%rdi)
-; CHECK-SSE1-NEXT:    movw %ax, (%rdi)
-; CHECK-SSE1-NEXT:    movw %r11w, 6(%rdi)
-; CHECK-SSE1-NEXT:    movw %r10w, 2(%rdi)
-; CHECK-SSE1-NEXT:    movq %rdi, %rax
+; CHECK-SSE1-NEXT:    movw %cx, 4(%rax)
+; CHECK-SSE1-NEXT:    movw %di, (%rax)
+; CHECK-SSE1-NEXT:    movw %r11w, 6(%rax)
+; CHECK-SSE1-NEXT:    movw %r10w, 2(%rax)
 ; CHECK-SSE1-NEXT:    retq
 ;
 ; CHECK-SSE2-LABEL: out_v4i16_undef:
@@ -657,29 +663,29 @@ define <4 x i16> @out_v4i16_undef(<4 x i
 define <2 x i32> @out_v2i32(<2 x i32> %x, <2 x i32> %y, <2 x i32> %mask) nounwind {
 ; CHECK-BASELINE-LABEL: out_v2i32:
 ; CHECK-BASELINE:       # %bb.0:
+; CHECK-BASELINE-NEXT:    movl %r8d, %eax
 ; CHECK-BASELINE-NEXT:    andl %r9d, %esi
 ; CHECK-BASELINE-NEXT:    andl %r8d, %edi
-; CHECK-BASELINE-NEXT:    notl %r8d
+; CHECK-BASELINE-NEXT:    notl %eax
 ; CHECK-BASELINE-NEXT:    notl %r9d
 ; CHECK-BASELINE-NEXT:    andl %ecx, %r9d
 ; CHECK-BASELINE-NEXT:    orl %esi, %r9d
-; CHECK-BASELINE-NEXT:    andl %edx, %r8d
-; CHECK-BASELINE-NEXT:    orl %edi, %r8d
-; CHECK-BASELINE-NEXT:    movl %r8d, %eax
+; CHECK-BASELINE-NEXT:    andl %edx, %eax
+; CHECK-BASELINE-NEXT:    orl %edi, %eax
 ; CHECK-BASELINE-NEXT:    movl %r9d, %edx
 ; CHECK-BASELINE-NEXT:    retq
 ;
 ; CHECK-SSE1-LABEL: out_v2i32:
 ; CHECK-SSE1:       # %bb.0:
+; CHECK-SSE1-NEXT:    movl %r8d, %eax
 ; CHECK-SSE1-NEXT:    andl %r9d, %esi
 ; CHECK-SSE1-NEXT:    andl %r8d, %edi
-; CHECK-SSE1-NEXT:    notl %r8d
+; CHECK-SSE1-NEXT:    notl %eax
 ; CHECK-SSE1-NEXT:    notl %r9d
 ; CHECK-SSE1-NEXT:    andl %ecx, %r9d
 ; CHECK-SSE1-NEXT:    orl %esi, %r9d
-; CHECK-SSE1-NEXT:    andl %edx, %r8d
-; CHECK-SSE1-NEXT:    orl %edi, %r8d
-; CHECK-SSE1-NEXT:    movl %r8d, %eax
+; CHECK-SSE1-NEXT:    andl %edx, %eax
+; CHECK-SSE1-NEXT:    orl %edi, %eax
 ; CHECK-SSE1-NEXT:    movl %r9d, %edx
 ; CHECK-SSE1-NEXT:    retq
 ;
@@ -708,11 +714,11 @@ define <2 x i32> @out_v2i32(<2 x i32> %x
 define <1 x i64> @out_v1i64(<1 x i64> %x, <1 x i64> %y, <1 x i64> %mask) nounwind {
 ; CHECK-LABEL: out_v1i64:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    andq %rdx, %rdi
-; CHECK-NEXT:    notq %rdx
-; CHECK-NEXT:    andq %rsi, %rdx
-; CHECK-NEXT:    orq %rdi, %rdx
 ; CHECK-NEXT:    movq %rdx, %rax
+; CHECK-NEXT:    andq %rdx, %rdi
+; CHECK-NEXT:    notq %rax
+; CHECK-NEXT:    andq %rsi, %rax
+; CHECK-NEXT:    orq %rdi, %rax
 ; CHECK-NEXT:    retq
   %mx = and <1 x i64> %x, %mask
   %notmask = xor <1 x i64> %mask, <i64 -1>
@@ -737,6 +743,8 @@ define <16 x i8> @out_v16i8(<16 x i8> %x
 ; CHECK-BASELINE-NEXT:    movl %ecx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
 ; CHECK-BASELINE-NEXT:    movl %edx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
 ; CHECK-BASELINE-NEXT:    movl %esi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-BASELINE-NEXT:    movq %rdi, %rax
+; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %dil
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r10b
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r11b
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %bpl
@@ -747,12 +755,6 @@ define <16 x i8> @out_v16i8(<16 x i8> %x
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %bl
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %dl
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %cl
-; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %al
-; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %sil
-; CHECK-BASELINE-NEXT:    andb %al, %sil
-; CHECK-BASELINE-NEXT:    notb %al
-; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %al
-; CHECK-BASELINE-NEXT:    orb %sil, %al
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %sil
 ; CHECK-BASELINE-NEXT:    andb %cl, %sil
 ; CHECK-BASELINE-NEXT:    notb %cl
@@ -803,51 +805,55 @@ define <16 x i8> @out_v16i8(<16 x i8> %x
 ; CHECK-BASELINE-NEXT:    notb %r10b
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r10b
 ; CHECK-BASELINE-NEXT:    orb %sil, %r10b
-; CHECK-BASELINE-NEXT:    movb %al, 15(%rdi)
-; CHECK-BASELINE-NEXT:    movb %cl, 14(%rdi)
-; CHECK-BASELINE-NEXT:    movb %dl, 13(%rdi)
-; CHECK-BASELINE-NEXT:    movb %bl, 12(%rdi)
-; CHECK-BASELINE-NEXT:    movb %r13b, 11(%rdi)
-; CHECK-BASELINE-NEXT:    movb %r12b, 10(%rdi)
-; CHECK-BASELINE-NEXT:    movb %r15b, 9(%rdi)
-; CHECK-BASELINE-NEXT:    movb %r14b, 8(%rdi)
-; CHECK-BASELINE-NEXT:    movb %bpl, 7(%rdi)
-; CHECK-BASELINE-NEXT:    movb %r11b, 6(%rdi)
-; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %al
-; CHECK-BASELINE-NEXT:    andb %al, %r9b
-; CHECK-BASELINE-NEXT:    notb %al
-; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %al
-; CHECK-BASELINE-NEXT:    orb %r9b, %al
-; CHECK-BASELINE-NEXT:    movb %r10b, 5(%rdi)
+; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %sil
+; CHECK-BASELINE-NEXT:    andb %dil, %sil
+; CHECK-BASELINE-NEXT:    notb %dil
+; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %dil
+; CHECK-BASELINE-NEXT:    orb %sil, %dil
+; CHECK-BASELINE-NEXT:    movb %cl, 15(%rax)
+; CHECK-BASELINE-NEXT:    movb %dl, 14(%rax)
+; CHECK-BASELINE-NEXT:    movb %bl, 13(%rax)
+; CHECK-BASELINE-NEXT:    movb %r13b, 12(%rax)
+; CHECK-BASELINE-NEXT:    movb %r12b, 11(%rax)
+; CHECK-BASELINE-NEXT:    movb %r15b, 10(%rax)
+; CHECK-BASELINE-NEXT:    movb %r14b, 9(%rax)
+; CHECK-BASELINE-NEXT:    movb %bpl, 8(%rax)
+; CHECK-BASELINE-NEXT:    movb %r11b, 7(%rax)
+; CHECK-BASELINE-NEXT:    movb %r10b, 6(%rax)
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %cl
-; CHECK-BASELINE-NEXT:    andb %cl, %r8b
+; CHECK-BASELINE-NEXT:    andb %cl, %r9b
 ; CHECK-BASELINE-NEXT:    notb %cl
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %cl
-; CHECK-BASELINE-NEXT:    orb %r8b, %cl
-; CHECK-BASELINE-NEXT:    movb %al, 4(%rdi)
-; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %al
-; CHECK-BASELINE-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 4-byte Reload
-; CHECK-BASELINE-NEXT:    andb %al, %dl
-; CHECK-BASELINE-NEXT:    notb %al
-; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %al
-; CHECK-BASELINE-NEXT:    orb %dl, %al
-; CHECK-BASELINE-NEXT:    movb %cl, 3(%rdi)
+; CHECK-BASELINE-NEXT:    orb %r9b, %cl
+; CHECK-BASELINE-NEXT:    movb %dil, 5(%rax)
+; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %dl
+; CHECK-BASELINE-NEXT:    andb %dl, %r8b
+; CHECK-BASELINE-NEXT:    notb %dl
+; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %dl
+; CHECK-BASELINE-NEXT:    orb %r8b, %dl
+; CHECK-BASELINE-NEXT:    movb %cl, 4(%rax)
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %cl
-; CHECK-BASELINE-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 4-byte Reload
-; CHECK-BASELINE-NEXT:    andb %cl, %dl
+; CHECK-BASELINE-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %esi # 4-byte Reload
+; CHECK-BASELINE-NEXT:    andb %cl, %sil
 ; CHECK-BASELINE-NEXT:    notb %cl
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %cl
-; CHECK-BASELINE-NEXT:    orb %dl, %cl
-; CHECK-BASELINE-NEXT:    movb %al, 2(%rdi)
-; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %al
-; CHECK-BASELINE-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 4-byte Reload
-; CHECK-BASELINE-NEXT:    andb %al, %dl
-; CHECK-BASELINE-NEXT:    notb %al
-; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %al
-; CHECK-BASELINE-NEXT:    orb %dl, %al
-; CHECK-BASELINE-NEXT:    movb %cl, 1(%rdi)
-; CHECK-BASELINE-NEXT:    movb %al, (%rdi)
-; CHECK-BASELINE-NEXT:    movq %rdi, %rax
+; CHECK-BASELINE-NEXT:    orb %sil, %cl
+; CHECK-BASELINE-NEXT:    movb %dl, 3(%rax)
+; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %dl
+; CHECK-BASELINE-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %esi # 4-byte Reload
+; CHECK-BASELINE-NEXT:    andb %dl, %sil
+; CHECK-BASELINE-NEXT:    notb %dl
+; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %dl
+; CHECK-BASELINE-NEXT:    orb %sil, %dl
+; CHECK-BASELINE-NEXT:    movb %cl, 2(%rax)
+; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %cl
+; CHECK-BASELINE-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %esi # 4-byte Reload
+; CHECK-BASELINE-NEXT:    andb %cl, %sil
+; CHECK-BASELINE-NEXT:    notb %cl
+; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %cl
+; CHECK-BASELINE-NEXT:    orb %sil, %cl
+; CHECK-BASELINE-NEXT:    movb %dl, 1(%rax)
+; CHECK-BASELINE-NEXT:    movb %cl, (%rax)
 ; CHECK-BASELINE-NEXT:    popq %rbx
 ; CHECK-BASELINE-NEXT:    popq %r12
 ; CHECK-BASELINE-NEXT:    popq %r13
@@ -867,6 +873,8 @@ define <16 x i8> @out_v16i8(<16 x i8> %x
 ; CHECK-SSE1-NEXT:    movl %ecx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
 ; CHECK-SSE1-NEXT:    movl %edx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
 ; CHECK-SSE1-NEXT:    movl %esi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-SSE1-NEXT:    movq %rdi, %rax
+; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %dil
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r10b
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r11b
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %bpl
@@ -877,12 +885,6 @@ define <16 x i8> @out_v16i8(<16 x i8> %x
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %bl
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %dl
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %cl
-; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %al
-; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %sil
-; CHECK-SSE1-NEXT:    andb %al, %sil
-; CHECK-SSE1-NEXT:    notb %al
-; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %al
-; CHECK-SSE1-NEXT:    orb %sil, %al
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %sil
 ; CHECK-SSE1-NEXT:    andb %cl, %sil
 ; CHECK-SSE1-NEXT:    notb %cl
@@ -933,51 +935,55 @@ define <16 x i8> @out_v16i8(<16 x i8> %x
 ; CHECK-SSE1-NEXT:    notb %r10b
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r10b
 ; CHECK-SSE1-NEXT:    orb %sil, %r10b
-; CHECK-SSE1-NEXT:    movb %al, 15(%rdi)
-; CHECK-SSE1-NEXT:    movb %cl, 14(%rdi)
-; CHECK-SSE1-NEXT:    movb %dl, 13(%rdi)
-; CHECK-SSE1-NEXT:    movb %bl, 12(%rdi)
-; CHECK-SSE1-NEXT:    movb %r13b, 11(%rdi)
-; CHECK-SSE1-NEXT:    movb %r12b, 10(%rdi)
-; CHECK-SSE1-NEXT:    movb %r15b, 9(%rdi)
-; CHECK-SSE1-NEXT:    movb %r14b, 8(%rdi)
-; CHECK-SSE1-NEXT:    movb %bpl, 7(%rdi)
-; CHECK-SSE1-NEXT:    movb %r11b, 6(%rdi)
-; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %al
-; CHECK-SSE1-NEXT:    andb %al, %r9b
-; CHECK-SSE1-NEXT:    notb %al
-; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %al
-; CHECK-SSE1-NEXT:    orb %r9b, %al
-; CHECK-SSE1-NEXT:    movb %r10b, 5(%rdi)
+; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %sil
+; CHECK-SSE1-NEXT:    andb %dil, %sil
+; CHECK-SSE1-NEXT:    notb %dil
+; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %dil
+; CHECK-SSE1-NEXT:    orb %sil, %dil
+; CHECK-SSE1-NEXT:    movb %cl, 15(%rax)
+; CHECK-SSE1-NEXT:    movb %dl, 14(%rax)
+; CHECK-SSE1-NEXT:    movb %bl, 13(%rax)
+; CHECK-SSE1-NEXT:    movb %r13b, 12(%rax)
+; CHECK-SSE1-NEXT:    movb %r12b, 11(%rax)
+; CHECK-SSE1-NEXT:    movb %r15b, 10(%rax)
+; CHECK-SSE1-NEXT:    movb %r14b, 9(%rax)
+; CHECK-SSE1-NEXT:    movb %bpl, 8(%rax)
+; CHECK-SSE1-NEXT:    movb %r11b, 7(%rax)
+; CHECK-SSE1-NEXT:    movb %r10b, 6(%rax)
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %cl
-; CHECK-SSE1-NEXT:    andb %cl, %r8b
+; CHECK-SSE1-NEXT:    andb %cl, %r9b
 ; CHECK-SSE1-NEXT:    notb %cl
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %cl
-; CHECK-SSE1-NEXT:    orb %r8b, %cl
-; CHECK-SSE1-NEXT:    movb %al, 4(%rdi)
-; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %al
-; CHECK-SSE1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 4-byte Reload
-; CHECK-SSE1-NEXT:    andb %al, %dl
-; CHECK-SSE1-NEXT:    notb %al
-; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %al
-; CHECK-SSE1-NEXT:    orb %dl, %al
-; CHECK-SSE1-NEXT:    movb %cl, 3(%rdi)
+; CHECK-SSE1-NEXT:    orb %r9b, %cl
+; CHECK-SSE1-NEXT:    movb %dil, 5(%rax)
+; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %dl
+; CHECK-SSE1-NEXT:    andb %dl, %r8b
+; CHECK-SSE1-NEXT:    notb %dl
+; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %dl
+; CHECK-SSE1-NEXT:    orb %r8b, %dl
+; CHECK-SSE1-NEXT:    movb %cl, 4(%rax)
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %cl
-; CHECK-SSE1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 4-byte Reload
-; CHECK-SSE1-NEXT:    andb %cl, %dl
+; CHECK-SSE1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %esi # 4-byte Reload
+; CHECK-SSE1-NEXT:    andb %cl, %sil
 ; CHECK-SSE1-NEXT:    notb %cl
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %cl
-; CHECK-SSE1-NEXT:    orb %dl, %cl
-; CHECK-SSE1-NEXT:    movb %al, 2(%rdi)
-; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %al
-; CHECK-SSE1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 4-byte Reload
-; CHECK-SSE1-NEXT:    andb %al, %dl
-; CHECK-SSE1-NEXT:    notb %al
-; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %al
-; CHECK-SSE1-NEXT:    orb %dl, %al
-; CHECK-SSE1-NEXT:    movb %cl, 1(%rdi)
-; CHECK-SSE1-NEXT:    movb %al, (%rdi)
-; CHECK-SSE1-NEXT:    movq %rdi, %rax
+; CHECK-SSE1-NEXT:    orb %sil, %cl
+; CHECK-SSE1-NEXT:    movb %dl, 3(%rax)
+; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %dl
+; CHECK-SSE1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %esi # 4-byte Reload
+; CHECK-SSE1-NEXT:    andb %dl, %sil
+; CHECK-SSE1-NEXT:    notb %dl
+; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %dl
+; CHECK-SSE1-NEXT:    orb %sil, %dl
+; CHECK-SSE1-NEXT:    movb %cl, 2(%rax)
+; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %cl
+; CHECK-SSE1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %esi # 4-byte Reload
+; CHECK-SSE1-NEXT:    andb %cl, %sil
+; CHECK-SSE1-NEXT:    notb %cl
+; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %cl
+; CHECK-SSE1-NEXT:    orb %sil, %cl
+; CHECK-SSE1-NEXT:    movb %dl, 1(%rax)
+; CHECK-SSE1-NEXT:    movb %cl, (%rax)
 ; CHECK-SSE1-NEXT:    popq %rbx
 ; CHECK-SSE1-NEXT:    popq %r12
 ; CHECK-SSE1-NEXT:    popq %r13
@@ -1010,6 +1016,7 @@ define <8 x i16> @out_v8i16(<8 x i16> %x
 ; CHECK-BASELINE-NEXT:    pushq %rbp
 ; CHECK-BASELINE-NEXT:    pushq %r14
 ; CHECK-BASELINE-NEXT:    pushq %rbx
+; CHECK-BASELINE-NEXT:    movq %rdi, %rax
 ; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %r10d
 ; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %r11d
 ; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %r14d
@@ -1033,11 +1040,11 @@ define <8 x i16> @out_v8i16(<8 x i16> %x
 ; CHECK-BASELINE-NEXT:    notl %ebx
 ; CHECK-BASELINE-NEXT:    andw {{[0-9]+}}(%rsp), %bx
 ; CHECK-BASELINE-NEXT:    orl %r9d, %ebx
-; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %eax
-; CHECK-BASELINE-NEXT:    andl %eax, %r8d
-; CHECK-BASELINE-NEXT:    notl %eax
-; CHECK-BASELINE-NEXT:    andw {{[0-9]+}}(%rsp), %ax
-; CHECK-BASELINE-NEXT:    orl %r8d, %eax
+; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %edi
+; CHECK-BASELINE-NEXT:    andl %edi, %r8d
+; CHECK-BASELINE-NEXT:    notl %edi
+; CHECK-BASELINE-NEXT:    andw {{[0-9]+}}(%rsp), %di
+; CHECK-BASELINE-NEXT:    orl %r8d, %edi
 ; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %ebp
 ; CHECK-BASELINE-NEXT:    andl %ebp, %ecx
 ; CHECK-BASELINE-NEXT:    notl %ebp
@@ -1053,15 +1060,14 @@ define <8 x i16> @out_v8i16(<8 x i16> %x
 ; CHECK-BASELINE-NEXT:    notl %edx
 ; CHECK-BASELINE-NEXT:    andw {{[0-9]+}}(%rsp), %dx
 ; CHECK-BASELINE-NEXT:    orl %esi, %edx
-; CHECK-BASELINE-NEXT:    movw %r14w, 14(%rdi)
-; CHECK-BASELINE-NEXT:    movw %r11w, 12(%rdi)
-; CHECK-BASELINE-NEXT:    movw %r10w, 10(%rdi)
-; CHECK-BASELINE-NEXT:    movw %bx, 8(%rdi)
-; CHECK-BASELINE-NEXT:    movw %ax, 6(%rdi)
-; CHECK-BASELINE-NEXT:    movw %bp, 4(%rdi)
-; CHECK-BASELINE-NEXT:    movw %cx, 2(%rdi)
-; CHECK-BASELINE-NEXT:    movw %dx, (%rdi)
-; CHECK-BASELINE-NEXT:    movq %rdi, %rax
+; CHECK-BASELINE-NEXT:    movw %r14w, 14(%rax)
+; CHECK-BASELINE-NEXT:    movw %r11w, 12(%rax)
+; CHECK-BASELINE-NEXT:    movw %r10w, 10(%rax)
+; CHECK-BASELINE-NEXT:    movw %bx, 8(%rax)
+; CHECK-BASELINE-NEXT:    movw %di, 6(%rax)
+; CHECK-BASELINE-NEXT:    movw %bp, 4(%rax)
+; CHECK-BASELINE-NEXT:    movw %cx, 2(%rax)
+; CHECK-BASELINE-NEXT:    movw %dx, (%rax)
 ; CHECK-BASELINE-NEXT:    popq %rbx
 ; CHECK-BASELINE-NEXT:    popq %r14
 ; CHECK-BASELINE-NEXT:    popq %rbp
@@ -1072,6 +1078,7 @@ define <8 x i16> @out_v8i16(<8 x i16> %x
 ; CHECK-SSE1-NEXT:    pushq %rbp
 ; CHECK-SSE1-NEXT:    pushq %r14
 ; CHECK-SSE1-NEXT:    pushq %rbx
+; CHECK-SSE1-NEXT:    movq %rdi, %rax
 ; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %r10d
 ; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %r11d
 ; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %r14d
@@ -1095,11 +1102,11 @@ define <8 x i16> @out_v8i16(<8 x i16> %x
 ; CHECK-SSE1-NEXT:    notl %ebx
 ; CHECK-SSE1-NEXT:    andw {{[0-9]+}}(%rsp), %bx
 ; CHECK-SSE1-NEXT:    orl %r9d, %ebx
-; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %eax
-; CHECK-SSE1-NEXT:    andl %eax, %r8d
-; CHECK-SSE1-NEXT:    notl %eax
-; CHECK-SSE1-NEXT:    andw {{[0-9]+}}(%rsp), %ax
-; CHECK-SSE1-NEXT:    orl %r8d, %eax
+; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %edi
+; CHECK-SSE1-NEXT:    andl %edi, %r8d
+; CHECK-SSE1-NEXT:    notl %edi
+; CHECK-SSE1-NEXT:    andw {{[0-9]+}}(%rsp), %di
+; CHECK-SSE1-NEXT:    orl %r8d, %edi
 ; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %ebp
 ; CHECK-SSE1-NEXT:    andl %ebp, %ecx
 ; CHECK-SSE1-NEXT:    notl %ebp
@@ -1115,15 +1122,14 @@ define <8 x i16> @out_v8i16(<8 x i16> %x
 ; CHECK-SSE1-NEXT:    notl %edx
 ; CHECK-SSE1-NEXT:    andw {{[0-9]+}}(%rsp), %dx
 ; CHECK-SSE1-NEXT:    orl %esi, %edx
-; CHECK-SSE1-NEXT:    movw %r14w, 14(%rdi)
-; CHECK-SSE1-NEXT:    movw %r11w, 12(%rdi)
-; CHECK-SSE1-NEXT:    movw %r10w, 10(%rdi)
-; CHECK-SSE1-NEXT:    movw %bx, 8(%rdi)
-; CHECK-SSE1-NEXT:    movw %ax, 6(%rdi)
-; CHECK-SSE1-NEXT:    movw %bp, 4(%rdi)
-; CHECK-SSE1-NEXT:    movw %cx, 2(%rdi)
-; CHECK-SSE1-NEXT:    movw %dx, (%rdi)
-; CHECK-SSE1-NEXT:    movq %rdi, %rax
+; CHECK-SSE1-NEXT:    movw %r14w, 14(%rax)
+; CHECK-SSE1-NEXT:    movw %r11w, 12(%rax)
+; CHECK-SSE1-NEXT:    movw %r10w, 10(%rax)
+; CHECK-SSE1-NEXT:    movw %bx, 8(%rax)
+; CHECK-SSE1-NEXT:    movw %di, 6(%rax)
+; CHECK-SSE1-NEXT:    movw %bp, 4(%rax)
+; CHECK-SSE1-NEXT:    movw %cx, 2(%rax)
+; CHECK-SSE1-NEXT:    movw %dx, (%rax)
 ; CHECK-SSE1-NEXT:    popq %rbx
 ; CHECK-SSE1-NEXT:    popq %r14
 ; CHECK-SSE1-NEXT:    popq %rbp
@@ -1151,47 +1157,47 @@ define <4 x i32> @out_v4i32(<4 x i32> *%
 ; CHECK-BASELINE-LABEL: out_v4i32:
 ; CHECK-BASELINE:       # %bb.0:
 ; CHECK-BASELINE-NEXT:    pushq %rbx
+; CHECK-BASELINE-NEXT:    movq %rdi, %rax
 ; CHECK-BASELINE-NEXT:    movl (%rcx), %r8d
 ; CHECK-BASELINE-NEXT:    movl 4(%rcx), %r9d
-; CHECK-BASELINE-NEXT:    movl 8(%rcx), %eax
+; CHECK-BASELINE-NEXT:    movl 8(%rcx), %edi
 ; CHECK-BASELINE-NEXT:    movl 12(%rcx), %ecx
 ; CHECK-BASELINE-NEXT:    movl 12(%rsi), %r10d
 ; CHECK-BASELINE-NEXT:    andl %ecx, %r10d
 ; CHECK-BASELINE-NEXT:    movl 8(%rsi), %r11d
-; CHECK-BASELINE-NEXT:    andl %eax, %r11d
+; CHECK-BASELINE-NEXT:    andl %edi, %r11d
 ; CHECK-BASELINE-NEXT:    movl 4(%rsi), %ebx
 ; CHECK-BASELINE-NEXT:    andl %r9d, %ebx
 ; CHECK-BASELINE-NEXT:    movl (%rsi), %esi
 ; CHECK-BASELINE-NEXT:    andl %r8d, %esi
 ; CHECK-BASELINE-NEXT:    notl %r8d
 ; CHECK-BASELINE-NEXT:    notl %r9d
-; CHECK-BASELINE-NEXT:    notl %eax
+; CHECK-BASELINE-NEXT:    notl %edi
 ; CHECK-BASELINE-NEXT:    notl %ecx
 ; CHECK-BASELINE-NEXT:    andl 12(%rdx), %ecx
 ; CHECK-BASELINE-NEXT:    orl %r10d, %ecx
-; CHECK-BASELINE-NEXT:    andl 8(%rdx), %eax
-; CHECK-BASELINE-NEXT:    orl %r11d, %eax
+; CHECK-BASELINE-NEXT:    andl 8(%rdx), %edi
+; CHECK-BASELINE-NEXT:    orl %r11d, %edi
 ; CHECK-BASELINE-NEXT:    andl 4(%rdx), %r9d
 ; CHECK-BASELINE-NEXT:    orl %ebx, %r9d
 ; CHECK-BASELINE-NEXT:    andl (%rdx), %r8d
 ; CHECK-BASELINE-NEXT:    orl %esi, %r8d
-; CHECK-BASELINE-NEXT:    movl %ecx, 12(%rdi)
-; CHECK-BASELINE-NEXT:    movl %eax, 8(%rdi)
-; CHECK-BASELINE-NEXT:    movl %r9d, 4(%rdi)
-; CHECK-BASELINE-NEXT:    movl %r8d, (%rdi)
-; CHECK-BASELINE-NEXT:    movq %rdi, %rax
+; CHECK-BASELINE-NEXT:    movl %ecx, 12(%rax)
+; CHECK-BASELINE-NEXT:    movl %edi, 8(%rax)
+; CHECK-BASELINE-NEXT:    movl %r9d, 4(%rax)
+; CHECK-BASELINE-NEXT:    movl %r8d, (%rax)
 ; CHECK-BASELINE-NEXT:    popq %rbx
 ; CHECK-BASELINE-NEXT:    retq
 ;
 ; CHECK-SSE1-LABEL: out_v4i32:
 ; CHECK-SSE1:       # %bb.0:
+; CHECK-SSE1-NEXT:    movq %rdi, %rax
 ; CHECK-SSE1-NEXT:    movaps (%rcx), %xmm0
 ; CHECK-SSE1-NEXT:    movaps (%rsi), %xmm1
 ; CHECK-SSE1-NEXT:    andps %xmm0, %xmm1
 ; CHECK-SSE1-NEXT:    andnps (%rdx), %xmm0
 ; CHECK-SSE1-NEXT:    orps %xmm1, %xmm0
 ; CHECK-SSE1-NEXT:    movaps %xmm0, (%rdi)
-; CHECK-SSE1-NEXT:    movq %rdi, %rax
 ; CHECK-SSE1-NEXT:    retq
 ;
 ; CHECK-SSE2-LABEL: out_v4i32:
@@ -1222,42 +1228,42 @@ define <4 x i32> @out_v4i32(<4 x i32> *%
 define <4 x i32> @out_v4i32_undef(<4 x i32> *%px, <4 x i32> *%py, <4 x i32> *%pmask) nounwind {
 ; CHECK-BASELINE-LABEL: out_v4i32_undef:
 ; CHECK-BASELINE:       # %bb.0:
+; CHECK-BASELINE-NEXT:    movq %rdi, %rax
 ; CHECK-BASELINE-NEXT:    movl 8(%rsi), %r8d
 ; CHECK-BASELINE-NEXT:    movl (%rcx), %r9d
 ; CHECK-BASELINE-NEXT:    movl 4(%rcx), %r10d
-; CHECK-BASELINE-NEXT:    movl 12(%rcx), %eax
+; CHECK-BASELINE-NEXT:    movl 12(%rcx), %edi
 ; CHECK-BASELINE-NEXT:    andl 8(%rcx), %r8d
 ; CHECK-BASELINE-NEXT:    movl 12(%rsi), %ecx
-; CHECK-BASELINE-NEXT:    andl %eax, %ecx
+; CHECK-BASELINE-NEXT:    andl %edi, %ecx
 ; CHECK-BASELINE-NEXT:    movl 4(%rsi), %r11d
 ; CHECK-BASELINE-NEXT:    andl %r10d, %r11d
 ; CHECK-BASELINE-NEXT:    movl (%rsi), %esi
 ; CHECK-BASELINE-NEXT:    andl %r9d, %esi
 ; CHECK-BASELINE-NEXT:    notl %r9d
 ; CHECK-BASELINE-NEXT:    notl %r10d
-; CHECK-BASELINE-NEXT:    notl %eax
-; CHECK-BASELINE-NEXT:    andl 12(%rdx), %eax
-; CHECK-BASELINE-NEXT:    orl %ecx, %eax
+; CHECK-BASELINE-NEXT:    notl %edi
+; CHECK-BASELINE-NEXT:    andl 12(%rdx), %edi
+; CHECK-BASELINE-NEXT:    orl %ecx, %edi
 ; CHECK-BASELINE-NEXT:    andl 4(%rdx), %r10d
 ; CHECK-BASELINE-NEXT:    orl %r11d, %r10d
 ; CHECK-BASELINE-NEXT:    andl (%rdx), %r9d
 ; CHECK-BASELINE-NEXT:    orl %esi, %r9d
-; CHECK-BASELINE-NEXT:    movl %r8d, 8(%rdi)
-; CHECK-BASELINE-NEXT:    movl %eax, 12(%rdi)
-; CHECK-BASELINE-NEXT:    movl %r10d, 4(%rdi)
-; CHECK-BASELINE-NEXT:    movl %r9d, (%rdi)
-; CHECK-BASELINE-NEXT:    movq %rdi, %rax
+; CHECK-BASELINE-NEXT:    movl %r8d, 8(%rax)
+; CHECK-BASELINE-NEXT:    movl %edi, 12(%rax)
+; CHECK-BASELINE-NEXT:    movl %r10d, 4(%rax)
+; CHECK-BASELINE-NEXT:    movl %r9d, (%rax)
 ; CHECK-BASELINE-NEXT:    retq
 ;
 ; CHECK-SSE1-LABEL: out_v4i32_undef:
 ; CHECK-SSE1:       # %bb.0:
+; CHECK-SSE1-NEXT:    movq %rdi, %rax
 ; CHECK-SSE1-NEXT:    movaps (%rcx), %xmm0
 ; CHECK-SSE1-NEXT:    movaps (%rsi), %xmm1
 ; CHECK-SSE1-NEXT:    andps %xmm0, %xmm1
 ; CHECK-SSE1-NEXT:    andnps (%rdx), %xmm0
 ; CHECK-SSE1-NEXT:    orps %xmm1, %xmm0
 ; CHECK-SSE1-NEXT:    movaps %xmm0, (%rdi)
-; CHECK-SSE1-NEXT:    movq %rdi, %rax
 ; CHECK-SSE1-NEXT:    retq
 ;
 ; CHECK-SSE2-LABEL: out_v4i32_undef:
@@ -1288,29 +1294,29 @@ define <4 x i32> @out_v4i32_undef(<4 x i
 define <2 x i64> @out_v2i64(<2 x i64> %x, <2 x i64> %y, <2 x i64> %mask) nounwind {
 ; CHECK-BASELINE-LABEL: out_v2i64:
 ; CHECK-BASELINE:       # %bb.0:
+; CHECK-BASELINE-NEXT:    movq %r8, %rax
 ; CHECK-BASELINE-NEXT:    andq %r9, %rsi
 ; CHECK-BASELINE-NEXT:    andq %r8, %rdi
-; CHECK-BASELINE-NEXT:    notq %r8
+; CHECK-BASELINE-NEXT:    notq %rax
 ; CHECK-BASELINE-NEXT:    notq %r9
 ; CHECK-BASELINE-NEXT:    andq %rcx, %r9
 ; CHECK-BASELINE-NEXT:    orq %rsi, %r9
-; CHECK-BASELINE-NEXT:    andq %rdx, %r8
-; CHECK-BASELINE-NEXT:    orq %rdi, %r8
-; CHECK-BASELINE-NEXT:    movq %r8, %rax
+; CHECK-BASELINE-NEXT:    andq %rdx, %rax
+; CHECK-BASELINE-NEXT:    orq %rdi, %rax
 ; CHECK-BASELINE-NEXT:    movq %r9, %rdx
 ; CHECK-BASELINE-NEXT:    retq
 ;
 ; CHECK-SSE1-LABEL: out_v2i64:
 ; CHECK-SSE1:       # %bb.0:
+; CHECK-SSE1-NEXT:    movq %r8, %rax
 ; CHECK-SSE1-NEXT:    andq %r9, %rsi
 ; CHECK-SSE1-NEXT:    andq %r8, %rdi
-; CHECK-SSE1-NEXT:    notq %r8
+; CHECK-SSE1-NEXT:    notq %rax
 ; CHECK-SSE1-NEXT:    notq %r9
 ; CHECK-SSE1-NEXT:    andq %rcx, %r9
 ; CHECK-SSE1-NEXT:    orq %rsi, %r9
-; CHECK-SSE1-NEXT:    andq %rdx, %r8
-; CHECK-SSE1-NEXT:    orq %rdi, %r8
-; CHECK-SSE1-NEXT:    movq %r8, %rax
+; CHECK-SSE1-NEXT:    andq %rdx, %rax
+; CHECK-SSE1-NEXT:    orq %rdi, %rax
 ; CHECK-SSE1-NEXT:    movq %r9, %rdx
 ; CHECK-SSE1-NEXT:    retq
 ;
@@ -2287,6 +2293,7 @@ define <8 x i32> @out_v8i32(<8 x i32> *%
 ; CHECK-BASELINE-NEXT:    pushq %r15
 ; CHECK-BASELINE-NEXT:    pushq %r14
 ; CHECK-BASELINE-NEXT:    pushq %rbx
+; CHECK-BASELINE-NEXT:    movq %rdi, %rax
 ; CHECK-BASELINE-NEXT:    movl 4(%rcx), %r8d
 ; CHECK-BASELINE-NEXT:    movl 8(%rcx), %r9d
 ; CHECK-BASELINE-NEXT:    movl 12(%rcx), %r10d
@@ -2299,51 +2306,50 @@ define <8 x i32> @out_v8i32(<8 x i32> *%
 ; CHECK-BASELINE-NEXT:    notl %ebp
 ; CHECK-BASELINE-NEXT:    andl 28(%rdx), %ebp
 ; CHECK-BASELINE-NEXT:    orl %r14d, %ebp
-; CHECK-BASELINE-NEXT:    movl 24(%rsi), %eax
-; CHECK-BASELINE-NEXT:    andl %ebx, %eax
+; CHECK-BASELINE-NEXT:    movl 24(%rsi), %edi
+; CHECK-BASELINE-NEXT:    andl %ebx, %edi
 ; CHECK-BASELINE-NEXT:    notl %ebx
 ; CHECK-BASELINE-NEXT:    andl 24(%rdx), %ebx
-; CHECK-BASELINE-NEXT:    orl %eax, %ebx
-; CHECK-BASELINE-NEXT:    movl 20(%rsi), %eax
-; CHECK-BASELINE-NEXT:    andl %r15d, %eax
+; CHECK-BASELINE-NEXT:    orl %edi, %ebx
+; CHECK-BASELINE-NEXT:    movl 20(%rsi), %edi
+; CHECK-BASELINE-NEXT:    andl %r15d, %edi
 ; CHECK-BASELINE-NEXT:    notl %r15d
 ; CHECK-BASELINE-NEXT:    andl 20(%rdx), %r15d
-; CHECK-BASELINE-NEXT:    orl %eax, %r15d
-; CHECK-BASELINE-NEXT:    movl 16(%rsi), %eax
-; CHECK-BASELINE-NEXT:    andl %r11d, %eax
+; CHECK-BASELINE-NEXT:    orl %edi, %r15d
+; CHECK-BASELINE-NEXT:    movl 16(%rsi), %edi
+; CHECK-BASELINE-NEXT:    andl %r11d, %edi
 ; CHECK-BASELINE-NEXT:    notl %r11d
 ; CHECK-BASELINE-NEXT:    andl 16(%rdx), %r11d
-; CHECK-BASELINE-NEXT:    orl %eax, %r11d
-; CHECK-BASELINE-NEXT:    movl 12(%rsi), %eax
-; CHECK-BASELINE-NEXT:    andl %r10d, %eax
+; CHECK-BASELINE-NEXT:    orl %edi, %r11d
+; CHECK-BASELINE-NEXT:    movl 12(%rsi), %edi
+; CHECK-BASELINE-NEXT:    andl %r10d, %edi
 ; CHECK-BASELINE-NEXT:    notl %r10d
 ; CHECK-BASELINE-NEXT:    andl 12(%rdx), %r10d
-; CHECK-BASELINE-NEXT:    orl %eax, %r10d
-; CHECK-BASELINE-NEXT:    movl 8(%rsi), %eax
-; CHECK-BASELINE-NEXT:    andl %r9d, %eax
+; CHECK-BASELINE-NEXT:    orl %edi, %r10d
+; CHECK-BASELINE-NEXT:    movl 8(%rsi), %edi
+; CHECK-BASELINE-NEXT:    andl %r9d, %edi
 ; CHECK-BASELINE-NEXT:    notl %r9d
 ; CHECK-BASELINE-NEXT:    andl 8(%rdx), %r9d
-; CHECK-BASELINE-NEXT:    orl %eax, %r9d
-; CHECK-BASELINE-NEXT:    movl 4(%rsi), %eax
-; CHECK-BASELINE-NEXT:    andl %r8d, %eax
+; CHECK-BASELINE-NEXT:    orl %edi, %r9d
+; CHECK-BASELINE-NEXT:    movl 4(%rsi), %edi
+; CHECK-BASELINE-NEXT:    andl %r8d, %edi
 ; CHECK-BASELINE-NEXT:    notl %r8d
 ; CHECK-BASELINE-NEXT:    andl 4(%rdx), %r8d
-; CHECK-BASELINE-NEXT:    orl %eax, %r8d
-; CHECK-BASELINE-NEXT:    movl (%rcx), %eax
-; CHECK-BASELINE-NEXT:    movl (%rsi), %ecx
-; CHECK-BASELINE-NEXT:    andl %eax, %ecx
-; CHECK-BASELINE-NEXT:    notl %eax
-; CHECK-BASELINE-NEXT:    andl (%rdx), %eax
-; CHECK-BASELINE-NEXT:    orl %ecx, %eax
-; CHECK-BASELINE-NEXT:    movl %ebp, 28(%rdi)
-; CHECK-BASELINE-NEXT:    movl %ebx, 24(%rdi)
-; CHECK-BASELINE-NEXT:    movl %r15d, 20(%rdi)
-; CHECK-BASELINE-NEXT:    movl %r11d, 16(%rdi)
-; CHECK-BASELINE-NEXT:    movl %r10d, 12(%rdi)
-; CHECK-BASELINE-NEXT:    movl %r9d, 8(%rdi)
-; CHECK-BASELINE-NEXT:    movl %r8d, 4(%rdi)
-; CHECK-BASELINE-NEXT:    movl %eax, (%rdi)
-; CHECK-BASELINE-NEXT:    movq %rdi, %rax
+; CHECK-BASELINE-NEXT:    orl %edi, %r8d
+; CHECK-BASELINE-NEXT:    movl (%rcx), %ecx
+; CHECK-BASELINE-NEXT:    movl (%rsi), %esi
+; CHECK-BASELINE-NEXT:    andl %ecx, %esi
+; CHECK-BASELINE-NEXT:    notl %ecx
+; CHECK-BASELINE-NEXT:    andl (%rdx), %ecx
+; CHECK-BASELINE-NEXT:    orl %esi, %ecx
+; CHECK-BASELINE-NEXT:    movl %ebp, 28(%rax)
+; CHECK-BASELINE-NEXT:    movl %ebx, 24(%rax)
+; CHECK-BASELINE-NEXT:    movl %r15d, 20(%rax)
+; CHECK-BASELINE-NEXT:    movl %r11d, 16(%rax)
+; CHECK-BASELINE-NEXT:    movl %r10d, 12(%rax)
+; CHECK-BASELINE-NEXT:    movl %r9d, 8(%rax)
+; CHECK-BASELINE-NEXT:    movl %r8d, 4(%rax)
+; CHECK-BASELINE-NEXT:    movl %ecx, (%rax)
 ; CHECK-BASELINE-NEXT:    popq %rbx
 ; CHECK-BASELINE-NEXT:    popq %r14
 ; CHECK-BASELINE-NEXT:    popq %r15
@@ -2356,6 +2362,7 @@ define <8 x i32> @out_v8i32(<8 x i32> *%
 ; CHECK-SSE1-NEXT:    pushq %r15
 ; CHECK-SSE1-NEXT:    pushq %r14
 ; CHECK-SSE1-NEXT:    pushq %rbx
+; CHECK-SSE1-NEXT:    movq %rdi, %rax
 ; CHECK-SSE1-NEXT:    movl 4(%rcx), %r8d
 ; CHECK-SSE1-NEXT:    movl 8(%rcx), %r9d
 ; CHECK-SSE1-NEXT:    movl 12(%rcx), %r10d
@@ -2368,51 +2375,50 @@ define <8 x i32> @out_v8i32(<8 x i32> *%
 ; CHECK-SSE1-NEXT:    notl %ebp
 ; CHECK-SSE1-NEXT:    andl 28(%rdx), %ebp
 ; CHECK-SSE1-NEXT:    orl %r14d, %ebp
-; CHECK-SSE1-NEXT:    movl 24(%rsi), %eax
-; CHECK-SSE1-NEXT:    andl %ebx, %eax
+; CHECK-SSE1-NEXT:    movl 24(%rsi), %edi
+; CHECK-SSE1-NEXT:    andl %ebx, %edi
 ; CHECK-SSE1-NEXT:    notl %ebx
 ; CHECK-SSE1-NEXT:    andl 24(%rdx), %ebx
-; CHECK-SSE1-NEXT:    orl %eax, %ebx
-; CHECK-SSE1-NEXT:    movl 20(%rsi), %eax
-; CHECK-SSE1-NEXT:    andl %r15d, %eax
+; CHECK-SSE1-NEXT:    orl %edi, %ebx
+; CHECK-SSE1-NEXT:    movl 20(%rsi), %edi
+; CHECK-SSE1-NEXT:    andl %r15d, %edi
 ; CHECK-SSE1-NEXT:    notl %r15d
 ; CHECK-SSE1-NEXT:    andl 20(%rdx), %r15d
-; CHECK-SSE1-NEXT:    orl %eax, %r15d
-; CHECK-SSE1-NEXT:    movl 16(%rsi), %eax
-; CHECK-SSE1-NEXT:    andl %r11d, %eax
+; CHECK-SSE1-NEXT:    orl %edi, %r15d
+; CHECK-SSE1-NEXT:    movl 16(%rsi), %edi
+; CHECK-SSE1-NEXT:    andl %r11d, %edi
 ; CHECK-SSE1-NEXT:    notl %r11d
 ; CHECK-SSE1-NEXT:    andl 16(%rdx), %r11d
-; CHECK-SSE1-NEXT:    orl %eax, %r11d
-; CHECK-SSE1-NEXT:    movl 12(%rsi), %eax
-; CHECK-SSE1-NEXT:    andl %r10d, %eax
+; CHECK-SSE1-NEXT:    orl %edi, %r11d
+; CHECK-SSE1-NEXT:    movl 12(%rsi), %edi
+; CHECK-SSE1-NEXT:    andl %r10d, %edi
 ; CHECK-SSE1-NEXT:    notl %r10d
 ; CHECK-SSE1-NEXT:    andl 12(%rdx), %r10d
-; CHECK-SSE1-NEXT:    orl %eax, %r10d
-; CHECK-SSE1-NEXT:    movl 8(%rsi), %eax
-; CHECK-SSE1-NEXT:    andl %r9d, %eax
+; CHECK-SSE1-NEXT:    orl %edi, %r10d
+; CHECK-SSE1-NEXT:    movl 8(%rsi), %edi
+; CHECK-SSE1-NEXT:    andl %r9d, %edi
 ; CHECK-SSE1-NEXT:    notl %r9d
 ; CHECK-SSE1-NEXT:    andl 8(%rdx), %r9d
-; CHECK-SSE1-NEXT:    orl %eax, %r9d
-; CHECK-SSE1-NEXT:    movl 4(%rsi), %eax
-; CHECK-SSE1-NEXT:    andl %r8d, %eax
+; CHECK-SSE1-NEXT:    orl %edi, %r9d
+; CHECK-SSE1-NEXT:    movl 4(%rsi), %edi
+; CHECK-SSE1-NEXT:    andl %r8d, %edi
 ; CHECK-SSE1-NEXT:    notl %r8d
 ; CHECK-SSE1-NEXT:    andl 4(%rdx), %r8d
-; CHECK-SSE1-NEXT:    orl %eax, %r8d
-; CHECK-SSE1-NEXT:    movl (%rcx), %eax
-; CHECK-SSE1-NEXT:    movl (%rsi), %ecx
-; CHECK-SSE1-NEXT:    andl %eax, %ecx
-; CHECK-SSE1-NEXT:    notl %eax
-; CHECK-SSE1-NEXT:    andl (%rdx), %eax
-; CHECK-SSE1-NEXT:    orl %ecx, %eax
-; CHECK-SSE1-NEXT:    movl %ebp, 28(%rdi)
-; CHECK-SSE1-NEXT:    movl %ebx, 24(%rdi)
-; CHECK-SSE1-NEXT:    movl %r15d, 20(%rdi)
-; CHECK-SSE1-NEXT:    movl %r11d, 16(%rdi)
-; CHECK-SSE1-NEXT:    movl %r10d, 12(%rdi)
-; CHECK-SSE1-NEXT:    movl %r9d, 8(%rdi)
-; CHECK-SSE1-NEXT:    movl %r8d, 4(%rdi)
-; CHECK-SSE1-NEXT:    movl %eax, (%rdi)
-; CHECK-SSE1-NEXT:    movq %rdi, %rax
+; CHECK-SSE1-NEXT:    orl %edi, %r8d
+; CHECK-SSE1-NEXT:    movl (%rcx), %ecx
+; CHECK-SSE1-NEXT:    movl (%rsi), %esi
+; CHECK-SSE1-NEXT:    andl %ecx, %esi
+; CHECK-SSE1-NEXT:    notl %ecx
+; CHECK-SSE1-NEXT:    andl (%rdx), %ecx
+; CHECK-SSE1-NEXT:    orl %esi, %ecx
+; CHECK-SSE1-NEXT:    movl %ebp, 28(%rax)
+; CHECK-SSE1-NEXT:    movl %ebx, 24(%rax)
+; CHECK-SSE1-NEXT:    movl %r15d, 20(%rax)
+; CHECK-SSE1-NEXT:    movl %r11d, 16(%rax)
+; CHECK-SSE1-NEXT:    movl %r10d, 12(%rax)
+; CHECK-SSE1-NEXT:    movl %r9d, 8(%rax)
+; CHECK-SSE1-NEXT:    movl %r8d, 4(%rax)
+; CHECK-SSE1-NEXT:    movl %ecx, (%rax)
 ; CHECK-SSE1-NEXT:    popq %rbx
 ; CHECK-SSE1-NEXT:    popq %r14
 ; CHECK-SSE1-NEXT:    popq %r15
@@ -2453,70 +2459,70 @@ define <4 x i64> @out_v4i64(<4 x i64> *%
 ; CHECK-BASELINE-LABEL: out_v4i64:
 ; CHECK-BASELINE:       # %bb.0:
 ; CHECK-BASELINE-NEXT:    pushq %rbx
+; CHECK-BASELINE-NEXT:    movq %rdi, %rax
 ; CHECK-BASELINE-NEXT:    movq (%rcx), %r8
 ; CHECK-BASELINE-NEXT:    movq 8(%rcx), %r9
-; CHECK-BASELINE-NEXT:    movq 16(%rcx), %rax
+; CHECK-BASELINE-NEXT:    movq 16(%rcx), %rdi
 ; CHECK-BASELINE-NEXT:    movq 24(%rcx), %rcx
 ; CHECK-BASELINE-NEXT:    movq 24(%rsi), %r10
 ; CHECK-BASELINE-NEXT:    andq %rcx, %r10
 ; CHECK-BASELINE-NEXT:    movq 16(%rsi), %r11
-; CHECK-BASELINE-NEXT:    andq %rax, %r11
+; CHECK-BASELINE-NEXT:    andq %rdi, %r11
 ; CHECK-BASELINE-NEXT:    movq 8(%rsi), %rbx
 ; CHECK-BASELINE-NEXT:    andq %r9, %rbx
 ; CHECK-BASELINE-NEXT:    movq (%rsi), %rsi
 ; CHECK-BASELINE-NEXT:    andq %r8, %rsi
 ; CHECK-BASELINE-NEXT:    notq %r8
 ; CHECK-BASELINE-NEXT:    notq %r9
-; CHECK-BASELINE-NEXT:    notq %rax
+; CHECK-BASELINE-NEXT:    notq %rdi
 ; CHECK-BASELINE-NEXT:    notq %rcx
 ; CHECK-BASELINE-NEXT:    andq 24(%rdx), %rcx
 ; CHECK-BASELINE-NEXT:    orq %r10, %rcx
-; CHECK-BASELINE-NEXT:    andq 16(%rdx), %rax
-; CHECK-BASELINE-NEXT:    orq %r11, %rax
+; CHECK-BASELINE-NEXT:    andq 16(%rdx), %rdi
+; CHECK-BASELINE-NEXT:    orq %r11, %rdi
 ; CHECK-BASELINE-NEXT:    andq 8(%rdx), %r9
 ; CHECK-BASELINE-NEXT:    orq %rbx, %r9
 ; CHECK-BASELINE-NEXT:    andq (%rdx), %r8
 ; CHECK-BASELINE-NEXT:    orq %rsi, %r8
-; CHECK-BASELINE-NEXT:    movq %rcx, 24(%rdi)
-; CHECK-BASELINE-NEXT:    movq %rax, 16(%rdi)
-; CHECK-BASELINE-NEXT:    movq %r9, 8(%rdi)
-; CHECK-BASELINE-NEXT:    movq %r8, (%rdi)
-; CHECK-BASELINE-NEXT:    movq %rdi, %rax
+; CHECK-BASELINE-NEXT:    movq %rcx, 24(%rax)
+; CHECK-BASELINE-NEXT:    movq %rdi, 16(%rax)
+; CHECK-BASELINE-NEXT:    movq %r9, 8(%rax)
+; CHECK-BASELINE-NEXT:    movq %r8, (%rax)
 ; CHECK-BASELINE-NEXT:    popq %rbx
 ; CHECK-BASELINE-NEXT:    retq
 ;
 ; CHECK-SSE1-LABEL: out_v4i64:
 ; CHECK-SSE1:       # %bb.0:
 ; CHECK-SSE1-NEXT:    pushq %rbx
+; CHECK-SSE1-NEXT:    movq %rdi, %rax
 ; CHECK-SSE1-NEXT:    movq (%rcx), %r8
 ; CHECK-SSE1-NEXT:    movq 8(%rcx), %r9
-; CHECK-SSE1-NEXT:    movq 16(%rcx), %rax
+; CHECK-SSE1-NEXT:    movq 16(%rcx), %rdi
 ; CHECK-SSE1-NEXT:    movq 24(%rcx), %rcx
 ; CHECK-SSE1-NEXT:    movq 24(%rsi), %r10
 ; CHECK-SSE1-NEXT:    andq %rcx, %r10
 ; CHECK-SSE1-NEXT:    movq 16(%rsi), %r11
-; CHECK-SSE1-NEXT:    andq %rax, %r11
+; CHECK-SSE1-NEXT:    andq %rdi, %r11
 ; CHECK-SSE1-NEXT:    movq 8(%rsi), %rbx
 ; CHECK-SSE1-NEXT:    andq %r9, %rbx
 ; CHECK-SSE1-NEXT:    movq (%rsi), %rsi
 ; CHECK-SSE1-NEXT:    andq %r8, %rsi
 ; CHECK-SSE1-NEXT:    notq %r8
 ; CHECK-SSE1-NEXT:    notq %r9
-; CHECK-SSE1-NEXT:    notq %rax
+; CHECK-SSE1-NEXT:    notq %rdi
 ; CHECK-SSE1-NEXT:    notq %rcx
 ; CHECK-SSE1-NEXT:    andq 24(%rdx), %rcx
 ; CHECK-SSE1-NEXT:    orq %r10, %rcx
-; CHECK-SSE1-NEXT:    andq 16(%rdx), %rax
-; CHECK-SSE1-NEXT:    orq %r11, %rax
+; CHECK-SSE1-NEXT:    andq 16(%rdx), %rdi
+; CHECK-SSE1-NEXT:    orq %r11, %rdi
 ; CHECK-SSE1-NEXT:    andq 8(%rdx), %r9
 ; CHECK-SSE1-NEXT:    orq %rbx, %r9
 ; CHECK-SSE1-NEXT:    andq (%rdx), %r8
 ; CHECK-SSE1-NEXT:    orq %rsi, %r8
-; CHECK-SSE1-NEXT:    movq %rcx, 24(%rdi)
-; CHECK-SSE1-NEXT:    movq %rax, 16(%rdi)
-; CHECK-SSE1-NEXT:    movq %r9, 8(%rdi)
-; CHECK-SSE1-NEXT:    movq %r8, (%rdi)
-; CHECK-SSE1-NEXT:    movq %rdi, %rax
+; CHECK-SSE1-NEXT:    movq %rcx, 24(%rax)
+; CHECK-SSE1-NEXT:    movq %rdi, 16(%rax)
+; CHECK-SSE1-NEXT:    movq %r9, 8(%rax)
+; CHECK-SSE1-NEXT:    movq %r8, (%rax)
 ; CHECK-SSE1-NEXT:    popq %rbx
 ; CHECK-SSE1-NEXT:    retq
 ;
@@ -2561,10 +2567,11 @@ define <4 x i64> @out_v4i64(<4 x i64> *%
 define <1 x i8> @in_v1i8(<1 x i8> %x, <1 x i8> %y, <1 x i8> %mask) nounwind {
 ; CHECK-LABEL: in_v1i8:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    xorl %esi, %edi
-; CHECK-NEXT:    andl %edx, %edi
-; CHECK-NEXT:    xorl %esi, %edi
 ; CHECK-NEXT:    movl %edi, %eax
+; CHECK-NEXT:    xorl %esi, %eax
+; CHECK-NEXT:    andl %edx, %eax
+; CHECK-NEXT:    xorl %esi, %eax
+; CHECK-NEXT:    # kill: def $al killed $al killed $eax
 ; CHECK-NEXT:    retq
   %n0 = xor <1 x i8> %x, %y
   %n1 = and <1 x i8> %n0, %mask
@@ -2579,25 +2586,27 @@ define <1 x i8> @in_v1i8(<1 x i8> %x, <1
 define <2 x i8> @in_v2i8(<2 x i8> %x, <2 x i8> %y, <2 x i8> %mask) nounwind {
 ; CHECK-BASELINE-LABEL: in_v2i8:
 ; CHECK-BASELINE:       # %bb.0:
+; CHECK-BASELINE-NEXT:    movl %edi, %eax
 ; CHECK-BASELINE-NEXT:    xorl %ecx, %esi
-; CHECK-BASELINE-NEXT:    xorl %edx, %edi
-; CHECK-BASELINE-NEXT:    andl %r8d, %edi
+; CHECK-BASELINE-NEXT:    xorl %edx, %eax
+; CHECK-BASELINE-NEXT:    andl %r8d, %eax
 ; CHECK-BASELINE-NEXT:    andl %r9d, %esi
 ; CHECK-BASELINE-NEXT:    xorl %ecx, %esi
-; CHECK-BASELINE-NEXT:    xorl %edx, %edi
-; CHECK-BASELINE-NEXT:    movl %edi, %eax
+; CHECK-BASELINE-NEXT:    xorl %edx, %eax
+; CHECK-BASELINE-NEXT:    # kill: def $al killed $al killed $eax
 ; CHECK-BASELINE-NEXT:    movl %esi, %edx
 ; CHECK-BASELINE-NEXT:    retq
 ;
 ; CHECK-SSE1-LABEL: in_v2i8:
 ; CHECK-SSE1:       # %bb.0:
+; CHECK-SSE1-NEXT:    movl %edi, %eax
 ; CHECK-SSE1-NEXT:    xorl %ecx, %esi
-; CHECK-SSE1-NEXT:    xorl %edx, %edi
-; CHECK-SSE1-NEXT:    andl %r8d, %edi
+; CHECK-SSE1-NEXT:    xorl %edx, %eax
+; CHECK-SSE1-NEXT:    andl %r8d, %eax
 ; CHECK-SSE1-NEXT:    andl %r9d, %esi
 ; CHECK-SSE1-NEXT:    xorl %ecx, %esi
-; CHECK-SSE1-NEXT:    xorl %edx, %edi
-; CHECK-SSE1-NEXT:    movl %edi, %eax
+; CHECK-SSE1-NEXT:    xorl %edx, %eax
+; CHECK-SSE1-NEXT:    # kill: def $al killed $al killed $eax
 ; CHECK-SSE1-NEXT:    movl %esi, %edx
 ; CHECK-SSE1-NEXT:    retq
 ;
@@ -2621,10 +2630,11 @@ define <2 x i8> @in_v2i8(<2 x i8> %x, <2
 define <1 x i16> @in_v1i16(<1 x i16> %x, <1 x i16> %y, <1 x i16> %mask) nounwind {
 ; CHECK-LABEL: in_v1i16:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    xorl %esi, %edi
-; CHECK-NEXT:    andl %edx, %edi
-; CHECK-NEXT:    xorl %esi, %edi
 ; CHECK-NEXT:    movl %edi, %eax
+; CHECK-NEXT:    xorl %esi, %eax
+; CHECK-NEXT:    andl %edx, %eax
+; CHECK-NEXT:    xorl %esi, %eax
+; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
 ; CHECK-NEXT:    retq
   %n0 = xor <1 x i16> %x, %y
   %n1 = and <1 x i16> %n0, %mask
@@ -2639,50 +2649,50 @@ define <1 x i16> @in_v1i16(<1 x i16> %x,
 define <4 x i8> @in_v4i8(<4 x i8> %x, <4 x i8> %y, <4 x i8> %mask) nounwind {
 ; CHECK-BASELINE-LABEL: in_v4i8:
 ; CHECK-BASELINE:       # %bb.0:
+; CHECK-BASELINE-NEXT:    movq %rdi, %rax
 ; CHECK-BASELINE-NEXT:    xorl %r9d, %esi
+; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %dil
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r10b
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r11b
-; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %al
-; CHECK-BASELINE-NEXT:    xorb %al, %dl
-; CHECK-BASELINE-NEXT:    xorb %r11b, %cl
-; CHECK-BASELINE-NEXT:    xorb %r10b, %r8b
+; CHECK-BASELINE-NEXT:    xorb %r11b, %dl
+; CHECK-BASELINE-NEXT:    xorb %r10b, %cl
+; CHECK-BASELINE-NEXT:    xorb %dil, %r8b
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r8b
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %cl
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %dl
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %sil
 ; CHECK-BASELINE-NEXT:    xorb %r9b, %sil
-; CHECK-BASELINE-NEXT:    xorb %al, %dl
-; CHECK-BASELINE-NEXT:    xorb %r11b, %cl
-; CHECK-BASELINE-NEXT:    xorb %r10b, %r8b
-; CHECK-BASELINE-NEXT:    movb %r8b, 3(%rdi)
-; CHECK-BASELINE-NEXT:    movb %cl, 2(%rdi)
-; CHECK-BASELINE-NEXT:    movb %dl, 1(%rdi)
-; CHECK-BASELINE-NEXT:    movb %sil, (%rdi)
-; CHECK-BASELINE-NEXT:    movq %rdi, %rax
+; CHECK-BASELINE-NEXT:    xorb %r11b, %dl
+; CHECK-BASELINE-NEXT:    xorb %r10b, %cl
+; CHECK-BASELINE-NEXT:    xorb %dil, %r8b
+; CHECK-BASELINE-NEXT:    movb %r8b, 3(%rax)
+; CHECK-BASELINE-NEXT:    movb %cl, 2(%rax)
+; CHECK-BASELINE-NEXT:    movb %dl, 1(%rax)
+; CHECK-BASELINE-NEXT:    movb %sil, (%rax)
 ; CHECK-BASELINE-NEXT:    retq
 ;
 ; CHECK-SSE1-LABEL: in_v4i8:
 ; CHECK-SSE1:       # %bb.0:
+; CHECK-SSE1-NEXT:    movq %rdi, %rax
 ; CHECK-SSE1-NEXT:    xorl %r9d, %esi
+; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %dil
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r10b
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r11b
-; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %al
-; CHECK-SSE1-NEXT:    xorb %al, %dl
-; CHECK-SSE1-NEXT:    xorb %r11b, %cl
-; CHECK-SSE1-NEXT:    xorb %r10b, %r8b
+; CHECK-SSE1-NEXT:    xorb %r11b, %dl
+; CHECK-SSE1-NEXT:    xorb %r10b, %cl
+; CHECK-SSE1-NEXT:    xorb %dil, %r8b
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r8b
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %cl
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %dl
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %sil
 ; CHECK-SSE1-NEXT:    xorb %r9b, %sil
-; CHECK-SSE1-NEXT:    xorb %al, %dl
-; CHECK-SSE1-NEXT:    xorb %r11b, %cl
-; CHECK-SSE1-NEXT:    xorb %r10b, %r8b
-; CHECK-SSE1-NEXT:    movb %r8b, 3(%rdi)
-; CHECK-SSE1-NEXT:    movb %cl, 2(%rdi)
-; CHECK-SSE1-NEXT:    movb %dl, 1(%rdi)
-; CHECK-SSE1-NEXT:    movb %sil, (%rdi)
-; CHECK-SSE1-NEXT:    movq %rdi, %rax
+; CHECK-SSE1-NEXT:    xorb %r11b, %dl
+; CHECK-SSE1-NEXT:    xorb %r10b, %cl
+; CHECK-SSE1-NEXT:    xorb %dil, %r8b
+; CHECK-SSE1-NEXT:    movb %r8b, 3(%rax)
+; CHECK-SSE1-NEXT:    movb %cl, 2(%rax)
+; CHECK-SSE1-NEXT:    movb %dl, 1(%rax)
+; CHECK-SSE1-NEXT:    movb %sil, (%rax)
 ; CHECK-SSE1-NEXT:    retq
 ;
 ; CHECK-SSE2-LABEL: in_v4i8:
@@ -2705,25 +2715,27 @@ define <4 x i8> @in_v4i8(<4 x i8> %x, <4
 define <2 x i16> @in_v2i16(<2 x i16> %x, <2 x i16> %y, <2 x i16> %mask) nounwind {
 ; CHECK-BASELINE-LABEL: in_v2i16:
 ; CHECK-BASELINE:       # %bb.0:
+; CHECK-BASELINE-NEXT:    movl %edi, %eax
 ; CHECK-BASELINE-NEXT:    xorl %ecx, %esi
-; CHECK-BASELINE-NEXT:    xorl %edx, %edi
-; CHECK-BASELINE-NEXT:    andl %r8d, %edi
+; CHECK-BASELINE-NEXT:    xorl %edx, %eax
+; CHECK-BASELINE-NEXT:    andl %r8d, %eax
 ; CHECK-BASELINE-NEXT:    andl %r9d, %esi
 ; CHECK-BASELINE-NEXT:    xorl %ecx, %esi
-; CHECK-BASELINE-NEXT:    xorl %edx, %edi
-; CHECK-BASELINE-NEXT:    movl %edi, %eax
+; CHECK-BASELINE-NEXT:    xorl %edx, %eax
+; CHECK-BASELINE-NEXT:    # kill: def $ax killed $ax killed $eax
 ; CHECK-BASELINE-NEXT:    movl %esi, %edx
 ; CHECK-BASELINE-NEXT:    retq
 ;
 ; CHECK-SSE1-LABEL: in_v2i16:
 ; CHECK-SSE1:       # %bb.0:
+; CHECK-SSE1-NEXT:    movl %edi, %eax
 ; CHECK-SSE1-NEXT:    xorl %ecx, %esi
-; CHECK-SSE1-NEXT:    xorl %edx, %edi
-; CHECK-SSE1-NEXT:    andl %r8d, %edi
+; CHECK-SSE1-NEXT:    xorl %edx, %eax
+; CHECK-SSE1-NEXT:    andl %r8d, %eax
 ; CHECK-SSE1-NEXT:    andl %r9d, %esi
 ; CHECK-SSE1-NEXT:    xorl %ecx, %esi
-; CHECK-SSE1-NEXT:    xorl %edx, %edi
-; CHECK-SSE1-NEXT:    movl %edi, %eax
+; CHECK-SSE1-NEXT:    xorl %edx, %eax
+; CHECK-SSE1-NEXT:    # kill: def $ax killed $ax killed $eax
 ; CHECK-SSE1-NEXT:    movl %esi, %edx
 ; CHECK-SSE1-NEXT:    retq
 ;
@@ -2747,10 +2759,10 @@ define <2 x i16> @in_v2i16(<2 x i16> %x,
 define <1 x i32> @in_v1i32(<1 x i32> %x, <1 x i32> %y, <1 x i32> %mask) nounwind {
 ; CHECK-LABEL: in_v1i32:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    xorl %esi, %edi
-; CHECK-NEXT:    andl %edx, %edi
-; CHECK-NEXT:    xorl %esi, %edi
 ; CHECK-NEXT:    movl %edi, %eax
+; CHECK-NEXT:    xorl %esi, %eax
+; CHECK-NEXT:    andl %edx, %eax
+; CHECK-NEXT:    xorl %esi, %eax
 ; CHECK-NEXT:    retq
   %n0 = xor <1 x i32> %x, %y
   %n1 = and <1 x i32> %n0, %mask
@@ -2772,47 +2784,46 @@ define <8 x i8> @in_v8i8(<8 x i8> %x, <8
 ; CHECK-BASELINE-NEXT:    pushq %r12
 ; CHECK-BASELINE-NEXT:    pushq %rbx
 ; CHECK-BASELINE-NEXT:    movl %ecx, %r10d
-; CHECK-BASELINE-NEXT:    movl %edx, %r11d
-; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %bl
+; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r11b
+; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %bpl
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r14b
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r15b
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r12b
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r13b
-; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %bpl
-; CHECK-BASELINE-NEXT:    xorb %bpl, %sil
-; CHECK-BASELINE-NEXT:    xorb %r13b, %r11b
-; CHECK-BASELINE-NEXT:    xorb %r12b, %r10b
-; CHECK-BASELINE-NEXT:    xorb %r15b, %r8b
-; CHECK-BASELINE-NEXT:    xorb %r14b, %r9b
-; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %dl
-; CHECK-BASELINE-NEXT:    xorb {{[0-9]+}}(%rsp), %dl
+; CHECK-BASELINE-NEXT:    xorb %r13b, %sil
+; CHECK-BASELINE-NEXT:    xorb %r12b, %dl
+; CHECK-BASELINE-NEXT:    xorb %r15b, %r10b
+; CHECK-BASELINE-NEXT:    xorb %r14b, %r8b
+; CHECK-BASELINE-NEXT:    xorb %bpl, %r9b
+; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %bl
+; CHECK-BASELINE-NEXT:    xorb {{[0-9]+}}(%rsp), %bl
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %cl
 ; CHECK-BASELINE-NEXT:    xorb {{[0-9]+}}(%rsp), %cl
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %al
-; CHECK-BASELINE-NEXT:    xorb %bl, %al
+; CHECK-BASELINE-NEXT:    xorb %r11b, %al
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r9b
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r8b
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r10b
-; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r11b
+; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %dl
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %sil
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %al
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %cl
-; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %dl
-; CHECK-BASELINE-NEXT:    xorb %bpl, %sil
-; CHECK-BASELINE-NEXT:    xorb %r13b, %r11b
-; CHECK-BASELINE-NEXT:    xorb %r12b, %r10b
-; CHECK-BASELINE-NEXT:    xorb %r15b, %r8b
-; CHECK-BASELINE-NEXT:    xorb %r14b, %r9b
-; CHECK-BASELINE-NEXT:    xorb {{[0-9]+}}(%rsp), %dl
+; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %bl
+; CHECK-BASELINE-NEXT:    xorb %r13b, %sil
+; CHECK-BASELINE-NEXT:    xorb %r12b, %dl
+; CHECK-BASELINE-NEXT:    xorb %r15b, %r10b
+; CHECK-BASELINE-NEXT:    xorb %r14b, %r8b
+; CHECK-BASELINE-NEXT:    xorb %bpl, %r9b
+; CHECK-BASELINE-NEXT:    xorb {{[0-9]+}}(%rsp), %bl
 ; CHECK-BASELINE-NEXT:    xorb {{[0-9]+}}(%rsp), %cl
-; CHECK-BASELINE-NEXT:    xorb %bl, %al
+; CHECK-BASELINE-NEXT:    xorb %r11b, %al
 ; CHECK-BASELINE-NEXT:    movb %al, 7(%rdi)
 ; CHECK-BASELINE-NEXT:    movb %cl, 6(%rdi)
-; CHECK-BASELINE-NEXT:    movb %dl, 5(%rdi)
+; CHECK-BASELINE-NEXT:    movb %bl, 5(%rdi)
 ; CHECK-BASELINE-NEXT:    movb %r9b, 4(%rdi)
 ; CHECK-BASELINE-NEXT:    movb %r8b, 3(%rdi)
 ; CHECK-BASELINE-NEXT:    movb %r10b, 2(%rdi)
-; CHECK-BASELINE-NEXT:    movb %r11b, 1(%rdi)
+; CHECK-BASELINE-NEXT:    movb %dl, 1(%rdi)
 ; CHECK-BASELINE-NEXT:    movb %sil, (%rdi)
 ; CHECK-BASELINE-NEXT:    movq %rdi, %rax
 ; CHECK-BASELINE-NEXT:    popq %rbx
@@ -2832,47 +2843,46 @@ define <8 x i8> @in_v8i8(<8 x i8> %x, <8
 ; CHECK-SSE1-NEXT:    pushq %r12
 ; CHECK-SSE1-NEXT:    pushq %rbx
 ; CHECK-SSE1-NEXT:    movl %ecx, %r10d
-; CHECK-SSE1-NEXT:    movl %edx, %r11d
-; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %bl
+; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r11b
+; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %bpl
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r14b
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r15b
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r12b
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r13b
-; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %bpl
-; CHECK-SSE1-NEXT:    xorb %bpl, %sil
-; CHECK-SSE1-NEXT:    xorb %r13b, %r11b
-; CHECK-SSE1-NEXT:    xorb %r12b, %r10b
-; CHECK-SSE1-NEXT:    xorb %r15b, %r8b
-; CHECK-SSE1-NEXT:    xorb %r14b, %r9b
-; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %dl
-; CHECK-SSE1-NEXT:    xorb {{[0-9]+}}(%rsp), %dl
+; CHECK-SSE1-NEXT:    xorb %r13b, %sil
+; CHECK-SSE1-NEXT:    xorb %r12b, %dl
+; CHECK-SSE1-NEXT:    xorb %r15b, %r10b
+; CHECK-SSE1-NEXT:    xorb %r14b, %r8b
+; CHECK-SSE1-NEXT:    xorb %bpl, %r9b
+; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %bl
+; CHECK-SSE1-NEXT:    xorb {{[0-9]+}}(%rsp), %bl
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %cl
 ; CHECK-SSE1-NEXT:    xorb {{[0-9]+}}(%rsp), %cl
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %al
-; CHECK-SSE1-NEXT:    xorb %bl, %al
+; CHECK-SSE1-NEXT:    xorb %r11b, %al
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r9b
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r8b
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r10b
-; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r11b
+; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %dl
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %sil
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %al
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %cl
-; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %dl
-; CHECK-SSE1-NEXT:    xorb %bpl, %sil
-; CHECK-SSE1-NEXT:    xorb %r13b, %r11b
-; CHECK-SSE1-NEXT:    xorb %r12b, %r10b
-; CHECK-SSE1-NEXT:    xorb %r15b, %r8b
-; CHECK-SSE1-NEXT:    xorb %r14b, %r9b
-; CHECK-SSE1-NEXT:    xorb {{[0-9]+}}(%rsp), %dl
+; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %bl
+; CHECK-SSE1-NEXT:    xorb %r13b, %sil
+; CHECK-SSE1-NEXT:    xorb %r12b, %dl
+; CHECK-SSE1-NEXT:    xorb %r15b, %r10b
+; CHECK-SSE1-NEXT:    xorb %r14b, %r8b
+; CHECK-SSE1-NEXT:    xorb %bpl, %r9b
+; CHECK-SSE1-NEXT:    xorb {{[0-9]+}}(%rsp), %bl
 ; CHECK-SSE1-NEXT:    xorb {{[0-9]+}}(%rsp), %cl
-; CHECK-SSE1-NEXT:    xorb %bl, %al
+; CHECK-SSE1-NEXT:    xorb %r11b, %al
 ; CHECK-SSE1-NEXT:    movb %al, 7(%rdi)
 ; CHECK-SSE1-NEXT:    movb %cl, 6(%rdi)
-; CHECK-SSE1-NEXT:    movb %dl, 5(%rdi)
+; CHECK-SSE1-NEXT:    movb %bl, 5(%rdi)
 ; CHECK-SSE1-NEXT:    movb %r9b, 4(%rdi)
 ; CHECK-SSE1-NEXT:    movb %r8b, 3(%rdi)
 ; CHECK-SSE1-NEXT:    movb %r10b, 2(%rdi)
-; CHECK-SSE1-NEXT:    movb %r11b, 1(%rdi)
+; CHECK-SSE1-NEXT:    movb %dl, 1(%rdi)
 ; CHECK-SSE1-NEXT:    movb %sil, (%rdi)
 ; CHECK-SSE1-NEXT:    movq %rdi, %rax
 ; CHECK-SSE1-NEXT:    popq %rbx
@@ -2903,50 +2913,50 @@ define <8 x i8> @in_v8i8(<8 x i8> %x, <8
 define <4 x i16> @in_v4i16(<4 x i16> %x, <4 x i16> %y, <4 x i16> %mask) nounwind {
 ; CHECK-BASELINE-LABEL: in_v4i16:
 ; CHECK-BASELINE:       # %bb.0:
+; CHECK-BASELINE-NEXT:    movq %rdi, %rax
 ; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %r10d
 ; CHECK-BASELINE-NEXT:    xorl %r10d, %r8d
 ; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %r11d
 ; CHECK-BASELINE-NEXT:    xorl %r11d, %ecx
-; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %eax
-; CHECK-BASELINE-NEXT:    xorl %eax, %edx
+; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %edi
+; CHECK-BASELINE-NEXT:    xorl %edi, %edx
 ; CHECK-BASELINE-NEXT:    xorl %r9d, %esi
 ; CHECK-BASELINE-NEXT:    andw {{[0-9]+}}(%rsp), %r8w
 ; CHECK-BASELINE-NEXT:    andw {{[0-9]+}}(%rsp), %cx
 ; CHECK-BASELINE-NEXT:    andw {{[0-9]+}}(%rsp), %dx
 ; CHECK-BASELINE-NEXT:    andw {{[0-9]+}}(%rsp), %si
 ; CHECK-BASELINE-NEXT:    xorl %r9d, %esi
-; CHECK-BASELINE-NEXT:    xorl %eax, %edx
+; CHECK-BASELINE-NEXT:    xorl %edi, %edx
 ; CHECK-BASELINE-NEXT:    xorl %r11d, %ecx
 ; CHECK-BASELINE-NEXT:    xorl %r10d, %r8d
-; CHECK-BASELINE-NEXT:    movw %r8w, 6(%rdi)
-; CHECK-BASELINE-NEXT:    movw %cx, 4(%rdi)
-; CHECK-BASELINE-NEXT:    movw %dx, 2(%rdi)
-; CHECK-BASELINE-NEXT:    movw %si, (%rdi)
-; CHECK-BASELINE-NEXT:    movq %rdi, %rax
+; CHECK-BASELINE-NEXT:    movw %r8w, 6(%rax)
+; CHECK-BASELINE-NEXT:    movw %cx, 4(%rax)
+; CHECK-BASELINE-NEXT:    movw %dx, 2(%rax)
+; CHECK-BASELINE-NEXT:    movw %si, (%rax)
 ; CHECK-BASELINE-NEXT:    retq
 ;
 ; CHECK-SSE1-LABEL: in_v4i16:
 ; CHECK-SSE1:       # %bb.0:
+; CHECK-SSE1-NEXT:    movq %rdi, %rax
 ; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %r10d
 ; CHECK-SSE1-NEXT:    xorl %r10d, %r8d
 ; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %r11d
 ; CHECK-SSE1-NEXT:    xorl %r11d, %ecx
-; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %eax
-; CHECK-SSE1-NEXT:    xorl %eax, %edx
+; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %edi
+; CHECK-SSE1-NEXT:    xorl %edi, %edx
 ; CHECK-SSE1-NEXT:    xorl %r9d, %esi
 ; CHECK-SSE1-NEXT:    andw {{[0-9]+}}(%rsp), %r8w
 ; CHECK-SSE1-NEXT:    andw {{[0-9]+}}(%rsp), %cx
 ; CHECK-SSE1-NEXT:    andw {{[0-9]+}}(%rsp), %dx
 ; CHECK-SSE1-NEXT:    andw {{[0-9]+}}(%rsp), %si
 ; CHECK-SSE1-NEXT:    xorl %r9d, %esi
-; CHECK-SSE1-NEXT:    xorl %eax, %edx
+; CHECK-SSE1-NEXT:    xorl %edi, %edx
 ; CHECK-SSE1-NEXT:    xorl %r11d, %ecx
 ; CHECK-SSE1-NEXT:    xorl %r10d, %r8d
-; CHECK-SSE1-NEXT:    movw %r8w, 6(%rdi)
-; CHECK-SSE1-NEXT:    movw %cx, 4(%rdi)
-; CHECK-SSE1-NEXT:    movw %dx, 2(%rdi)
-; CHECK-SSE1-NEXT:    movw %si, (%rdi)
-; CHECK-SSE1-NEXT:    movq %rdi, %rax
+; CHECK-SSE1-NEXT:    movw %r8w, 6(%rax)
+; CHECK-SSE1-NEXT:    movw %cx, 4(%rax)
+; CHECK-SSE1-NEXT:    movw %dx, 2(%rax)
+; CHECK-SSE1-NEXT:    movw %si, (%rax)
 ; CHECK-SSE1-NEXT:    retq
 ;
 ; CHECK-SSE2-LABEL: in_v4i16:
@@ -2969,25 +2979,25 @@ define <4 x i16> @in_v4i16(<4 x i16> %x,
 define <2 x i32> @in_v2i32(<2 x i32> %x, <2 x i32> %y, <2 x i32> %mask) nounwind {
 ; CHECK-BASELINE-LABEL: in_v2i32:
 ; CHECK-BASELINE:       # %bb.0:
-; CHECK-BASELINE-NEXT:    xorl %edx, %edi
+; CHECK-BASELINE-NEXT:    movl %edi, %eax
+; CHECK-BASELINE-NEXT:    xorl %edx, %eax
 ; CHECK-BASELINE-NEXT:    xorl %ecx, %esi
 ; CHECK-BASELINE-NEXT:    andl %r9d, %esi
-; CHECK-BASELINE-NEXT:    andl %r8d, %edi
-; CHECK-BASELINE-NEXT:    xorl %edx, %edi
+; CHECK-BASELINE-NEXT:    andl %r8d, %eax
+; CHECK-BASELINE-NEXT:    xorl %edx, %eax
 ; CHECK-BASELINE-NEXT:    xorl %ecx, %esi
-; CHECK-BASELINE-NEXT:    movl %edi, %eax
 ; CHECK-BASELINE-NEXT:    movl %esi, %edx
 ; CHECK-BASELINE-NEXT:    retq
 ;
 ; CHECK-SSE1-LABEL: in_v2i32:
 ; CHECK-SSE1:       # %bb.0:
-; CHECK-SSE1-NEXT:    xorl %edx, %edi
+; CHECK-SSE1-NEXT:    movl %edi, %eax
+; CHECK-SSE1-NEXT:    xorl %edx, %eax
 ; CHECK-SSE1-NEXT:    xorl %ecx, %esi
 ; CHECK-SSE1-NEXT:    andl %r9d, %esi
-; CHECK-SSE1-NEXT:    andl %r8d, %edi
-; CHECK-SSE1-NEXT:    xorl %edx, %edi
+; CHECK-SSE1-NEXT:    andl %r8d, %eax
+; CHECK-SSE1-NEXT:    xorl %edx, %eax
 ; CHECK-SSE1-NEXT:    xorl %ecx, %esi
-; CHECK-SSE1-NEXT:    movl %edi, %eax
 ; CHECK-SSE1-NEXT:    movl %esi, %edx
 ; CHECK-SSE1-NEXT:    retq
 ;
@@ -3011,10 +3021,10 @@ define <2 x i32> @in_v2i32(<2 x i32> %x,
 define <1 x i64> @in_v1i64(<1 x i64> %x, <1 x i64> %y, <1 x i64> %mask) nounwind {
 ; CHECK-LABEL: in_v1i64:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    xorq %rsi, %rdi
-; CHECK-NEXT:    andq %rdx, %rdi
-; CHECK-NEXT:    xorq %rsi, %rdi
 ; CHECK-NEXT:    movq %rdi, %rax
+; CHECK-NEXT:    xorq %rsi, %rax
+; CHECK-NEXT:    andq %rdx, %rax
+; CHECK-NEXT:    xorq %rsi, %rax
 ; CHECK-NEXT:    retq
   %n0 = xor <1 x i64> %x, %y
   %n1 = and <1 x i64> %n0, %mask
@@ -3038,24 +3048,26 @@ define <16 x i8> @in_v16i8(<16 x i8> %x,
 ; CHECK-BASELINE-NEXT:    movl %ecx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
 ; CHECK-BASELINE-NEXT:    movl %edx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
 ; CHECK-BASELINE-NEXT:    movl %esi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %cl
+; CHECK-BASELINE-NEXT:    movq %rdi, %rdx
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %sil
+; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %cl
+; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %al
+; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %bpl
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r14b
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r15b
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r12b
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r13b
-; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %bpl
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %bl
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r11b
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r10b
-; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %al
-; CHECK-BASELINE-NEXT:    xorb %al, %r9b
+; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %dil
+; CHECK-BASELINE-NEXT:    xorb %dil, %r9b
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r9b
-; CHECK-BASELINE-NEXT:    xorb %al, %r9b
-; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %dl
-; CHECK-BASELINE-NEXT:    xorb %r10b, %dl
-; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %dl
-; CHECK-BASELINE-NEXT:    xorb %r10b, %dl
+; CHECK-BASELINE-NEXT:    xorb %dil, %r9b
+; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %dil
+; CHECK-BASELINE-NEXT:    xorb %r10b, %dil
+; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %dil
+; CHECK-BASELINE-NEXT:    xorb %r10b, %dil
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r10b
 ; CHECK-BASELINE-NEXT:    xorb %r11b, %r10b
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r10b
@@ -3065,13 +3077,9 @@ define <16 x i8> @in_v16i8(<16 x i8> %x,
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r11b
 ; CHECK-BASELINE-NEXT:    xorb %bl, %r11b
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %bl
-; CHECK-BASELINE-NEXT:    xorb %bpl, %bl
+; CHECK-BASELINE-NEXT:    xorb %r13b, %bl
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %bl
-; CHECK-BASELINE-NEXT:    xorb %bpl, %bl
-; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %bpl
-; CHECK-BASELINE-NEXT:    xorb %r13b, %bpl
-; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %bpl
-; CHECK-BASELINE-NEXT:    xorb %r13b, %bpl
+; CHECK-BASELINE-NEXT:    xorb %r13b, %bl
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r13b
 ; CHECK-BASELINE-NEXT:    xorb %r12b, %r13b
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r13b
@@ -3085,54 +3093,57 @@ define <16 x i8> @in_v16i8(<16 x i8> %x,
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r15b
 ; CHECK-BASELINE-NEXT:    xorb %r14b, %r15b
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %r14b
-; CHECK-BASELINE-NEXT:    xorb %sil, %r14b
+; CHECK-BASELINE-NEXT:    xorb %bpl, %r14b
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r14b
-; CHECK-BASELINE-NEXT:    xorb %sil, %r14b
+; CHECK-BASELINE-NEXT:    xorb %bpl, %r14b
+; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %bpl
+; CHECK-BASELINE-NEXT:    xorb %al, %bpl
+; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %bpl
+; CHECK-BASELINE-NEXT:    xorb %al, %bpl
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %al
 ; CHECK-BASELINE-NEXT:    xorb %cl, %al
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %al
 ; CHECK-BASELINE-NEXT:    xorb %cl, %al
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %cl
-; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %sil
 ; CHECK-BASELINE-NEXT:    xorb %sil, %cl
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %cl
 ; CHECK-BASELINE-NEXT:    xorb %sil, %cl
-; CHECK-BASELINE-NEXT:    movb %cl, 15(%rdi)
-; CHECK-BASELINE-NEXT:    movb %al, 14(%rdi)
-; CHECK-BASELINE-NEXT:    movb %r14b, 13(%rdi)
-; CHECK-BASELINE-NEXT:    movb %r15b, 12(%rdi)
-; CHECK-BASELINE-NEXT:    movb %r12b, 11(%rdi)
-; CHECK-BASELINE-NEXT:    movb %r13b, 10(%rdi)
-; CHECK-BASELINE-NEXT:    movb %bpl, 9(%rdi)
-; CHECK-BASELINE-NEXT:    movb %bl, 8(%rdi)
-; CHECK-BASELINE-NEXT:    movb %r11b, 7(%rdi)
-; CHECK-BASELINE-NEXT:    movb %r10b, 6(%rdi)
-; CHECK-BASELINE-NEXT:    movb %dl, 5(%rdi)
-; CHECK-BASELINE-NEXT:    movb %r9b, 4(%rdi)
+; CHECK-BASELINE-NEXT:    movb %cl, 15(%rdx)
+; CHECK-BASELINE-NEXT:    movb %al, 14(%rdx)
+; CHECK-BASELINE-NEXT:    movb %bpl, 13(%rdx)
+; CHECK-BASELINE-NEXT:    movb %r14b, 12(%rdx)
+; CHECK-BASELINE-NEXT:    movb %r15b, 11(%rdx)
+; CHECK-BASELINE-NEXT:    movb %r12b, 10(%rdx)
+; CHECK-BASELINE-NEXT:    movb %r13b, 9(%rdx)
+; CHECK-BASELINE-NEXT:    movb %bl, 8(%rdx)
+; CHECK-BASELINE-NEXT:    movb %r11b, 7(%rdx)
+; CHECK-BASELINE-NEXT:    movb %r10b, 6(%rdx)
+; CHECK-BASELINE-NEXT:    movb %dil, 5(%rdx)
+; CHECK-BASELINE-NEXT:    movb %r9b, 4(%rdx)
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %al
 ; CHECK-BASELINE-NEXT:    xorb %al, %r8b
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %r8b
 ; CHECK-BASELINE-NEXT:    xorb %al, %r8b
-; CHECK-BASELINE-NEXT:    movb %r8b, 3(%rdi)
+; CHECK-BASELINE-NEXT:    movb %r8b, 3(%rdx)
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %al
 ; CHECK-BASELINE-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %ecx # 4-byte Reload
 ; CHECK-BASELINE-NEXT:    xorb %al, %cl
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %cl
 ; CHECK-BASELINE-NEXT:    xorb %al, %cl
-; CHECK-BASELINE-NEXT:    movb %cl, 2(%rdi)
+; CHECK-BASELINE-NEXT:    movb %cl, 2(%rdx)
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %al
 ; CHECK-BASELINE-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %ecx # 4-byte Reload
 ; CHECK-BASELINE-NEXT:    xorb %al, %cl
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %cl
 ; CHECK-BASELINE-NEXT:    xorb %al, %cl
-; CHECK-BASELINE-NEXT:    movb %cl, 1(%rdi)
+; CHECK-BASELINE-NEXT:    movb %cl, 1(%rdx)
 ; CHECK-BASELINE-NEXT:    movb {{[0-9]+}}(%rsp), %al
 ; CHECK-BASELINE-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %ecx # 4-byte Reload
 ; CHECK-BASELINE-NEXT:    xorb %al, %cl
 ; CHECK-BASELINE-NEXT:    andb {{[0-9]+}}(%rsp), %cl
 ; CHECK-BASELINE-NEXT:    xorb %al, %cl
-; CHECK-BASELINE-NEXT:    movb %cl, (%rdi)
-; CHECK-BASELINE-NEXT:    movq %rdi, %rax
+; CHECK-BASELINE-NEXT:    movb %cl, (%rdx)
+; CHECK-BASELINE-NEXT:    movq %rdx, %rax
 ; CHECK-BASELINE-NEXT:    popq %rbx
 ; CHECK-BASELINE-NEXT:    popq %r12
 ; CHECK-BASELINE-NEXT:    popq %r13
@@ -3152,24 +3163,26 @@ define <16 x i8> @in_v16i8(<16 x i8> %x,
 ; CHECK-SSE1-NEXT:    movl %ecx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
 ; CHECK-SSE1-NEXT:    movl %edx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
 ; CHECK-SSE1-NEXT:    movl %esi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %cl
+; CHECK-SSE1-NEXT:    movq %rdi, %rdx
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %sil
+; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %cl
+; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %al
+; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %bpl
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r14b
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r15b
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r12b
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r13b
-; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %bpl
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %bl
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r11b
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r10b
-; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %al
-; CHECK-SSE1-NEXT:    xorb %al, %r9b
+; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %dil
+; CHECK-SSE1-NEXT:    xorb %dil, %r9b
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r9b
-; CHECK-SSE1-NEXT:    xorb %al, %r9b
-; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %dl
-; CHECK-SSE1-NEXT:    xorb %r10b, %dl
-; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %dl
-; CHECK-SSE1-NEXT:    xorb %r10b, %dl
+; CHECK-SSE1-NEXT:    xorb %dil, %r9b
+; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %dil
+; CHECK-SSE1-NEXT:    xorb %r10b, %dil
+; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %dil
+; CHECK-SSE1-NEXT:    xorb %r10b, %dil
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r10b
 ; CHECK-SSE1-NEXT:    xorb %r11b, %r10b
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r10b
@@ -3179,13 +3192,9 @@ define <16 x i8> @in_v16i8(<16 x i8> %x,
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r11b
 ; CHECK-SSE1-NEXT:    xorb %bl, %r11b
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %bl
-; CHECK-SSE1-NEXT:    xorb %bpl, %bl
+; CHECK-SSE1-NEXT:    xorb %r13b, %bl
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %bl
-; CHECK-SSE1-NEXT:    xorb %bpl, %bl
-; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %bpl
-; CHECK-SSE1-NEXT:    xorb %r13b, %bpl
-; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %bpl
-; CHECK-SSE1-NEXT:    xorb %r13b, %bpl
+; CHECK-SSE1-NEXT:    xorb %r13b, %bl
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r13b
 ; CHECK-SSE1-NEXT:    xorb %r12b, %r13b
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r13b
@@ -3199,54 +3208,57 @@ define <16 x i8> @in_v16i8(<16 x i8> %x,
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r15b
 ; CHECK-SSE1-NEXT:    xorb %r14b, %r15b
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %r14b
-; CHECK-SSE1-NEXT:    xorb %sil, %r14b
+; CHECK-SSE1-NEXT:    xorb %bpl, %r14b
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r14b
-; CHECK-SSE1-NEXT:    xorb %sil, %r14b
+; CHECK-SSE1-NEXT:    xorb %bpl, %r14b
+; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %bpl
+; CHECK-SSE1-NEXT:    xorb %al, %bpl
+; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %bpl
+; CHECK-SSE1-NEXT:    xorb %al, %bpl
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %al
 ; CHECK-SSE1-NEXT:    xorb %cl, %al
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %al
 ; CHECK-SSE1-NEXT:    xorb %cl, %al
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %cl
-; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %sil
 ; CHECK-SSE1-NEXT:    xorb %sil, %cl
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %cl
 ; CHECK-SSE1-NEXT:    xorb %sil, %cl
-; CHECK-SSE1-NEXT:    movb %cl, 15(%rdi)
-; CHECK-SSE1-NEXT:    movb %al, 14(%rdi)
-; CHECK-SSE1-NEXT:    movb %r14b, 13(%rdi)
-; CHECK-SSE1-NEXT:    movb %r15b, 12(%rdi)
-; CHECK-SSE1-NEXT:    movb %r12b, 11(%rdi)
-; CHECK-SSE1-NEXT:    movb %r13b, 10(%rdi)
-; CHECK-SSE1-NEXT:    movb %bpl, 9(%rdi)
-; CHECK-SSE1-NEXT:    movb %bl, 8(%rdi)
-; CHECK-SSE1-NEXT:    movb %r11b, 7(%rdi)
-; CHECK-SSE1-NEXT:    movb %r10b, 6(%rdi)
-; CHECK-SSE1-NEXT:    movb %dl, 5(%rdi)
-; CHECK-SSE1-NEXT:    movb %r9b, 4(%rdi)
+; CHECK-SSE1-NEXT:    movb %cl, 15(%rdx)
+; CHECK-SSE1-NEXT:    movb %al, 14(%rdx)
+; CHECK-SSE1-NEXT:    movb %bpl, 13(%rdx)
+; CHECK-SSE1-NEXT:    movb %r14b, 12(%rdx)
+; CHECK-SSE1-NEXT:    movb %r15b, 11(%rdx)
+; CHECK-SSE1-NEXT:    movb %r12b, 10(%rdx)
+; CHECK-SSE1-NEXT:    movb %r13b, 9(%rdx)
+; CHECK-SSE1-NEXT:    movb %bl, 8(%rdx)
+; CHECK-SSE1-NEXT:    movb %r11b, 7(%rdx)
+; CHECK-SSE1-NEXT:    movb %r10b, 6(%rdx)
+; CHECK-SSE1-NEXT:    movb %dil, 5(%rdx)
+; CHECK-SSE1-NEXT:    movb %r9b, 4(%rdx)
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %al
 ; CHECK-SSE1-NEXT:    xorb %al, %r8b
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %r8b
 ; CHECK-SSE1-NEXT:    xorb %al, %r8b
-; CHECK-SSE1-NEXT:    movb %r8b, 3(%rdi)
+; CHECK-SSE1-NEXT:    movb %r8b, 3(%rdx)
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %al
 ; CHECK-SSE1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %ecx # 4-byte Reload
 ; CHECK-SSE1-NEXT:    xorb %al, %cl
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %cl
 ; CHECK-SSE1-NEXT:    xorb %al, %cl
-; CHECK-SSE1-NEXT:    movb %cl, 2(%rdi)
+; CHECK-SSE1-NEXT:    movb %cl, 2(%rdx)
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %al
 ; CHECK-SSE1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %ecx # 4-byte Reload
 ; CHECK-SSE1-NEXT:    xorb %al, %cl
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %cl
 ; CHECK-SSE1-NEXT:    xorb %al, %cl
-; CHECK-SSE1-NEXT:    movb %cl, 1(%rdi)
+; CHECK-SSE1-NEXT:    movb %cl, 1(%rdx)
 ; CHECK-SSE1-NEXT:    movb {{[0-9]+}}(%rsp), %al
 ; CHECK-SSE1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %ecx # 4-byte Reload
 ; CHECK-SSE1-NEXT:    xorb %al, %cl
 ; CHECK-SSE1-NEXT:    andb {{[0-9]+}}(%rsp), %cl
 ; CHECK-SSE1-NEXT:    xorb %al, %cl
-; CHECK-SSE1-NEXT:    movb %cl, (%rdi)
-; CHECK-SSE1-NEXT:    movq %rdi, %rax
+; CHECK-SSE1-NEXT:    movb %cl, (%rdx)
+; CHECK-SSE1-NEXT:    movq %rdx, %rax
 ; CHECK-SSE1-NEXT:    popq %rbx
 ; CHECK-SSE1-NEXT:    popq %r12
 ; CHECK-SSE1-NEXT:    popq %r13
@@ -3278,12 +3290,13 @@ define <8 x i16> @in_v8i16(<8 x i16> %x,
 ; CHECK-BASELINE-NEXT:    pushq %rbp
 ; CHECK-BASELINE-NEXT:    pushq %r14
 ; CHECK-BASELINE-NEXT:    pushq %rbx
+; CHECK-BASELINE-NEXT:    movq %rdi, %rax
 ; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %r10d
 ; CHECK-BASELINE-NEXT:    xorl %r10d, %r9d
 ; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %r11d
 ; CHECK-BASELINE-NEXT:    xorl %r11d, %r8d
-; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %eax
-; CHECK-BASELINE-NEXT:    xorl %eax, %ecx
+; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %edi
+; CHECK-BASELINE-NEXT:    xorl %edi, %ecx
 ; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %ebx
 ; CHECK-BASELINE-NEXT:    xorl %ebx, %esi
 ; CHECK-BASELINE-NEXT:    andw {{[0-9]+}}(%rsp), %si
@@ -3294,8 +3307,8 @@ define <8 x i16> @in_v8i16(<8 x i16> %x,
 ; CHECK-BASELINE-NEXT:    xorl %ebx, %edx
 ; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %r14d
 ; CHECK-BASELINE-NEXT:    andw {{[0-9]+}}(%rsp), %cx
-; CHECK-BASELINE-NEXT:    xorl %eax, %ecx
-; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %eax
+; CHECK-BASELINE-NEXT:    xorl %edi, %ecx
+; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %edi
 ; CHECK-BASELINE-NEXT:    andw {{[0-9]+}}(%rsp), %r8w
 ; CHECK-BASELINE-NEXT:    xorl %r11d, %r8d
 ; CHECK-BASELINE-NEXT:    movl {{[0-9]+}}(%rsp), %ebx
@@ -3306,22 +3319,21 @@ define <8 x i16> @in_v8i16(<8 x i16> %x,
 ; CHECK-BASELINE-NEXT:    andw {{[0-9]+}}(%rsp), %bp
 ; CHECK-BASELINE-NEXT:    xorl %ebx, %ebp
 ; CHECK-BASELINE-NEXT:    movzwl {{[0-9]+}}(%rsp), %ebx
-; CHECK-BASELINE-NEXT:    xorw %ax, %bx
+; CHECK-BASELINE-NEXT:    xorw %di, %bx
 ; CHECK-BASELINE-NEXT:    andw {{[0-9]+}}(%rsp), %bx
-; CHECK-BASELINE-NEXT:    xorl %eax, %ebx
-; CHECK-BASELINE-NEXT:    movzwl {{[0-9]+}}(%rsp), %eax
-; CHECK-BASELINE-NEXT:    xorw %r14w, %ax
-; CHECK-BASELINE-NEXT:    andw {{[0-9]+}}(%rsp), %ax
-; CHECK-BASELINE-NEXT:    xorl %r14d, %eax
-; CHECK-BASELINE-NEXT:    movw %ax, 14(%rdi)
-; CHECK-BASELINE-NEXT:    movw %bx, 12(%rdi)
-; CHECK-BASELINE-NEXT:    movw %bp, 10(%rdi)
-; CHECK-BASELINE-NEXT:    movw %r9w, 8(%rdi)
-; CHECK-BASELINE-NEXT:    movw %r8w, 6(%rdi)
-; CHECK-BASELINE-NEXT:    movw %cx, 4(%rdi)
-; CHECK-BASELINE-NEXT:    movw %dx, 2(%rdi)
-; CHECK-BASELINE-NEXT:    movw %si, (%rdi)
-; CHECK-BASELINE-NEXT:    movq %rdi, %rax
+; CHECK-BASELINE-NEXT:    xorl %edi, %ebx
+; CHECK-BASELINE-NEXT:    movzwl {{[0-9]+}}(%rsp), %edi
+; CHECK-BASELINE-NEXT:    xorw %r14w, %di
+; CHECK-BASELINE-NEXT:    andw {{[0-9]+}}(%rsp), %di
+; CHECK-BASELINE-NEXT:    xorl %r14d, %edi
+; CHECK-BASELINE-NEXT:    movw %di, 14(%rax)
+; CHECK-BASELINE-NEXT:    movw %bx, 12(%rax)
+; CHECK-BASELINE-NEXT:    movw %bp, 10(%rax)
+; CHECK-BASELINE-NEXT:    movw %r9w, 8(%rax)
+; CHECK-BASELINE-NEXT:    movw %r8w, 6(%rax)
+; CHECK-BASELINE-NEXT:    movw %cx, 4(%rax)
+; CHECK-BASELINE-NEXT:    movw %dx, 2(%rax)
+; CHECK-BASELINE-NEXT:    movw %si, (%rax)
 ; CHECK-BASELINE-NEXT:    popq %rbx
 ; CHECK-BASELINE-NEXT:    popq %r14
 ; CHECK-BASELINE-NEXT:    popq %rbp
@@ -3332,12 +3344,13 @@ define <8 x i16> @in_v8i16(<8 x i16> %x,
 ; CHECK-SSE1-NEXT:    pushq %rbp
 ; CHECK-SSE1-NEXT:    pushq %r14
 ; CHECK-SSE1-NEXT:    pushq %rbx
+; CHECK-SSE1-NEXT:    movq %rdi, %rax
 ; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %r10d
 ; CHECK-SSE1-NEXT:    xorl %r10d, %r9d
 ; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %r11d
 ; CHECK-SSE1-NEXT:    xorl %r11d, %r8d
-; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %eax
-; CHECK-SSE1-NEXT:    xorl %eax, %ecx
+; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %edi
+; CHECK-SSE1-NEXT:    xorl %edi, %ecx
 ; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %ebx
 ; CHECK-SSE1-NEXT:    xorl %ebx, %esi
 ; CHECK-SSE1-NEXT:    andw {{[0-9]+}}(%rsp), %si
@@ -3348,8 +3361,8 @@ define <8 x i16> @in_v8i16(<8 x i16> %x,
 ; CHECK-SSE1-NEXT:    xorl %ebx, %edx
 ; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %r14d
 ; CHECK-SSE1-NEXT:    andw {{[0-9]+}}(%rsp), %cx
-; CHECK-SSE1-NEXT:    xorl %eax, %ecx
-; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %eax
+; CHECK-SSE1-NEXT:    xorl %edi, %ecx
+; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %edi
 ; CHECK-SSE1-NEXT:    andw {{[0-9]+}}(%rsp), %r8w
 ; CHECK-SSE1-NEXT:    xorl %r11d, %r8d
 ; CHECK-SSE1-NEXT:    movl {{[0-9]+}}(%rsp), %ebx
@@ -3360,22 +3373,21 @@ define <8 x i16> @in_v8i16(<8 x i16> %x,
 ; CHECK-SSE1-NEXT:    andw {{[0-9]+}}(%rsp), %bp
 ; CHECK-SSE1-NEXT:    xorl %ebx, %ebp
 ; CHECK-SSE1-NEXT:    movzwl {{[0-9]+}}(%rsp), %ebx
-; CHECK-SSE1-NEXT:    xorw %ax, %bx
+; CHECK-SSE1-NEXT:    xorw %di, %bx
 ; CHECK-SSE1-NEXT:    andw {{[0-9]+}}(%rsp), %bx
-; CHECK-SSE1-NEXT:    xorl %eax, %ebx
-; CHECK-SSE1-NEXT:    movzwl {{[0-9]+}}(%rsp), %eax
-; CHECK-SSE1-NEXT:    xorw %r14w, %ax
-; CHECK-SSE1-NEXT:    andw {{[0-9]+}}(%rsp), %ax
-; CHECK-SSE1-NEXT:    xorl %r14d, %eax
-; CHECK-SSE1-NEXT:    movw %ax, 14(%rdi)
-; CHECK-SSE1-NEXT:    movw %bx, 12(%rdi)
-; CHECK-SSE1-NEXT:    movw %bp, 10(%rdi)
-; CHECK-SSE1-NEXT:    movw %r9w, 8(%rdi)
-; CHECK-SSE1-NEXT:    movw %r8w, 6(%rdi)
-; CHECK-SSE1-NEXT:    movw %cx, 4(%rdi)
-; CHECK-SSE1-NEXT:    movw %dx, 2(%rdi)
-; CHECK-SSE1-NEXT:    movw %si, (%rdi)
-; CHECK-SSE1-NEXT:    movq %rdi, %rax
+; CHECK-SSE1-NEXT:    xorl %edi, %ebx
+; CHECK-SSE1-NEXT:    movzwl {{[0-9]+}}(%rsp), %edi
+; CHECK-SSE1-NEXT:    xorw %r14w, %di
+; CHECK-SSE1-NEXT:    andw {{[0-9]+}}(%rsp), %di
+; CHECK-SSE1-NEXT:    xorl %r14d, %edi
+; CHECK-SSE1-NEXT:    movw %di, 14(%rax)
+; CHECK-SSE1-NEXT:    movw %bx, 12(%rax)
+; CHECK-SSE1-NEXT:    movw %bp, 10(%rax)
+; CHECK-SSE1-NEXT:    movw %r9w, 8(%rax)
+; CHECK-SSE1-NEXT:    movw %r8w, 6(%rax)
+; CHECK-SSE1-NEXT:    movw %cx, 4(%rax)
+; CHECK-SSE1-NEXT:    movw %dx, 2(%rax)
+; CHECK-SSE1-NEXT:    movw %si, (%rax)
 ; CHECK-SSE1-NEXT:    popq %rbx
 ; CHECK-SSE1-NEXT:    popq %r14
 ; CHECK-SSE1-NEXT:    popq %rbp
@@ -3402,43 +3414,43 @@ define <4 x i32> @in_v4i32(<4 x i32> *%p
 ; CHECK-BASELINE-LABEL: in_v4i32:
 ; CHECK-BASELINE:       # %bb.0:
 ; CHECK-BASELINE-NEXT:    pushq %rbx
+; CHECK-BASELINE-NEXT:    movq %rdi, %rax
 ; CHECK-BASELINE-NEXT:    movl 12(%rdx), %r8d
 ; CHECK-BASELINE-NEXT:    movl 8(%rdx), %r9d
 ; CHECK-BASELINE-NEXT:    movl (%rdx), %r11d
 ; CHECK-BASELINE-NEXT:    movl 4(%rdx), %r10d
 ; CHECK-BASELINE-NEXT:    movl (%rsi), %edx
 ; CHECK-BASELINE-NEXT:    xorl %r11d, %edx
-; CHECK-BASELINE-NEXT:    movl 4(%rsi), %eax
-; CHECK-BASELINE-NEXT:    xorl %r10d, %eax
+; CHECK-BASELINE-NEXT:    movl 4(%rsi), %edi
+; CHECK-BASELINE-NEXT:    xorl %r10d, %edi
 ; CHECK-BASELINE-NEXT:    movl 8(%rsi), %ebx
 ; CHECK-BASELINE-NEXT:    xorl %r9d, %ebx
 ; CHECK-BASELINE-NEXT:    movl 12(%rsi), %esi
 ; CHECK-BASELINE-NEXT:    xorl %r8d, %esi
 ; CHECK-BASELINE-NEXT:    andl 12(%rcx), %esi
 ; CHECK-BASELINE-NEXT:    andl 8(%rcx), %ebx
-; CHECK-BASELINE-NEXT:    andl 4(%rcx), %eax
+; CHECK-BASELINE-NEXT:    andl 4(%rcx), %edi
 ; CHECK-BASELINE-NEXT:    andl (%rcx), %edx
 ; CHECK-BASELINE-NEXT:    xorl %r11d, %edx
-; CHECK-BASELINE-NEXT:    xorl %r10d, %eax
+; CHECK-BASELINE-NEXT:    xorl %r10d, %edi
 ; CHECK-BASELINE-NEXT:    xorl %r9d, %ebx
 ; CHECK-BASELINE-NEXT:    xorl %r8d, %esi
-; CHECK-BASELINE-NEXT:    movl %esi, 12(%rdi)
-; CHECK-BASELINE-NEXT:    movl %ebx, 8(%rdi)
-; CHECK-BASELINE-NEXT:    movl %eax, 4(%rdi)
-; CHECK-BASELINE-NEXT:    movl %edx, (%rdi)
-; CHECK-BASELINE-NEXT:    movq %rdi, %rax
+; CHECK-BASELINE-NEXT:    movl %esi, 12(%rax)
+; CHECK-BASELINE-NEXT:    movl %ebx, 8(%rax)
+; CHECK-BASELINE-NEXT:    movl %edi, 4(%rax)
+; CHECK-BASELINE-NEXT:    movl %edx, (%rax)
 ; CHECK-BASELINE-NEXT:    popq %rbx
 ; CHECK-BASELINE-NEXT:    retq
 ;
 ; CHECK-SSE1-LABEL: in_v4i32:
 ; CHECK-SSE1:       # %bb.0:
+; CHECK-SSE1-NEXT:    movq %rdi, %rax
 ; CHECK-SSE1-NEXT:    movaps (%rcx), %xmm0
 ; CHECK-SSE1-NEXT:    movaps %xmm0, %xmm1
 ; CHECK-SSE1-NEXT:    andnps (%rdx), %xmm1
 ; CHECK-SSE1-NEXT:    andps (%rsi), %xmm0
 ; CHECK-SSE1-NEXT:    orps %xmm1, %xmm0
 ; CHECK-SSE1-NEXT:    movaps %xmm0, (%rdi)
-; CHECK-SSE1-NEXT:    movq %rdi, %rax
 ; CHECK-SSE1-NEXT:    retq
 ;
 ; CHECK-SSE2-LABEL: in_v4i32:
@@ -3468,25 +3480,25 @@ define <4 x i32> @in_v4i32(<4 x i32> *%p
 define <2 x i64> @in_v2i64(<2 x i64> %x, <2 x i64> %y, <2 x i64> %mask) nounwind {
 ; CHECK-BASELINE-LABEL: in_v2i64:
 ; CHECK-BASELINE:       # %bb.0:
-; CHECK-BASELINE-NEXT:    xorq %rdx, %rdi
+; CHECK-BASELINE-NEXT:    movq %rdi, %rax
+; CHECK-BASELINE-NEXT:    xorq %rdx, %rax
 ; CHECK-BASELINE-NEXT:    xorq %rcx, %rsi
 ; CHECK-BASELINE-NEXT:    andq %r9, %rsi
-; CHECK-BASELINE-NEXT:    andq %r8, %rdi
-; CHECK-BASELINE-NEXT:    xorq %rdx, %rdi
+; CHECK-BASELINE-NEXT:    andq %r8, %rax
+; CHECK-BASELINE-NEXT:    xorq %rdx, %rax
 ; CHECK-BASELINE-NEXT:    xorq %rcx, %rsi
-; CHECK-BASELINE-NEXT:    movq %rdi, %rax
 ; CHECK-BASELINE-NEXT:    movq %rsi, %rdx
 ; CHECK-BASELINE-NEXT:    retq
 ;
 ; CHECK-SSE1-LABEL: in_v2i64:
 ; CHECK-SSE1:       # %bb.0:
-; CHECK-SSE1-NEXT:    xorq %rdx, %rdi
+; CHECK-SSE1-NEXT:    movq %rdi, %rax
+; CHECK-SSE1-NEXT:    xorq %rdx, %rax
 ; CHECK-SSE1-NEXT:    xorq %rcx, %rsi
 ; CHECK-SSE1-NEXT:    andq %r9, %rsi
-; CHECK-SSE1-NEXT:    andq %r8, %rdi
-; CHECK-SSE1-NEXT:    xorq %rdx, %rdi
+; CHECK-SSE1-NEXT:    andq %r8, %rax
+; CHECK-SSE1-NEXT:    xorq %rdx, %rax
 ; CHECK-SSE1-NEXT:    xorq %rcx, %rsi
-; CHECK-SSE1-NEXT:    movq %rdi, %rax
 ; CHECK-SSE1-NEXT:    movq %rsi, %rdx
 ; CHECK-SSE1-NEXT:    retq
 ;
@@ -4076,142 +4088,141 @@ define <16 x i16> @in_v16i16(<16 x i16>
 ; CHECK-BASELINE-NEXT:    pushq %r13
 ; CHECK-BASELINE-NEXT:    pushq %r12
 ; CHECK-BASELINE-NEXT:    pushq %rbx
-; CHECK-BASELINE-NEXT:    movq %rcx, %r8
-; CHECK-BASELINE-NEXT:    movzwl 30(%rdx), %eax
-; CHECK-BASELINE-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-BASELINE-NEXT:    movl 28(%rdx), %eax
-; CHECK-BASELINE-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-BASELINE-NEXT:    movzwl 26(%rdx), %eax
-; CHECK-BASELINE-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-BASELINE-NEXT:    movq %rcx, %r9
+; CHECK-BASELINE-NEXT:    movq %rdi, %r10
+; CHECK-BASELINE-NEXT:    movzwl 30(%rdx), %edi
+; CHECK-BASELINE-NEXT:    movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-BASELINE-NEXT:    movl 28(%rdx), %edi
+; CHECK-BASELINE-NEXT:    movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-BASELINE-NEXT:    movzwl 26(%rdx), %edi
+; CHECK-BASELINE-NEXT:    movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
 ; CHECK-BASELINE-NEXT:    movl 24(%rdx), %eax
 ; CHECK-BASELINE-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
 ; CHECK-BASELINE-NEXT:    movzwl 22(%rdx), %eax
 ; CHECK-BASELINE-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-BASELINE-NEXT:    movl 20(%rdx), %r13d
-; CHECK-BASELINE-NEXT:    movl %r13d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-BASELINE-NEXT:    movzwl 18(%rdx), %r11d
+; CHECK-BASELINE-NEXT:    movl 20(%rdx), %r11d
 ; CHECK-BASELINE-NEXT:    movl %r11d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-BASELINE-NEXT:    movl 16(%rdx), %r14d
+; CHECK-BASELINE-NEXT:    movzwl 18(%rdx), %r14d
 ; CHECK-BASELINE-NEXT:    movl %r14d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-BASELINE-NEXT:    movzwl 14(%rdx), %r15d
+; CHECK-BASELINE-NEXT:    movl 16(%rdx), %r15d
 ; CHECK-BASELINE-NEXT:    movl %r15d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-BASELINE-NEXT:    movl 12(%rdx), %r12d
+; CHECK-BASELINE-NEXT:    movzwl 14(%rdx), %r12d
 ; CHECK-BASELINE-NEXT:    movl %r12d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-BASELINE-NEXT:    movzwl 10(%rdx), %r10d
-; CHECK-BASELINE-NEXT:    movl %r10d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-BASELINE-NEXT:    movl 8(%rdx), %r9d
-; CHECK-BASELINE-NEXT:    movl %r9d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-BASELINE-NEXT:    movzwl 6(%rdx), %ebx
+; CHECK-BASELINE-NEXT:    movl 12(%rdx), %r13d
+; CHECK-BASELINE-NEXT:    movl %r13d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-BASELINE-NEXT:    movzwl 10(%rdx), %r8d
+; CHECK-BASELINE-NEXT:    movl %r8d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-BASELINE-NEXT:    movl 8(%rdx), %ebx
 ; CHECK-BASELINE-NEXT:    movl %ebx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-BASELINE-NEXT:    movl (%rdx), %eax
-; CHECK-BASELINE-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-BASELINE-NEXT:    movl 4(%rdx), %ebp
+; CHECK-BASELINE-NEXT:    movzwl 6(%rdx), %ebp
 ; CHECK-BASELINE-NEXT:    movl %ebp, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-BASELINE-NEXT:    movzwl 2(%rdx), %ecx
+; CHECK-BASELINE-NEXT:    movl (%rdx), %ecx
 ; CHECK-BASELINE-NEXT:    movl %ecx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-BASELINE-NEXT:    movl 4(%rdx), %edi
+; CHECK-BASELINE-NEXT:    movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-BASELINE-NEXT:    movzwl 2(%rdx), %eax
+; CHECK-BASELINE-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
 ; CHECK-BASELINE-NEXT:    movzwl (%rsi), %edx
-; CHECK-BASELINE-NEXT:    xorw %ax, %dx
+; CHECK-BASELINE-NEXT:    xorw %cx, %dx
 ; CHECK-BASELINE-NEXT:    movl %edx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-BASELINE-NEXT:    movzwl 2(%rsi), %eax
-; CHECK-BASELINE-NEXT:    xorw %cx, %ax
-; CHECK-BASELINE-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-BASELINE-NEXT:    movzwl 2(%rsi), %ecx
+; CHECK-BASELINE-NEXT:    xorw %ax, %cx
+; CHECK-BASELINE-NEXT:    movl %ecx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
 ; CHECK-BASELINE-NEXT:    movzwl 4(%rsi), %eax
-; CHECK-BASELINE-NEXT:    xorw %bp, %ax
+; CHECK-BASELINE-NEXT:    xorw %di, %ax
 ; CHECK-BASELINE-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
 ; CHECK-BASELINE-NEXT:    movzwl 6(%rsi), %edx
-; CHECK-BASELINE-NEXT:    xorw %bx, %dx
+; CHECK-BASELINE-NEXT:    xorw %bp, %dx
 ; CHECK-BASELINE-NEXT:    movl %edx, %eax
 ; CHECK-BASELINE-NEXT:    movzwl 8(%rsi), %ecx
-; CHECK-BASELINE-NEXT:    xorw %r9w, %cx
-; CHECK-BASELINE-NEXT:    movl %ecx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-BASELINE-NEXT:    xorw %bx, %cx
 ; CHECK-BASELINE-NEXT:    movzwl 10(%rsi), %edx
-; CHECK-BASELINE-NEXT:    xorw %r10w, %dx
-; CHECK-BASELINE-NEXT:    movl %edx, %ecx
+; CHECK-BASELINE-NEXT:    xorw %r8w, %dx
+; CHECK-BASELINE-NEXT:    movl %edx, %r8d
 ; CHECK-BASELINE-NEXT:    movzwl 12(%rsi), %edx
-; CHECK-BASELINE-NEXT:    xorw %r12w, %dx
-; CHECK-BASELINE-NEXT:    movzwl 14(%rsi), %r12d
+; CHECK-BASELINE-NEXT:    xorw %r13w, %dx
+; CHECK-BASELINE-NEXT:    movzwl 14(%rsi), %r13d
+; CHECK-BASELINE-NEXT:    xorw %r12w, %r13w
+; CHECK-BASELINE-NEXT:    movzwl 16(%rsi), %r12d
 ; CHECK-BASELINE-NEXT:    xorw %r15w, %r12w
-; CHECK-BASELINE-NEXT:    movzwl 16(%rsi), %r15d
+; CHECK-BASELINE-NEXT:    movzwl 18(%rsi), %r15d
 ; CHECK-BASELINE-NEXT:    xorw %r14w, %r15w
-; CHECK-BASELINE-NEXT:    movzwl 18(%rsi), %r14d
+; CHECK-BASELINE-NEXT:    movzwl 20(%rsi), %r14d
 ; CHECK-BASELINE-NEXT:    xorw %r11w, %r14w
-; CHECK-BASELINE-NEXT:    movzwl 20(%rsi), %ebp
-; CHECK-BASELINE-NEXT:    xorw %r13w, %bp
-; CHECK-BASELINE-NEXT:    movzwl 22(%rsi), %ebx
+; CHECK-BASELINE-NEXT:    movzwl 22(%rsi), %ebp
+; CHECK-BASELINE-NEXT:    xorw {{[-0-9]+}}(%r{{[sb]}}p), %bp # 2-byte Folded Reload
+; CHECK-BASELINE-NEXT:    movzwl 24(%rsi), %ebx
 ; CHECK-BASELINE-NEXT:    xorw {{[-0-9]+}}(%r{{[sb]}}p), %bx # 2-byte Folded Reload
-; CHECK-BASELINE-NEXT:    movzwl 24(%rsi), %r11d
+; CHECK-BASELINE-NEXT:    movzwl 26(%rsi), %r11d
 ; CHECK-BASELINE-NEXT:    xorw {{[-0-9]+}}(%r{{[sb]}}p), %r11w # 2-byte Folded Reload
-; CHECK-BASELINE-NEXT:    movzwl 26(%rsi), %r10d
-; CHECK-BASELINE-NEXT:    xorw {{[-0-9]+}}(%r{{[sb]}}p), %r10w # 2-byte Folded Reload
-; CHECK-BASELINE-NEXT:    movzwl 28(%rsi), %r9d
-; CHECK-BASELINE-NEXT:    xorw {{[-0-9]+}}(%r{{[sb]}}p), %r9w # 2-byte Folded Reload
-; CHECK-BASELINE-NEXT:    movzwl 30(%rsi), %r13d
-; CHECK-BASELINE-NEXT:    xorw {{[-0-9]+}}(%r{{[sb]}}p), %r13w # 2-byte Folded Reload
-; CHECK-BASELINE-NEXT:    andw 30(%r8), %r13w
-; CHECK-BASELINE-NEXT:    andw 28(%r8), %r9w
-; CHECK-BASELINE-NEXT:    andw 26(%r8), %r10w
-; CHECK-BASELINE-NEXT:    andw 24(%r8), %r11w
-; CHECK-BASELINE-NEXT:    andw 22(%r8), %bx
-; CHECK-BASELINE-NEXT:    andw 20(%r8), %bp
-; CHECK-BASELINE-NEXT:    andw 18(%r8), %r14w
-; CHECK-BASELINE-NEXT:    andw 16(%r8), %r15w
-; CHECK-BASELINE-NEXT:    andw 14(%r8), %r12w
-; CHECK-BASELINE-NEXT:    andw 12(%r8), %dx
+; CHECK-BASELINE-NEXT:    movzwl 28(%rsi), %edi
+; CHECK-BASELINE-NEXT:    xorw {{[-0-9]+}}(%r{{[sb]}}p), %di # 2-byte Folded Reload
+; CHECK-BASELINE-NEXT:    movzwl 30(%rsi), %esi
+; CHECK-BASELINE-NEXT:    xorw {{[-0-9]+}}(%r{{[sb]}}p), %si # 2-byte Folded Reload
+; CHECK-BASELINE-NEXT:    andw 30(%r9), %si
+; CHECK-BASELINE-NEXT:    andw 28(%r9), %di
+; CHECK-BASELINE-NEXT:    andw 26(%r9), %r11w
+; CHECK-BASELINE-NEXT:    andw 24(%r9), %bx
+; CHECK-BASELINE-NEXT:    andw 22(%r9), %bp
+; CHECK-BASELINE-NEXT:    andw 20(%r9), %r14w
+; CHECK-BASELINE-NEXT:    andw 18(%r9), %r15w
+; CHECK-BASELINE-NEXT:    andw 16(%r9), %r12w
+; CHECK-BASELINE-NEXT:    andw 14(%r9), %r13w
+; CHECK-BASELINE-NEXT:    andw 12(%r9), %dx
 ; CHECK-BASELINE-NEXT:    movl %edx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-BASELINE-NEXT:    andw 10(%r8), %cx
-; CHECK-BASELINE-NEXT:    movl %ecx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-BASELINE-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 4-byte Reload
-; CHECK-BASELINE-NEXT:    andw 8(%r8), %dx
-; CHECK-BASELINE-NEXT:    andw 6(%r8), %ax
+; CHECK-BASELINE-NEXT:    andw 10(%r9), %r8w
+; CHECK-BASELINE-NEXT:    movl %r8d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-BASELINE-NEXT:    movl %ecx, %edx
+; CHECK-BASELINE-NEXT:    andw 8(%r9), %dx
+; CHECK-BASELINE-NEXT:    andw 6(%r9), %ax
 ; CHECK-BASELINE-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-BASELINE-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %ecx # 4-byte Reload
-; CHECK-BASELINE-NEXT:    andw 4(%r8), %cx
+; CHECK-BASELINE-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %r8d # 4-byte Reload
+; CHECK-BASELINE-NEXT:    andw 4(%r9), %r8w
 ; CHECK-BASELINE-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload
-; CHECK-BASELINE-NEXT:    andw 2(%r8), %ax
-; CHECK-BASELINE-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %esi # 4-byte Reload
-; CHECK-BASELINE-NEXT:    andw (%r8), %si
-; CHECK-BASELINE-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %esi # 4-byte Folded Reload
-; CHECK-BASELINE-NEXT:    movl %esi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-BASELINE-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Folded Reload
-; CHECK-BASELINE-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-BASELINE-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %ecx # 4-byte Folded Reload
-; CHECK-BASELINE-NEXT:    movl %ecx, %esi
+; CHECK-BASELINE-NEXT:    andw 2(%r9), %ax
 ; CHECK-BASELINE-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %ecx # 4-byte Reload
+; CHECK-BASELINE-NEXT:    andw (%r9), %cx
 ; CHECK-BASELINE-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %ecx # 4-byte Folded Reload
+; CHECK-BASELINE-NEXT:    movl %ecx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-BASELINE-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Folded Reload
+; CHECK-BASELINE-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-BASELINE-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %r8d # 4-byte Folded Reload
+; CHECK-BASELINE-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %r9d # 4-byte Reload
+; CHECK-BASELINE-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %r9d # 4-byte Folded Reload
 ; CHECK-BASELINE-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 4-byte Folded Reload
-; CHECK-BASELINE-NEXT:    movl %edx, %r8d
+; CHECK-BASELINE-NEXT:    movl %edx, %ecx
 ; CHECK-BASELINE-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 4-byte Reload
 ; CHECK-BASELINE-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 4-byte Folded Reload
 ; CHECK-BASELINE-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload
 ; CHECK-BASELINE-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Folded Reload
+; CHECK-BASELINE-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %r13d # 4-byte Folded Reload
 ; CHECK-BASELINE-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %r12d # 4-byte Folded Reload
 ; CHECK-BASELINE-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %r15d # 4-byte Folded Reload
 ; CHECK-BASELINE-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %r14d # 4-byte Folded Reload
 ; CHECK-BASELINE-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %ebp # 4-byte Folded Reload
 ; CHECK-BASELINE-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %ebx # 4-byte Folded Reload
 ; CHECK-BASELINE-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %r11d # 4-byte Folded Reload
-; CHECK-BASELINE-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %r10d # 4-byte Folded Reload
-; CHECK-BASELINE-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %r9d # 4-byte Folded Reload
-; CHECK-BASELINE-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %r13d # 4-byte Folded Reload
-; CHECK-BASELINE-NEXT:    movw %r13w, 30(%rdi)
-; CHECK-BASELINE-NEXT:    movw %r9w, 28(%rdi)
-; CHECK-BASELINE-NEXT:    movw %r10w, 26(%rdi)
-; CHECK-BASELINE-NEXT:    movw %r11w, 24(%rdi)
-; CHECK-BASELINE-NEXT:    movw %bx, 22(%rdi)
-; CHECK-BASELINE-NEXT:    movw %bp, 20(%rdi)
-; CHECK-BASELINE-NEXT:    movw %r14w, 18(%rdi)
-; CHECK-BASELINE-NEXT:    movw %r15w, 16(%rdi)
-; CHECK-BASELINE-NEXT:    movw %r12w, 14(%rdi)
-; CHECK-BASELINE-NEXT:    movw %ax, 12(%rdi)
-; CHECK-BASELINE-NEXT:    movw %dx, 10(%rdi)
-; CHECK-BASELINE-NEXT:    movw %r8w, 8(%rdi)
-; CHECK-BASELINE-NEXT:    movw %cx, 6(%rdi)
-; CHECK-BASELINE-NEXT:    movw %si, 4(%rdi)
+; CHECK-BASELINE-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Folded Reload
+; CHECK-BASELINE-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %esi # 4-byte Folded Reload
+; CHECK-BASELINE-NEXT:    movw %si, 30(%r10)
+; CHECK-BASELINE-NEXT:    movw %di, 28(%r10)
+; CHECK-BASELINE-NEXT:    movw %r11w, 26(%r10)
+; CHECK-BASELINE-NEXT:    movw %bx, 24(%r10)
+; CHECK-BASELINE-NEXT:    movw %bp, 22(%r10)
+; CHECK-BASELINE-NEXT:    movw %r14w, 20(%r10)
+; CHECK-BASELINE-NEXT:    movw %r15w, 18(%r10)
+; CHECK-BASELINE-NEXT:    movw %r12w, 16(%r10)
+; CHECK-BASELINE-NEXT:    movw %r13w, 14(%r10)
+; CHECK-BASELINE-NEXT:    movw %ax, 12(%r10)
+; CHECK-BASELINE-NEXT:    movw %dx, 10(%r10)
+; CHECK-BASELINE-NEXT:    movw %cx, 8(%r10)
+; CHECK-BASELINE-NEXT:    movw %r9w, 6(%r10)
+; CHECK-BASELINE-NEXT:    movw %r8w, 4(%r10)
 ; CHECK-BASELINE-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload
-; CHECK-BASELINE-NEXT:    movw %ax, 2(%rdi)
+; CHECK-BASELINE-NEXT:    movw %ax, 2(%r10)
 ; CHECK-BASELINE-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload
-; CHECK-BASELINE-NEXT:    movw %ax, (%rdi)
-; CHECK-BASELINE-NEXT:    movq %rdi, %rax
+; CHECK-BASELINE-NEXT:    movw %ax, (%r10)
+; CHECK-BASELINE-NEXT:    movq %r10, %rax
 ; CHECK-BASELINE-NEXT:    popq %rbx
 ; CHECK-BASELINE-NEXT:    popq %r12
 ; CHECK-BASELINE-NEXT:    popq %r13
@@ -4228,142 +4239,141 @@ define <16 x i16> @in_v16i16(<16 x i16>
 ; CHECK-SSE1-NEXT:    pushq %r13
 ; CHECK-SSE1-NEXT:    pushq %r12
 ; CHECK-SSE1-NEXT:    pushq %rbx
-; CHECK-SSE1-NEXT:    movq %rcx, %r8
-; CHECK-SSE1-NEXT:    movzwl 30(%rdx), %eax
-; CHECK-SSE1-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-SSE1-NEXT:    movl 28(%rdx), %eax
-; CHECK-SSE1-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-SSE1-NEXT:    movzwl 26(%rdx), %eax
-; CHECK-SSE1-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-SSE1-NEXT:    movq %rcx, %r9
+; CHECK-SSE1-NEXT:    movq %rdi, %r10
+; CHECK-SSE1-NEXT:    movzwl 30(%rdx), %edi
+; CHECK-SSE1-NEXT:    movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-SSE1-NEXT:    movl 28(%rdx), %edi
+; CHECK-SSE1-NEXT:    movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-SSE1-NEXT:    movzwl 26(%rdx), %edi
+; CHECK-SSE1-NEXT:    movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
 ; CHECK-SSE1-NEXT:    movl 24(%rdx), %eax
 ; CHECK-SSE1-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
 ; CHECK-SSE1-NEXT:    movzwl 22(%rdx), %eax
 ; CHECK-SSE1-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-SSE1-NEXT:    movl 20(%rdx), %r13d
-; CHECK-SSE1-NEXT:    movl %r13d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-SSE1-NEXT:    movzwl 18(%rdx), %r11d
+; CHECK-SSE1-NEXT:    movl 20(%rdx), %r11d
 ; CHECK-SSE1-NEXT:    movl %r11d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-SSE1-NEXT:    movl 16(%rdx), %r14d
+; CHECK-SSE1-NEXT:    movzwl 18(%rdx), %r14d
 ; CHECK-SSE1-NEXT:    movl %r14d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-SSE1-NEXT:    movzwl 14(%rdx), %r15d
+; CHECK-SSE1-NEXT:    movl 16(%rdx), %r15d
 ; CHECK-SSE1-NEXT:    movl %r15d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-SSE1-NEXT:    movl 12(%rdx), %r12d
+; CHECK-SSE1-NEXT:    movzwl 14(%rdx), %r12d
 ; CHECK-SSE1-NEXT:    movl %r12d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-SSE1-NEXT:    movzwl 10(%rdx), %r10d
-; CHECK-SSE1-NEXT:    movl %r10d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-SSE1-NEXT:    movl 8(%rdx), %r9d
-; CHECK-SSE1-NEXT:    movl %r9d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-SSE1-NEXT:    movzwl 6(%rdx), %ebx
+; CHECK-SSE1-NEXT:    movl 12(%rdx), %r13d
+; CHECK-SSE1-NEXT:    movl %r13d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-SSE1-NEXT:    movzwl 10(%rdx), %r8d
+; CHECK-SSE1-NEXT:    movl %r8d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-SSE1-NEXT:    movl 8(%rdx), %ebx
 ; CHECK-SSE1-NEXT:    movl %ebx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-SSE1-NEXT:    movl (%rdx), %eax
-; CHECK-SSE1-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-SSE1-NEXT:    movl 4(%rdx), %ebp
+; CHECK-SSE1-NEXT:    movzwl 6(%rdx), %ebp
 ; CHECK-SSE1-NEXT:    movl %ebp, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-SSE1-NEXT:    movzwl 2(%rdx), %ecx
+; CHECK-SSE1-NEXT:    movl (%rdx), %ecx
 ; CHECK-SSE1-NEXT:    movl %ecx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-SSE1-NEXT:    movl 4(%rdx), %edi
+; CHECK-SSE1-NEXT:    movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-SSE1-NEXT:    movzwl 2(%rdx), %eax
+; CHECK-SSE1-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
 ; CHECK-SSE1-NEXT:    movzwl (%rsi), %edx
-; CHECK-SSE1-NEXT:    xorw %ax, %dx
+; CHECK-SSE1-NEXT:    xorw %cx, %dx
 ; CHECK-SSE1-NEXT:    movl %edx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-SSE1-NEXT:    movzwl 2(%rsi), %eax
-; CHECK-SSE1-NEXT:    xorw %cx, %ax
-; CHECK-SSE1-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-SSE1-NEXT:    movzwl 2(%rsi), %ecx
+; CHECK-SSE1-NEXT:    xorw %ax, %cx
+; CHECK-SSE1-NEXT:    movl %ecx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
 ; CHECK-SSE1-NEXT:    movzwl 4(%rsi), %eax
-; CHECK-SSE1-NEXT:    xorw %bp, %ax
+; CHECK-SSE1-NEXT:    xorw %di, %ax
 ; CHECK-SSE1-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
 ; CHECK-SSE1-NEXT:    movzwl 6(%rsi), %edx
-; CHECK-SSE1-NEXT:    xorw %bx, %dx
+; CHECK-SSE1-NEXT:    xorw %bp, %dx
 ; CHECK-SSE1-NEXT:    movl %edx, %eax
 ; CHECK-SSE1-NEXT:    movzwl 8(%rsi), %ecx
-; CHECK-SSE1-NEXT:    xorw %r9w, %cx
-; CHECK-SSE1-NEXT:    movl %ecx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-SSE1-NEXT:    xorw %bx, %cx
 ; CHECK-SSE1-NEXT:    movzwl 10(%rsi), %edx
-; CHECK-SSE1-NEXT:    xorw %r10w, %dx
-; CHECK-SSE1-NEXT:    movl %edx, %ecx
+; CHECK-SSE1-NEXT:    xorw %r8w, %dx
+; CHECK-SSE1-NEXT:    movl %edx, %r8d
 ; CHECK-SSE1-NEXT:    movzwl 12(%rsi), %edx
-; CHECK-SSE1-NEXT:    xorw %r12w, %dx
-; CHECK-SSE1-NEXT:    movzwl 14(%rsi), %r12d
+; CHECK-SSE1-NEXT:    xorw %r13w, %dx
+; CHECK-SSE1-NEXT:    movzwl 14(%rsi), %r13d
+; CHECK-SSE1-NEXT:    xorw %r12w, %r13w
+; CHECK-SSE1-NEXT:    movzwl 16(%rsi), %r12d
 ; CHECK-SSE1-NEXT:    xorw %r15w, %r12w
-; CHECK-SSE1-NEXT:    movzwl 16(%rsi), %r15d
+; CHECK-SSE1-NEXT:    movzwl 18(%rsi), %r15d
 ; CHECK-SSE1-NEXT:    xorw %r14w, %r15w
-; CHECK-SSE1-NEXT:    movzwl 18(%rsi), %r14d
+; CHECK-SSE1-NEXT:    movzwl 20(%rsi), %r14d
 ; CHECK-SSE1-NEXT:    xorw %r11w, %r14w
-; CHECK-SSE1-NEXT:    movzwl 20(%rsi), %ebp
-; CHECK-SSE1-NEXT:    xorw %r13w, %bp
-; CHECK-SSE1-NEXT:    movzwl 22(%rsi), %ebx
+; CHECK-SSE1-NEXT:    movzwl 22(%rsi), %ebp
+; CHECK-SSE1-NEXT:    xorw {{[-0-9]+}}(%r{{[sb]}}p), %bp # 2-byte Folded Reload
+; CHECK-SSE1-NEXT:    movzwl 24(%rsi), %ebx
 ; CHECK-SSE1-NEXT:    xorw {{[-0-9]+}}(%r{{[sb]}}p), %bx # 2-byte Folded Reload
-; CHECK-SSE1-NEXT:    movzwl 24(%rsi), %r11d
+; CHECK-SSE1-NEXT:    movzwl 26(%rsi), %r11d
 ; CHECK-SSE1-NEXT:    xorw {{[-0-9]+}}(%r{{[sb]}}p), %r11w # 2-byte Folded Reload
-; CHECK-SSE1-NEXT:    movzwl 26(%rsi), %r10d
-; CHECK-SSE1-NEXT:    xorw {{[-0-9]+}}(%r{{[sb]}}p), %r10w # 2-byte Folded Reload
-; CHECK-SSE1-NEXT:    movzwl 28(%rsi), %r9d
-; CHECK-SSE1-NEXT:    xorw {{[-0-9]+}}(%r{{[sb]}}p), %r9w # 2-byte Folded Reload
-; CHECK-SSE1-NEXT:    movzwl 30(%rsi), %r13d
-; CHECK-SSE1-NEXT:    xorw {{[-0-9]+}}(%r{{[sb]}}p), %r13w # 2-byte Folded Reload
-; CHECK-SSE1-NEXT:    andw 30(%r8), %r13w
-; CHECK-SSE1-NEXT:    andw 28(%r8), %r9w
-; CHECK-SSE1-NEXT:    andw 26(%r8), %r10w
-; CHECK-SSE1-NEXT:    andw 24(%r8), %r11w
-; CHECK-SSE1-NEXT:    andw 22(%r8), %bx
-; CHECK-SSE1-NEXT:    andw 20(%r8), %bp
-; CHECK-SSE1-NEXT:    andw 18(%r8), %r14w
-; CHECK-SSE1-NEXT:    andw 16(%r8), %r15w
-; CHECK-SSE1-NEXT:    andw 14(%r8), %r12w
-; CHECK-SSE1-NEXT:    andw 12(%r8), %dx
+; CHECK-SSE1-NEXT:    movzwl 28(%rsi), %edi
+; CHECK-SSE1-NEXT:    xorw {{[-0-9]+}}(%r{{[sb]}}p), %di # 2-byte Folded Reload
+; CHECK-SSE1-NEXT:    movzwl 30(%rsi), %esi
+; CHECK-SSE1-NEXT:    xorw {{[-0-9]+}}(%r{{[sb]}}p), %si # 2-byte Folded Reload
+; CHECK-SSE1-NEXT:    andw 30(%r9), %si
+; CHECK-SSE1-NEXT:    andw 28(%r9), %di
+; CHECK-SSE1-NEXT:    andw 26(%r9), %r11w
+; CHECK-SSE1-NEXT:    andw 24(%r9), %bx
+; CHECK-SSE1-NEXT:    andw 22(%r9), %bp
+; CHECK-SSE1-NEXT:    andw 20(%r9), %r14w
+; CHECK-SSE1-NEXT:    andw 18(%r9), %r15w
+; CHECK-SSE1-NEXT:    andw 16(%r9), %r12w
+; CHECK-SSE1-NEXT:    andw 14(%r9), %r13w
+; CHECK-SSE1-NEXT:    andw 12(%r9), %dx
 ; CHECK-SSE1-NEXT:    movl %edx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-SSE1-NEXT:    andw 10(%r8), %cx
-; CHECK-SSE1-NEXT:    movl %ecx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-SSE1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 4-byte Reload
-; CHECK-SSE1-NEXT:    andw 8(%r8), %dx
-; CHECK-SSE1-NEXT:    andw 6(%r8), %ax
+; CHECK-SSE1-NEXT:    andw 10(%r9), %r8w
+; CHECK-SSE1-NEXT:    movl %r8d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-SSE1-NEXT:    movl %ecx, %edx
+; CHECK-SSE1-NEXT:    andw 8(%r9), %dx
+; CHECK-SSE1-NEXT:    andw 6(%r9), %ax
 ; CHECK-SSE1-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-SSE1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %ecx # 4-byte Reload
-; CHECK-SSE1-NEXT:    andw 4(%r8), %cx
+; CHECK-SSE1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %r8d # 4-byte Reload
+; CHECK-SSE1-NEXT:    andw 4(%r9), %r8w
 ; CHECK-SSE1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload
-; CHECK-SSE1-NEXT:    andw 2(%r8), %ax
-; CHECK-SSE1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %esi # 4-byte Reload
-; CHECK-SSE1-NEXT:    andw (%r8), %si
-; CHECK-SSE1-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %esi # 4-byte Folded Reload
-; CHECK-SSE1-NEXT:    movl %esi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-SSE1-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Folded Reload
-; CHECK-SSE1-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
-; CHECK-SSE1-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %ecx # 4-byte Folded Reload
-; CHECK-SSE1-NEXT:    movl %ecx, %esi
+; CHECK-SSE1-NEXT:    andw 2(%r9), %ax
 ; CHECK-SSE1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %ecx # 4-byte Reload
+; CHECK-SSE1-NEXT:    andw (%r9), %cx
 ; CHECK-SSE1-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %ecx # 4-byte Folded Reload
+; CHECK-SSE1-NEXT:    movl %ecx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-SSE1-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Folded Reload
+; CHECK-SSE1-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-SSE1-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %r8d # 4-byte Folded Reload
+; CHECK-SSE1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %r9d # 4-byte Reload
+; CHECK-SSE1-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %r9d # 4-byte Folded Reload
 ; CHECK-SSE1-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 4-byte Folded Reload
-; CHECK-SSE1-NEXT:    movl %edx, %r8d
+; CHECK-SSE1-NEXT:    movl %edx, %ecx
 ; CHECK-SSE1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 4-byte Reload
 ; CHECK-SSE1-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 4-byte Folded Reload
 ; CHECK-SSE1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload
 ; CHECK-SSE1-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Folded Reload
+; CHECK-SSE1-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %r13d # 4-byte Folded Reload
 ; CHECK-SSE1-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %r12d # 4-byte Folded Reload
 ; CHECK-SSE1-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %r15d # 4-byte Folded Reload
 ; CHECK-SSE1-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %r14d # 4-byte Folded Reload
 ; CHECK-SSE1-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %ebp # 4-byte Folded Reload
 ; CHECK-SSE1-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %ebx # 4-byte Folded Reload
 ; CHECK-SSE1-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %r11d # 4-byte Folded Reload
-; CHECK-SSE1-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %r10d # 4-byte Folded Reload
-; CHECK-SSE1-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %r9d # 4-byte Folded Reload
-; CHECK-SSE1-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %r13d # 4-byte Folded Reload
-; CHECK-SSE1-NEXT:    movw %r13w, 30(%rdi)
-; CHECK-SSE1-NEXT:    movw %r9w, 28(%rdi)
-; CHECK-SSE1-NEXT:    movw %r10w, 26(%rdi)
-; CHECK-SSE1-NEXT:    movw %r11w, 24(%rdi)
-; CHECK-SSE1-NEXT:    movw %bx, 22(%rdi)
-; CHECK-SSE1-NEXT:    movw %bp, 20(%rdi)
-; CHECK-SSE1-NEXT:    movw %r14w, 18(%rdi)
-; CHECK-SSE1-NEXT:    movw %r15w, 16(%rdi)
-; CHECK-SSE1-NEXT:    movw %r12w, 14(%rdi)
-; CHECK-SSE1-NEXT:    movw %ax, 12(%rdi)
-; CHECK-SSE1-NEXT:    movw %dx, 10(%rdi)
-; CHECK-SSE1-NEXT:    movw %r8w, 8(%rdi)
-; CHECK-SSE1-NEXT:    movw %cx, 6(%rdi)
-; CHECK-SSE1-NEXT:    movw %si, 4(%rdi)
+; CHECK-SSE1-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Folded Reload
+; CHECK-SSE1-NEXT:    xorl {{[-0-9]+}}(%r{{[sb]}}p), %esi # 4-byte Folded Reload
+; CHECK-SSE1-NEXT:    movw %si, 30(%r10)
+; CHECK-SSE1-NEXT:    movw %di, 28(%r10)
+; CHECK-SSE1-NEXT:    movw %r11w, 26(%r10)
+; CHECK-SSE1-NEXT:    movw %bx, 24(%r10)
+; CHECK-SSE1-NEXT:    movw %bp, 22(%r10)
+; CHECK-SSE1-NEXT:    movw %r14w, 20(%r10)
+; CHECK-SSE1-NEXT:    movw %r15w, 18(%r10)
+; CHECK-SSE1-NEXT:    movw %r12w, 16(%r10)
+; CHECK-SSE1-NEXT:    movw %r13w, 14(%r10)
+; CHECK-SSE1-NEXT:    movw %ax, 12(%r10)
+; CHECK-SSE1-NEXT:    movw %dx, 10(%r10)
+; CHECK-SSE1-NEXT:    movw %cx, 8(%r10)
+; CHECK-SSE1-NEXT:    movw %r9w, 6(%r10)
+; CHECK-SSE1-NEXT:    movw %r8w, 4(%r10)
 ; CHECK-SSE1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload
-; CHECK-SSE1-NEXT:    movw %ax, 2(%rdi)
+; CHECK-SSE1-NEXT:    movw %ax, 2(%r10)
 ; CHECK-SSE1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload
-; CHECK-SSE1-NEXT:    movw %ax, (%rdi)
-; CHECK-SSE1-NEXT:    movq %rdi, %rax
+; CHECK-SSE1-NEXT:    movw %ax, (%r10)
+; CHECK-SSE1-NEXT:    movq %r10, %rax
 ; CHECK-SSE1-NEXT:    popq %rbx
 ; CHECK-SSE1-NEXT:    popq %r12
 ; CHECK-SSE1-NEXT:    popq %r13
@@ -4573,62 +4583,62 @@ define <4 x i64> @in_v4i64(<4 x i64> *%p
 ; CHECK-BASELINE-LABEL: in_v4i64:
 ; CHECK-BASELINE:       # %bb.0:
 ; CHECK-BASELINE-NEXT:    pushq %rbx
+; CHECK-BASELINE-NEXT:    movq %rdi, %rax
 ; CHECK-BASELINE-NEXT:    movq 24(%rdx), %r8
 ; CHECK-BASELINE-NEXT:    movq 16(%rdx), %r9
 ; CHECK-BASELINE-NEXT:    movq (%rdx), %r11
 ; CHECK-BASELINE-NEXT:    movq 8(%rdx), %r10
 ; CHECK-BASELINE-NEXT:    movq (%rsi), %rdx
 ; CHECK-BASELINE-NEXT:    xorq %r11, %rdx
-; CHECK-BASELINE-NEXT:    movq 8(%rsi), %rax
-; CHECK-BASELINE-NEXT:    xorq %r10, %rax
+; CHECK-BASELINE-NEXT:    movq 8(%rsi), %rdi
+; CHECK-BASELINE-NEXT:    xorq %r10, %rdi
 ; CHECK-BASELINE-NEXT:    movq 16(%rsi), %rbx
 ; CHECK-BASELINE-NEXT:    xorq %r9, %rbx
 ; CHECK-BASELINE-NEXT:    movq 24(%rsi), %rsi
 ; CHECK-BASELINE-NEXT:    xorq %r8, %rsi
 ; CHECK-BASELINE-NEXT:    andq 24(%rcx), %rsi
 ; CHECK-BASELINE-NEXT:    andq 16(%rcx), %rbx
-; CHECK-BASELINE-NEXT:    andq 8(%rcx), %rax
+; CHECK-BASELINE-NEXT:    andq 8(%rcx), %rdi
 ; CHECK-BASELINE-NEXT:    andq (%rcx), %rdx
 ; CHECK-BASELINE-NEXT:    xorq %r11, %rdx
-; CHECK-BASELINE-NEXT:    xorq %r10, %rax
+; CHECK-BASELINE-NEXT:    xorq %r10, %rdi
 ; CHECK-BASELINE-NEXT:    xorq %r9, %rbx
 ; CHECK-BASELINE-NEXT:    xorq %r8, %rsi
-; CHECK-BASELINE-NEXT:    movq %rsi, 24(%rdi)
-; CHECK-BASELINE-NEXT:    movq %rbx, 16(%rdi)
-; CHECK-BASELINE-NEXT:    movq %rax, 8(%rdi)
-; CHECK-BASELINE-NEXT:    movq %rdx, (%rdi)
-; CHECK-BASELINE-NEXT:    movq %rdi, %rax
+; CHECK-BASELINE-NEXT:    movq %rsi, 24(%rax)
+; CHECK-BASELINE-NEXT:    movq %rbx, 16(%rax)
+; CHECK-BASELINE-NEXT:    movq %rdi, 8(%rax)
+; CHECK-BASELINE-NEXT:    movq %rdx, (%rax)
 ; CHECK-BASELINE-NEXT:    popq %rbx
 ; CHECK-BASELINE-NEXT:    retq
 ;
 ; CHECK-SSE1-LABEL: in_v4i64:
 ; CHECK-SSE1:       # %bb.0:
 ; CHECK-SSE1-NEXT:    pushq %rbx
+; CHECK-SSE1-NEXT:    movq %rdi, %rax
 ; CHECK-SSE1-NEXT:    movq 24(%rdx), %r8
 ; CHECK-SSE1-NEXT:    movq 16(%rdx), %r9
 ; CHECK-SSE1-NEXT:    movq (%rdx), %r11
 ; CHECK-SSE1-NEXT:    movq 8(%rdx), %r10
 ; CHECK-SSE1-NEXT:    movq (%rsi), %rdx
 ; CHECK-SSE1-NEXT:    xorq %r11, %rdx
-; CHECK-SSE1-NEXT:    movq 8(%rsi), %rax
-; CHECK-SSE1-NEXT:    xorq %r10, %rax
+; CHECK-SSE1-NEXT:    movq 8(%rsi), %rdi
+; CHECK-SSE1-NEXT:    xorq %r10, %rdi
 ; CHECK-SSE1-NEXT:    movq 16(%rsi), %rbx
 ; CHECK-SSE1-NEXT:    xorq %r9, %rbx
 ; CHECK-SSE1-NEXT:    movq 24(%rsi), %rsi
 ; CHECK-SSE1-NEXT:    xorq %r8, %rsi
 ; CHECK-SSE1-NEXT:    andq 24(%rcx), %rsi
 ; CHECK-SSE1-NEXT:    andq 16(%rcx), %rbx
-; CHECK-SSE1-NEXT:    andq 8(%rcx), %rax
+; CHECK-SSE1-NEXT:    andq 8(%rcx), %rdi
 ; CHECK-SSE1-NEXT:    andq (%rcx), %rdx
 ; CHECK-SSE1-NEXT:    xorq %r11, %rdx
-; CHECK-SSE1-NEXT:    xorq %r10, %rax
+; CHECK-SSE1-NEXT:    xorq %r10, %rdi
 ; CHECK-SSE1-NEXT:    xorq %r9, %rbx
 ; CHECK-SSE1-NEXT:    xorq %r8, %rsi
-; CHECK-SSE1-NEXT:    movq %rsi, 24(%rdi)
-; CHECK-SSE1-NEXT:    movq %rbx, 16(%rdi)
-; CHECK-SSE1-NEXT:    movq %rax, 8(%rdi)
-; CHECK-SSE1-NEXT:    movq %rdx, (%rdi)
-; CHECK-SSE1-NEXT:    movq %rdi, %rax
+; CHECK-SSE1-NEXT:    movq %rsi, 24(%rax)
+; CHECK-SSE1-NEXT:    movq %rbx, 16(%rax)
+; CHECK-SSE1-NEXT:    movq %rdi, 8(%rax)
+; CHECK-SSE1-NEXT:    movq %rdx, (%rax)
 ; CHECK-SSE1-NEXT:    popq %rbx
 ; CHECK-SSE1-NEXT:    retq
 ;

Modified: llvm/trunk/test/CodeGen/X86/urem-power-of-two.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/urem-power-of-two.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/urem-power-of-two.ll (original)
+++ llvm/trunk/test/CodeGen/X86/urem-power-of-two.ll Wed Sep 19 11:59:08 2018
@@ -14,8 +14,8 @@ define i64 @const_pow_2(i64 %x) {
 ;
 ; X64-LABEL: const_pow_2:
 ; X64:       # %bb.0:
-; X64-NEXT:    andl $31, %edi
 ; X64-NEXT:    movq %rdi, %rax
+; X64-NEXT:    andl $31, %eax
 ; X64-NEXT:    retq
   %urem = urem i64 %x, 32
   ret i64 %urem
@@ -35,8 +35,9 @@ define i25 @shift_left_pow_2(i25 %x, i25
 ;
 ; X64-LABEL: shift_left_pow_2:
 ; X64:       # %bb.0:
-; X64-NEXT:    movl $1, %eax
 ; X64-NEXT:    movl %esi, %ecx
+; X64-NEXT:    movl $1, %eax
+; X64-NEXT:    # kill: def $cl killed $cl killed $ecx
 ; X64-NEXT:    shll %cl, %eax
 ; X64-NEXT:    addl $33554431, %eax # imm = 0x1FFFFFF
 ; X64-NEXT:    andl %edi, %eax
@@ -61,8 +62,9 @@ define i16 @shift_right_pow_2(i16 %x, i1
 ;
 ; X64-LABEL: shift_right_pow_2:
 ; X64:       # %bb.0:
-; X64-NEXT:    movl $32768, %eax # imm = 0x8000
 ; X64-NEXT:    movl %esi, %ecx
+; X64-NEXT:    movl $32768, %eax # imm = 0x8000
+; X64-NEXT:    # kill: def $cl killed $cl killed $ecx
 ; X64-NEXT:    shrl %cl, %eax
 ; X64-NEXT:    decl %eax
 ; X64-NEXT:    andl %edi, %eax

Modified: llvm/trunk/test/CodeGen/X86/urem-seteq-optsize.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/urem-seteq-optsize.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/urem-seteq-optsize.ll (original)
+++ llvm/trunk/test/CodeGen/X86/urem-seteq-optsize.ll Wed Sep 19 11:59:08 2018
@@ -26,10 +26,10 @@ define i32 @test_minsize(i32 %X) optsize
 ;
 ; X64-LABEL: test_minsize:
 ; X64:       # %bb.0:
+; X64-NEXT:    movl %edi, %eax
 ; X64-NEXT:    pushq $5
 ; X64-NEXT:    popq %rcx
 ; X64-NEXT:    xorl %edx, %edx
-; X64-NEXT:    movl %edi, %eax
 ; X64-NEXT:    divl %ecx
 ; X64-NEXT:    testl %edx, %edx
 ; X64-NEXT:    pushq $42

Modified: llvm/trunk/test/CodeGen/X86/use-add-flags.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/use-add-flags.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/use-add-flags.ll (original)
+++ llvm/trunk/test/CodeGen/X86/use-add-flags.ll Wed Sep 19 11:59:08 2018
@@ -10,16 +10,16 @@
 define i32 @test1(i32* %x, i32 %y, i32 %a, i32 %b) nounwind {
 ; LNX-LABEL: test1:
 ; LNX:       # %bb.0:
-; LNX-NEXT:    addl (%rdi), %esi
-; LNX-NEXT:    cmovnsl %ecx, %edx
 ; LNX-NEXT:    movl %edx, %eax
+; LNX-NEXT:    addl (%rdi), %esi
+; LNX-NEXT:    cmovnsl %ecx, %eax
 ; LNX-NEXT:    retq
 ;
 ; WIN-LABEL: test1:
 ; WIN:       # %bb.0:
-; WIN-NEXT:    addl (%rcx), %edx
-; WIN-NEXT:    cmovnsl %r9d, %r8d
 ; WIN-NEXT:    movl %r8d, %eax
+; WIN-NEXT:    addl (%rcx), %edx
+; WIN-NEXT:    cmovnsl %r9d, %eax
 ; WIN-NEXT:    retq
 	%tmp2 = load i32, i32* %x, align 4		; <i32> [#uses=1]
 	%tmp4 = add i32 %tmp2, %y		; <i32> [#uses=1]

Modified: llvm/trunk/test/CodeGen/X86/vec_cast.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vec_cast.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vec_cast.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vec_cast.ll Wed Sep 19 11:59:08 2018
@@ -175,11 +175,13 @@ define <1 x i16> @i(<1 x i32> %a) nounwi
 ; CHECK-LIN-LABEL: i:
 ; CHECK-LIN:       # %bb.0:
 ; CHECK-LIN-NEXT:    movl %edi, %eax
+; CHECK-LIN-NEXT:    # kill: def $ax killed $ax killed $eax
 ; CHECK-LIN-NEXT:    retq
 ;
 ; CHECK-WIN-LABEL: i:
 ; CHECK-WIN:       # %bb.0:
 ; CHECK-WIN-NEXT:    movl %ecx, %eax
+; CHECK-WIN-NEXT:    # kill: def $ax killed $ax killed $eax
 ; CHECK-WIN-NEXT:    retq
   %c = trunc <1 x i32> %a to <1 x i16>
   ret <1 x i16> %c

Modified: llvm/trunk/test/CodeGen/X86/vector-bitreverse.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-bitreverse.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vector-bitreverse.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vector-bitreverse.ll Wed Sep 19 11:59:08 2018
@@ -14,38 +14,40 @@
 define i8 @test_bitreverse_i8(i8 %a) nounwind {
 ; SSE-LABEL: test_bitreverse_i8:
 ; SSE:       # %bb.0:
-; SSE-NEXT:    rolb $4, %dil
-; SSE-NEXT:    movl %edi, %eax
-; SSE-NEXT:    andb $51, %al
-; SSE-NEXT:    shlb $2, %al
-; SSE-NEXT:    andb $-52, %dil
-; SSE-NEXT:    shrb $2, %dil
-; SSE-NEXT:    orb %al, %dil
-; SSE-NEXT:    movl %edi, %eax
-; SSE-NEXT:    andb $85, %al
-; SSE-NEXT:    addb %al, %al
-; SSE-NEXT:    andb $-86, %dil
-; SSE-NEXT:    shrb %dil
-; SSE-NEXT:    orb %al, %dil
 ; SSE-NEXT:    movl %edi, %eax
+; SSE-NEXT:    rolb $4, %al
+; SSE-NEXT:    movl %eax, %ecx
+; SSE-NEXT:    andb $51, %cl
+; SSE-NEXT:    shlb $2, %cl
+; SSE-NEXT:    andb $-52, %al
+; SSE-NEXT:    shrb $2, %al
+; SSE-NEXT:    orb %cl, %al
+; SSE-NEXT:    movl %eax, %ecx
+; SSE-NEXT:    andb $85, %cl
+; SSE-NEXT:    addb %cl, %cl
+; SSE-NEXT:    andb $-86, %al
+; SSE-NEXT:    shrb %al
+; SSE-NEXT:    orb %cl, %al
+; SSE-NEXT:    # kill: def $al killed $al killed $eax
 ; SSE-NEXT:    retq
 ;
 ; AVX-LABEL: test_bitreverse_i8:
 ; AVX:       # %bb.0:
-; AVX-NEXT:    rolb $4, %dil
-; AVX-NEXT:    movl %edi, %eax
-; AVX-NEXT:    andb $51, %al
-; AVX-NEXT:    shlb $2, %al
-; AVX-NEXT:    andb $-52, %dil
-; AVX-NEXT:    shrb $2, %dil
-; AVX-NEXT:    orb %al, %dil
-; AVX-NEXT:    movl %edi, %eax
-; AVX-NEXT:    andb $85, %al
-; AVX-NEXT:    addb %al, %al
-; AVX-NEXT:    andb $-86, %dil
-; AVX-NEXT:    shrb %dil
-; AVX-NEXT:    orb %al, %dil
 ; AVX-NEXT:    movl %edi, %eax
+; AVX-NEXT:    rolb $4, %al
+; AVX-NEXT:    movl %eax, %ecx
+; AVX-NEXT:    andb $51, %cl
+; AVX-NEXT:    shlb $2, %cl
+; AVX-NEXT:    andb $-52, %al
+; AVX-NEXT:    shrb $2, %al
+; AVX-NEXT:    orb %cl, %al
+; AVX-NEXT:    movl %eax, %ecx
+; AVX-NEXT:    andb $85, %cl
+; AVX-NEXT:    addb %cl, %cl
+; AVX-NEXT:    andb $-86, %al
+; AVX-NEXT:    shrb %al
+; AVX-NEXT:    orb %cl, %al
+; AVX-NEXT:    # kill: def $al killed $al killed $eax
 ; AVX-NEXT:    retq
 ;
 ; XOP-LABEL: test_bitreverse_i8:

Modified: llvm/trunk/test/CodeGen/X86/vector-blend.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-blend.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vector-blend.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vector-blend.ll Wed Sep 19 11:59:08 2018
@@ -338,30 +338,30 @@ entry:
 define <8 x double> @vsel_double8(<8 x double> %v1, <8 x double> %v2) {
 ; SSE2-LABEL: vsel_double8:
 ; SSE2:       # %bb.0: # %entry
+; SSE2-NEXT:    movaps %xmm7, %xmm3
+; SSE2-NEXT:    movaps %xmm5, %xmm1
 ; SSE2-NEXT:    movsd {{.*#+}} xmm4 = xmm0[0],xmm4[1]
 ; SSE2-NEXT:    movsd {{.*#+}} xmm6 = xmm2[0],xmm6[1]
 ; SSE2-NEXT:    movapd %xmm4, %xmm0
-; SSE2-NEXT:    movaps %xmm5, %xmm1
 ; SSE2-NEXT:    movapd %xmm6, %xmm2
-; SSE2-NEXT:    movaps %xmm7, %xmm3
 ; SSE2-NEXT:    retq
 ;
 ; SSSE3-LABEL: vsel_double8:
 ; SSSE3:       # %bb.0: # %entry
+; SSSE3-NEXT:    movaps %xmm7, %xmm3
+; SSSE3-NEXT:    movaps %xmm5, %xmm1
 ; SSSE3-NEXT:    movsd {{.*#+}} xmm4 = xmm0[0],xmm4[1]
 ; SSSE3-NEXT:    movsd {{.*#+}} xmm6 = xmm2[0],xmm6[1]
 ; SSSE3-NEXT:    movapd %xmm4, %xmm0
-; SSSE3-NEXT:    movaps %xmm5, %xmm1
 ; SSSE3-NEXT:    movapd %xmm6, %xmm2
-; SSSE3-NEXT:    movaps %xmm7, %xmm3
 ; SSSE3-NEXT:    retq
 ;
 ; SSE41-LABEL: vsel_double8:
 ; SSE41:       # %bb.0: # %entry
+; SSE41-NEXT:    movaps %xmm7, %xmm3
+; SSE41-NEXT:    movaps %xmm5, %xmm1
 ; SSE41-NEXT:    blendps {{.*#+}} xmm0 = xmm0[0,1],xmm4[2,3]
 ; SSE41-NEXT:    blendps {{.*#+}} xmm2 = xmm2[0,1],xmm6[2,3]
-; SSE41-NEXT:    movaps %xmm5, %xmm1
-; SSE41-NEXT:    movaps %xmm7, %xmm3
 ; SSE41-NEXT:    retq
 ;
 ; AVX-LABEL: vsel_double8:
@@ -377,30 +377,30 @@ entry:
 define <8 x i64> @vsel_i648(<8 x i64> %v1, <8 x i64> %v2) {
 ; SSE2-LABEL: vsel_i648:
 ; SSE2:       # %bb.0: # %entry
+; SSE2-NEXT:    movaps %xmm7, %xmm3
+; SSE2-NEXT:    movaps %xmm5, %xmm1
 ; SSE2-NEXT:    movsd {{.*#+}} xmm4 = xmm0[0],xmm4[1]
 ; SSE2-NEXT:    movsd {{.*#+}} xmm6 = xmm2[0],xmm6[1]
 ; SSE2-NEXT:    movapd %xmm4, %xmm0
-; SSE2-NEXT:    movaps %xmm5, %xmm1
 ; SSE2-NEXT:    movapd %xmm6, %xmm2
-; SSE2-NEXT:    movaps %xmm7, %xmm3
 ; SSE2-NEXT:    retq
 ;
 ; SSSE3-LABEL: vsel_i648:
 ; SSSE3:       # %bb.0: # %entry
+; SSSE3-NEXT:    movaps %xmm7, %xmm3
+; SSSE3-NEXT:    movaps %xmm5, %xmm1
 ; SSSE3-NEXT:    movsd {{.*#+}} xmm4 = xmm0[0],xmm4[1]
 ; SSSE3-NEXT:    movsd {{.*#+}} xmm6 = xmm2[0],xmm6[1]
 ; SSSE3-NEXT:    movapd %xmm4, %xmm0
-; SSSE3-NEXT:    movaps %xmm5, %xmm1
 ; SSSE3-NEXT:    movapd %xmm6, %xmm2
-; SSSE3-NEXT:    movaps %xmm7, %xmm3
 ; SSSE3-NEXT:    retq
 ;
 ; SSE41-LABEL: vsel_i648:
 ; SSE41:       # %bb.0: # %entry
+; SSE41-NEXT:    movaps %xmm7, %xmm3
+; SSE41-NEXT:    movaps %xmm5, %xmm1
 ; SSE41-NEXT:    blendps {{.*#+}} xmm0 = xmm0[0,1],xmm4[2,3]
 ; SSE41-NEXT:    blendps {{.*#+}} xmm2 = xmm2[0,1],xmm6[2,3]
-; SSE41-NEXT:    movaps %xmm5, %xmm1
-; SSE41-NEXT:    movaps %xmm7, %xmm3
 ; SSE41-NEXT:    retq
 ;
 ; AVX-LABEL: vsel_i648:
@@ -528,22 +528,22 @@ entry:
 define <4 x double> @constant_blendvpd_avx(<4 x double> %xy, <4 x double> %ab) {
 ; SSE2-LABEL: constant_blendvpd_avx:
 ; SSE2:       # %bb.0: # %entry
-; SSE2-NEXT:    movsd {{.*#+}} xmm3 = xmm1[0],xmm3[1]
 ; SSE2-NEXT:    movaps %xmm2, %xmm0
+; SSE2-NEXT:    movsd {{.*#+}} xmm3 = xmm1[0],xmm3[1]
 ; SSE2-NEXT:    movapd %xmm3, %xmm1
 ; SSE2-NEXT:    retq
 ;
 ; SSSE3-LABEL: constant_blendvpd_avx:
 ; SSSE3:       # %bb.0: # %entry
-; SSSE3-NEXT:    movsd {{.*#+}} xmm3 = xmm1[0],xmm3[1]
 ; SSSE3-NEXT:    movaps %xmm2, %xmm0
+; SSSE3-NEXT:    movsd {{.*#+}} xmm3 = xmm1[0],xmm3[1]
 ; SSSE3-NEXT:    movapd %xmm3, %xmm1
 ; SSSE3-NEXT:    retq
 ;
 ; SSE41-LABEL: constant_blendvpd_avx:
 ; SSE41:       # %bb.0: # %entry
-; SSE41-NEXT:    blendps {{.*#+}} xmm1 = xmm1[0,1],xmm3[2,3]
 ; SSE41-NEXT:    movaps %xmm2, %xmm0
+; SSE41-NEXT:    blendps {{.*#+}} xmm1 = xmm1[0,1],xmm3[2,3]
 ; SSE41-NEXT:    retq
 ;
 ; AVX-LABEL: constant_blendvpd_avx:
@@ -740,20 +740,20 @@ entry:
 define <4 x i64> @blend_shufflevector_4xi64(<4 x i64> %a, <4 x i64> %b) {
 ; SSE2-LABEL: blend_shufflevector_4xi64:
 ; SSE2:       # %bb.0: # %entry
-; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm2[0],xmm0[1]
 ; SSE2-NEXT:    movaps %xmm3, %xmm1
+; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm2[0],xmm0[1]
 ; SSE2-NEXT:    retq
 ;
 ; SSSE3-LABEL: blend_shufflevector_4xi64:
 ; SSSE3:       # %bb.0: # %entry
-; SSSE3-NEXT:    movsd {{.*#+}} xmm0 = xmm2[0],xmm0[1]
 ; SSSE3-NEXT:    movaps %xmm3, %xmm1
+; SSSE3-NEXT:    movsd {{.*#+}} xmm0 = xmm2[0],xmm0[1]
 ; SSSE3-NEXT:    retq
 ;
 ; SSE41-LABEL: blend_shufflevector_4xi64:
 ; SSE41:       # %bb.0: # %entry
-; SSE41-NEXT:    blendps {{.*#+}} xmm0 = xmm2[0,1],xmm0[2,3]
 ; SSE41-NEXT:    movaps %xmm3, %xmm1
+; SSE41-NEXT:    blendps {{.*#+}} xmm0 = xmm2[0,1],xmm0[2,3]
 ; SSE41-NEXT:    retq
 ;
 ; AVX-LABEL: blend_shufflevector_4xi64:

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=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vector-compare-results.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vector-compare-results.ll Wed Sep 19 11:59:08 2018
@@ -344,254 +344,254 @@ 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), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, 2(%rdi)
+; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, (%rdi)
-; SSE2-NEXT:    movq %rdi, %rax
+; 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, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm1, %ecx
+; SSE42-NEXT:    pextrb $1, %xmm1, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $2, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $3, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $4, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $5, %xmm1, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $6, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $7, %xmm1, %edx
+; SSE42-NEXT:    pextrb $0, %xmm1, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $9, %xmm1, %edx
+; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
+; SSE42-NEXT:    pextrb $2, %xmm1, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $9, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $10, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $11, %xmm1, %edx
+; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
+; SSE42-NEXT:    pextrb $3, %xmm1, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $12, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $13, %xmm1, %edx
+; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
+; SSE42-NEXT:    pextrb $4, %xmm1, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $13, %edx
+; SSE42-NEXT:    shll $4, %edx
 ; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $14, %xmm1, %ecx
+; SSE42-NEXT:    pextrb $5, %xmm1, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $15, %xmm1, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, 2(%rdi)
-; SSE42-NEXT:    pextrb $1, %xmm0, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $2, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $3, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $4, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $5, %xmm0, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $6, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $7, %xmm0, %edx
+; SSE42-NEXT:    pextrb $6, %xmm1, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $9, %xmm0, %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 $9, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $10, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $11, %xmm0, %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 $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $12, %xmm0, %ecx
+; 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:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $13, %xmm0, %edx
+; SSE42-NEXT:    pextrb $0, %xmm0, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $13, %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 $14, %xmm0, %ecx
+; SSE42-NEXT:    pextrb $5, %xmm0, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $15, %xmm0, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, (%rdi)
-; SSE42-NEXT:    movq %rdi, %rax
+; 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
 ;
 ; AVX1-LABEL: test_cmp_v32i8:
@@ -933,6 +933,7 @@ 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
@@ -940,253 +941,252 @@ define <32 x i1> @test_cmp_v32i16(<32 x
 ; SSE2-NEXT:    pcmpgtw %xmm6, %xmm2
 ; SSE2-NEXT:    packsswb %xmm3, %xmm2
 ; SSE2-NEXT:    movdqa %xmm2, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, 2(%rdi)
+; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, (%rdi)
-; SSE2-NEXT:    movq %rdi, %rax
+; 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, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $4, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $6, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $8, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $10, %xmm2, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $12, %xmm2, %ecx
+; SSE42-NEXT:    pextrb $2, %xmm2, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $14, %xmm2, %edx
+; SSE42-NEXT:    pextrb $0, %xmm2, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $0, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $2, %xmm3, %edx
+; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
+; SSE42-NEXT:    pextrb $4, %xmm2, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $9, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $4, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $6, %xmm3, %edx
+; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
+; SSE42-NEXT:    pextrb $6, %xmm2, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $10, %xmm3, %edx
+; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
+; SSE42-NEXT:    pextrb $8, %xmm2, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $13, %edx
+; SSE42-NEXT:    shll $4, %edx
 ; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $12, %xmm3, %ecx
+; SSE42-NEXT:    pextrb $10, %xmm2, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $14, %xmm3, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, 2(%rdi)
-; SSE42-NEXT:    pextrb $2, %xmm0, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $4, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $6, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $8, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $10, %xmm0, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $12, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $14, %xmm0, %edx
+; SSE42-NEXT:    pextrb $12, %xmm2, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $0, %xmm1, %ecx
+; 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:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $2, %xmm1, %edx
+; 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 $9, %edx
+; SSE42-NEXT:    shll $4, %edx
 ; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $4, %xmm1, %ecx
+; SSE42-NEXT:    pextrb $10, %xmm0, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $6, %xmm1, %edx
+; SSE42-NEXT:    pextrb $12, %xmm0, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $10, %xmm1, %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 $13, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $12, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $14, %xmm1, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, (%rdi)
-; SSE42-NEXT:    movq %rdi, %rax
+; 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
 ;
 ; AVX1-LABEL: test_cmp_v32i16:
@@ -1247,500 +1247,501 @@ 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), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, 6(%rdi)
+; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, 4(%rdi)
+; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, 2(%rdi)
+; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, (%rdi)
-; SSE2-NEXT:    movq %rdi, %rax
+; 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, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $2, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $3, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $4, %xmm3, %ecx
+; SSE42-NEXT:    pextrb $1, %xmm3, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $5, %xmm3, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $6, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $7, %xmm3, %edx
+; SSE42-NEXT:    pextrb $0, %xmm3, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $9, %xmm3, %edx
+; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
+; SSE42-NEXT:    pextrb $2, %xmm3, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $9, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $10, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $11, %xmm3, %edx
+; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
+; SSE42-NEXT:    pextrb $3, %xmm3, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $12, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $13, %xmm3, %edx
+; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
+; SSE42-NEXT:    pextrb $4, %xmm3, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $13, %edx
+; SSE42-NEXT:    shll $4, %edx
 ; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $14, %xmm3, %ecx
+; SSE42-NEXT:    pextrb $5, %xmm3, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $15, %xmm3, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, 6(%rdi)
-; SSE42-NEXT:    pextrb $1, %xmm2, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $2, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $3, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $4, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $5, %xmm2, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $6, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $7, %xmm2, %edx
+; SSE42-NEXT:    pextrb $6, %xmm3, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $9, %xmm2, %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 $9, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $10, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $11, %xmm2, %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 $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $12, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $13, %xmm2, %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 $13, %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 $14, %xmm2, %ecx
+; SSE42-NEXT:    pextrb $5, %xmm2, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $15, %xmm2, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, 4(%rdi)
-; SSE42-NEXT:    pextrb $1, %xmm1, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $2, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $3, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $4, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $5, %xmm1, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $6, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $7, %xmm1, %edx
+; SSE42-NEXT:    pextrb $6, %xmm2, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm1, %ecx
+; 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:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $9, %xmm1, %edx
+; 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:    shll $9, %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 $10, %xmm1, %ecx
+; SSE42-NEXT:    pextrb $5, %xmm1, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $11, %xmm1, %edx
+; SSE42-NEXT:    pextrb $6, %xmm1, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $12, %xmm1, %ecx
+; 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:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $13, %xmm1, %edx
+; 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:    shll $13, %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 $14, %xmm1, %ecx
+; SSE42-NEXT:    pextrb $5, %xmm0, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $15, %xmm1, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, 2(%rdi)
-; SSE42-NEXT:    pextrb $1, %xmm0, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $2, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $3, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $4, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $5, %xmm0, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $6, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $7, %xmm0, %edx
+; SSE42-NEXT:    pextrb $6, %xmm0, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $9, %xmm0, %edx
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $9, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $10, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $11, %xmm0, %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 $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $12, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $13, %xmm0, %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 $13, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $14, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $15, %xmm0, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, (%rdi)
-; SSE42-NEXT:    movq %rdi, %rax
+; 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
 ;
 ; 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
@@ -1749,509 +1750,508 @@ define <64 x i1> @test_cmp_v64i8(<64 x i
 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
 ; AVX1-NEXT:    vpcmpgtb %xmm2, %xmm5, %xmm2
 ; AVX1-NEXT:    vpcmpgtb %xmm3, %xmm1, %xmm1
-; AVX1-NEXT:    vpextrb $1, %xmm1, %eax
-; AVX1-NEXT:    andl $1, %eax
-; AVX1-NEXT:    vpextrb $0, %xmm1, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rcx,%rax,2), %eax
-; AVX1-NEXT:    vpextrb $2, %xmm1, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rax,%rcx,4), %eax
-; AVX1-NEXT:    vpextrb $3, %xmm1, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rax,%rcx,8), %eax
-; AVX1-NEXT:    vpextrb $4, %xmm1, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $4, %ecx
-; AVX1-NEXT:    orl %eax, %ecx
-; AVX1-NEXT:    vpextrb $5, %xmm1, %eax
-; AVX1-NEXT:    andl $1, %eax
-; AVX1-NEXT:    shll $5, %eax
-; AVX1-NEXT:    orl %ecx, %eax
-; AVX1-NEXT:    vpextrb $6, %xmm1, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $6, %ecx
-; AVX1-NEXT:    vpextrb $7, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $7, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $8, %xmm1, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $8, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $9, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $9, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $10, %xmm1, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $10, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $11, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $11, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $12, %xmm1, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $12, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $13, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $13, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $14, %xmm1, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $14, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $15, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $15, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $0, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $16, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $1, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $17, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $2, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $18, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $3, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $19, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $4, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $20, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $5, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $21, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $6, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $22, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $7, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $23, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $8, %xmm2, %ecx
+; AVX1-NEXT:    vpextrb $1, %xmm1, %ecx
 ; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $24, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $9, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $25, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $10, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $26, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $11, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $27, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $12, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $28, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $13, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $29, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $14, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $30, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $15, %xmm2, %edx
-; AVX1-NEXT:    shll $31, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    orl %eax, %edx
-; AVX1-NEXT:    movl %edx, 4(%rdi)
-; AVX1-NEXT:    vpextrb $1, %xmm0, %eax
-; AVX1-NEXT:    andl $1, %eax
-; AVX1-NEXT:    vpextrb $0, %xmm0, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rcx,%rax,2), %eax
-; AVX1-NEXT:    vpextrb $2, %xmm0, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rax,%rcx,4), %eax
-; AVX1-NEXT:    vpextrb $3, %xmm0, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rax,%rcx,8), %eax
-; AVX1-NEXT:    vpextrb $4, %xmm0, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $4, %ecx
-; AVX1-NEXT:    orl %eax, %ecx
-; AVX1-NEXT:    vpextrb $5, %xmm0, %eax
-; AVX1-NEXT:    andl $1, %eax
-; AVX1-NEXT:    shll $5, %eax
-; AVX1-NEXT:    orl %ecx, %eax
-; AVX1-NEXT:    vpextrb $6, %xmm0, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $6, %ecx
-; AVX1-NEXT:    vpextrb $7, %xmm0, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $7, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $8, %xmm0, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $8, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $9, %xmm0, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $9, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $10, %xmm0, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $10, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $11, %xmm0, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $11, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $12, %xmm0, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $12, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $13, %xmm0, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $13, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $14, %xmm0, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $14, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $15, %xmm0, %edx
+; AVX1-NEXT:    vpextrb $0, %xmm1, %edx
 ; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $15, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $0, %xmm4, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $16, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $1, %xmm4, %edx
+; AVX1-NEXT:    leal (%rdx,%rcx,2), %ecx
+; AVX1-NEXT:    vpextrb $2, %xmm1, %edx
 ; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $17, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $2, %xmm4, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $18, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $3, %xmm4, %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:    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 $19, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $4, %xmm4, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $20, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $5, %xmm4, %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 $21, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $6, %xmm4, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $22, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $7, %xmm4, %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 $23, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $8, %xmm4, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $24, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $9, %xmm4, %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 $25, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $10, %xmm4, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $26, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $11, %xmm4, %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 $27, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $12, %xmm4, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $28, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $13, %xmm4, %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 $29, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $14, %xmm4, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $30, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $15, %xmm4, %edx
-; AVX1-NEXT:    shll $31, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    orl %eax, %edx
-; AVX1-NEXT:    movl %edx, (%rdi)
-; AVX1-NEXT:    movq %rdi, %rax
+; 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, (%rdi)
 ; AVX1-NEXT:    vzeroupper
 ; AVX1-NEXT:    retq
 ;
 ; AVX2-LABEL: test_cmp_v64i8:
 ; 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, %eax
-; AVX2-NEXT:    andl $1, %eax
-; AVX2-NEXT:    vpextrb $0, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rcx,%rax,2), %eax
-; AVX2-NEXT:    vpextrb $2, %xmm1, %ecx
+; AVX2-NEXT:    vpextrb $1, %xmm1, %ecx
 ; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rax,%rcx,4), %eax
-; AVX2-NEXT:    vpextrb $3, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rax,%rcx,8), %eax
-; AVX2-NEXT:    vpextrb $4, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $4, %ecx
-; AVX2-NEXT:    orl %eax, %ecx
-; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
-; AVX2-NEXT:    andl $1, %eax
-; AVX2-NEXT:    shll $5, %eax
-; AVX2-NEXT:    orl %ecx, %eax
-; AVX2-NEXT:    vpextrb $6, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $6, %ecx
-; AVX2-NEXT:    vpextrb $7, %xmm1, %edx
+; AVX2-NEXT:    vpextrb $0, %xmm1, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $7, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $8, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $8, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $9, %xmm1, %edx
+; AVX2-NEXT:    leal (%rdx,%rcx,2), %ecx
+; AVX2-NEXT:    vpextrb $2, %xmm1, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $9, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $10, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $10, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $11, %xmm1, %edx
+; AVX2-NEXT:    leal (%rcx,%rdx,4), %ecx
+; AVX2-NEXT:    vpextrb $3, %xmm1, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $11, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $12, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $12, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $13, %xmm1, %edx
+; AVX2-NEXT:    leal (%rcx,%rdx,8), %ecx
+; AVX2-NEXT:    vpextrb $4, %xmm1, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $13, %edx
+; AVX2-NEXT:    shll $4, %edx
 ; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $14, %xmm1, %ecx
+; AVX2-NEXT:    vpextrb $5, %xmm1, %ecx
 ; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $14, %ecx
+; AVX2-NEXT:    shll $5, %ecx
 ; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $15, %xmm1, %edx
+; AVX2-NEXT:    vpextrb $6, %xmm1, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $15, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $0, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $16, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $1, %xmm1, %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 $17, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $2, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $18, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $3, %xmm1, %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 $19, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $4, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $20, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $5, %xmm1, %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 $21, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $6, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $22, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $7, %xmm1, %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 $23, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $8, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $24, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $9, %xmm1, %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 $25, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $10, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $26, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $11, %xmm1, %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 $27, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $12, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $28, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $13, %xmm1, %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 $29, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $14, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $30, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $15, %xmm1, %edx
-; AVX2-NEXT:    shll $31, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    orl %eax, %edx
-; AVX2-NEXT:    movl %edx, 4(%rdi)
-; AVX2-NEXT:    vpextrb $1, %xmm0, %eax
-; AVX2-NEXT:    andl $1, %eax
-; AVX2-NEXT:    vpextrb $0, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rcx,%rax,2), %eax
-; AVX2-NEXT:    vpextrb $2, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rax,%rcx,4), %eax
-; AVX2-NEXT:    vpextrb $3, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rax,%rcx,8), %eax
-; AVX2-NEXT:    vpextrb $4, %xmm0, %ecx
+; 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:    shll $4, %ecx
-; AVX2-NEXT:    orl %eax, %ecx
-; AVX2-NEXT:    vpextrb $5, %xmm0, %eax
-; AVX2-NEXT:    andl $1, %eax
-; AVX2-NEXT:    shll $5, %eax
-; AVX2-NEXT:    orl %ecx, %eax
-; AVX2-NEXT:    vpextrb $6, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $6, %ecx
-; AVX2-NEXT:    vpextrb $7, %xmm0, %edx
+; AVX2-NEXT:    vpextrb $0, %xmm0, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $7, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $8, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $8, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $9, %xmm0, %edx
+; AVX2-NEXT:    leal (%rdx,%rcx,2), %ecx
+; AVX2-NEXT:    vpextrb $2, %xmm0, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $9, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $10, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $10, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $11, %xmm0, %edx
+; AVX2-NEXT:    leal (%rcx,%rdx,4), %ecx
+; AVX2-NEXT:    vpextrb $3, %xmm0, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $11, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $12, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $12, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $13, %xmm0, %edx
+; AVX2-NEXT:    leal (%rcx,%rdx,8), %ecx
+; AVX2-NEXT:    vpextrb $4, %xmm0, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $13, %edx
+; AVX2-NEXT:    shll $4, %edx
 ; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $14, %xmm0, %ecx
+; AVX2-NEXT:    vpextrb $5, %xmm0, %ecx
 ; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $14, %ecx
+; AVX2-NEXT:    shll $5, %ecx
 ; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $15, %xmm0, %edx
+; AVX2-NEXT:    vpextrb $6, %xmm0, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $15, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
-; AVX2-NEXT:    vpextrb $0, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $16, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $1, %xmm0, %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 $17, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $2, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $18, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $3, %xmm0, %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 $19, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $4, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $20, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $5, %xmm0, %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 $21, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $6, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $22, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $7, %xmm0, %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 $23, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $8, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $24, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $9, %xmm0, %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 $25, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $10, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $26, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $11, %xmm0, %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 $27, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $12, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $28, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $13, %xmm0, %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 $29, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $14, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $30, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $15, %xmm0, %edx
-; AVX2-NEXT:    shll $31, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    orl %eax, %edx
-; AVX2-NEXT:    movl %edx, (%rdi)
-; AVX2-NEXT:    movq %rdi, %rax
+; 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:    vzeroupper
 ; AVX2-NEXT:    retq
 ;
@@ -2394,6 +2394,7 @@ 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
@@ -2426,130 +2427,130 @@ define <32 x i1> @test_cmp_v32f32(<32 x
 ; SSE2-NEXT:    packuswb %xmm11, %xmm9
 ; SSE2-NEXT:    packuswb %xmm10, %xmm9
 ; SSE2-NEXT:    movdqa %xmm9, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; 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 $11, %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 $12, %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 $13, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $14, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; 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:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, 2(%rdi)
+; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, (%rdi)
-; SSE2-NEXT:    movq %rdi, %rax
+; 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
@@ -2566,125 +2567,124 @@ define <32 x i1> @test_cmp_v32f32(<32 x
 ; SSE42-NEXT:    cmpltps %xmm6, %xmm13
 ; SSE42-NEXT:    cmpltps %xmm5, %xmm14
 ; SSE42-NEXT:    cmpltps %xmm4, %xmm15
-; SSE42-NEXT:    pextrb $4, %xmm15, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm15, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $8, %xmm15, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $12, %xmm15, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $0, %xmm14, %ecx
+; SSE42-NEXT:    pextrb $4, %xmm15, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $4, %xmm14, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $8, %xmm14, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $12, %xmm14, %edx
+; SSE42-NEXT:    pextrb $0, %xmm15, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $0, %xmm13, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $4, %xmm13, %edx
+; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
+; SSE42-NEXT:    pextrb $8, %xmm15, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $9, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm13, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $12, %xmm13, %edx
+; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
+; SSE42-NEXT:    pextrb $12, %xmm15, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $0, %xmm12, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $4, %xmm12, %edx
+; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
+; SSE42-NEXT:    pextrb $0, %xmm14, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $13, %edx
+; SSE42-NEXT:    shll $4, %edx
 ; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm12, %ecx
+; SSE42-NEXT:    pextrb $4, %xmm14, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $12, %xmm12, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, 2(%rdi)
-; SSE42-NEXT:    pextrb $4, %xmm11, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm11, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $8, %xmm11, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $12, %xmm11, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $0, %xmm10, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $4, %xmm10, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $8, %xmm10, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $12, %xmm10, %edx
+; SSE42-NEXT:    pextrb $8, %xmm14, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $0, %xmm9, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $4, %xmm9, %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 $9, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm9, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $12, %xmm9, %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 $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $0, %xmm8, %ecx
+; 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:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $4, %xmm8, %edx
+; 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:    shll $13, %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 $8, %xmm8, %ecx
+; SSE42-NEXT:    pextrb $4, %xmm10, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $12, %xmm8, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, (%rdi)
-; SSE42-NEXT:    movq %rdi, %rax
+; 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
 ;
 ; AVX1-LABEL: test_cmp_v32f32:
@@ -2954,6 +2954,7 @@ 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
@@ -2978,130 +2979,130 @@ define <32 x i1> @test_cmp_v32i32(<32 x
 ; SSE2-NEXT:    packuswb %xmm5, %xmm4
 ; SSE2-NEXT:    packuswb %xmm6, %xmm4
 ; SSE2-NEXT:    movdqa %xmm4, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, 2(%rdi)
+; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, (%rdi)
-; SSE2-NEXT:    movq %rdi, %rax
+; 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
@@ -3110,125 +3111,124 @@ define <32 x i1> @test_cmp_v32i32(<32 x
 ; 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, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm4, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $8, %xmm4, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $12, %xmm4, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $0, %xmm5, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $4, %xmm5, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $8, %xmm5, %ecx
+; SSE42-NEXT:    pextrb $4, %xmm4, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $12, %xmm5, %edx
+; SSE42-NEXT:    pextrb $0, %xmm4, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $0, %xmm6, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $4, %xmm6, %edx
+; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
+; SSE42-NEXT:    pextrb $8, %xmm4, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $9, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm6, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $12, %xmm6, %edx
+; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
+; SSE42-NEXT:    pextrb $12, %xmm4, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $0, %xmm7, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $4, %xmm7, %edx
+; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
+; SSE42-NEXT:    pextrb $0, %xmm5, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $13, %edx
+; SSE42-NEXT:    shll $4, %edx
 ; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm7, %ecx
+; SSE42-NEXT:    pextrb $4, %xmm5, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $12, %xmm7, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, 2(%rdi)
-; SSE42-NEXT:    pextrb $4, %xmm0, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $8, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $12, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $0, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $4, %xmm1, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $8, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $12, %xmm1, %edx
+; SSE42-NEXT:    pextrb $8, %xmm5, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $0, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $4, %xmm2, %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 $9, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $12, %xmm2, %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 $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $0, %xmm3, %ecx
+; 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:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $4, %xmm3, %edx
+; 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:    shll $13, %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 $8, %xmm3, %ecx
+; SSE42-NEXT:    pextrb $4, %xmm1, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $12, %xmm3, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, (%rdi)
-; SSE42-NEXT:    movq %rdi, %rax
+; 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
 ;
 ; AVX1-LABEL: test_cmp_v32i32:
@@ -3309,6 +3309,7 @@ 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
@@ -3322,250 +3323,250 @@ define <64 x i1> @test_cmp_v64i16(<64 x
 ; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, 6(%rdi)
+; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, 4(%rdi)
+; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, 2(%rdi)
+; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, (%rdi)
-; SSE2-NEXT:    movq %rdi, %rax
+; 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
@@ -3574,247 +3575,247 @@ define <64 x i1> @test_cmp_v64i16(<64 x
 ; 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, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm6, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $4, %xmm6, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $6, %xmm6, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $8, %xmm6, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $10, %xmm6, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $12, %xmm6, %ecx
+; SSE42-NEXT:    pextrb $2, %xmm6, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $14, %xmm6, %edx
+; SSE42-NEXT:    pextrb $0, %xmm6, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $0, %xmm7, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $2, %xmm7, %edx
+; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
+; SSE42-NEXT:    pextrb $4, %xmm6, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $9, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $4, %xmm7, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $6, %xmm7, %edx
+; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
+; SSE42-NEXT:    pextrb $6, %xmm6, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm7, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $10, %xmm7, %edx
+; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
+; SSE42-NEXT:    pextrb $8, %xmm6, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $13, %edx
+; SSE42-NEXT:    shll $4, %edx
 ; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $12, %xmm7, %ecx
+; SSE42-NEXT:    pextrb $10, %xmm6, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $14, %xmm7, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, 6(%rdi)
-; SSE42-NEXT:    pextrb $2, %xmm4, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm4, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $4, %xmm4, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $6, %xmm4, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $8, %xmm4, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $10, %xmm4, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $12, %xmm4, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $14, %xmm4, %edx
+; SSE42-NEXT:    pextrb $12, %xmm6, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $0, %xmm5, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $2, %xmm5, %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 $9, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $4, %xmm5, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $6, %xmm5, %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 $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm5, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $10, %xmm5, %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 $13, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $12, %xmm5, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $14, %xmm5, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, 4(%rdi)
-; SSE42-NEXT:    pextrb $2, %xmm2, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $4, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $6, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $8, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $10, %xmm2, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $12, %xmm2, %ecx
+; 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:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $14, %xmm2, %edx
+; SSE42-NEXT:    pextrb $0, %xmm4, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $0, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $2, %xmm3, %edx
+; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
+; SSE42-NEXT:    pextrb $4, %xmm4, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $9, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $4, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $6, %xmm3, %edx
+; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
+; SSE42-NEXT:    pextrb $6, %xmm4, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $10, %xmm3, %edx
+; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
+; SSE42-NEXT:    pextrb $8, %xmm4, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $13, %edx
+; SSE42-NEXT:    shll $4, %edx
 ; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $12, %xmm3, %ecx
+; SSE42-NEXT:    pextrb $10, %xmm4, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $14, %xmm3, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, 2(%rdi)
-; SSE42-NEXT:    pextrb $2, %xmm0, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $4, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $6, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $8, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $10, %xmm0, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $12, %xmm0, %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:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $14, %xmm0, %edx
+; 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:    shll $7, %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 $0, %xmm1, %ecx
+; SSE42-NEXT:    pextrb $10, %xmm2, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $2, %xmm1, %edx
+; SSE42-NEXT:    pextrb $12, %xmm2, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $9, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $4, %xmm1, %ecx
+; 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:    shll $10, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $6, %xmm1, %edx
+; 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:    shll $11, %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 $8, %xmm1, %ecx
+; SSE42-NEXT:    pextrb $10, %xmm0, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $12, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $10, %xmm1, %edx
+; SSE42-NEXT:    pextrb $12, %xmm0, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $13, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $12, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $14, %xmm1, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, (%rdi)
-; SSE42-NEXT:    movq %rdi, %rax
+; 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
 ;
 ; 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:    vpcmpgtw %xmm8, %xmm9, %xmm8
@@ -3831,258 +3832,258 @@ define <64 x i1> @test_cmp_v64i16(<64 x
 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7
 ; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm7, %xmm7
 ; AVX1-NEXT:    vpcmpgtw %xmm6, %xmm2, %xmm2
-; AVX1-NEXT:    vpextrb $2, %xmm2, %eax
-; AVX1-NEXT:    andl $1, %eax
-; AVX1-NEXT:    vpextrb $0, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rcx,%rax,2), %eax
-; AVX1-NEXT:    vpextrb $4, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rax,%rcx,4), %eax
-; AVX1-NEXT:    vpextrb $6, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rax,%rcx,8), %eax
-; AVX1-NEXT:    vpextrb $8, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $4, %ecx
-; AVX1-NEXT:    orl %eax, %ecx
-; AVX1-NEXT:    vpextrb $10, %xmm2, %eax
-; AVX1-NEXT:    andl $1, %eax
-; AVX1-NEXT:    shll $5, %eax
-; AVX1-NEXT:    orl %ecx, %eax
-; AVX1-NEXT:    vpextrb $12, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $6, %ecx
-; AVX1-NEXT:    vpextrb $14, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $7, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $0, %xmm7, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $8, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $2, %xmm7, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $9, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $4, %xmm7, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $10, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $6, %xmm7, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $11, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $8, %xmm7, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $12, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $10, %xmm7, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $13, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $12, %xmm7, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $14, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $14, %xmm7, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $15, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $0, %xmm3, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $16, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $2, %xmm3, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $17, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $4, %xmm3, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $18, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $6, %xmm3, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $19, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $8, %xmm3, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $20, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $10, %xmm3, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $21, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $12, %xmm3, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $22, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $14, %xmm3, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $23, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $0, %xmm4, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $24, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $2, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $25, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $4, %xmm4, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $26, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $6, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $27, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $8, %xmm4, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $28, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $10, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $29, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $12, %xmm4, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $30, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $14, %xmm4, %edx
-; AVX1-NEXT:    shll $31, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    orl %eax, %edx
-; AVX1-NEXT:    movl %edx, 4(%rdi)
-; AVX1-NEXT:    vpextrb $2, %xmm0, %eax
-; AVX1-NEXT:    andl $1, %eax
-; AVX1-NEXT:    vpextrb $0, %xmm0, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rcx,%rax,2), %eax
-; AVX1-NEXT:    vpextrb $4, %xmm0, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rax,%rcx,4), %eax
-; AVX1-NEXT:    vpextrb $6, %xmm0, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rax,%rcx,8), %eax
-; AVX1-NEXT:    vpextrb $8, %xmm0, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $4, %ecx
-; AVX1-NEXT:    orl %eax, %ecx
-; AVX1-NEXT:    vpextrb $10, %xmm0, %eax
-; AVX1-NEXT:    andl $1, %eax
-; AVX1-NEXT:    shll $5, %eax
-; AVX1-NEXT:    orl %ecx, %eax
-; AVX1-NEXT:    vpextrb $12, %xmm0, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $6, %ecx
-; AVX1-NEXT:    vpextrb $14, %xmm0, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $7, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $0, %xmm5, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $8, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $2, %xmm5, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $9, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $4, %xmm5, %ecx
+; AVX1-NEXT:    vpextrb $2, %xmm2, %ecx
 ; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $10, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $6, %xmm5, %edx
+; AVX1-NEXT:    vpextrb $0, %xmm2, %edx
 ; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $11, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $8, %xmm5, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $12, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $10, %xmm5, %edx
+; AVX1-NEXT:    leal (%rdx,%rcx,2), %ecx
+; AVX1-NEXT:    vpextrb $4, %xmm2, %edx
 ; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $13, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $12, %xmm5, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $14, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $14, %xmm5, %edx
+; AVX1-NEXT:    leal (%rcx,%rdx,4), %ecx
+; AVX1-NEXT:    vpextrb $6, %xmm2, %edx
 ; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $15, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $0, %xmm9, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $16, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $2, %xmm9, %edx
+; AVX1-NEXT:    leal (%rcx,%rdx,8), %ecx
+; AVX1-NEXT:    vpextrb $8, %xmm2, %edx
 ; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $17, %edx
+; AVX1-NEXT:    shll $4, %edx
 ; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $4, %xmm9, %ecx
+; AVX1-NEXT:    vpextrb $10, %xmm2, %ecx
 ; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $18, %ecx
+; AVX1-NEXT:    shll $5, %ecx
 ; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $6, %xmm9, %edx
+; AVX1-NEXT:    vpextrb $12, %xmm2, %edx
 ; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $19, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $8, %xmm9, %ecx
+; 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:    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:    shll $20, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $10, %xmm9, %edx
+; AVX1-NEXT:    vpextrb $0, %xmm0, %edx
 ; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $21, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $12, %xmm9, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $22, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $14, %xmm9, %edx
+; AVX1-NEXT:    leal (%rdx,%rcx,2), %ecx
+; AVX1-NEXT:    vpextrb $4, %xmm0, %edx
 ; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $23, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $0, %xmm8, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $24, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $2, %xmm8, %edx
+; AVX1-NEXT:    leal (%rcx,%rdx,4), %ecx
+; AVX1-NEXT:    vpextrb $6, %xmm0, %edx
 ; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $25, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $4, %xmm8, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $26, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $6, %xmm8, %edx
+; AVX1-NEXT:    leal (%rcx,%rdx,8), %ecx
+; AVX1-NEXT:    vpextrb $8, %xmm0, %edx
 ; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $27, %edx
+; AVX1-NEXT:    shll $4, %edx
 ; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $8, %xmm8, %ecx
+; AVX1-NEXT:    vpextrb $10, %xmm0, %ecx
 ; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $28, %ecx
+; AVX1-NEXT:    shll $5, %ecx
 ; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $10, %xmm8, %edx
+; AVX1-NEXT:    vpextrb $12, %xmm0, %edx
 ; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $29, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $12, %xmm8, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $30, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $14, %xmm8, %edx
-; AVX1-NEXT:    shll $31, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    orl %eax, %edx
-; AVX1-NEXT:    movl %edx, (%rdi)
-; AVX1-NEXT:    movq %rdi, %rax
+; 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:    orl %ecx, %esi
+; AVX1-NEXT:    movl %esi, (%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
@@ -4091,253 +4092,252 @@ define <64 x i1> @test_cmp_v64i16(<64 x
 ; AVX2-NEXT:    vextracti128 $1, %ymm7, %xmm3
 ; AVX2-NEXT:    vpcmpgtw %ymm6, %ymm2, %ymm6
 ; AVX2-NEXT:    vextracti128 $1, %ymm6, %xmm2
-; AVX2-NEXT:    vpextrb $2, %xmm6, %eax
-; AVX2-NEXT:    andl $1, %eax
-; AVX2-NEXT:    vpextrb $0, %xmm6, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rcx,%rax,2), %eax
-; AVX2-NEXT:    vpextrb $4, %xmm6, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rax,%rcx,4), %eax
-; AVX2-NEXT:    vpextrb $6, %xmm6, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rax,%rcx,8), %eax
-; AVX2-NEXT:    vpextrb $8, %xmm6, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $4, %ecx
-; AVX2-NEXT:    orl %eax, %ecx
-; AVX2-NEXT:    vpextrb $10, %xmm6, %eax
-; AVX2-NEXT:    andl $1, %eax
-; AVX2-NEXT:    shll $5, %eax
-; AVX2-NEXT:    orl %ecx, %eax
-; AVX2-NEXT:    vpextrb $12, %xmm6, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $6, %ecx
-; AVX2-NEXT:    vpextrb $14, %xmm6, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $7, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $0, %xmm2, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $8, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $2, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $9, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $4, %xmm2, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $10, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $6, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $11, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $8, %xmm2, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $12, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $10, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $13, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $12, %xmm2, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $14, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $14, %xmm2, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $15, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $0, %xmm7, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $16, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $2, %xmm7, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $17, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $4, %xmm7, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $18, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $6, %xmm7, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $19, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $8, %xmm7, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $20, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $10, %xmm7, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $21, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $12, %xmm7, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $22, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $14, %xmm7, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $23, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $0, %xmm3, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $24, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $2, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $25, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $4, %xmm3, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $26, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $6, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $27, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $8, %xmm3, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $28, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $10, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $29, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $12, %xmm3, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $30, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $14, %xmm3, %edx
-; AVX2-NEXT:    shll $31, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    orl %eax, %edx
-; AVX2-NEXT:    movl %edx, 4(%rdi)
-; AVX2-NEXT:    vpextrb $2, %xmm4, %eax
-; AVX2-NEXT:    andl $1, %eax
-; AVX2-NEXT:    vpextrb $0, %xmm4, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rcx,%rax,2), %eax
-; AVX2-NEXT:    vpextrb $4, %xmm4, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rax,%rcx,4), %eax
-; AVX2-NEXT:    vpextrb $6, %xmm4, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rax,%rcx,8), %eax
-; AVX2-NEXT:    vpextrb $8, %xmm4, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $4, %ecx
-; AVX2-NEXT:    orl %eax, %ecx
-; AVX2-NEXT:    vpextrb $10, %xmm4, %eax
-; AVX2-NEXT:    andl $1, %eax
-; AVX2-NEXT:    shll $5, %eax
-; AVX2-NEXT:    orl %ecx, %eax
-; AVX2-NEXT:    vpextrb $12, %xmm4, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $6, %ecx
-; AVX2-NEXT:    vpextrb $14, %xmm4, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $7, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $0, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $8, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $2, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $9, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $4, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $10, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $6, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $11, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $8, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $12, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $10, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $13, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $12, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $14, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $14, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $15, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $0, %xmm5, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $16, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $2, %xmm5, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $17, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $4, %xmm5, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $18, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $6, %xmm5, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $19, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $8, %xmm5, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $20, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $10, %xmm5, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $21, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $12, %xmm5, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $22, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $14, %xmm5, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $23, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $0, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $24, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $2, %xmm1, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $25, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $4, %xmm1, %ecx
+; AVX2-NEXT:    vpextrb $2, %xmm6, %ecx
 ; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $26, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $6, %xmm1, %edx
+; AVX2-NEXT:    vpextrb $0, %xmm6, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $27, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $8, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $28, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $10, %xmm1, %edx
+; AVX2-NEXT:    leal (%rdx,%rcx,2), %ecx
+; AVX2-NEXT:    vpextrb $4, %xmm6, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $29, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $12, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $30, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $14, %xmm1, %edx
-; AVX2-NEXT:    shll $31, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    orl %eax, %edx
-; AVX2-NEXT:    movl %edx, (%rdi)
-; AVX2-NEXT:    movq %rdi, %rax
+; 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:    vzeroupper
 ; AVX2-NEXT:    retq
 ;
@@ -4390,6 +4390,7 @@ define <128 x i1> @test_cmp_v128i8(<128
 ; 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
@@ -4399,491 +4400,491 @@ define <128 x i1> @test_cmp_v128i8(<128
 ; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, 14(%rdi)
+; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, 12(%rdi)
+; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, 10(%rdi)
+; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, 8(%rdi)
+; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, 6(%rdi)
+; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, 4(%rdi)
+; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, 2(%rdi)
+; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, (%rdi)
-; SSE2-NEXT:    movq %rdi, %rax
+; 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
@@ -4892,483 +4893,483 @@ define <128 x i1> @test_cmp_v128i8(<128
 ; 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, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm7, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $2, %xmm7, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $3, %xmm7, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $4, %xmm7, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $5, %xmm7, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $6, %xmm7, %ecx
+; SSE42-NEXT:    pextrb $1, %xmm7, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $7, %xmm7, %edx
+; SSE42-NEXT:    pextrb $0, %xmm7, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm7, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $9, %xmm7, %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 $9, %edx
+; SSE42-NEXT:    shll $4, %edx
 ; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $10, %xmm7, %ecx
+; SSE42-NEXT:    pextrb $5, %xmm7, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $11, %xmm7, %edx
+; SSE42-NEXT:    pextrb $6, %xmm7, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $12, %xmm7, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $13, %xmm7, %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 $13, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $14, %xmm7, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $15, %xmm7, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, 14(%rdi)
-; SSE42-NEXT:    pextrb $1, %xmm6, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm6, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $2, %xmm6, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $3, %xmm6, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $4, %xmm6, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $5, %xmm6, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $6, %xmm6, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $7, %xmm6, %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 $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm6, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $9, %xmm6, %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 $9, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $10, %xmm6, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $11, %xmm6, %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 $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $12, %xmm6, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $13, %xmm6, %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:    shll $13, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $14, %xmm6, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $15, %xmm6, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, 12(%rdi)
-; SSE42-NEXT:    pextrb $1, %xmm5, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm5, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $2, %xmm5, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $3, %xmm5, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $4, %xmm5, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $5, %xmm5, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $6, %xmm5, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $7, %xmm5, %edx
+; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
+; SSE42-NEXT:    pextrb $2, %xmm6, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm5, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $9, %xmm5, %edx
+; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
+; SSE42-NEXT:    pextrb $3, %xmm6, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $9, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $10, %xmm5, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $11, %xmm5, %edx
+; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
+; SSE42-NEXT:    pextrb $4, %xmm6, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $11, %edx
+; SSE42-NEXT:    shll $4, %edx
 ; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $12, %xmm5, %ecx
+; SSE42-NEXT:    pextrb $5, %xmm6, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $12, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $13, %xmm5, %edx
+; SSE42-NEXT:    pextrb $6, %xmm6, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $13, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $14, %xmm5, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $15, %xmm5, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, 10(%rdi)
-; SSE42-NEXT:    pextrb $1, %xmm4, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm4, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $2, %xmm4, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $3, %xmm4, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $4, %xmm4, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $5, %xmm4, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $6, %xmm4, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $7, %xmm4, %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 $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm4, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $9, %xmm4, %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 $9, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $10, %xmm4, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $11, %xmm4, %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 $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $12, %xmm4, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $13, %xmm4, %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 $13, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $14, %xmm4, %ecx
+; 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:    shll $14, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $15, %xmm4, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, 8(%rdi)
-; SSE42-NEXT:    pextrb $1, %xmm3, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $2, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $3, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $4, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $5, %xmm3, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $6, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $7, %xmm3, %edx
+; SSE42-NEXT:    pextrb $0, %xmm5, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $9, %xmm3, %edx
+; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
+; SSE42-NEXT:    pextrb $2, %xmm5, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $9, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $10, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $11, %xmm3, %edx
+; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
+; SSE42-NEXT:    pextrb $3, %xmm5, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $12, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $13, %xmm3, %edx
+; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
+; SSE42-NEXT:    pextrb $4, %xmm5, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $13, %edx
+; SSE42-NEXT:    shll $4, %edx
 ; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $14, %xmm3, %ecx
+; SSE42-NEXT:    pextrb $5, %xmm5, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $15, %xmm3, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, 6(%rdi)
-; SSE42-NEXT:    pextrb $1, %xmm2, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $2, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $3, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $4, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $5, %xmm2, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $6, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $7, %xmm2, %edx
+; SSE42-NEXT:    pextrb $6, %xmm5, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $9, %xmm2, %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 $9, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $10, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $11, %xmm2, %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 $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $12, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $13, %xmm2, %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 $13, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $14, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $15, %xmm2, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, 4(%rdi)
-; SSE42-NEXT:    pextrb $1, %xmm1, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $2, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $3, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $4, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $5, %xmm1, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $6, %xmm1, %ecx
+; 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:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $7, %xmm1, %edx
+; 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 $7, %edx
+; SSE42-NEXT:    shll $4, %edx
 ; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm1, %ecx
+; SSE42-NEXT:    pextrb $5, %xmm4, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $9, %xmm1, %edx
+; SSE42-NEXT:    pextrb $6, %xmm4, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $9, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $10, %xmm1, %ecx
+; 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:    shll $10, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $11, %xmm1, %edx
+; SSE42-NEXT:    pextrb $0, %xmm3, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $11, %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 $12, %xmm1, %ecx
+; SSE42-NEXT:    pextrb $5, %xmm3, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $12, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $13, %xmm1, %edx
+; 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:    shll $13, %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 $14, %xmm1, %ecx
+; SSE42-NEXT:    pextrb $5, %xmm2, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $15, %xmm1, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, 2(%rdi)
-; SSE42-NEXT:    pextrb $1, %xmm0, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $2, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $3, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $4, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $5, %xmm0, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $6, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $7, %xmm0, %edx
+; SSE42-NEXT:    pextrb $6, %xmm2, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $8, %xmm0, %ecx
+; 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:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $9, %xmm0, %edx
+; 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:    shll $9, %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 $10, %xmm0, %ecx
+; SSE42-NEXT:    pextrb $5, %xmm1, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $11, %xmm0, %edx
+; SSE42-NEXT:    pextrb $6, %xmm1, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $12, %xmm0, %ecx
+; 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:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $13, %xmm0, %edx
+; 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:    shll $13, %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 $14, %xmm0, %ecx
+; SSE42-NEXT:    pextrb $5, %xmm0, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $15, %xmm0, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, (%rdi)
-; SSE42-NEXT:    movq %rdi, %rax
+; 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
 ;
 ; 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
@@ -5385,1010 +5386,1010 @@ define <128 x i1> @test_cmp_v128i8(<128
 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm6
 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm6, %xmm6
 ; AVX1-NEXT:    vpcmpgtb %xmm7, %xmm3, %xmm3
-; AVX1-NEXT:    vpextrb $1, %xmm3, %eax
-; AVX1-NEXT:    andl $1, %eax
-; AVX1-NEXT:    vpextrb $0, %xmm3, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rcx,%rax,2), %eax
-; AVX1-NEXT:    vpextrb $2, %xmm3, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rax,%rcx,4), %eax
-; AVX1-NEXT:    vpextrb $3, %xmm3, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rax,%rcx,8), %eax
-; AVX1-NEXT:    vpextrb $4, %xmm3, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $4, %ecx
-; AVX1-NEXT:    orl %eax, %ecx
-; AVX1-NEXT:    vpextrb $5, %xmm3, %eax
-; AVX1-NEXT:    andl $1, %eax
-; AVX1-NEXT:    shll $5, %eax
-; AVX1-NEXT:    orl %ecx, %eax
-; AVX1-NEXT:    vpextrb $6, %xmm3, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $6, %ecx
-; AVX1-NEXT:    vpextrb $7, %xmm3, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $7, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $8, %xmm3, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $8, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $9, %xmm3, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $9, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $10, %xmm3, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $10, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $11, %xmm3, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $11, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $12, %xmm3, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $12, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $13, %xmm3, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $13, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $14, %xmm3, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $14, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $15, %xmm3, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $15, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $0, %xmm6, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $16, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $1, %xmm6, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $17, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $2, %xmm6, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $18, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $3, %xmm6, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $19, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $4, %xmm6, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $20, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $5, %xmm6, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $21, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $6, %xmm6, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $22, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $7, %xmm6, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $23, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $8, %xmm6, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $24, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $9, %xmm6, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $25, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $10, %xmm6, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $26, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $11, %xmm6, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $27, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $12, %xmm6, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $28, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $13, %xmm6, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $29, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $14, %xmm6, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $30, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $15, %xmm6, %edx
-; AVX1-NEXT:    shll $31, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    orl %eax, %edx
-; AVX1-NEXT:    movl %edx, 12(%rdi)
-; AVX1-NEXT:    vpextrb $1, %xmm2, %eax
-; AVX1-NEXT:    andl $1, %eax
-; AVX1-NEXT:    vpextrb $0, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rcx,%rax,2), %eax
-; AVX1-NEXT:    vpextrb $2, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rax,%rcx,4), %eax
-; AVX1-NEXT:    vpextrb $3, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rax,%rcx,8), %eax
-; AVX1-NEXT:    vpextrb $4, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $4, %ecx
-; AVX1-NEXT:    orl %eax, %ecx
-; AVX1-NEXT:    vpextrb $5, %xmm2, %eax
-; AVX1-NEXT:    andl $1, %eax
-; AVX1-NEXT:    shll $5, %eax
-; AVX1-NEXT:    orl %ecx, %eax
-; AVX1-NEXT:    vpextrb $6, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $6, %ecx
-; AVX1-NEXT:    vpextrb $7, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $7, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $8, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $8, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $9, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $9, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $10, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $10, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $11, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $11, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $12, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $12, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $13, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $13, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $14, %xmm2, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $14, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $15, %xmm2, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $15, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $0, %xmm5, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $16, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $1, %xmm5, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $17, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $2, %xmm5, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $18, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $3, %xmm5, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $19, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $4, %xmm5, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $20, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $5, %xmm5, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $21, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $6, %xmm5, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $22, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $7, %xmm5, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $23, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $8, %xmm5, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $24, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $9, %xmm5, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $25, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $10, %xmm5, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $26, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $11, %xmm5, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $27, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $12, %xmm5, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $28, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $13, %xmm5, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $29, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $14, %xmm5, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $30, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $15, %xmm5, %edx
-; AVX1-NEXT:    shll $31, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    orl %eax, %edx
-; AVX1-NEXT:    movl %edx, 8(%rdi)
-; AVX1-NEXT:    vpextrb $1, %xmm1, %eax
-; AVX1-NEXT:    andl $1, %eax
-; AVX1-NEXT:    vpextrb $0, %xmm1, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rcx,%rax,2), %eax
-; AVX1-NEXT:    vpextrb $2, %xmm1, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rax,%rcx,4), %eax
-; AVX1-NEXT:    vpextrb $3, %xmm1, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rax,%rcx,8), %eax
-; AVX1-NEXT:    vpextrb $4, %xmm1, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $4, %ecx
-; AVX1-NEXT:    orl %eax, %ecx
-; AVX1-NEXT:    vpextrb $5, %xmm1, %eax
-; AVX1-NEXT:    andl $1, %eax
-; AVX1-NEXT:    shll $5, %eax
-; AVX1-NEXT:    orl %ecx, %eax
-; AVX1-NEXT:    vpextrb $6, %xmm1, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $6, %ecx
-; AVX1-NEXT:    vpextrb $7, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $7, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $8, %xmm1, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $8, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $9, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $9, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $10, %xmm1, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $10, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $11, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $11, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $12, %xmm1, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $12, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $13, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $13, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $14, %xmm1, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $14, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $15, %xmm1, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $15, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $0, %xmm4, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $16, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $1, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $17, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $2, %xmm4, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $18, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $3, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $19, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $4, %xmm4, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $20, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $5, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $21, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $6, %xmm4, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $22, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $7, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $23, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $8, %xmm4, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $24, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $9, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $25, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $10, %xmm4, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $26, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $11, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $27, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $12, %xmm4, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $28, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $13, %xmm4, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $29, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $14, %xmm4, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $30, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $15, %xmm4, %edx
-; AVX1-NEXT:    shll $31, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    orl %eax, %edx
-; AVX1-NEXT:    movl %edx, 4(%rdi)
-; AVX1-NEXT:    vpextrb $1, %xmm9, %eax
-; AVX1-NEXT:    andl $1, %eax
-; AVX1-NEXT:    vpextrb $0, %xmm9, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rcx,%rax,2), %eax
-; AVX1-NEXT:    vpextrb $2, %xmm9, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rax,%rcx,4), %eax
-; AVX1-NEXT:    vpextrb $3, %xmm9, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    leal (%rax,%rcx,8), %eax
-; AVX1-NEXT:    vpextrb $4, %xmm9, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $4, %ecx
-; AVX1-NEXT:    orl %eax, %ecx
-; AVX1-NEXT:    vpextrb $5, %xmm9, %eax
-; AVX1-NEXT:    andl $1, %eax
-; AVX1-NEXT:    shll $5, %eax
-; AVX1-NEXT:    orl %ecx, %eax
-; AVX1-NEXT:    vpextrb $6, %xmm9, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $6, %ecx
-; AVX1-NEXT:    vpextrb $7, %xmm9, %edx
-; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $7, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $8, %xmm9, %ecx
+; AVX1-NEXT:    vpextrb $1, %xmm3, %ecx
 ; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $8, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $9, %xmm9, %edx
+; AVX1-NEXT:    vpextrb $0, %xmm3, %edx
 ; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $9, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $10, %xmm9, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $10, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $11, %xmm9, %edx
+; AVX1-NEXT:    leal (%rdx,%rcx,2), %ecx
+; AVX1-NEXT:    vpextrb $2, %xmm3, %edx
 ; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $11, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $12, %xmm9, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $12, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $13, %xmm9, %edx
+; AVX1-NEXT:    leal (%rcx,%rdx,4), %ecx
+; AVX1-NEXT:    vpextrb $3, %xmm3, %edx
 ; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $13, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $14, %xmm9, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $14, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $15, %xmm9, %edx
+; AVX1-NEXT:    leal (%rcx,%rdx,8), %ecx
+; AVX1-NEXT:    vpextrb $4, %xmm3, %edx
 ; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $15, %edx
+; AVX1-NEXT:    shll $4, %edx
 ; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $0, %xmm8, %ecx
+; AVX1-NEXT:    vpextrb $5, %xmm3, %ecx
 ; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $16, %ecx
+; AVX1-NEXT:    shll $5, %ecx
 ; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $1, %xmm8, %edx
+; AVX1-NEXT:    vpextrb $6, %xmm3, %edx
 ; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $17, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $2, %xmm8, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $18, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $3, %xmm8, %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 $19, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $4, %xmm8, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $20, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $5, %xmm8, %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 $21, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $6, %xmm8, %ecx
+; 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:    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:    shll $22, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $7, %xmm8, %edx
+; AVX1-NEXT:    vpextrb $0, %xmm2, %edx
 ; AVX1-NEXT:    andl $1, %edx
-; AVX1-NEXT:    shll $23, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $8, %xmm8, %ecx
-; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $24, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $9, %xmm8, %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 $25, %edx
+; AVX1-NEXT:    shll $4, %edx
 ; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $10, %xmm8, %ecx
+; AVX1-NEXT:    vpextrb $5, %xmm2, %ecx
 ; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $26, %ecx
+; AVX1-NEXT:    shll $5, %ecx
 ; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $11, %xmm8, %edx
+; 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 $27, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    vpextrb $12, %xmm8, %ecx
+; 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:    shll $28, %ecx
-; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $13, %xmm8, %edx
+; 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:    shll $29, %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 $14, %xmm8, %ecx
+; AVX1-NEXT:    vpextrb $5, %xmm9, %ecx
 ; AVX1-NEXT:    andl $1, %ecx
-; AVX1-NEXT:    shll $30, %ecx
+; AVX1-NEXT:    shll $5, %ecx
 ; AVX1-NEXT:    orl %edx, %ecx
-; AVX1-NEXT:    vpextrb $15, %xmm8, %edx
-; AVX1-NEXT:    shll $31, %edx
-; AVX1-NEXT:    orl %ecx, %edx
-; AVX1-NEXT:    orl %eax, %edx
-; AVX1-NEXT:    movl %edx, (%rdi)
-; AVX1-NEXT:    movq %rdi, %rax
+; 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:    orl %edx, %esi
+; AVX1-NEXT:    orl %ecx, %esi
+; AVX1-NEXT:    movl %esi, (%rdi)
 ; AVX1-NEXT:    vzeroupper
 ; AVX1-NEXT:    retq
 ;
 ; AVX2-LABEL: test_cmp_v128i8:
 ; 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, %eax
-; AVX2-NEXT:    andl $1, %eax
-; AVX2-NEXT:    vpextrb $0, %xmm3, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rcx,%rax,2), %eax
-; AVX2-NEXT:    vpextrb $2, %xmm3, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rax,%rcx,4), %eax
-; AVX2-NEXT:    vpextrb $3, %xmm3, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rax,%rcx,8), %eax
-; AVX2-NEXT:    vpextrb $4, %xmm3, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $4, %ecx
-; AVX2-NEXT:    orl %eax, %ecx
-; AVX2-NEXT:    vpextrb $5, %xmm3, %eax
-; AVX2-NEXT:    andl $1, %eax
-; AVX2-NEXT:    shll $5, %eax
-; AVX2-NEXT:    orl %ecx, %eax
-; AVX2-NEXT:    vpextrb $6, %xmm3, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $6, %ecx
-; AVX2-NEXT:    vpextrb $7, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $7, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $8, %xmm3, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $8, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $9, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $9, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $10, %xmm3, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $10, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $11, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $11, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $12, %xmm3, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $12, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $13, %xmm3, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $13, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $14, %xmm3, %ecx
+; AVX2-NEXT:    vpextrb $1, %xmm3, %ecx
 ; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $14, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $15, %xmm3, %edx
+; AVX2-NEXT:    vpextrb $0, %xmm3, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $15, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm3
-; AVX2-NEXT:    vpextrb $0, %xmm3, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $16, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $1, %xmm3, %edx
+; AVX2-NEXT:    leal (%rdx,%rcx,2), %ecx
+; AVX2-NEXT:    vpextrb $2, %xmm3, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $17, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $2, %xmm3, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $18, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
+; AVX2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; AVX2-NEXT:    vpextrb $3, %xmm3, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $19, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $4, %xmm3, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $20, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $5, %xmm3, %edx
+; AVX2-NEXT:    leal (%rcx,%rdx,8), %ecx
+; AVX2-NEXT:    vpextrb $4, %xmm3, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $21, %edx
+; AVX2-NEXT:    shll $4, %edx
 ; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $6, %xmm3, %ecx
+; AVX2-NEXT:    vpextrb $5, %xmm3, %ecx
 ; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $22, %ecx
+; AVX2-NEXT:    shll $5, %ecx
 ; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $7, %xmm3, %edx
+; AVX2-NEXT:    vpextrb $6, %xmm3, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $23, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $8, %xmm3, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $24, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $9, %xmm3, %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 $25, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $10, %xmm3, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $26, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $11, %xmm3, %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 $27, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $12, %xmm3, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $28, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $13, %xmm3, %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 $29, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $14, %xmm3, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $30, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $15, %xmm3, %edx
-; AVX2-NEXT:    shll $31, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    orl %eax, %edx
-; AVX2-NEXT:    movl %edx, 12(%rdi)
-; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
-; AVX2-NEXT:    andl $1, %eax
-; AVX2-NEXT:    vpextrb $0, %xmm2, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rcx,%rax,2), %eax
-; AVX2-NEXT:    vpextrb $2, %xmm2, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rax,%rcx,4), %eax
-; AVX2-NEXT:    vpextrb $3, %xmm2, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rax,%rcx,8), %eax
-; AVX2-NEXT:    vpextrb $4, %xmm2, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $4, %ecx
-; AVX2-NEXT:    orl %eax, %ecx
-; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
-; AVX2-NEXT:    andl $1, %eax
-; AVX2-NEXT:    shll $5, %eax
-; AVX2-NEXT:    orl %ecx, %eax
-; AVX2-NEXT:    vpextrb $6, %xmm2, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $6, %ecx
-; AVX2-NEXT:    vpextrb $7, %xmm2, %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 $7, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $8, %xmm2, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $8, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $9, %xmm2, %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 $9, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $10, %xmm2, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $10, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $11, %xmm2, %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 $11, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $12, %xmm2, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $12, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $13, %xmm2, %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 $13, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $14, %xmm2, %ecx
+; 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:    shll $14, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $15, %xmm2, %edx
+; AVX2-NEXT:    vpextrb $0, %xmm2, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $15, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX2-NEXT:    vpextrb $0, %xmm2, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $16, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $1, %xmm2, %edx
+; AVX2-NEXT:    leal (%rdx,%rcx,2), %ecx
+; AVX2-NEXT:    vpextrb $2, %xmm2, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $17, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $2, %xmm2, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $18, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
+; AVX2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; AVX2-NEXT:    vpextrb $3, %xmm2, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $19, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $4, %xmm2, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $20, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $5, %xmm2, %edx
+; AVX2-NEXT:    leal (%rcx,%rdx,8), %ecx
+; AVX2-NEXT:    vpextrb $4, %xmm2, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $21, %edx
+; AVX2-NEXT:    shll $4, %edx
 ; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $6, %xmm2, %ecx
+; AVX2-NEXT:    vpextrb $5, %xmm2, %ecx
 ; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $22, %ecx
+; AVX2-NEXT:    shll $5, %ecx
 ; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $7, %xmm2, %edx
+; AVX2-NEXT:    vpextrb $6, %xmm2, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $23, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $8, %xmm2, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $24, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $9, %xmm2, %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 $25, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $10, %xmm2, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $26, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $11, %xmm2, %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 $27, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $12, %xmm2, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $28, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $13, %xmm2, %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 $29, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $14, %xmm2, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $30, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $15, %xmm2, %edx
-; AVX2-NEXT:    shll $31, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    orl %eax, %edx
-; AVX2-NEXT:    movl %edx, 8(%rdi)
-; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
-; AVX2-NEXT:    andl $1, %eax
-; AVX2-NEXT:    vpextrb $0, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rcx,%rax,2), %eax
-; AVX2-NEXT:    vpextrb $2, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rax,%rcx,4), %eax
-; AVX2-NEXT:    vpextrb $3, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rax,%rcx,8), %eax
-; AVX2-NEXT:    vpextrb $4, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $4, %ecx
-; AVX2-NEXT:    orl %eax, %ecx
-; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
-; AVX2-NEXT:    andl $1, %eax
-; AVX2-NEXT:    shll $5, %eax
-; AVX2-NEXT:    orl %ecx, %eax
-; AVX2-NEXT:    vpextrb $6, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $6, %ecx
-; AVX2-NEXT:    vpextrb $7, %xmm1, %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 $7, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $8, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $8, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $9, %xmm1, %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 $9, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $10, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $10, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $11, %xmm1, %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 $11, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $12, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $12, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $13, %xmm1, %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 $13, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $14, %xmm1, %ecx
+; 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:    shll $14, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $15, %xmm1, %edx
+; AVX2-NEXT:    vpextrb $0, %xmm1, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $15, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $0, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $16, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $1, %xmm1, %edx
+; AVX2-NEXT:    leal (%rdx,%rcx,2), %ecx
+; AVX2-NEXT:    vpextrb $2, %xmm1, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $17, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $2, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $18, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
+; AVX2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; AVX2-NEXT:    vpextrb $3, %xmm1, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $19, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $4, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $20, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $5, %xmm1, %edx
+; AVX2-NEXT:    leal (%rcx,%rdx,8), %ecx
+; AVX2-NEXT:    vpextrb $4, %xmm1, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $21, %edx
+; AVX2-NEXT:    shll $4, %edx
 ; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $6, %xmm1, %ecx
+; AVX2-NEXT:    vpextrb $5, %xmm1, %ecx
 ; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $22, %ecx
+; AVX2-NEXT:    shll $5, %ecx
 ; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $7, %xmm1, %edx
+; AVX2-NEXT:    vpextrb $6, %xmm1, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $23, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $8, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $24, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $9, %xmm1, %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 $25, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $10, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $26, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $11, %xmm1, %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 $27, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $12, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $28, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $13, %xmm1, %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 $29, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $14, %xmm1, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $30, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $15, %xmm1, %edx
-; AVX2-NEXT:    shll $31, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    orl %eax, %edx
-; AVX2-NEXT:    movl %edx, 4(%rdi)
-; AVX2-NEXT:    vpextrb $1, %xmm0, %eax
-; AVX2-NEXT:    andl $1, %eax
-; AVX2-NEXT:    vpextrb $0, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rcx,%rax,2), %eax
-; AVX2-NEXT:    vpextrb $2, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rax,%rcx,4), %eax
-; AVX2-NEXT:    vpextrb $3, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    leal (%rax,%rcx,8), %eax
-; AVX2-NEXT:    vpextrb $4, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $4, %ecx
-; AVX2-NEXT:    orl %eax, %ecx
-; AVX2-NEXT:    vpextrb $5, %xmm0, %eax
-; AVX2-NEXT:    andl $1, %eax
-; AVX2-NEXT:    shll $5, %eax
-; AVX2-NEXT:    orl %ecx, %eax
-; AVX2-NEXT:    vpextrb $6, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $6, %ecx
-; AVX2-NEXT:    vpextrb $7, %xmm0, %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 $7, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $8, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $8, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $9, %xmm0, %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 $9, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $10, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $10, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $11, %xmm0, %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 $11, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $12, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $12, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $13, %xmm0, %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 $13, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $14, %xmm0, %ecx
+; 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:    shll $14, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $15, %xmm0, %edx
+; AVX2-NEXT:    vpextrb $0, %xmm0, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $15, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
-; AVX2-NEXT:    vpextrb $0, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $16, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $1, %xmm0, %edx
+; AVX2-NEXT:    leal (%rdx,%rcx,2), %ecx
+; AVX2-NEXT:    vpextrb $2, %xmm0, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $17, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $2, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $18, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
+; AVX2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; AVX2-NEXT:    vpextrb $3, %xmm0, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $19, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $4, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $20, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $5, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $21, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $6, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $22, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $7, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $23, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $8, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $24, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $9, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $25, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $10, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $26, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $11, %xmm0, %edx
-; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $27, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $12, %xmm0, %ecx
-; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $28, %ecx
-; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $13, %xmm0, %edx
+; AVX2-NEXT:    leal (%rcx,%rdx,8), %ecx
+; AVX2-NEXT:    vpextrb $4, %xmm0, %edx
 ; AVX2-NEXT:    andl $1, %edx
-; AVX2-NEXT:    shll $29, %edx
+; AVX2-NEXT:    shll $4, %edx
 ; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    vpextrb $14, %xmm0, %ecx
+; AVX2-NEXT:    vpextrb $5, %xmm0, %ecx
 ; AVX2-NEXT:    andl $1, %ecx
-; AVX2-NEXT:    shll $30, %ecx
+; AVX2-NEXT:    shll $5, %ecx
 ; AVX2-NEXT:    orl %edx, %ecx
-; AVX2-NEXT:    vpextrb $15, %xmm0, %edx
-; AVX2-NEXT:    shll $31, %edx
-; AVX2-NEXT:    orl %ecx, %edx
-; AVX2-NEXT:    orl %eax, %edx
-; AVX2-NEXT:    movl %edx, (%rdi)
-; AVX2-NEXT:    movq %rdi, %rax
+; 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:    vzeroupper
 ; AVX2-NEXT:    retq
 ;
 ; AVX512F-LABEL: test_cmp_v128i8:
 ; AVX512F:       # %bb.0:
+; AVX512F-NEXT:    movq %rdi, %rax
 ; AVX512F-NEXT:    vpcmpgtb %ymm4, %ymm0, %ymm0
 ; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm4
 ; AVX512F-NEXT:    vptestmd %zmm4, %zmm4, %k0
@@ -6421,12 +6422,12 @@ define <128 x i1> @test_cmp_v128i8(<128
 ; AVX512F-NEXT:    kmovw %k2, 4(%rdi)
 ; AVX512F-NEXT:    kmovw %k1, 2(%rdi)
 ; AVX512F-NEXT:    kmovw %k0, (%rdi)
-; AVX512F-NEXT:    movq %rdi, %rax
 ; AVX512F-NEXT:    vzeroupper
 ; AVX512F-NEXT:    retq
 ;
 ; AVX512DQ-LABEL: test_cmp_v128i8:
 ; AVX512DQ:       # %bb.0:
+; AVX512DQ-NEXT:    movq %rdi, %rax
 ; AVX512DQ-NEXT:    vpcmpgtb %ymm4, %ymm0, %ymm0
 ; AVX512DQ-NEXT:    vpmovsxbd %xmm0, %zmm4
 ; AVX512DQ-NEXT:    vpmovd2m %zmm4, %k0
@@ -6459,7 +6460,6 @@ define <128 x i1> @test_cmp_v128i8(<128
 ; AVX512DQ-NEXT:    kmovw %k2, 4(%rdi)
 ; AVX512DQ-NEXT:    kmovw %k1, 2(%rdi)
 ; AVX512DQ-NEXT:    kmovw %k0, (%rdi)
-; AVX512DQ-NEXT:    movq %rdi, %rax
 ; AVX512DQ-NEXT:    vzeroupper
 ; AVX512DQ-NEXT:    retq
 ;
@@ -6481,6 +6481,7 @@ 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
@@ -6565,126 +6566,125 @@ define <32 x i1> @test_cmp_v32f64(<32 x
 ; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, 2(%rdi)
+; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, (%rdi)
-; SSE2-NEXT:    movq %rdi, %rax
+; 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:
@@ -6695,7 +6695,7 @@ define <32 x i1> @test_cmp_v32f64(<32 x
 ; SSE42-NEXT:    pushq %r13
 ; SSE42-NEXT:    pushq %r12
 ; SSE42-NEXT:    pushq %rbx
-; SSE42-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp) # 8-byte Spill
+; 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
@@ -6730,24 +6730,24 @@ define <32 x i1> @test_cmp_v32f64(<32 x
 ; 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, %esi
+; 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, %edx
+; 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, %eax
+; 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), %ecx
+; SSE42-NEXT:    leal (%r10,%r8,2), %eax
 ; SSE42-NEXT:    andl $1, %ebp
-; SSE42-NEXT:    leal (%rcx,%rbp,4), %r8d
-; SSE42-NEXT:    pextrb $0, %xmm0, %ecx
+; 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
@@ -6755,8 +6755,8 @@ define <32 x i1> @test_cmp_v32f64(<32 x
 ; SSE42-NEXT:    shll $4, %r15d
 ; SSE42-NEXT:    orl %r8d, %r15d
 ; SSE42-NEXT:    pextrb $8, %xmm1, %edi
-; SSE42-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp) # 8-byte Spill
-; SSE42-NEXT:    pextrb $0, %xmm1, %r10d
+; 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
@@ -6765,93 +6765,93 @@ define <32 x i1> @test_cmp_v32f64(<32 x
 ; SSE42-NEXT:    andl $1, %r9d
 ; SSE42-NEXT:    shll $7, %r9d
 ; SSE42-NEXT:    orl %r14d, %r9d
-; SSE42-NEXT:    pextrb $0, %xmm2, %r14d
+; SSE42-NEXT:    pextrb $0, %xmm2, %r10d
 ; SSE42-NEXT:    pextrb $8, %xmm2, %edi
-; SSE42-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp) # 8-byte Spill
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    shll $8, %esi
-; SSE42-NEXT:    orl %r9d, %esi
+; 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 %esi, %r12d
-; SSE42-NEXT:    pextrb $0, %xmm3, %r8d
-; SSE42-NEXT:    pextrb $8, %xmm3, %r15d
-; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $10, %edx
-; SSE42-NEXT:    orl %r12d, %edx
+; 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 %edx, %ebx
-; SSE42-NEXT:    pextrb $0, %xmm4, %r12d
-; SSE42-NEXT:    pextrb $8, %xmm4, %edi
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $12, %eax
-; SSE42-NEXT:    orl %ebx, %eax
+; 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 %eax, %r13d
-; SSE42-NEXT:    pextrb $0, %xmm5, %eax
+; SSE42-NEXT:    orl %ecx, %r13d
+; SSE42-NEXT:    pextrb $0, %xmm5, %ecx
 ; SSE42-NEXT:    pextrb $8, %xmm5, %ebx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
-; SSE42-NEXT:    orl %r13d, %ecx
+; SSE42-NEXT:    andl $1, %eax
+; SSE42-NEXT:    shll $14, %eax
+; SSE42-NEXT:    orl %r13d, %eax
 ; SSE42-NEXT:    shll $15, %ebp
-; SSE42-NEXT:    orl %ecx, %ebp
+; SSE42-NEXT:    orl %eax, %ebp
 ; SSE42-NEXT:    pextrb $0, %xmm6, %r13d
-; SSE42-NEXT:    pextrb $8, %xmm6, %edx
+; SSE42-NEXT:    pextrb $8, %xmm6, %esi
 ; SSE42-NEXT:    orl %r11d, %ebp
-; SSE42-NEXT:    movq -{{[0-9]+}}(%rsp), %r9 # 8-byte Reload
-; SSE42-NEXT:    movw %bp, 2(%r9)
+; 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, %ecx
-; SSE42-NEXT:    movq -{{[0-9]+}}(%rsp), %rsi # 8-byte Reload
-; SSE42-NEXT:    andl $1, %esi
+; 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 (%r10,%rsi,2), %esi
-; SSE42-NEXT:    andl $1, %r14d
-; SSE42-NEXT:    leal (%rsi,%r14,4), %r14d
+; SSE42-NEXT:    leal (%r8,%r10,4), %r8d
 ; SSE42-NEXT:    pextrb $0, %xmm8, %r10d
 ; SSE42-NEXT:    pextrb $8, %xmm8, %ebp
-; SSE42-NEXT:    movq -{{[0-9]+}}(%rsp), %rsi # 8-byte Reload
-; SSE42-NEXT:    andl $1, %esi
-; SSE42-NEXT:    leal (%r14,%rsi,8), %esi
-; SSE42-NEXT:    andl $1, %r8d
-; SSE42-NEXT:    shll $4, %r8d
-; SSE42-NEXT:    orl %esi, %r8d
+; 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 $5, %r15d
-; SSE42-NEXT:    orl %r8d, %r15d
+; SSE42-NEXT:    shll $6, %r15d
 ; SSE42-NEXT:    andl $1, %r12d
-; SSE42-NEXT:    shll $6, %r12d
-; SSE42-NEXT:    andl $1, %edi
-; SSE42-NEXT:    shll $7, %edi
-; SSE42-NEXT:    orl %r12d, %edi
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $8, %eax
-; SSE42-NEXT:    orl %edi, %eax
+; 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 %eax, %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, %edx
-; SSE42-NEXT:    shll $11, %edx
-; SSE42-NEXT:    orl %r13d, %edx
+; 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 %edx, %r11d
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $13, %ecx
-; SSE42-NEXT:    orl %r11d, %ecx
+; 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 %ecx, %r10d
+; SSE42-NEXT:    orl %eax, %r10d
 ; SSE42-NEXT:    shll $15, %ebp
 ; SSE42-NEXT:    orl %r10d, %ebp
-; SSE42-NEXT:    orl %r15d, %ebp
-; SSE42-NEXT:    movw %bp, (%r9)
-; SSE42-NEXT:    movq %r9, %rax
+; 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
@@ -6998,6 +6998,7 @@ define <32 x i1> @test_cmp_v32f64(<32 x
 define <32 x i1> @test_cmp_v32i64(<32 x i64> %a0, <32 x i64> %a1) nounwind {
 ; SSE2-LABEL: test_cmp_v32i64:
 ; SSE2:       # %bb.0:
+; SSE2-NEXT:    movq %rdi, %rax
 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
 ; SSE2-NEXT:    pxor %xmm8, %xmm1
 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
@@ -7234,130 +7235,130 @@ define <32 x i1> @test_cmp_v32i64(<32 x
 ; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, 2(%rdi)
+; 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), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,4), %eax
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
 ; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $4, %ecx
-; SSE2-NEXT:    orl %eax, %ecx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
-; SSE2-NEXT:    andl $1, %eax
-; SSE2-NEXT:    shll $5, %eax
-; SSE2-NEXT:    orl %ecx, %eax
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $6, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $7, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $8, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rdx,%rcx,2), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $9, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $10, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,4), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $11, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
-; SSE2-NEXT:    andl $1, %ecx
-; SSE2-NEXT:    shll $12, %ecx
-; SSE2-NEXT:    orl %edx, %ecx
+; SSE2-NEXT:    leal (%rcx,%rdx,8), %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
 ; SSE2-NEXT:    andl $1, %edx
-; SSE2-NEXT:    shll $13, %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 $14, %ecx
+; SSE2-NEXT:    shll $5, %ecx
 ; SSE2-NEXT:    orl %edx, %ecx
 ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
-; SSE2-NEXT:    shll $15, %edx
-; SSE2-NEXT:    orl %ecx, %edx
-; SSE2-NEXT:    orl %eax, %edx
-; SSE2-NEXT:    movw %dx, (%rdi)
-; SSE2-NEXT:    movq %rdi, %rax
+; 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_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
@@ -7382,125 +7383,124 @@ define <32 x i1> @test_cmp_v32i64(<32 x
 ; 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, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm15, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $0, %xmm14, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $8, %xmm14, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $0, %xmm13, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $8, %xmm13, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $0, %xmm12, %ecx
+; SSE42-NEXT:    pextrb $8, %xmm15, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $8, %xmm12, %edx
+; SSE42-NEXT:    pextrb $0, %xmm15, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $0, %xmm11, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $8, %xmm11, %edx
+; SSE42-NEXT:    leal (%rdx,%rcx,2), %ecx
+; SSE42-NEXT:    pextrb $0, %xmm14, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $9, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $0, %xmm10, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $10, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $8, %xmm10, %edx
+; SSE42-NEXT:    leal (%rcx,%rdx,4), %ecx
+; SSE42-NEXT:    pextrb $8, %xmm14, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $0, %xmm9, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $8, %xmm9, %edx
+; SSE42-NEXT:    leal (%rcx,%rdx,8), %ecx
+; SSE42-NEXT:    pextrb $0, %xmm13, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $13, %edx
+; SSE42-NEXT:    shll $4, %edx
 ; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $0, %xmm8, %ecx
+; SSE42-NEXT:    pextrb $8, %xmm13, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $8, %xmm8, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, 2(%rdi)
-; SSE42-NEXT:    pextrb $8, %xmm0, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    pextrb $0, %xmm0, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rcx,%rax,2), %eax
-; SSE42-NEXT:    pextrb $0, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,4), %eax
-; SSE42-NEXT:    pextrb $8, %xmm1, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    leal (%rax,%rcx,8), %eax
-; SSE42-NEXT:    pextrb $0, %xmm2, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $4, %ecx
-; SSE42-NEXT:    orl %eax, %ecx
-; SSE42-NEXT:    pextrb $8, %xmm2, %eax
-; SSE42-NEXT:    andl $1, %eax
-; SSE42-NEXT:    shll $5, %eax
-; SSE42-NEXT:    orl %ecx, %eax
-; SSE42-NEXT:    pextrb $0, %xmm3, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $6, %ecx
-; SSE42-NEXT:    pextrb $8, %xmm3, %edx
+; SSE42-NEXT:    pextrb $0, %xmm12, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $7, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $0, %xmm4, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $8, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $8, %xmm4, %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 $9, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $0, %xmm5, %ecx
+; 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:    shll $10, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $8, %xmm5, %edx
+; SSE42-NEXT:    pextrb $0, %xmm0, %edx
 ; SSE42-NEXT:    andl $1, %edx
-; SSE42-NEXT:    shll $11, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $0, %xmm6, %ecx
-; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $12, %ecx
-; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $8, %xmm6, %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:    shll $13, %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:    orl %ecx, %edx
-; SSE42-NEXT:    pextrb $0, %xmm7, %ecx
+; SSE42-NEXT:    pextrb $8, %xmm2, %ecx
 ; SSE42-NEXT:    andl $1, %ecx
-; SSE42-NEXT:    shll $14, %ecx
+; SSE42-NEXT:    shll $5, %ecx
 ; SSE42-NEXT:    orl %edx, %ecx
-; SSE42-NEXT:    pextrb $8, %xmm7, %edx
-; SSE42-NEXT:    shll $15, %edx
-; SSE42-NEXT:    orl %ecx, %edx
-; SSE42-NEXT:    orl %eax, %edx
-; SSE42-NEXT:    movw %dx, (%rdi)
-; SSE42-NEXT:    movq %rdi, %rax
+; 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:    retq
 ;
 ; AVX1-LABEL: test_cmp_v32i64:

Modified: llvm/trunk/test/CodeGen/X86/vector-interleave.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-interleave.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vector-interleave.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vector-interleave.ll Wed Sep 19 11:59:08 2018
@@ -10,6 +10,7 @@
 define <64 x i16> @interleave8x8(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c, <8 x i16> %d, <8 x i16> %e, <8 x i16> %f, <8 x i16> %h, <8 x i16> %g) {
 ; SSE-LABEL: interleave8x8:
 ; SSE:       # %bb.0:
+; SSE-NEXT:    movq %rdi, %rax
 ; SSE-NEXT:    movdqa %xmm0, %xmm8
 ; SSE-NEXT:    punpcklwd {{.*#+}} xmm8 = xmm8[0],xmm1[0],xmm8[1],xmm1[1],xmm8[2],xmm1[2],xmm8[3],xmm1[3]
 ; SSE-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
@@ -54,7 +55,6 @@ define <64 x i16> @interleave8x8(<8 x i1
 ; SSE-NEXT:    movdqa %xmm1, 32(%rdi)
 ; SSE-NEXT:    movdqa %xmm8, 16(%rdi)
 ; SSE-NEXT:    movdqa %xmm5, (%rdi)
-; SSE-NEXT:    movq %rdi, %rax
 ; SSE-NEXT:    retq
 ;
 ; AVX1-LABEL: interleave8x8:

Modified: llvm/trunk/test/CodeGen/X86/vector-pcmp.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-pcmp.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vector-pcmp.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vector-pcmp.ll Wed Sep 19 11:59:08 2018
@@ -86,10 +86,10 @@ define <2 x i64> @test_pcmpgtq(<2 x i64>
 define <1 x i128> @test_strange_type(<1 x i128> %x) {
 ; CHECK-LABEL: test_strange_type:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    sarq $63, %rsi
-; CHECK-NEXT:    notq %rsi
 ; CHECK-NEXT:    movq %rsi, %rax
-; CHECK-NEXT:    movq %rsi, %rdx
+; CHECK-NEXT:    sarq $63, %rax
+; CHECK-NEXT:    notq %rax
+; CHECK-NEXT:    movq %rax, %rdx
 ; CHECK-NEXT:    retq
   %sign = ashr <1 x i128> %x, <i128 127>
   %not = xor <1 x i128> %sign, <i128 -1>

Modified: llvm/trunk/test/CodeGen/X86/vector-reduce-fadd-fast.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-reduce-fadd-fast.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vector-reduce-fadd-fast.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vector-reduce-fadd-fast.ll Wed Sep 19 11:59:08 2018
@@ -20,8 +20,8 @@ define float @test_v2f32(float %a0, <2 x
 ;
 ; SSE41-LABEL: test_v2f32:
 ; SSE41:       # %bb.0:
-; SSE41-NEXT:    haddps %xmm1, %xmm1
 ; SSE41-NEXT:    movaps %xmm1, %xmm0
+; SSE41-NEXT:    haddps %xmm1, %xmm0
 ; SSE41-NEXT:    retq
 ;
 ; AVX-LABEL: test_v2f32:
@@ -527,8 +527,8 @@ define double @test_v2f64(double %a0, <2
 ;
 ; SSE41-LABEL: test_v2f64:
 ; SSE41:       # %bb.0:
-; SSE41-NEXT:    haddpd %xmm1, %xmm1
 ; SSE41-NEXT:    movapd %xmm1, %xmm0
+; SSE41-NEXT:    haddpd %xmm1, %xmm0
 ; SSE41-NEXT:    retq
 ;
 ; AVX-LABEL: test_v2f64:
@@ -555,9 +555,9 @@ define double @test_v4f64(double %a0, <4
 ;
 ; SSE41-LABEL: test_v4f64:
 ; SSE41:       # %bb.0:
-; SSE41-NEXT:    addpd %xmm2, %xmm1
-; SSE41-NEXT:    haddpd %xmm1, %xmm1
 ; SSE41-NEXT:    movapd %xmm1, %xmm0
+; SSE41-NEXT:    addpd %xmm2, %xmm0
+; SSE41-NEXT:    haddpd %xmm0, %xmm0
 ; SSE41-NEXT:    retq
 ;
 ; AVX-LABEL: test_v4f64:
@@ -594,11 +594,11 @@ define double @test_v8f64(double %a0, <8
 ;
 ; SSE41-LABEL: test_v8f64:
 ; SSE41:       # %bb.0:
-; SSE41-NEXT:    addpd %xmm4, %xmm2
-; SSE41-NEXT:    addpd %xmm3, %xmm1
-; SSE41-NEXT:    addpd %xmm2, %xmm1
-; SSE41-NEXT:    haddpd %xmm1, %xmm1
 ; SSE41-NEXT:    movapd %xmm1, %xmm0
+; SSE41-NEXT:    addpd %xmm4, %xmm2
+; SSE41-NEXT:    addpd %xmm3, %xmm0
+; SSE41-NEXT:    addpd %xmm2, %xmm0
+; SSE41-NEXT:    haddpd %xmm0, %xmm0
 ; SSE41-NEXT:    retq
 ;
 ; AVX-LABEL: test_v8f64:
@@ -643,15 +643,15 @@ define double @test_v16f64(double %a0, <
 ;
 ; SSE41-LABEL: test_v16f64:
 ; SSE41:       # %bb.0:
+; SSE41-NEXT:    movapd %xmm4, %xmm0
 ; SSE41-NEXT:    addpd %xmm6, %xmm2
 ; SSE41-NEXT:    addpd %xmm7, %xmm3
 ; SSE41-NEXT:    addpd %xmm5, %xmm1
 ; SSE41-NEXT:    addpd %xmm3, %xmm1
-; SSE41-NEXT:    addpd {{[0-9]+}}(%rsp), %xmm4
-; SSE41-NEXT:    addpd %xmm2, %xmm4
-; SSE41-NEXT:    addpd %xmm1, %xmm4
-; SSE41-NEXT:    haddpd %xmm4, %xmm4
-; SSE41-NEXT:    movapd %xmm4, %xmm0
+; SSE41-NEXT:    addpd {{[0-9]+}}(%rsp), %xmm0
+; SSE41-NEXT:    addpd %xmm2, %xmm0
+; SSE41-NEXT:    addpd %xmm1, %xmm0
+; SSE41-NEXT:    haddpd %xmm0, %xmm0
 ; SSE41-NEXT:    retq
 ;
 ; AVX-LABEL: test_v16f64:

Modified: llvm/trunk/test/CodeGen/X86/vector-shift-ashr-128.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-shift-ashr-128.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vector-shift-ashr-128.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vector-shift-ashr-128.ll Wed Sep 19 11:59:08 2018
@@ -257,32 +257,33 @@ define <8 x i16> @var_shift_v8i16(<8 x i
 ;
 ; SSE41-LABEL: var_shift_v8i16:
 ; SSE41:       # %bb.0:
-; SSE41-NEXT:    movdqa %xmm0, %xmm2
-; SSE41-NEXT:    movdqa %xmm1, %xmm0
+; SSE41-NEXT:    movdqa %xmm1, %xmm2
+; SSE41-NEXT:    movdqa %xmm0, %xmm1
+; SSE41-NEXT:    movdqa %xmm2, %xmm0
 ; SSE41-NEXT:    psllw $12, %xmm0
-; SSE41-NEXT:    psllw $4, %xmm1
-; SSE41-NEXT:    por %xmm0, %xmm1
-; SSE41-NEXT:    movdqa %xmm1, %xmm3
-; SSE41-NEXT:    paddw %xmm1, %xmm3
-; SSE41-NEXT:    movdqa %xmm2, %xmm4
+; SSE41-NEXT:    psllw $4, %xmm2
+; SSE41-NEXT:    por %xmm0, %xmm2
+; SSE41-NEXT:    movdqa %xmm2, %xmm3
+; SSE41-NEXT:    paddw %xmm2, %xmm3
+; SSE41-NEXT:    movdqa %xmm1, %xmm4
 ; SSE41-NEXT:    psraw $8, %xmm4
-; SSE41-NEXT:    movdqa %xmm1, %xmm0
-; SSE41-NEXT:    pblendvb %xmm0, %xmm4, %xmm2
-; SSE41-NEXT:    movdqa %xmm2, %xmm1
-; SSE41-NEXT:    psraw $4, %xmm1
+; SSE41-NEXT:    movdqa %xmm2, %xmm0
+; SSE41-NEXT:    pblendvb %xmm0, %xmm4, %xmm1
+; SSE41-NEXT:    movdqa %xmm1, %xmm2
+; SSE41-NEXT:    psraw $4, %xmm2
 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
-; SSE41-NEXT:    pblendvb %xmm0, %xmm1, %xmm2
-; SSE41-NEXT:    movdqa %xmm2, %xmm1
-; SSE41-NEXT:    psraw $2, %xmm1
+; SSE41-NEXT:    pblendvb %xmm0, %xmm2, %xmm1
+; SSE41-NEXT:    movdqa %xmm1, %xmm2
+; SSE41-NEXT:    psraw $2, %xmm2
 ; SSE41-NEXT:    paddw %xmm3, %xmm3
 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
-; SSE41-NEXT:    pblendvb %xmm0, %xmm1, %xmm2
-; SSE41-NEXT:    movdqa %xmm2, %xmm1
-; SSE41-NEXT:    psraw $1, %xmm1
+; SSE41-NEXT:    pblendvb %xmm0, %xmm2, %xmm1
+; SSE41-NEXT:    movdqa %xmm1, %xmm2
+; SSE41-NEXT:    psraw $1, %xmm2
 ; SSE41-NEXT:    paddw %xmm3, %xmm3
 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
-; SSE41-NEXT:    pblendvb %xmm0, %xmm1, %xmm2
-; SSE41-NEXT:    movdqa %xmm2, %xmm0
+; SSE41-NEXT:    pblendvb %xmm0, %xmm2, %xmm1
+; SSE41-NEXT:    movdqa %xmm1, %xmm0
 ; SSE41-NEXT:    retq
 ;
 ; AVX1-LABEL: var_shift_v8i16:

Modified: llvm/trunk/test/CodeGen/X86/vector-shift-lshr-128.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-shift-lshr-128.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vector-shift-lshr-128.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vector-shift-lshr-128.ll Wed Sep 19 11:59:08 2018
@@ -227,32 +227,33 @@ define <8 x i16> @var_shift_v8i16(<8 x i
 ;
 ; SSE41-LABEL: var_shift_v8i16:
 ; SSE41:       # %bb.0:
-; SSE41-NEXT:    movdqa %xmm0, %xmm2
-; SSE41-NEXT:    movdqa %xmm1, %xmm0
+; SSE41-NEXT:    movdqa %xmm1, %xmm2
+; SSE41-NEXT:    movdqa %xmm0, %xmm1
+; SSE41-NEXT:    movdqa %xmm2, %xmm0
 ; SSE41-NEXT:    psllw $12, %xmm0
-; SSE41-NEXT:    psllw $4, %xmm1
-; SSE41-NEXT:    por %xmm0, %xmm1
-; SSE41-NEXT:    movdqa %xmm1, %xmm3
-; SSE41-NEXT:    paddw %xmm1, %xmm3
-; SSE41-NEXT:    movdqa %xmm2, %xmm4
+; SSE41-NEXT:    psllw $4, %xmm2
+; SSE41-NEXT:    por %xmm0, %xmm2
+; SSE41-NEXT:    movdqa %xmm2, %xmm3
+; SSE41-NEXT:    paddw %xmm2, %xmm3
+; SSE41-NEXT:    movdqa %xmm1, %xmm4
 ; SSE41-NEXT:    psrlw $8, %xmm4
-; SSE41-NEXT:    movdqa %xmm1, %xmm0
-; SSE41-NEXT:    pblendvb %xmm0, %xmm4, %xmm2
-; SSE41-NEXT:    movdqa %xmm2, %xmm1
-; SSE41-NEXT:    psrlw $4, %xmm1
+; SSE41-NEXT:    movdqa %xmm2, %xmm0
+; SSE41-NEXT:    pblendvb %xmm0, %xmm4, %xmm1
+; SSE41-NEXT:    movdqa %xmm1, %xmm2
+; SSE41-NEXT:    psrlw $4, %xmm2
 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
-; SSE41-NEXT:    pblendvb %xmm0, %xmm1, %xmm2
-; SSE41-NEXT:    movdqa %xmm2, %xmm1
-; SSE41-NEXT:    psrlw $2, %xmm1
+; SSE41-NEXT:    pblendvb %xmm0, %xmm2, %xmm1
+; SSE41-NEXT:    movdqa %xmm1, %xmm2
+; SSE41-NEXT:    psrlw $2, %xmm2
 ; SSE41-NEXT:    paddw %xmm3, %xmm3
 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
-; SSE41-NEXT:    pblendvb %xmm0, %xmm1, %xmm2
-; SSE41-NEXT:    movdqa %xmm2, %xmm1
-; SSE41-NEXT:    psrlw $1, %xmm1
+; SSE41-NEXT:    pblendvb %xmm0, %xmm2, %xmm1
+; SSE41-NEXT:    movdqa %xmm1, %xmm2
+; SSE41-NEXT:    psrlw $1, %xmm2
 ; SSE41-NEXT:    paddw %xmm3, %xmm3
 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
-; SSE41-NEXT:    pblendvb %xmm0, %xmm1, %xmm2
-; SSE41-NEXT:    movdqa %xmm2, %xmm0
+; SSE41-NEXT:    pblendvb %xmm0, %xmm2, %xmm1
+; SSE41-NEXT:    movdqa %xmm1, %xmm0
 ; SSE41-NEXT:    retq
 ;
 ; AVX1-LABEL: var_shift_v8i16:

Modified: llvm/trunk/test/CodeGen/X86/vector-shuffle-128-v2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-shuffle-128-v2.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vector-shuffle-128-v2.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vector-shuffle-128-v2.ll Wed Sep 19 11:59:08 2018
@@ -164,8 +164,8 @@ define <2 x double> @shuffle_v2f64_11(<2
 define <2 x double> @shuffle_v2f64_22(<2 x double> %a, <2 x double> %b) {
 ; SSE2-LABEL: shuffle_v2f64_22:
 ; SSE2:       # %bb.0:
-; SSE2-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0,0]
 ; SSE2-NEXT:    movaps %xmm1, %xmm0
+; SSE2-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]
 ; SSE2-NEXT:    retq
 ;
 ; SSE3-LABEL: shuffle_v2f64_22:
@@ -193,8 +193,8 @@ define <2 x double> @shuffle_v2f64_22(<2
 define <2 x double> @shuffle_v2f64_32(<2 x double> %a, <2 x double> %b) {
 ; SSE-LABEL: shuffle_v2f64_32:
 ; SSE:       # %bb.0:
-; SSE-NEXT:    shufpd {{.*#+}} xmm1 = xmm1[1,0]
 ; SSE-NEXT:    movapd %xmm1, %xmm0
+; SSE-NEXT:    shufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0]
 ; SSE-NEXT:    retq
 ;
 ; AVX-LABEL: shuffle_v2f64_32:
@@ -208,8 +208,8 @@ define <2 x double> @shuffle_v2f64_32(<2
 define <2 x double> @shuffle_v2f64_33(<2 x double> %a, <2 x double> %b) {
 ; SSE-LABEL: shuffle_v2f64_33:
 ; SSE:       # %bb.0:
-; SSE-NEXT:    movhlps {{.*#+}} xmm1 = xmm1[1,1]
 ; SSE-NEXT:    movaps %xmm1, %xmm0
+; SSE-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]
 ; SSE-NEXT:    retq
 ;
 ; AVX-LABEL: shuffle_v2f64_33:
@@ -309,8 +309,8 @@ define <2 x double> @shuffle_v2f64_u2(<2
 define <2 x double> @shuffle_v2f64_3u(<2 x double> %a, <2 x double> %b) {
 ; SSE-LABEL: shuffle_v2f64_3u:
 ; SSE:       # %bb.0:
-; SSE-NEXT:    movhlps {{.*#+}} xmm1 = xmm1[1,1]
 ; SSE-NEXT:    movaps %xmm1, %xmm0
+; SSE-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]
 ; SSE-NEXT:    retq
 ;
 ; AVX-LABEL: shuffle_v2f64_3u:
@@ -337,8 +337,8 @@ define <2 x i64> @shuffle_v2i64_02(<2 x
 define <2 x i64> @shuffle_v2i64_02_copy(<2 x i64> %nonce, <2 x i64> %a, <2 x i64> %b) {
 ; SSE-LABEL: shuffle_v2i64_02_copy:
 ; SSE:       # %bb.0:
-; SSE-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm2[0]
 ; SSE-NEXT:    movaps %xmm1, %xmm0
+; SSE-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0],xmm2[0]
 ; SSE-NEXT:    retq
 ;
 ; AVX-LABEL: shuffle_v2i64_02_copy:
@@ -382,26 +382,26 @@ define <2 x i64> @shuffle_v2i64_03(<2 x
 define <2 x i64> @shuffle_v2i64_03_copy(<2 x i64> %nonce, <2 x i64> %a, <2 x i64> %b) {
 ; SSE2-LABEL: shuffle_v2i64_03_copy:
 ; SSE2:       # %bb.0:
-; SSE2-NEXT:    movsd {{.*#+}} xmm2 = xmm1[0],xmm2[1]
 ; SSE2-NEXT:    movapd %xmm2, %xmm0
+; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
 ; SSE2-NEXT:    retq
 ;
 ; SSE3-LABEL: shuffle_v2i64_03_copy:
 ; SSE3:       # %bb.0:
-; SSE3-NEXT:    movsd {{.*#+}} xmm2 = xmm1[0],xmm2[1]
 ; SSE3-NEXT:    movapd %xmm2, %xmm0
+; SSE3-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
 ; SSE3-NEXT:    retq
 ;
 ; SSSE3-LABEL: shuffle_v2i64_03_copy:
 ; SSSE3:       # %bb.0:
-; SSSE3-NEXT:    movsd {{.*#+}} xmm2 = xmm1[0],xmm2[1]
 ; SSSE3-NEXT:    movapd %xmm2, %xmm0
+; SSSE3-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
 ; SSSE3-NEXT:    retq
 ;
 ; SSE41-LABEL: shuffle_v2i64_03_copy:
 ; SSE41:       # %bb.0:
-; SSE41-NEXT:    blendps {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3]
 ; SSE41-NEXT:    movaps %xmm1, %xmm0
+; SSE41-NEXT:    blendps {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3]
 ; SSE41-NEXT:    retq
 ;
 ; AVX-LABEL: shuffle_v2i64_03_copy:
@@ -444,26 +444,26 @@ define <2 x i64> @shuffle_v2i64_12(<2 x
 define <2 x i64> @shuffle_v2i64_12_copy(<2 x i64> %nonce, <2 x i64> %a, <2 x i64> %b) {
 ; SSE2-LABEL: shuffle_v2i64_12_copy:
 ; SSE2:       # %bb.0:
-; SSE2-NEXT:    shufpd {{.*#+}} xmm1 = xmm1[1],xmm2[0]
 ; SSE2-NEXT:    movapd %xmm1, %xmm0
+; SSE2-NEXT:    shufpd {{.*#+}} xmm0 = xmm0[1],xmm2[0]
 ; SSE2-NEXT:    retq
 ;
 ; SSE3-LABEL: shuffle_v2i64_12_copy:
 ; SSE3:       # %bb.0:
-; SSE3-NEXT:    shufpd {{.*#+}} xmm1 = xmm1[1],xmm2[0]
 ; SSE3-NEXT:    movapd %xmm1, %xmm0
+; SSE3-NEXT:    shufpd {{.*#+}} xmm0 = xmm0[1],xmm2[0]
 ; SSE3-NEXT:    retq
 ;
 ; SSSE3-LABEL: shuffle_v2i64_12_copy:
 ; SSSE3:       # %bb.0:
-; SSSE3-NEXT:    palignr {{.*#+}} xmm2 = xmm1[8,9,10,11,12,13,14,15],xmm2[0,1,2,3,4,5,6,7]
 ; SSSE3-NEXT:    movdqa %xmm2, %xmm0
+; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm1[8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7]
 ; SSSE3-NEXT:    retq
 ;
 ; SSE41-LABEL: shuffle_v2i64_12_copy:
 ; SSE41:       # %bb.0:
-; SSE41-NEXT:    palignr {{.*#+}} xmm2 = xmm1[8,9,10,11,12,13,14,15],xmm2[0,1,2,3,4,5,6,7]
 ; SSE41-NEXT:    movdqa %xmm2, %xmm0
+; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm1[8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7]
 ; SSE41-NEXT:    retq
 ;
 ; AVX-LABEL: shuffle_v2i64_12_copy:
@@ -489,8 +489,8 @@ define <2 x i64> @shuffle_v2i64_13(<2 x
 define <2 x i64> @shuffle_v2i64_13_copy(<2 x i64> %nonce, <2 x i64> %a, <2 x i64> %b) {
 ; SSE-LABEL: shuffle_v2i64_13_copy:
 ; SSE:       # %bb.0:
-; SSE-NEXT:    unpckhpd {{.*#+}} xmm1 = xmm1[1],xmm2[1]
 ; SSE-NEXT:    movaps %xmm1, %xmm0
+; SSE-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm2[1]
 ; SSE-NEXT:    retq
 ;
 ; AVX-LABEL: shuffle_v2i64_13_copy:
@@ -517,8 +517,8 @@ define <2 x i64> @shuffle_v2i64_20(<2 x
 define <2 x i64> @shuffle_v2i64_20_copy(<2 x i64> %nonce, <2 x i64> %a, <2 x i64> %b) {
 ; SSE-LABEL: shuffle_v2i64_20_copy:
 ; SSE:       # %bb.0:
-; SSE-NEXT:    movlhps {{.*#+}} xmm2 = xmm2[0],xmm1[0]
 ; SSE-NEXT:    movaps %xmm2, %xmm0
+; SSE-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]
 ; SSE-NEXT:    retq
 ;
 ; AVX-LABEL: shuffle_v2i64_20_copy:
@@ -559,26 +559,26 @@ define <2 x i64> @shuffle_v2i64_21(<2 x
 define <2 x i64> @shuffle_v2i64_21_copy(<2 x i64> %nonce, <2 x i64> %a, <2 x i64> %b) {
 ; SSE2-LABEL: shuffle_v2i64_21_copy:
 ; SSE2:       # %bb.0:
-; SSE2-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]
 ; SSE2-NEXT:    movapd %xmm1, %xmm0
+; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm2[0],xmm0[1]
 ; SSE2-NEXT:    retq
 ;
 ; SSE3-LABEL: shuffle_v2i64_21_copy:
 ; SSE3:       # %bb.0:
-; SSE3-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]
 ; SSE3-NEXT:    movapd %xmm1, %xmm0
+; SSE3-NEXT:    movsd {{.*#+}} xmm0 = xmm2[0],xmm0[1]
 ; SSE3-NEXT:    retq
 ;
 ; SSSE3-LABEL: shuffle_v2i64_21_copy:
 ; SSSE3:       # %bb.0:
-; SSSE3-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]
 ; SSSE3-NEXT:    movapd %xmm1, %xmm0
+; SSSE3-NEXT:    movsd {{.*#+}} xmm0 = xmm2[0],xmm0[1]
 ; SSSE3-NEXT:    retq
 ;
 ; SSE41-LABEL: shuffle_v2i64_21_copy:
 ; SSE41:       # %bb.0:
-; SSE41-NEXT:    blendps {{.*#+}} xmm1 = xmm2[0,1],xmm1[2,3]
 ; SSE41-NEXT:    movaps %xmm1, %xmm0
+; SSE41-NEXT:    blendps {{.*#+}} xmm0 = xmm2[0,1],xmm0[2,3]
 ; SSE41-NEXT:    retq
 ;
 ; AVX-LABEL: shuffle_v2i64_21_copy:
@@ -621,26 +621,26 @@ define <2 x i64> @shuffle_v2i64_30(<2 x
 define <2 x i64> @shuffle_v2i64_30_copy(<2 x i64> %nonce, <2 x i64> %a, <2 x i64> %b) {
 ; SSE2-LABEL: shuffle_v2i64_30_copy:
 ; SSE2:       # %bb.0:
-; SSE2-NEXT:    shufpd {{.*#+}} xmm2 = xmm2[1],xmm1[0]
 ; SSE2-NEXT:    movapd %xmm2, %xmm0
+; SSE2-NEXT:    shufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0]
 ; SSE2-NEXT:    retq
 ;
 ; SSE3-LABEL: shuffle_v2i64_30_copy:
 ; SSE3:       # %bb.0:
-; SSE3-NEXT:    shufpd {{.*#+}} xmm2 = xmm2[1],xmm1[0]
 ; SSE3-NEXT:    movapd %xmm2, %xmm0
+; SSE3-NEXT:    shufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0]
 ; SSE3-NEXT:    retq
 ;
 ; SSSE3-LABEL: shuffle_v2i64_30_copy:
 ; SSSE3:       # %bb.0:
-; SSSE3-NEXT:    palignr {{.*#+}} xmm1 = xmm2[8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7]
 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
+; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm2[8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7]
 ; SSSE3-NEXT:    retq
 ;
 ; SSE41-LABEL: shuffle_v2i64_30_copy:
 ; SSE41:       # %bb.0:
-; SSE41-NEXT:    palignr {{.*#+}} xmm1 = xmm2[8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7]
 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
+; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm2[8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7]
 ; SSE41-NEXT:    retq
 ;
 ; AVX-LABEL: shuffle_v2i64_30_copy:
@@ -667,8 +667,8 @@ define <2 x i64> @shuffle_v2i64_31(<2 x
 define <2 x i64> @shuffle_v2i64_31_copy(<2 x i64> %nonce, <2 x i64> %a, <2 x i64> %b) {
 ; SSE-LABEL: shuffle_v2i64_31_copy:
 ; SSE:       # %bb.0:
-; SSE-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1],xmm1[1]
 ; SSE-NEXT:    movaps %xmm2, %xmm0
+; SSE-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]
 ; SSE-NEXT:    retq
 ;
 ; AVX-LABEL: shuffle_v2i64_31_copy:

Modified: llvm/trunk/test/CodeGen/X86/vector-shuffle-combining-sse4a.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-shuffle-combining-sse4a.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vector-shuffle-combining-sse4a.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vector-shuffle-combining-sse4a.ll Wed Sep 19 11:59:08 2018
@@ -33,8 +33,8 @@ define <8 x i16> @combine_extrqi_pshufb_
 define <16 x i8> @combine_insertqi_pshufb_16i8(<16 x i8> %a0, <16 x i8> %a1) {
 ; SSSE3-LABEL: combine_insertqi_pshufb_16i8:
 ; SSSE3:       # %bb.0:
-; SSSE3-NEXT:    extrq {{.*#+}} xmm1 = xmm1[0,1],zero,zero,zero,zero,zero,zero,xmm1[u,u,u,u,u,u,u,u]
 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
+; SSSE3-NEXT:    extrq {{.*#+}} xmm0 = xmm0[0,1],zero,zero,zero,zero,zero,zero,xmm0[u,u,u,u,u,u,u,u]
 ; SSSE3-NEXT:    retq
 ;
 ; SSE42-LABEL: combine_insertqi_pshufb_16i8:
@@ -54,8 +54,8 @@ define <16 x i8> @combine_insertqi_pshuf
 define <8 x i16> @combine_insertqi_pshufb_8i16(<8 x i16> %a0, <8 x i16> %a1) {
 ; SSSE3-LABEL: combine_insertqi_pshufb_8i16:
 ; SSSE3:       # %bb.0:
-; SSSE3-NEXT:    extrq {{.*#+}} xmm1 = xmm1[0,1],zero,zero,zero,zero,zero,zero,xmm1[u,u,u,u,u,u,u,u]
 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
+; SSSE3-NEXT:    extrq {{.*#+}} xmm0 = xmm0[0,1],zero,zero,zero,zero,zero,zero,xmm0[u,u,u,u,u,u,u,u]
 ; SSSE3-NEXT:    retq
 ;
 ; SSE42-LABEL: combine_insertqi_pshufb_8i16:

Modified: llvm/trunk/test/CodeGen/X86/vector-shuffle-combining-ssse3.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-shuffle-combining-ssse3.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vector-shuffle-combining-ssse3.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vector-shuffle-combining-ssse3.ll Wed Sep 19 11:59:08 2018
@@ -574,8 +574,8 @@ define <16 x i8> @combine_unpckl_arg0_ps
 define <16 x i8> @combine_unpckl_arg1_pshufb(<16 x i8> %a0, <16 x i8> %a1) {
 ; SSE-LABEL: combine_unpckl_arg1_pshufb:
 ; SSE:       # %bb.0:
-; SSE-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[0],zero,zero,zero,xmm1[0],zero,zero,zero,xmm1[0],zero,zero,zero
 ; SSE-NEXT:    movdqa %xmm1, %xmm0
+; SSE-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[0],zero,zero,zero,xmm0[0],zero,zero,zero,xmm0[0],zero,zero,zero
 ; SSE-NEXT:    retq
 ;
 ; AVX-LABEL: combine_unpckl_arg1_pshufb:

Modified: llvm/trunk/test/CodeGen/X86/vector-shuffle-combining.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-shuffle-combining.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vector-shuffle-combining.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vector-shuffle-combining.ll Wed Sep 19 11:59:08 2018
@@ -1624,8 +1624,8 @@ define void @combine_test23(<8 x float>
 define <4 x float> @combine_test1b(<4 x float> %a, <4 x float> %b) {
 ; SSE-LABEL: combine_test1b:
 ; SSE:       # %bb.0:
-; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1,2,0]
 ; SSE-NEXT:    movaps %xmm1, %xmm0
+; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,0]
 ; SSE-NEXT:    retq
 ;
 ; AVX-LABEL: combine_test1b:
@@ -1640,8 +1640,8 @@ define <4 x float> @combine_test1b(<4 x
 define <4 x float> @combine_test2b(<4 x float> %a, <4 x float> %b) {
 ; SSE2-LABEL: combine_test2b:
 ; SSE2:       # %bb.0:
-; SSE2-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0,0]
 ; SSE2-NEXT:    movaps %xmm1, %xmm0
+; SSE2-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]
 ; SSE2-NEXT:    retq
 ;
 ; SSSE3-LABEL: combine_test2b:
@@ -1695,8 +1695,8 @@ define <4 x float> @combine_test3b(<4 x
 define <4 x float> @combine_test4b(<4 x float> %a, <4 x float> %b) {
 ; SSE-LABEL: combine_test4b:
 ; SSE:       # %bb.0:
-; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1,2,3]
 ; SSE-NEXT:    movaps %xmm1, %xmm0
+; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1],xmm1[2,3]
 ; SSE-NEXT:    retq
 ;
 ; AVX-LABEL: combine_test4b:
@@ -2766,9 +2766,9 @@ entry:
 define <8 x float> @PR22412(<8 x float> %a, <8 x float> %b) {
 ; SSE-LABEL: PR22412:
 ; SSE:       # %bb.0: # %entry
-; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,0],xmm3[3,2]
-; SSE-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,0],xmm2[3,2]
 ; SSE-NEXT:    movaps %xmm3, %xmm1
+; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,0],xmm3[3,2]
+; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,0],xmm2[3,2]
 ; SSE-NEXT:    retq
 ;
 ; AVX1-LABEL: PR22412:

Modified: llvm/trunk/test/CodeGen/X86/vector-zext.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-zext.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vector-zext.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vector-zext.ll Wed Sep 19 11:59:08 2018
@@ -2123,6 +2123,7 @@ entry:
 define <32 x i32> @zext_32i8_to_32i32(<32 x i8> %x) {
 ; SSE2-LABEL: zext_32i8_to_32i32:
 ; SSE2:       # %bb.0:
+; SSE2-NEXT:    movq %rdi, %rax
 ; SSE2-NEXT:    pxor %xmm2, %xmm2
 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]
@@ -2150,11 +2151,11 @@ define <32 x i32> @zext_32i8_to_32i32(<3
 ; SSE2-NEXT:    movdqa %xmm5, 32(%rdi)
 ; SSE2-NEXT:    movdqa %xmm3, 16(%rdi)
 ; SSE2-NEXT:    movdqa %xmm8, (%rdi)
-; SSE2-NEXT:    movq %rdi, %rax
 ; SSE2-NEXT:    retq
 ;
 ; SSSE3-LABEL: zext_32i8_to_32i32:
 ; SSSE3:       # %bb.0:
+; SSSE3-NEXT:    movq %rdi, %rax
 ; SSSE3-NEXT:    pxor %xmm2, %xmm2
 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]
@@ -2182,11 +2183,11 @@ define <32 x i32> @zext_32i8_to_32i32(<3
 ; SSSE3-NEXT:    movdqa %xmm5, 32(%rdi)
 ; SSSE3-NEXT:    movdqa %xmm3, 16(%rdi)
 ; SSSE3-NEXT:    movdqa %xmm8, (%rdi)
-; SSSE3-NEXT:    movq %rdi, %rax
 ; SSSE3-NEXT:    retq
 ;
 ; SSE41-LABEL: zext_32i8_to_32i32:
 ; SSE41:       # %bb.0:
+; SSE41-NEXT:    movq %rdi, %rax
 ; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm2 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero
 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[1,1,2,3]
 ; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm3 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero,xmm3[2],zero,zero,zero,xmm3[3],zero,zero,zero
@@ -2209,7 +2210,6 @@ define <32 x i32> @zext_32i8_to_32i32(<3
 ; SSE41-NEXT:    movdqa %xmm4, 32(%rdi)
 ; SSE41-NEXT:    movdqa %xmm3, 16(%rdi)
 ; SSE41-NEXT:    movdqa %xmm2, (%rdi)
-; SSE41-NEXT:    movq %rdi, %rax
 ; SSE41-NEXT:    retq
 ;
 ; AVX1-LABEL: zext_32i8_to_32i32:

Modified: llvm/trunk/test/CodeGen/X86/vectorcall.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vectorcall.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vectorcall.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vectorcall.ll Wed Sep 19 11:59:08 2018
@@ -22,7 +22,8 @@ define x86_vectorcallcc i32 @test_int_3(
 }
 ; X86-LABEL: {{^}}test_int_3@@8:
 ; X64-LABEL: {{^}}test_int_3@@8:
-; CHECK: movl %ecx, %eax
+; X86: movl %ecx, %eax
+; X64: movq %rcx, %rax
 
 define x86_vectorcallcc i32 @test_int_4(i32 inreg %a, i32 inreg %b) {
   %s = add i32 %a, %b
@@ -148,8 +149,8 @@ entry:
   ret <4 x float> %0
 }
 ; CHECK-LABEL: test_mixed_5
-; CHECK:       movaps	%xmm5, 16(%{{(e|r)}}sp)
-; CHECK:       movaps	%xmm5, %xmm0
+; CHECK-DAG:   movaps	%xmm{{[0,5]}}, 16(%{{(e|r)}}sp)
+; CHECK-DAG:   movaps	%xmm5, %xmm0
 ; CHECK:       ret{{[ql]}}
 
 define x86_vectorcallcc %struct.HVA4 @test_mixed_6(%struct.HVA4 inreg %a, %struct.HVA4* %b) {
@@ -183,12 +184,12 @@ entry:
   ret void
 }
 ; CHECK-LABEL: test_mixed_7
+; X64:         mov{{[ql]}}	%rcx, %rax
 ; CHECK:       movaps	%xmm{{[0-9]}}, 64(%{{rcx|eax}})
 ; CHECK:       movaps	%xmm{{[0-9]}}, 48(%{{rcx|eax}})
 ; CHECK:       movaps	%xmm{{[0-9]}}, 32(%{{rcx|eax}})
 ; CHECK:       movaps	%xmm{{[0-9]}}, 16(%{{rcx|eax}})
 ; CHECK:       movaps	%xmm{{[0-9]}}, (%{{rcx|eax}})
-; X64:         mov{{[ql]}}	%rcx, %rax
 ; CHECK:       ret{{[ql]}}
 
 define x86_vectorcallcc <4 x float> @test_mixed_8(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d, i32 %e, <4 x float> %f) {

Modified: llvm/trunk/test/CodeGen/X86/vselect-minmax.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vselect-minmax.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vselect-minmax.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vselect-minmax.ll Wed Sep 19 11:59:08 2018
@@ -4535,23 +4535,24 @@ define <8 x i64> @test121(<8 x i64> %a,
 ;
 ; SSE4-LABEL: test121:
 ; SSE4:       # %bb.0: # %entry
-; SSE4-NEXT:    movdqa %xmm0, %xmm8
+; SSE4-NEXT:    movdqa %xmm7, %xmm8
+; SSE4-NEXT:    movdqa %xmm0, %xmm7
 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
-; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
+; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
 ; SSE4-NEXT:    movdqa %xmm6, %xmm0
 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
-; SSE4-NEXT:    movdqa %xmm7, %xmm0
+; SSE4-NEXT:    movdqa %xmm8, %xmm0
 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
+; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
 ; SSE4-NEXT:    movapd %xmm4, %xmm0
 ; SSE4-NEXT:    movapd %xmm5, %xmm1
 ; SSE4-NEXT:    movapd %xmm6, %xmm2
-; SSE4-NEXT:    movapd %xmm7, %xmm3
+; SSE4-NEXT:    movapd %xmm8, %xmm3
 ; SSE4-NEXT:    retq
 ;
 ; AVX1-LABEL: test121:
@@ -4655,23 +4656,24 @@ define <8 x i64> @test122(<8 x i64> %a,
 ;
 ; SSE4-LABEL: test122:
 ; SSE4:       # %bb.0: # %entry
-; SSE4-NEXT:    movdqa %xmm0, %xmm8
+; SSE4-NEXT:    movdqa %xmm7, %xmm8
+; SSE4-NEXT:    movdqa %xmm0, %xmm7
 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
-; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
+; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
 ; SSE4-NEXT:    movdqa %xmm6, %xmm0
 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
-; SSE4-NEXT:    movdqa %xmm7, %xmm0
+; SSE4-NEXT:    movdqa %xmm8, %xmm0
 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
+; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
 ; SSE4-NEXT:    movapd %xmm4, %xmm0
 ; SSE4-NEXT:    movapd %xmm5, %xmm1
 ; SSE4-NEXT:    movapd %xmm6, %xmm2
-; SSE4-NEXT:    movapd %xmm7, %xmm3
+; SSE4-NEXT:    movapd %xmm8, %xmm3
 ; SSE4-NEXT:    retq
 ;
 ; AVX1-LABEL: test122:
@@ -4775,9 +4777,10 @@ define <8 x i64> @test123(<8 x i64> %a,
 ;
 ; SSE4-LABEL: test123:
 ; SSE4:       # %bb.0: # %entry
-; SSE4-NEXT:    movdqa %xmm0, %xmm8
+; SSE4-NEXT:    movdqa %xmm7, %xmm8
+; SSE4-NEXT:    movdqa %xmm0, %xmm7
 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
+; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
@@ -4785,12 +4788,12 @@ define <8 x i64> @test123(<8 x i64> %a,
 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
-; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
+; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
 ; SSE4-NEXT:    movapd %xmm4, %xmm0
 ; SSE4-NEXT:    movapd %xmm5, %xmm1
 ; SSE4-NEXT:    movapd %xmm6, %xmm2
-; SSE4-NEXT:    movapd %xmm7, %xmm3
+; SSE4-NEXT:    movapd %xmm8, %xmm3
 ; SSE4-NEXT:    retq
 ;
 ; AVX1-LABEL: test123:
@@ -4894,9 +4897,10 @@ define <8 x i64> @test124(<8 x i64> %a,
 ;
 ; SSE4-LABEL: test124:
 ; SSE4:       # %bb.0: # %entry
-; SSE4-NEXT:    movdqa %xmm0, %xmm8
+; SSE4-NEXT:    movdqa %xmm7, %xmm8
+; SSE4-NEXT:    movdqa %xmm0, %xmm7
 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
+; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
@@ -4904,12 +4908,12 @@ define <8 x i64> @test124(<8 x i64> %a,
 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
-; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
+; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
 ; SSE4-NEXT:    movapd %xmm4, %xmm0
 ; SSE4-NEXT:    movapd %xmm5, %xmm1
 ; SSE4-NEXT:    movapd %xmm6, %xmm2
-; SSE4-NEXT:    movapd %xmm7, %xmm3
+; SSE4-NEXT:    movapd %xmm8, %xmm3
 ; SSE4-NEXT:    retq
 ;
 ; AVX1-LABEL: test124:
@@ -5013,36 +5017,39 @@ define <8 x i64> @test125(<8 x i64> %a,
 ;
 ; SSE4-LABEL: test125:
 ; SSE4:       # %bb.0: # %entry
-; SSE4-NEXT:    movdqa %xmm0, %xmm9
-; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
-; SSE4-NEXT:    movdqa %xmm0, %xmm10
-; SSE4-NEXT:    pxor %xmm8, %xmm10
+; SSE4-NEXT:    movdqa %xmm7, %xmm8
+; SSE4-NEXT:    movdqa %xmm6, %xmm9
+; SSE4-NEXT:    movdqa %xmm5, %xmm10
+; SSE4-NEXT:    movdqa %xmm0, %xmm5
+; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
+; SSE4-NEXT:    movdqa %xmm0, %xmm6
+; SSE4-NEXT:    pxor %xmm7, %xmm6
 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
-; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
-; SSE4-NEXT:    movdqa %xmm1, %xmm9
-; SSE4-NEXT:    pxor %xmm8, %xmm9
-; SSE4-NEXT:    movdqa %xmm5, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
-; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
+; SSE4-NEXT:    pxor %xmm7, %xmm0
+; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm4
+; SSE4-NEXT:    movdqa %xmm1, %xmm5
+; SSE4-NEXT:    pxor %xmm7, %xmm5
+; SSE4-NEXT:    movdqa %xmm10, %xmm0
+; SSE4-NEXT:    pxor %xmm7, %xmm0
+; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
 ; SSE4-NEXT:    movdqa %xmm2, %xmm1
-; SSE4-NEXT:    pxor %xmm8, %xmm1
-; SSE4-NEXT:    movdqa %xmm6, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
+; SSE4-NEXT:    pxor %xmm7, %xmm1
+; SSE4-NEXT:    movdqa %xmm9, %xmm0
+; SSE4-NEXT:    pxor %xmm7, %xmm0
 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
+; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
-; SSE4-NEXT:    pxor %xmm7, %xmm8
-; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
-; SSE4-NEXT:    movdqa %xmm8, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
+; SSE4-NEXT:    pxor %xmm7, %xmm0
+; SSE4-NEXT:    pxor %xmm8, %xmm7
+; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
+; SSE4-NEXT:    movdqa %xmm7, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
 ; SSE4-NEXT:    movapd %xmm4, %xmm0
-; SSE4-NEXT:    movapd %xmm5, %xmm1
-; SSE4-NEXT:    movapd %xmm6, %xmm2
-; SSE4-NEXT:    movapd %xmm7, %xmm3
+; SSE4-NEXT:    movapd %xmm10, %xmm1
+; SSE4-NEXT:    movapd %xmm9, %xmm2
+; SSE4-NEXT:    movapd %xmm8, %xmm3
 ; SSE4-NEXT:    retq
 ;
 ; AVX1-LABEL: test125:
@@ -5160,36 +5167,39 @@ define <8 x i64> @test126(<8 x i64> %a,
 ;
 ; SSE4-LABEL: test126:
 ; SSE4:       # %bb.0: # %entry
-; SSE4-NEXT:    movdqa %xmm0, %xmm9
-; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
-; SSE4-NEXT:    movdqa %xmm0, %xmm10
-; SSE4-NEXT:    pxor %xmm8, %xmm10
+; SSE4-NEXT:    movdqa %xmm7, %xmm8
+; SSE4-NEXT:    movdqa %xmm6, %xmm9
+; SSE4-NEXT:    movdqa %xmm5, %xmm10
+; SSE4-NEXT:    movdqa %xmm0, %xmm5
+; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
+; SSE4-NEXT:    movdqa %xmm0, %xmm6
+; SSE4-NEXT:    pxor %xmm7, %xmm6
 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
-; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
-; SSE4-NEXT:    movdqa %xmm1, %xmm9
-; SSE4-NEXT:    pxor %xmm8, %xmm9
-; SSE4-NEXT:    movdqa %xmm5, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
-; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
+; SSE4-NEXT:    pxor %xmm7, %xmm0
+; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm4
+; SSE4-NEXT:    movdqa %xmm1, %xmm5
+; SSE4-NEXT:    pxor %xmm7, %xmm5
+; SSE4-NEXT:    movdqa %xmm10, %xmm0
+; SSE4-NEXT:    pxor %xmm7, %xmm0
+; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
 ; SSE4-NEXT:    movdqa %xmm2, %xmm1
-; SSE4-NEXT:    pxor %xmm8, %xmm1
-; SSE4-NEXT:    movdqa %xmm6, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
+; SSE4-NEXT:    pxor %xmm7, %xmm1
+; SSE4-NEXT:    movdqa %xmm9, %xmm0
+; SSE4-NEXT:    pxor %xmm7, %xmm0
 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
+; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
-; SSE4-NEXT:    pxor %xmm7, %xmm8
-; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
-; SSE4-NEXT:    movdqa %xmm8, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
+; SSE4-NEXT:    pxor %xmm7, %xmm0
+; SSE4-NEXT:    pxor %xmm8, %xmm7
+; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
+; SSE4-NEXT:    movdqa %xmm7, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
 ; SSE4-NEXT:    movapd %xmm4, %xmm0
-; SSE4-NEXT:    movapd %xmm5, %xmm1
-; SSE4-NEXT:    movapd %xmm6, %xmm2
-; SSE4-NEXT:    movapd %xmm7, %xmm3
+; SSE4-NEXT:    movapd %xmm10, %xmm1
+; SSE4-NEXT:    movapd %xmm9, %xmm2
+; SSE4-NEXT:    movapd %xmm8, %xmm3
 ; SSE4-NEXT:    retq
 ;
 ; AVX1-LABEL: test126:
@@ -5307,35 +5317,38 @@ define <8 x i64> @test127(<8 x i64> %a,
 ;
 ; SSE4-LABEL: test127:
 ; SSE4:       # %bb.0: # %entry
-; SSE4-NEXT:    movdqa %xmm0, %xmm9
-; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
-; SSE4-NEXT:    movdqa %xmm4, %xmm10
-; SSE4-NEXT:    pxor %xmm8, %xmm10
-; SSE4-NEXT:    pxor %xmm8, %xmm0
-; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
-; SSE4-NEXT:    movdqa %xmm5, %xmm9
-; SSE4-NEXT:    pxor %xmm8, %xmm9
+; SSE4-NEXT:    movdqa %xmm7, %xmm8
+; SSE4-NEXT:    movdqa %xmm6, %xmm9
+; SSE4-NEXT:    movdqa %xmm5, %xmm10
+; SSE4-NEXT:    movdqa %xmm4, %xmm5
+; SSE4-NEXT:    movdqa %xmm0, %xmm6
+; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
+; SSE4-NEXT:    pxor %xmm7, %xmm4
+; SSE4-NEXT:    pxor %xmm7, %xmm0
+; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm6, %xmm5
+; SSE4-NEXT:    movdqa %xmm10, %xmm4
+; SSE4-NEXT:    pxor %xmm7, %xmm4
 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
-; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
-; SSE4-NEXT:    movdqa %xmm6, %xmm1
-; SSE4-NEXT:    pxor %xmm8, %xmm1
+; SSE4-NEXT:    pxor %xmm7, %xmm0
+; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
+; SSE4-NEXT:    movdqa %xmm9, %xmm1
+; SSE4-NEXT:    pxor %xmm7, %xmm1
 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
+; SSE4-NEXT:    pxor %xmm7, %xmm0
 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
-; SSE4-NEXT:    movdqa %xmm7, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
-; SSE4-NEXT:    pxor %xmm3, %xmm8
-; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
+; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
-; SSE4-NEXT:    movapd %xmm4, %xmm0
-; SSE4-NEXT:    movapd %xmm5, %xmm1
-; SSE4-NEXT:    movapd %xmm6, %xmm2
-; SSE4-NEXT:    movapd %xmm7, %xmm3
+; SSE4-NEXT:    pxor %xmm7, %xmm0
+; SSE4-NEXT:    pxor %xmm3, %xmm7
+; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
+; SSE4-NEXT:    movdqa %xmm7, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
+; SSE4-NEXT:    movapd %xmm5, %xmm0
+; SSE4-NEXT:    movapd %xmm10, %xmm1
+; SSE4-NEXT:    movapd %xmm9, %xmm2
+; SSE4-NEXT:    movapd %xmm8, %xmm3
 ; SSE4-NEXT:    retq
 ;
 ; AVX1-LABEL: test127:
@@ -5453,35 +5466,38 @@ define <8 x i64> @test128(<8 x i64> %a,
 ;
 ; SSE4-LABEL: test128:
 ; SSE4:       # %bb.0: # %entry
-; SSE4-NEXT:    movdqa %xmm0, %xmm9
-; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
-; SSE4-NEXT:    movdqa %xmm4, %xmm10
-; SSE4-NEXT:    pxor %xmm8, %xmm10
-; SSE4-NEXT:    pxor %xmm8, %xmm0
-; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
-; SSE4-NEXT:    movdqa %xmm5, %xmm9
-; SSE4-NEXT:    pxor %xmm8, %xmm9
+; SSE4-NEXT:    movdqa %xmm7, %xmm8
+; SSE4-NEXT:    movdqa %xmm6, %xmm9
+; SSE4-NEXT:    movdqa %xmm5, %xmm10
+; SSE4-NEXT:    movdqa %xmm4, %xmm5
+; SSE4-NEXT:    movdqa %xmm0, %xmm6
+; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
+; SSE4-NEXT:    pxor %xmm7, %xmm4
+; SSE4-NEXT:    pxor %xmm7, %xmm0
+; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm6, %xmm5
+; SSE4-NEXT:    movdqa %xmm10, %xmm4
+; SSE4-NEXT:    pxor %xmm7, %xmm4
 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
-; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
-; SSE4-NEXT:    movdqa %xmm6, %xmm1
-; SSE4-NEXT:    pxor %xmm8, %xmm1
+; SSE4-NEXT:    pxor %xmm7, %xmm0
+; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
+; SSE4-NEXT:    movdqa %xmm9, %xmm1
+; SSE4-NEXT:    pxor %xmm7, %xmm1
 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
+; SSE4-NEXT:    pxor %xmm7, %xmm0
 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
-; SSE4-NEXT:    movdqa %xmm7, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
-; SSE4-NEXT:    pxor %xmm3, %xmm8
-; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
+; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
-; SSE4-NEXT:    movapd %xmm4, %xmm0
-; SSE4-NEXT:    movapd %xmm5, %xmm1
-; SSE4-NEXT:    movapd %xmm6, %xmm2
-; SSE4-NEXT:    movapd %xmm7, %xmm3
+; SSE4-NEXT:    pxor %xmm7, %xmm0
+; SSE4-NEXT:    pxor %xmm3, %xmm7
+; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
+; SSE4-NEXT:    movdqa %xmm7, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
+; SSE4-NEXT:    movapd %xmm5, %xmm0
+; SSE4-NEXT:    movapd %xmm10, %xmm1
+; SSE4-NEXT:    movapd %xmm9, %xmm2
+; SSE4-NEXT:    movapd %xmm8, %xmm3
 ; SSE4-NEXT:    retq
 ;
 ; AVX1-LABEL: test128:
@@ -6977,9 +6993,10 @@ define <8 x i64> @test153(<8 x i64> %a,
 ;
 ; SSE4-LABEL: test153:
 ; SSE4:       # %bb.0: # %entry
-; SSE4-NEXT:    movdqa %xmm0, %xmm8
+; SSE4-NEXT:    movdqa %xmm7, %xmm8
+; SSE4-NEXT:    movdqa %xmm0, %xmm7
 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
+; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
@@ -6987,12 +7004,12 @@ define <8 x i64> @test153(<8 x i64> %a,
 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
-; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
+; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
 ; SSE4-NEXT:    movapd %xmm4, %xmm0
 ; SSE4-NEXT:    movapd %xmm5, %xmm1
 ; SSE4-NEXT:    movapd %xmm6, %xmm2
-; SSE4-NEXT:    movapd %xmm7, %xmm3
+; SSE4-NEXT:    movapd %xmm8, %xmm3
 ; SSE4-NEXT:    retq
 ;
 ; AVX1-LABEL: test153:
@@ -7096,9 +7113,10 @@ define <8 x i64> @test154(<8 x i64> %a,
 ;
 ; SSE4-LABEL: test154:
 ; SSE4:       # %bb.0: # %entry
-; SSE4-NEXT:    movdqa %xmm0, %xmm8
+; SSE4-NEXT:    movdqa %xmm7, %xmm8
+; SSE4-NEXT:    movdqa %xmm0, %xmm7
 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
+; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
@@ -7106,12 +7124,12 @@ define <8 x i64> @test154(<8 x i64> %a,
 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
-; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
+; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
 ; SSE4-NEXT:    movapd %xmm4, %xmm0
 ; SSE4-NEXT:    movapd %xmm5, %xmm1
 ; SSE4-NEXT:    movapd %xmm6, %xmm2
-; SSE4-NEXT:    movapd %xmm7, %xmm3
+; SSE4-NEXT:    movapd %xmm8, %xmm3
 ; SSE4-NEXT:    retq
 ;
 ; AVX1-LABEL: test154:
@@ -7215,23 +7233,24 @@ define <8 x i64> @test155(<8 x i64> %a,
 ;
 ; SSE4-LABEL: test155:
 ; SSE4:       # %bb.0: # %entry
-; SSE4-NEXT:    movdqa %xmm0, %xmm8
+; SSE4-NEXT:    movdqa %xmm7, %xmm8
+; SSE4-NEXT:    movdqa %xmm0, %xmm7
 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
-; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
+; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
 ; SSE4-NEXT:    movdqa %xmm6, %xmm0
 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
-; SSE4-NEXT:    movdqa %xmm7, %xmm0
+; SSE4-NEXT:    movdqa %xmm8, %xmm0
 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
+; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
 ; SSE4-NEXT:    movapd %xmm4, %xmm0
 ; SSE4-NEXT:    movapd %xmm5, %xmm1
 ; SSE4-NEXT:    movapd %xmm6, %xmm2
-; SSE4-NEXT:    movapd %xmm7, %xmm3
+; SSE4-NEXT:    movapd %xmm8, %xmm3
 ; SSE4-NEXT:    retq
 ;
 ; AVX1-LABEL: test155:
@@ -7335,35 +7354,38 @@ define <8 x i64> @test156(<8 x i64> %a,
 ;
 ; SSE4-LABEL: test156:
 ; SSE4:       # %bb.0: # %entry
-; SSE4-NEXT:    movdqa %xmm0, %xmm9
-; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
-; SSE4-NEXT:    movdqa %xmm4, %xmm10
-; SSE4-NEXT:    pxor %xmm8, %xmm10
-; SSE4-NEXT:    pxor %xmm8, %xmm0
-; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
-; SSE4-NEXT:    movdqa %xmm5, %xmm9
-; SSE4-NEXT:    pxor %xmm8, %xmm9
+; SSE4-NEXT:    movdqa %xmm7, %xmm8
+; SSE4-NEXT:    movdqa %xmm6, %xmm9
+; SSE4-NEXT:    movdqa %xmm5, %xmm10
+; SSE4-NEXT:    movdqa %xmm4, %xmm5
+; SSE4-NEXT:    movdqa %xmm0, %xmm6
+; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
+; SSE4-NEXT:    pxor %xmm7, %xmm4
+; SSE4-NEXT:    pxor %xmm7, %xmm0
+; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm6, %xmm5
+; SSE4-NEXT:    movdqa %xmm10, %xmm4
+; SSE4-NEXT:    pxor %xmm7, %xmm4
 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
-; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
-; SSE4-NEXT:    movdqa %xmm6, %xmm1
-; SSE4-NEXT:    pxor %xmm8, %xmm1
+; SSE4-NEXT:    pxor %xmm7, %xmm0
+; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
+; SSE4-NEXT:    movdqa %xmm9, %xmm1
+; SSE4-NEXT:    pxor %xmm7, %xmm1
 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
+; SSE4-NEXT:    pxor %xmm7, %xmm0
 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
-; SSE4-NEXT:    movdqa %xmm7, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
-; SSE4-NEXT:    pxor %xmm3, %xmm8
-; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
+; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
-; SSE4-NEXT:    movapd %xmm4, %xmm0
-; SSE4-NEXT:    movapd %xmm5, %xmm1
-; SSE4-NEXT:    movapd %xmm6, %xmm2
-; SSE4-NEXT:    movapd %xmm7, %xmm3
+; SSE4-NEXT:    pxor %xmm7, %xmm0
+; SSE4-NEXT:    pxor %xmm3, %xmm7
+; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
+; SSE4-NEXT:    movdqa %xmm7, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
+; SSE4-NEXT:    movapd %xmm5, %xmm0
+; SSE4-NEXT:    movapd %xmm10, %xmm1
+; SSE4-NEXT:    movapd %xmm9, %xmm2
+; SSE4-NEXT:    movapd %xmm8, %xmm3
 ; SSE4-NEXT:    retq
 ;
 ; AVX1-LABEL: test156:
@@ -7481,36 +7503,39 @@ define <8 x i64> @test159(<8 x i64> %a,
 ;
 ; SSE4-LABEL: test159:
 ; SSE4:       # %bb.0: # %entry
-; SSE4-NEXT:    movdqa %xmm0, %xmm9
-; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
-; SSE4-NEXT:    movdqa %xmm0, %xmm10
-; SSE4-NEXT:    pxor %xmm8, %xmm10
+; SSE4-NEXT:    movdqa %xmm7, %xmm8
+; SSE4-NEXT:    movdqa %xmm6, %xmm9
+; SSE4-NEXT:    movdqa %xmm5, %xmm10
+; SSE4-NEXT:    movdqa %xmm0, %xmm5
+; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
+; SSE4-NEXT:    movdqa %xmm0, %xmm6
+; SSE4-NEXT:    pxor %xmm7, %xmm6
 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
-; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
-; SSE4-NEXT:    movdqa %xmm1, %xmm9
-; SSE4-NEXT:    pxor %xmm8, %xmm9
-; SSE4-NEXT:    movdqa %xmm5, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
-; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
+; SSE4-NEXT:    pxor %xmm7, %xmm0
+; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm4
+; SSE4-NEXT:    movdqa %xmm1, %xmm5
+; SSE4-NEXT:    pxor %xmm7, %xmm5
+; SSE4-NEXT:    movdqa %xmm10, %xmm0
+; SSE4-NEXT:    pxor %xmm7, %xmm0
+; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
 ; SSE4-NEXT:    movdqa %xmm2, %xmm1
-; SSE4-NEXT:    pxor %xmm8, %xmm1
-; SSE4-NEXT:    movdqa %xmm6, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
+; SSE4-NEXT:    pxor %xmm7, %xmm1
+; SSE4-NEXT:    movdqa %xmm9, %xmm0
+; SSE4-NEXT:    pxor %xmm7, %xmm0
 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
+; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
-; SSE4-NEXT:    pxor %xmm7, %xmm8
-; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
-; SSE4-NEXT:    movdqa %xmm8, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
+; SSE4-NEXT:    pxor %xmm7, %xmm0
+; SSE4-NEXT:    pxor %xmm8, %xmm7
+; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
+; SSE4-NEXT:    movdqa %xmm7, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
 ; SSE4-NEXT:    movapd %xmm4, %xmm0
-; SSE4-NEXT:    movapd %xmm5, %xmm1
-; SSE4-NEXT:    movapd %xmm6, %xmm2
-; SSE4-NEXT:    movapd %xmm7, %xmm3
+; SSE4-NEXT:    movapd %xmm10, %xmm1
+; SSE4-NEXT:    movapd %xmm9, %xmm2
+; SSE4-NEXT:    movapd %xmm8, %xmm3
 ; SSE4-NEXT:    retq
 ;
 ; AVX1-LABEL: test159:
@@ -7628,36 +7653,39 @@ define <8 x i64> @test160(<8 x i64> %a,
 ;
 ; SSE4-LABEL: test160:
 ; SSE4:       # %bb.0: # %entry
-; SSE4-NEXT:    movdqa %xmm0, %xmm9
-; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
-; SSE4-NEXT:    movdqa %xmm0, %xmm10
-; SSE4-NEXT:    pxor %xmm8, %xmm10
+; SSE4-NEXT:    movdqa %xmm7, %xmm8
+; SSE4-NEXT:    movdqa %xmm6, %xmm9
+; SSE4-NEXT:    movdqa %xmm5, %xmm10
+; SSE4-NEXT:    movdqa %xmm0, %xmm5
+; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
+; SSE4-NEXT:    movdqa %xmm0, %xmm6
+; SSE4-NEXT:    pxor %xmm7, %xmm6
 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
-; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
-; SSE4-NEXT:    movdqa %xmm1, %xmm9
-; SSE4-NEXT:    pxor %xmm8, %xmm9
-; SSE4-NEXT:    movdqa %xmm5, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
-; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
+; SSE4-NEXT:    pxor %xmm7, %xmm0
+; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm4
+; SSE4-NEXT:    movdqa %xmm1, %xmm5
+; SSE4-NEXT:    pxor %xmm7, %xmm5
+; SSE4-NEXT:    movdqa %xmm10, %xmm0
+; SSE4-NEXT:    pxor %xmm7, %xmm0
+; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
 ; SSE4-NEXT:    movdqa %xmm2, %xmm1
-; SSE4-NEXT:    pxor %xmm8, %xmm1
-; SSE4-NEXT:    movdqa %xmm6, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
+; SSE4-NEXT:    pxor %xmm7, %xmm1
+; SSE4-NEXT:    movdqa %xmm9, %xmm0
+; SSE4-NEXT:    pxor %xmm7, %xmm0
 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
+; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
-; SSE4-NEXT:    pxor %xmm8, %xmm0
-; SSE4-NEXT:    pxor %xmm7, %xmm8
-; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
-; SSE4-NEXT:    movdqa %xmm8, %xmm0
-; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
+; SSE4-NEXT:    pxor %xmm7, %xmm0
+; SSE4-NEXT:    pxor %xmm8, %xmm7
+; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
+; SSE4-NEXT:    movdqa %xmm7, %xmm0
+; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
 ; SSE4-NEXT:    movapd %xmm4, %xmm0
-; SSE4-NEXT:    movapd %xmm5, %xmm1
-; SSE4-NEXT:    movapd %xmm6, %xmm2
-; SSE4-NEXT:    movapd %xmm7, %xmm3
+; SSE4-NEXT:    movapd %xmm10, %xmm1
+; SSE4-NEXT:    movapd %xmm9, %xmm2
+; SSE4-NEXT:    movapd %xmm8, %xmm3
 ; SSE4-NEXT:    retq
 ;
 ; AVX1-LABEL: test160:

Modified: llvm/trunk/test/CodeGen/X86/vselect.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vselect.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vselect.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vselect.ll Wed Sep 19 11:59:08 2018
@@ -457,6 +457,7 @@ define <4 x float> @select_of_shuffles_0
 define <16 x double> @select_illegal(<16 x double> %a, <16 x double> %b) {
 ; SSE-LABEL: select_illegal:
 ; SSE:       # %bb.0:
+; SSE-NEXT:    movq %rdi, %rax
 ; SSE-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm4
 ; SSE-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm5
 ; SSE-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm6
@@ -469,13 +470,12 @@ define <16 x double> @select_illegal(<16
 ; SSE-NEXT:    movaps %xmm2, 32(%rdi)
 ; SSE-NEXT:    movaps %xmm1, 16(%rdi)
 ; SSE-NEXT:    movaps %xmm0, (%rdi)
-; SSE-NEXT:    movq %rdi, %rax
 ; SSE-NEXT:    retq
 ;
 ; AVX-LABEL: select_illegal:
 ; AVX:       # %bb.0:
-; AVX-NEXT:    vmovaps %ymm6, %ymm2
 ; AVX-NEXT:    vmovaps %ymm7, %ymm3
+; AVX-NEXT:    vmovaps %ymm6, %ymm2
 ; AVX-NEXT:    retq
   %sel = select <16 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false>, <16 x double> %a, <16 x double> %b
   ret <16 x double> %sel

Modified: llvm/trunk/test/CodeGen/X86/widen_bitops-0.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/widen_bitops-0.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/widen_bitops-0.ll (original)
+++ llvm/trunk/test/CodeGen/X86/widen_bitops-0.ll Wed Sep 19 11:59:08 2018
@@ -15,8 +15,8 @@ define i24 @and_i24_as_v3i8(i24 %a, i24
 ;
 ; X64-SSE-LABEL: and_i24_as_v3i8:
 ; X64-SSE:       # %bb.0:
-; X64-SSE-NEXT:    andl %esi, %edi
 ; X64-SSE-NEXT:    movl %edi, %eax
+; X64-SSE-NEXT:    andl %esi, %eax
 ; X64-SSE-NEXT:    retq
   %1 = bitcast i24 %a to <3 x i8>
   %2 = bitcast i24 %b to <3 x i8>
@@ -34,8 +34,8 @@ define i24 @xor_i24_as_v3i8(i24 %a, i24
 ;
 ; X64-SSE-LABEL: xor_i24_as_v3i8:
 ; X64-SSE:       # %bb.0:
-; X64-SSE-NEXT:    xorl %esi, %edi
 ; X64-SSE-NEXT:    movl %edi, %eax
+; X64-SSE-NEXT:    xorl %esi, %eax
 ; X64-SSE-NEXT:    retq
   %1 = bitcast i24 %a to <3 x i8>
   %2 = bitcast i24 %b to <3 x i8>
@@ -53,8 +53,8 @@ define i24 @or_i24_as_v3i8(i24 %a, i24 %
 ;
 ; X64-SSE-LABEL: or_i24_as_v3i8:
 ; X64-SSE:       # %bb.0:
-; X64-SSE-NEXT:    orl %esi, %edi
 ; X64-SSE-NEXT:    movl %edi, %eax
+; X64-SSE-NEXT:    orl %esi, %eax
 ; X64-SSE-NEXT:    retq
   %1 = bitcast i24 %a to <3 x i8>
   %2 = bitcast i24 %b to <3 x i8>
@@ -76,8 +76,8 @@ define i24 @and_i24_as_v8i3(i24 %a, i24
 ;
 ; X64-SSE-LABEL: and_i24_as_v8i3:
 ; X64-SSE:       # %bb.0:
-; X64-SSE-NEXT:    andl %esi, %edi
 ; X64-SSE-NEXT:    movl %edi, %eax
+; X64-SSE-NEXT:    andl %esi, %eax
 ; X64-SSE-NEXT:    retq
   %1 = bitcast i24 %a to <8 x i3>
   %2 = bitcast i24 %b to <8 x i3>
@@ -95,8 +95,8 @@ define i24 @xor_i24_as_v8i3(i24 %a, i24
 ;
 ; X64-SSE-LABEL: xor_i24_as_v8i3:
 ; X64-SSE:       # %bb.0:
-; X64-SSE-NEXT:    xorl %esi, %edi
 ; X64-SSE-NEXT:    movl %edi, %eax
+; X64-SSE-NEXT:    xorl %esi, %eax
 ; X64-SSE-NEXT:    retq
   %1 = bitcast i24 %a to <8 x i3>
   %2 = bitcast i24 %b to <8 x i3>
@@ -114,8 +114,8 @@ define i24 @or_i24_as_v8i3(i24 %a, i24 %
 ;
 ; X64-SSE-LABEL: or_i24_as_v8i3:
 ; X64-SSE:       # %bb.0:
-; X64-SSE-NEXT:    orl %esi, %edi
 ; X64-SSE-NEXT:    movl %edi, %eax
+; X64-SSE-NEXT:    orl %esi, %eax
 ; X64-SSE-NEXT:    retq
   %1 = bitcast i24 %a to <8 x i3>
   %2 = bitcast i24 %b to <8 x i3>

Modified: llvm/trunk/test/CodeGen/X86/widen_bitops-1.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/widen_bitops-1.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/widen_bitops-1.ll (original)
+++ llvm/trunk/test/CodeGen/X86/widen_bitops-1.ll Wed Sep 19 11:59:08 2018
@@ -15,8 +15,8 @@ define i32 @and_i32_as_v4i8(i32 %a, i32
 ;
 ; X64-SSE-LABEL: and_i32_as_v4i8:
 ; X64-SSE:       # %bb.0:
-; X64-SSE-NEXT:    andl %esi, %edi
 ; X64-SSE-NEXT:    movl %edi, %eax
+; X64-SSE-NEXT:    andl %esi, %eax
 ; X64-SSE-NEXT:    retq
   %1 = bitcast i32 %a to <4 x i8>
   %2 = bitcast i32 %b to <4 x i8>
@@ -34,8 +34,8 @@ define i32 @xor_i32_as_v4i8(i32 %a, i32
 ;
 ; X64-SSE-LABEL: xor_i32_as_v4i8:
 ; X64-SSE:       # %bb.0:
-; X64-SSE-NEXT:    xorl %esi, %edi
 ; X64-SSE-NEXT:    movl %edi, %eax
+; X64-SSE-NEXT:    xorl %esi, %eax
 ; X64-SSE-NEXT:    retq
   %1 = bitcast i32 %a to <4 x i8>
   %2 = bitcast i32 %b to <4 x i8>
@@ -53,8 +53,8 @@ define i32 @or_i32_as_v4i8(i32 %a, i32 %
 ;
 ; X64-SSE-LABEL: or_i32_as_v4i8:
 ; X64-SSE:       # %bb.0:
-; X64-SSE-NEXT:    orl %esi, %edi
 ; X64-SSE-NEXT:    movl %edi, %eax
+; X64-SSE-NEXT:    orl %esi, %eax
 ; X64-SSE-NEXT:    retq
   %1 = bitcast i32 %a to <4 x i8>
   %2 = bitcast i32 %b to <4 x i8>
@@ -76,8 +76,8 @@ define i32 @and_i32_as_v8i4(i32 %a, i32
 ;
 ; X64-SSE-LABEL: and_i32_as_v8i4:
 ; X64-SSE:       # %bb.0:
-; X64-SSE-NEXT:    andl %esi, %edi
 ; X64-SSE-NEXT:    movl %edi, %eax
+; X64-SSE-NEXT:    andl %esi, %eax
 ; X64-SSE-NEXT:    retq
   %1 = bitcast i32 %a to <8 x i4>
   %2 = bitcast i32 %b to <8 x i4>
@@ -95,8 +95,8 @@ define i32 @xor_i32_as_v8i4(i32 %a, i32
 ;
 ; X64-SSE-LABEL: xor_i32_as_v8i4:
 ; X64-SSE:       # %bb.0:
-; X64-SSE-NEXT:    xorl %esi, %edi
 ; X64-SSE-NEXT:    movl %edi, %eax
+; X64-SSE-NEXT:    xorl %esi, %eax
 ; X64-SSE-NEXT:    retq
   %1 = bitcast i32 %a to <8 x i4>
   %2 = bitcast i32 %b to <8 x i4>
@@ -114,8 +114,8 @@ define i32 @or_i32_as_v8i4(i32 %a, i32 %
 ;
 ; X64-SSE-LABEL: or_i32_as_v8i4:
 ; X64-SSE:       # %bb.0:
-; X64-SSE-NEXT:    orl %esi, %edi
 ; X64-SSE-NEXT:    movl %edi, %eax
+; X64-SSE-NEXT:    orl %esi, %eax
 ; X64-SSE-NEXT:    retq
   %1 = bitcast i32 %a to <8 x i4>
   %2 = bitcast i32 %b to <8 x i4>

Modified: llvm/trunk/test/CodeGen/X86/widen_load-2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/widen_load-2.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/widen_load-2.ll (original)
+++ llvm/trunk/test/CodeGen/X86/widen_load-2.ll Wed Sep 19 11:59:08 2018
@@ -21,11 +21,11 @@ define void @add3i32(%i32vec3*  sret %re
 ;
 ; X64-LABEL: add3i32:
 ; X64:       # %bb.0:
+; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    movdqa (%rsi), %xmm0
 ; X64-NEXT:    paddd (%rdx), %xmm0
 ; X64-NEXT:    pextrd $2, %xmm0, 8(%rdi)
 ; X64-NEXT:    movq %xmm0, (%rdi)
-; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    retq
 	%a = load %i32vec3, %i32vec3* %ap, align 16
 	%b = load %i32vec3, %i32vec3* %bp, align 16
@@ -54,6 +54,7 @@ define void @add3i32_2(%i32vec3*  sret %
 ;
 ; X64-LABEL: add3i32_2:
 ; X64:       # %bb.0:
+; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
 ; X64-NEXT:    pinsrd $2, 8(%rsi), %xmm0
 ; X64-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero
@@ -61,7 +62,6 @@ define void @add3i32_2(%i32vec3*  sret %
 ; X64-NEXT:    paddd %xmm0, %xmm1
 ; X64-NEXT:    pextrd $2, %xmm1, 8(%rdi)
 ; X64-NEXT:    movq %xmm1, (%rdi)
-; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    retq
 	%a = load %i32vec3, %i32vec3* %ap, align 8
 	%b = load %i32vec3, %i32vec3* %bp, align 8
@@ -89,6 +89,7 @@ define void @add7i32(%i32vec7*  sret %re
 ;
 ; X64-LABEL: add7i32:
 ; X64:       # %bb.0:
+; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    movdqa (%rsi), %xmm0
 ; X64-NEXT:    movdqa 16(%rsi), %xmm1
 ; X64-NEXT:    paddd (%rdx), %xmm0
@@ -96,7 +97,6 @@ define void @add7i32(%i32vec7*  sret %re
 ; X64-NEXT:    pextrd $2, %xmm1, 24(%rdi)
 ; X64-NEXT:    movq %xmm1, 16(%rdi)
 ; X64-NEXT:    movdqa %xmm0, (%rdi)
-; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    retq
 	%a = load %i32vec7, %i32vec7* %ap, align 16
 	%b = load %i32vec7, %i32vec7* %bp, align 16
@@ -125,6 +125,7 @@ define void @add12i32(%i32vec12*  sret %
 ;
 ; X64-LABEL: add12i32:
 ; X64:       # %bb.0:
+; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    movdqa (%rsi), %xmm0
 ; X64-NEXT:    movdqa 16(%rsi), %xmm1
 ; X64-NEXT:    movdqa 32(%rsi), %xmm2
@@ -134,7 +135,6 @@ define void @add12i32(%i32vec12*  sret %
 ; X64-NEXT:    movdqa %xmm2, 32(%rdi)
 ; X64-NEXT:    movdqa %xmm1, 16(%rdi)
 ; X64-NEXT:    movdqa %xmm0, (%rdi)
-; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    retq
 	%a = load %i32vec12, %i32vec12* %ap, align 16
 	%b = load %i32vec12, %i32vec12* %bp, align 16
@@ -171,13 +171,13 @@ define void @add3i16(%i16vec3* nocapture
 ;
 ; X64-LABEL: add3i16:
 ; X64:       # %bb.0:
+; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    pmovzxwd {{.*#+}} xmm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero
 ; X64-NEXT:    pmovzxwd {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero
 ; X64-NEXT:    paddd %xmm0, %xmm1
 ; X64-NEXT:    pextrw $4, %xmm1, 4(%rdi)
 ; X64-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
 ; X64-NEXT:    movd %xmm1, (%rdi)
-; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    retq
 	%a = load %i16vec3, %i16vec3* %ap, align 16
 	%b = load %i16vec3, %i16vec3* %bp, align 16
@@ -201,11 +201,11 @@ define void @add4i16(%i16vec4* nocapture
 ;
 ; X64-LABEL: add4i16:
 ; X64:       # %bb.0:
+; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
 ; X64-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero
 ; X64-NEXT:    paddw %xmm0, %xmm1
 ; X64-NEXT:    movq %xmm1, (%rdi)
-; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    retq
 	%a = load %i16vec4, %i16vec4* %ap, align 16
 	%b = load %i16vec4, %i16vec4* %bp, align 16
@@ -232,13 +232,13 @@ define void @add12i16(%i16vec12* nocaptu
 ;
 ; X64-LABEL: add12i16:
 ; X64:       # %bb.0:
+; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    movdqa (%rsi), %xmm0
 ; X64-NEXT:    movdqa 16(%rsi), %xmm1
 ; X64-NEXT:    paddw (%rdx), %xmm0
 ; X64-NEXT:    paddw 16(%rdx), %xmm1
 ; X64-NEXT:    movq %xmm1, 16(%rdi)
 ; X64-NEXT:    movdqa %xmm0, (%rdi)
-; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    retq
 	%a = load %i16vec12, %i16vec12* %ap, align 16
 	%b = load %i16vec12, %i16vec12* %bp, align 16
@@ -267,6 +267,7 @@ define void @add18i16(%i16vec18* nocaptu
 ;
 ; X64-LABEL: add18i16:
 ; X64:       # %bb.0:
+; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    movdqa (%rsi), %xmm0
 ; X64-NEXT:    movdqa 16(%rsi), %xmm1
 ; X64-NEXT:    movdqa 32(%rsi), %xmm2
@@ -276,7 +277,6 @@ define void @add18i16(%i16vec18* nocaptu
 ; X64-NEXT:    movd %xmm2, 32(%rdi)
 ; X64-NEXT:    movdqa %xmm1, 16(%rdi)
 ; X64-NEXT:    movdqa %xmm0, (%rdi)
-; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    retq
 	%a = load %i16vec18, %i16vec18* %ap, align 16
 	%b = load %i16vec18, %i16vec18* %bp, align 16
@@ -305,13 +305,13 @@ define void @add3i8(%i8vec3* nocapture s
 ;
 ; X64-LABEL: add3i8:
 ; X64:       # %bb.0:
+; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    pmovzxbd {{.*#+}} xmm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero
 ; X64-NEXT:    pmovzxbd {{.*#+}} xmm1 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero
 ; X64-NEXT:    paddd %xmm0, %xmm1
 ; X64-NEXT:    pextrb $8, %xmm1, 2(%rdi)
 ; X64-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]
 ; X64-NEXT:    pextrw $0, %xmm1, (%rdi)
-; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    retq
 	%a = load %i8vec3, %i8vec3* %ap, align 16
 	%b = load %i8vec3, %i8vec3* %bp, align 16
@@ -341,6 +341,7 @@ define void @add31i8(%i8vec31* nocapture
 ;
 ; X64-LABEL: add31i8:
 ; X64:       # %bb.0:
+; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    movdqa (%rsi), %xmm0
 ; X64-NEXT:    movdqa 16(%rsi), %xmm1
 ; X64-NEXT:    paddb (%rdx), %xmm0
@@ -350,7 +351,6 @@ define void @add31i8(%i8vec31* nocapture
 ; X64-NEXT:    pextrd $2, %xmm1, 24(%rdi)
 ; X64-NEXT:    movq %xmm1, 16(%rdi)
 ; X64-NEXT:    movdqa %xmm0, (%rdi)
-; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    retq
 	%a = load %i8vec31, %i8vec31* %ap, align 16
 	%b = load %i8vec31, %i8vec31* %bp, align 16
@@ -384,6 +384,7 @@ define void @rot(%i8vec3pack* nocapture
 ;
 ; X64-LABEL: rot:
 ; X64:       # %bb.0: # %entry
+; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    movb $-98, 2(%rsi)
 ; X64-NEXT:    movw $-24930, (%rsi) # imm = 0x9E9E
 ; X64-NEXT:    movb $1, 2(%rdx)
@@ -395,7 +396,6 @@ define void @rot(%i8vec3pack* nocapture
 ; X64-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]
 ; X64-NEXT:    pextrb $8, %xmm1, 2(%rdi)
 ; X64-NEXT:    pextrw $0, %xmm0, (%rdi)
-; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    retq
 entry:
   %storetmp = bitcast %i8vec3pack* %X to <3 x i8>*

Modified: llvm/trunk/test/CodeGen/X86/widen_load-3.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/widen_load-3.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/widen_load-3.ll (original)
+++ llvm/trunk/test/CodeGen/X86/widen_load-3.ll Wed Sep 19 11:59:08 2018
@@ -41,26 +41,26 @@ define <7 x i64> @load7_aligned(<7 x i64
 ;
 ; X64-SSE-LABEL: load7_aligned:
 ; X64-SSE:       # %bb.0:
+; X64-SSE-NEXT:    movq %rdi, %rax
 ; X64-SSE-NEXT:    movaps (%rsi), %xmm0
 ; X64-SSE-NEXT:    movaps 16(%rsi), %xmm1
 ; X64-SSE-NEXT:    movaps 32(%rsi), %xmm2
-; X64-SSE-NEXT:    movq 48(%rsi), %rax
-; X64-SSE-NEXT:    movq %rax, 48(%rdi)
+; X64-SSE-NEXT:    movq 48(%rsi), %rcx
+; X64-SSE-NEXT:    movq %rcx, 48(%rdi)
 ; X64-SSE-NEXT:    movaps %xmm2, 32(%rdi)
 ; X64-SSE-NEXT:    movaps %xmm1, 16(%rdi)
 ; X64-SSE-NEXT:    movaps %xmm0, (%rdi)
-; X64-SSE-NEXT:    movq %rdi, %rax
 ; X64-SSE-NEXT:    retq
 ;
 ; X64-AVX-LABEL: load7_aligned:
 ; X64-AVX:       # %bb.0:
+; X64-AVX-NEXT:    movq %rdi, %rax
 ; X64-AVX-NEXT:    vmovaps (%rsi), %ymm0
 ; X64-AVX-NEXT:    vmovaps 32(%rsi), %ymm1
 ; X64-AVX-NEXT:    vmovaps %ymm0, (%rdi)
 ; X64-AVX-NEXT:    vextractf128 $1, %ymm1, %xmm0
 ; X64-AVX-NEXT:    vmovlps %xmm0, 48(%rdi)
 ; X64-AVX-NEXT:    vmovaps %xmm1, 32(%rdi)
-; X64-AVX-NEXT:    movq %rdi, %rax
 ; X64-AVX-NEXT:    vzeroupper
 ; X64-AVX-NEXT:    retq
   %x1 = load <7 x i64>, <7 x i64>* %x
@@ -101,26 +101,26 @@ define <7 x i64> @load7_unaligned(<7 x i
 ;
 ; X64-SSE-LABEL: load7_unaligned:
 ; X64-SSE:       # %bb.0:
+; X64-SSE-NEXT:    movq %rdi, %rax
 ; X64-SSE-NEXT:    movups (%rsi), %xmm0
 ; X64-SSE-NEXT:    movups 16(%rsi), %xmm1
 ; X64-SSE-NEXT:    movups 32(%rsi), %xmm2
-; X64-SSE-NEXT:    movq 48(%rsi), %rax
-; X64-SSE-NEXT:    movq %rax, 48(%rdi)
+; X64-SSE-NEXT:    movq 48(%rsi), %rcx
+; X64-SSE-NEXT:    movq %rcx, 48(%rdi)
 ; X64-SSE-NEXT:    movaps %xmm2, 32(%rdi)
 ; X64-SSE-NEXT:    movaps %xmm1, 16(%rdi)
 ; X64-SSE-NEXT:    movaps %xmm0, (%rdi)
-; X64-SSE-NEXT:    movq %rdi, %rax
 ; X64-SSE-NEXT:    retq
 ;
 ; X64-AVX-LABEL: load7_unaligned:
 ; X64-AVX:       # %bb.0:
+; X64-AVX-NEXT:    movq %rdi, %rax
 ; X64-AVX-NEXT:    vmovups (%rsi), %ymm0
 ; X64-AVX-NEXT:    vmovups 32(%rsi), %xmm1
-; X64-AVX-NEXT:    movq 48(%rsi), %rax
-; X64-AVX-NEXT:    movq %rax, 48(%rdi)
+; X64-AVX-NEXT:    movq 48(%rsi), %rcx
+; X64-AVX-NEXT:    movq %rcx, 48(%rdi)
 ; X64-AVX-NEXT:    vmovaps %xmm1, 32(%rdi)
 ; X64-AVX-NEXT:    vmovaps %ymm0, (%rdi)
-; X64-AVX-NEXT:    movq %rdi, %rax
 ; X64-AVX-NEXT:    vzeroupper
 ; X64-AVX-NEXT:    retq
   %x1 = load <7 x i64>, <7 x i64>* %x, align 1

Modified: llvm/trunk/test/CodeGen/X86/win64_vararg.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/win64_vararg.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/win64_vararg.ll (original)
+++ llvm/trunk/test/CodeGen/X86/win64_vararg.ll Wed Sep 19 11:59:08 2018
@@ -121,10 +121,10 @@ entry:
 }
 ; CHECK-LABEL: sret_arg:
 ; CHECK: pushq
+; CHECK: movq %rcx, %rax
 ; CHECK-DAG: movq %r9, 40(%rsp)
 ; CHECK-DAG: movq %r8, 32(%rsp)
 ; CHECK: movl 32(%rsp), %[[tmp:[^ ]*]]
-; CHECK: movl %[[tmp]], (%[[sret:[^ ]*]])
-; CHECK: movq %[[sret]], %rax
+; CHECK: movl %[[tmp]], (%rax)
 ; CHECK: popq
 ; CHECK: retq

Modified: llvm/trunk/test/CodeGen/X86/x64-cet-intrinsics.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/x64-cet-intrinsics.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/x64-cet-intrinsics.ll (original)
+++ llvm/trunk/test/CodeGen/X86/x64-cet-intrinsics.ll Wed Sep 19 11:59:08 2018
@@ -30,8 +30,8 @@ declare void @llvm.x86.incsspq(i64)
 define i32 @test_rdsspd(i32 %a) {
 ; CHECK-LABEL: test_rdsspd:
 ; CHECK:       ## %bb.0: ## %entry
-; CHECK-NEXT:    rdsspd %edi
 ; CHECK-NEXT:    movl %edi, %eax
+; CHECK-NEXT:    rdsspd %eax
 ; CHECK-NEXT:    retq
 entry:
   %0 = call i32 @llvm.x86.rdsspd(i32 %a)
@@ -43,8 +43,8 @@ declare i32 @llvm.x86.rdsspd(i32)
 define i64 @test_rdsspq(i64 %a) {
 ; CHECK-LABEL: test_rdsspq:
 ; CHECK:       ## %bb.0: ## %entry
-; CHECK-NEXT:    rdsspq %rdi
 ; CHECK-NEXT:    movq %rdi, %rax
+; CHECK-NEXT:    rdsspq %rax
 ; CHECK-NEXT:    retq
 entry:
   %0 = call i64 @llvm.x86.rdsspq(i64 %a)

Modified: llvm/trunk/test/CodeGen/X86/x86-64-bittest-logic.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/x86-64-bittest-logic.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/x86-64-bittest-logic.ll (original)
+++ llvm/trunk/test/CodeGen/X86/x86-64-bittest-logic.ll Wed Sep 19 11:59:08 2018
@@ -124,8 +124,8 @@ define i64 @xor4(i64 %x) {
 define i64 @and1_optsize(i64 %x) optsize {
 ; CHECK-LABEL: and1_optsize:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    btrq $31, %rdi
 ; CHECK-NEXT:    movq %rdi, %rax
+; CHECK-NEXT:    btrq $31, %rax
 ; CHECK-NEXT:    retq
   %a = and i64 %x, 18446744071562067967 ; clear bit 31
   ret i64 %a
@@ -134,8 +134,8 @@ define i64 @and1_optsize(i64 %x) optsize
 define i64 @and2_optsize(i64 %x) optsize {
 ; CHECK-LABEL: and2_optsize:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    btrq $32, %rdi
 ; CHECK-NEXT:    movq %rdi, %rax
+; CHECK-NEXT:    btrq $32, %rax
 ; CHECK-NEXT:    retq
   %a = and i64 %x, 18446744069414584319 ; clear bit 32
   ret i64 %a
@@ -144,8 +144,8 @@ define i64 @and2_optsize(i64 %x) optsize
 define i64 @and3_optsize(i64 %x) optsize {
 ; CHECK-LABEL: and3_optsize:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    btrq $62, %rdi
 ; CHECK-NEXT:    movq %rdi, %rax
+; CHECK-NEXT:    btrq $62, %rax
 ; CHECK-NEXT:    retq
   %a = and i64 %x, 13835058055282163711 ; clear bit 62
   ret i64 %a
@@ -154,8 +154,8 @@ define i64 @and3_optsize(i64 %x) optsize
 define i64 @and4_optsize(i64 %x) optsize {
 ; CHECK-LABEL: and4_optsize:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    btrq $63, %rdi
 ; CHECK-NEXT:    movq %rdi, %rax
+; CHECK-NEXT:    btrq $63, %rax
 ; CHECK-NEXT:    retq
   %a = and i64 %x, 9223372036854775807 ; clear bit 63
   ret i64 %a
@@ -164,8 +164,8 @@ define i64 @and4_optsize(i64 %x) optsize
 define i64 @or1_optsize(i64 %x) optsize {
 ; CHECK-LABEL: or1_optsize:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    btsq $31, %rdi
 ; CHECK-NEXT:    movq %rdi, %rax
+; CHECK-NEXT:    btsq $31, %rax
 ; CHECK-NEXT:    retq
   %a = or i64 %x, 2147483648 ; set bit 31
   ret i64 %a
@@ -174,8 +174,8 @@ define i64 @or1_optsize(i64 %x) optsize
 define i64 @or2_optsize(i64 %x) optsize {
 ; CHECK-LABEL: or2_optsize:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    btsq $32, %rdi
 ; CHECK-NEXT:    movq %rdi, %rax
+; CHECK-NEXT:    btsq $32, %rax
 ; CHECK-NEXT:    retq
   %a = or i64 %x, 4294967296 ; set bit 32
   ret i64 %a
@@ -184,8 +184,8 @@ define i64 @or2_optsize(i64 %x) optsize
 define i64 @or3_optsize(i64 %x) optsize {
 ; CHECK-LABEL: or3_optsize:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    btsq $62, %rdi
 ; CHECK-NEXT:    movq %rdi, %rax
+; CHECK-NEXT:    btsq $62, %rax
 ; CHECK-NEXT:    retq
   %a = or i64 %x, 4611686018427387904 ; set bit 62
   ret i64 %a
@@ -194,8 +194,8 @@ define i64 @or3_optsize(i64 %x) optsize
 define i64 @or4_optsize(i64 %x) optsize {
 ; CHECK-LABEL: or4_optsize:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    btsq $63, %rdi
 ; CHECK-NEXT:    movq %rdi, %rax
+; CHECK-NEXT:    btsq $63, %rax
 ; CHECK-NEXT:    retq
   %a = or i64 %x, 9223372036854775808 ; set bit 63
   ret i64 %a
@@ -204,8 +204,8 @@ define i64 @or4_optsize(i64 %x) optsize
 define i64 @xor1_optsize(i64 %x) optsize {
 ; CHECK-LABEL: xor1_optsize:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    btcq $31, %rdi
 ; CHECK-NEXT:    movq %rdi, %rax
+; CHECK-NEXT:    btcq $31, %rax
 ; CHECK-NEXT:    retq
   %a = xor i64 %x, 2147483648 ; toggle bit 31
   ret i64 %a
@@ -214,8 +214,8 @@ define i64 @xor1_optsize(i64 %x) optsize
 define i64 @xor2_optsize(i64 %x) optsize {
 ; CHECK-LABEL: xor2_optsize:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    btcq $32, %rdi
 ; CHECK-NEXT:    movq %rdi, %rax
+; CHECK-NEXT:    btcq $32, %rax
 ; CHECK-NEXT:    retq
   %a = xor i64 %x, 4294967296 ; toggle bit 32
   ret i64 %a
@@ -224,8 +224,8 @@ define i64 @xor2_optsize(i64 %x) optsize
 define i64 @xor3_optsize(i64 %x) optsize {
 ; CHECK-LABEL: xor3_optsize:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    btcq $62, %rdi
 ; CHECK-NEXT:    movq %rdi, %rax
+; CHECK-NEXT:    btcq $62, %rax
 ; CHECK-NEXT:    retq
   %a = xor i64 %x, 4611686018427387904 ; toggle bit 62
   ret i64 %a
@@ -234,8 +234,8 @@ define i64 @xor3_optsize(i64 %x) optsize
 define i64 @xor4_optsize(i64 %x) optsize {
 ; CHECK-LABEL: xor4_optsize:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    btcq $63, %rdi
 ; CHECK-NEXT:    movq %rdi, %rax
+; CHECK-NEXT:    btcq $63, %rax
 ; CHECK-NEXT:    retq
   %a = xor i64 %x, 9223372036854775808 ; toggle bit 63
   ret i64 %a

Modified: llvm/trunk/test/CodeGen/X86/x86-64-double-shifts-Oz-Os-O2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/x86-64-double-shifts-Oz-Os-O2.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/x86-64-double-shifts-Oz-Os-O2.ll (original)
+++ llvm/trunk/test/CodeGen/X86/x86-64-double-shifts-Oz-Os-O2.ll Wed Sep 19 11:59:08 2018
@@ -14,8 +14,8 @@
 define i64 @_Z8lshift10mm(i64 %a, i64 %b) #0 {
 ; CHECK-LABEL: _Z8lshift10mm:
 ; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    shldq $10, %rsi, %rdi
 ; CHECK-NEXT:    movq %rdi, %rax
+; CHECK-NEXT:    shldq $10, %rsi, %rax
 ; CHECK-NEXT:    retq
 entry:
   %shl = shl i64 %a, 10
@@ -40,8 +40,8 @@ attributes #0 = { minsize nounwind readn
 define i64 @_Z8lshift11mm(i64 %a, i64 %b) #1 {
 ; CHECK-LABEL: _Z8lshift11mm:
 ; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    shldq $11, %rsi, %rdi
 ; CHECK-NEXT:    movq %rdi, %rax
+; CHECK-NEXT:    shldq $11, %rsi, %rax
 ; CHECK-NEXT:    retq
 entry:
   %shl = shl i64 %a, 11

Modified: llvm/trunk/test/CodeGen/X86/x86-cmov-converter.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/x86-cmov-converter.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/x86-cmov-converter.ll (original)
+++ llvm/trunk/test/CodeGen/X86/x86-cmov-converter.ll Wed Sep 19 11:59:08 2018
@@ -336,14 +336,14 @@ define i32 @test_cmov_memoperand(i32 %a,
 ; CHECK-LABEL: test_cmov_memoperand:
 entry:
   %cond = icmp ugt i32 %a, %b
+; CHECK:         movl %edx, %eax
 ; CHECK:         cmpl
   %load = load i32, i32* %y
   %z = select i1 %cond, i32 %x, i32 %load
 ; CHECK-NOT:     cmov
 ; CHECK:         ja [[FALSE_BB:.*]]
-; CHECK:         movl (%r{{..}}), %[[R:.*]]
+; CHECK:         movl (%rcx), %eax
 ; CHECK:       [[FALSE_BB]]:
-; CHECK:         movl %[[R]], %
   ret i32 %z
 }
 
@@ -353,6 +353,7 @@ define i32 @test_cmov_memoperand_in_grou
 ; CHECK-LABEL: test_cmov_memoperand_in_group:
 entry:
   %cond = icmp ugt i32 %a, %b
+; CHECK:         movl %edx, %eax
 ; CHECK:         cmpl
   %y = load i32, i32* %y.ptr
   %z1 = select i1 %cond, i32 %x, i32 %a
@@ -362,17 +363,16 @@ entry:
 ; CHECK:         ja [[FALSE_BB:.*]]
 ; CHECK-DAG:     movl %{{.*}}, %[[R1:.*]]
 ; CHECK-DAG:     movl (%r{{..}}), %[[R2:.*]]
-; CHECK-DAG:     movl %{{.*}} %[[R3:.*]]
+; CHECK-DAG:     movl %{{.*}} %eax
 ; CHECK:       [[FALSE_BB]]:
 ; CHECK:         addl
 ; CHECK-DAG:       %[[R1]]
 ; CHECK-DAG:       ,
-; CHECK-DAG:       %[[R3]]
+; CHECK-DAG:       %eax
 ; CHECK-DAG:     addl
 ; CHECK-DAG:       %[[R2]]
 ; CHECK-DAG:       ,
-; CHECK-DAG:       %[[R3]]
-; CHECK:         movl %[[R3]], %eax
+; CHECK-DAG:       %eax
 ; CHECK:         retq
   %s1 = add i32 %z1, %z2
   %s2 = add i32 %s1, %z3
@@ -384,6 +384,7 @@ define i32 @test_cmov_memoperand_in_grou
 ; CHECK-LABEL: test_cmov_memoperand_in_group2:
 entry:
   %cond = icmp ugt i32 %a, %b
+; CHECK:         movl %edx, %eax
 ; CHECK:         cmpl
   %y = load i32, i32* %y.ptr
   %z2 = select i1 %cond, i32 %a, i32 %x
@@ -393,17 +394,16 @@ entry:
 ; CHECK:         jbe [[FALSE_BB:.*]]
 ; CHECK-DAG:     movl %{{.*}}, %[[R1:.*]]
 ; CHECK-DAG:     movl (%r{{..}}), %[[R2:.*]]
-; CHECK-DAG:     movl %{{.*}} %[[R3:.*]]
+; CHECK-DAG:     movl %{{.*}} %eax
 ; CHECK:       [[FALSE_BB]]:
 ; CHECK:         addl
 ; CHECK-DAG:       %[[R1]]
 ; CHECK-DAG:       ,
-; CHECK-DAG:       %[[R3]]
+; CHECK-DAG:       %eax
 ; CHECK-DAG:     addl
 ; CHECK-DAG:       %[[R2]]
 ; CHECK-DAG:       ,
-; CHECK-DAG:       %[[R3]]
-; CHECK:         movl %[[R3]], %eax
+; CHECK-DAG:       %eax
 ; CHECK:         retq
   %s1 = add i32 %z1, %z2
   %s2 = add i32 %s1, %z3
@@ -434,15 +434,15 @@ define i32 @test_cmov_memoperand_in_grou
 ; CHECK-LABEL: test_cmov_memoperand_in_group_reuse_for_addr:
 entry:
   %cond = icmp ugt i32 %a, %b
+; CHECK:         movl %edi, %eax
 ; CHECK:         cmpl
   %p = select i1 %cond, i32* %x, i32* %y
   %load = load i32, i32* %p
   %z = select i1 %cond, i32 %a, i32 %load
 ; CHECK-NOT:     cmov
 ; CHECK:         ja [[FALSE_BB:.*]]
-; CHECK:         movl (%r{{..}}), %[[R:.*]]
+; CHECK:         movl (%r{{..}}), %eax
 ; CHECK:       [[FALSE_BB]]:
-; CHECK:         movl %[[R]], %eax
 ; CHECK:         retq
   ret i32 %z
 }
@@ -453,6 +453,7 @@ define i32 @test_cmov_memoperand_in_grou
 ; CHECK-LABEL: test_cmov_memoperand_in_group_reuse_for_addr2:
 entry:
   %cond = icmp ugt i32 %a, %b
+; CHECK:         movl %edi, %eax
 ; CHECK:         cmpl
   %load1 = load i32*, i32** %y
   %p = select i1 %cond, i32* %x, i32* %load1
@@ -461,9 +462,8 @@ entry:
 ; CHECK-NOT:     cmov
 ; CHECK:         ja [[FALSE_BB:.*]]
 ; CHECK:         movq (%r{{..}}), %[[R1:.*]]
-; CHECK:         movl (%[[R1]]), %[[R2:.*]]
+; CHECK:         movl (%[[R1]]), %eax
 ; CHECK:       [[FALSE_BB]]:
-; CHECK:         movl %[[R2]], %eax
 ; CHECK:         retq
   ret i32 %z
 }
@@ -475,6 +475,7 @@ define i32 @test_cmov_memoperand_in_grou
 ; CHECK-LABEL: test_cmov_memoperand_in_group_reuse_for_addr3:
 entry:
   %cond = icmp ugt i32 %a, %b
+; CHECK:         movl %edi, %eax
 ; CHECK:         cmpl
   %p = select i1 %cond, i32* %x, i32* %y
   %p2 = select i1 %cond, i32* %z, i32* %p
@@ -482,9 +483,8 @@ entry:
   %r = select i1 %cond, i32 %a, i32 %load
 ; CHECK-NOT:     cmov
 ; CHECK:         ja [[FALSE_BB:.*]]
-; CHECK:         movl (%r{{..}}), %[[R:.*]]
+; CHECK:         movl (%r{{..}}), %eax
 ; CHECK:       [[FALSE_BB]]:
-; CHECK:         movl %[[R]], %eax
 ; CHECK:         retq
   ret i32 %r
 }

Modified: llvm/trunk/test/CodeGen/X86/x86-shrink-wrapping.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/x86-shrink-wrapping.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/x86-shrink-wrapping.ll (original)
+++ llvm/trunk/test/CodeGen/X86/x86-shrink-wrapping.ll Wed Sep 19 11:59:08 2018
@@ -83,9 +83,7 @@ declare i32 @doSomething(i32, i32*)
 ; DISABLE: testl %edi, %edi
 ; DISABLE: je [[ELSE_LABEL:LBB[0-9_]+]]
 ;
-; SUM is in %esi because it is coalesced with the second
-; argument on the else path.
-; CHECK: xorl [[SUM:%esi]], [[SUM]]
+; CHECK: xorl [[SUM:%eax]], [[SUM]]
 ; CHECK-NEXT: movl $10, [[IV:%e[a-z]+]]
 ;
 ; Next BB.
@@ -99,23 +97,22 @@ declare i32 @doSomething(i32, i32*)
 ; SUM << 3.
 ; CHECK: shll $3, [[SUM]]
 ;
-; Jump to epilogue.
-; DISABLE: jmp [[EPILOG_BB:LBB[0-9_]+]]
+; DISABLE: popq
+; DISABLE: retq
 ;
 ; DISABLE: [[ELSE_LABEL]]: ## %if.else
-; Shift second argument by one and store into returned register.
-; DISABLE: addl %esi, %esi
-; DISABLE: [[EPILOG_BB]]: ## %if.end
+; Shift second argument by one in returned register.
+; DISABLE: movl %esi, %eax
+; DISABLE: addl %esi, %eax
 ;
 ; Epilogue code.
 ; CHECK-DAG: popq %rbx
-; CHECK-DAG: movl %esi, %eax
 ; CHECK: retq
 ;
 ; ENABLE: [[ELSE_LABEL]]: ## %if.else
 ; Shift second argument by one and store into returned register.
-; ENABLE: addl %esi, %esi
-; ENABLE-NEXT: movl %esi, %eax
+; ENABLE: movl %esi, %eax
+; ENABLE: addl %esi, %eax
 ; ENABLE-NEXT: retq
 define i32 @freqSaveAndRestoreOutsideLoop(i32 %cond, i32 %N) {
 entry:
@@ -210,7 +207,7 @@ for.end:
 ; DISABLE-NEXT: je [[ELSE_LABEL:LBB[0-9_]+]]
 ;
 ; CHECK: nop
-; CHECK: xorl [[SUM:%esi]], [[SUM]]
+; CHECK: xorl [[SUM:%eax]], [[SUM]]
 ; CHECK-NEXT: movl $10, [[IV:%e[a-z]+]]
 ;
 ; CHECK: [[LOOP_LABEL:LBB[0-9_]+]]: ## %for.body
@@ -222,22 +219,22 @@ for.end:
 ; CHECK: nop
 ; CHECK: shll $3, [[SUM]]
 ;
-; DISABLE: jmp [[EPILOG_BB:LBB[0-9_]+]]
+; DISABLE: popq
+; DISABLE: retq
 ;
 ; DISABLE: [[ELSE_LABEL]]: ## %if.else
-; Shift second argument by one and store into returned register.
-; DISABLE: addl %esi, %esi
-; DISABLE: [[EPILOG_BB]]: ## %if.end
+; Shift second argument by one in returned register.
+; DISABLE: movl %esi, %eax
+; DISABLE: addl %esi, %eax
 ;
 ; Epilogue code.
 ; CHECK-DAG: popq %rbx
-; CHECK-DAG: movl %esi, %eax
 ; CHECK: retq
 ;
 ; ENABLE: [[ELSE_LABEL]]: ## %if.else
 ; Shift second argument by one and store into returned register.
-; ENABLE: addl %esi, %esi
-; ENABLE-NEXT: movl %esi, %eax
+; ENABLE: movl %esi, %eax
+; ENABLE: addl %esi, %eax
 ; ENABLE-NEXT: retq
 define i32 @loopInfoSaveOutsideLoop(i32 %cond, i32 %N) {
 entry:
@@ -286,7 +283,7 @@ if.end:
 ; DISABLE-NEXT: je [[ELSE_LABEL:LBB[0-9_]+]]
 ;
 ; CHECK: nop
-; CHECK: xorl [[SUM:%esi]], [[SUM]]
+; CHECK: xorl [[SUM:%eax]], [[SUM]]
 ; CHECK-NEXT: movl $10, [[IV:%e[a-z]+]]
 ;
 ; CHECK: [[LOOP_LABEL:LBB[0-9_]+]]: ## %for.body
@@ -297,23 +294,23 @@ if.end:
 ; Next BB.
 ; CHECK: shll $3, [[SUM]]
 ;
-; DISABLE: jmp [[EPILOG_BB:LBB[0-9_]+]]
+; DISABLE: popq
+; DISABLE: retq
 ;
 ; DISABLE: [[ELSE_LABEL]]: ## %if.else
 
-; Shift second argument by one and store into returned register.
-; DISABLE: addl %esi, %esi
-; DISABLE: [[EPILOG_BB]]: ## %if.end
+; Shift second argument by one in returned register.
+; DISABLE: movl %esi, %eax
+; DISABLE: addl %esi, %eax
 ;
 ; Epilogue code.
 ; CHECK-DAG: popq %rbx
-; CHECK-DAG: movl %esi, %eax
 ; CHECK: retq
 ;
 ; ENABLE: [[ELSE_LABEL]]: ## %if.else
 ; Shift second argument by one and store into returned register.
-; ENABLE: addl %esi, %esi
-; ENABLE-NEXT: movl %esi, %eax
+; ENABLE: movl %esi, %eax
+; ENABLE: addl %esi, %eax
 ; ENABLE-NEXT: retq
 define i32 @loopInfoRestoreOutsideLoop(i32 %cond, i32 %N) nounwind {
 entry:
@@ -379,24 +376,24 @@ entry:
 ; CHECK-NEXT: jne [[LOOP_LABEL]]
 ; Next BB.
 ; CHECK: nop
-; CHECK: xorl %esi, %esi
+; CHECK: xorl %eax, %eax
 ;
-; DISABLE: jmp [[EPILOG_BB:LBB[0-9_]+]]
+; DISABLE: popq
+; DISABLE: retq
 ;
 ; DISABLE: [[ELSE_LABEL]]: ## %if.else
-; Shift second argument by one and store into returned register.
-; DISABLE: addl %esi, %esi
-; DISABLE: [[EPILOG_BB]]: ## %if.end
+; Shift second argument by one in returned register.
+; DISABLE: movl %esi, %eax
+; DISABLE: addl %esi, %eax
 ;
 ; Epilogue code.
 ; CHECK-DAG: popq %rbx
-; CHECK-DAG: movl %esi, %eax
 ; CHECK: retq
 ;
 ; ENABLE: [[ELSE_LABEL]]: ## %if.else
 ; Shift second argument by one and store into returned register.
-; ENABLE: addl %esi, %esi
-; ENABLE-NEXT: movl %esi, %eax
+; ENABLE: movl %esi, %eax
+; ENABLE: addl %esi, %eax
 ; ENABLE-NEXT: retq
 define i32 @inlineAsm(i32 %cond, i32 %N) {
 entry:

Modified: llvm/trunk/test/CodeGen/X86/xaluo.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/xaluo.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/xaluo.ll (original)
+++ llvm/trunk/test/CodeGen/X86/xaluo.ll Wed Sep 19 11:59:08 2018
@@ -719,26 +719,26 @@ define zeroext i1 @usuboi64(i64 %v1, i64
 define i32 @saddoselecti32(i32 %v1, i32 %v2) {
 ; SDAG-LABEL: saddoselecti32:
 ; SDAG:       ## %bb.0:
-; SDAG-NEXT:    movl %edi, %eax
-; SDAG-NEXT:    addl %esi, %eax
-; SDAG-NEXT:    cmovol %edi, %esi
 ; SDAG-NEXT:    movl %esi, %eax
+; SDAG-NEXT:    movl %edi, %ecx
+; SDAG-NEXT:    addl %esi, %ecx
+; SDAG-NEXT:    cmovol %edi, %eax
 ; SDAG-NEXT:    retq
 ;
 ; FAST-LABEL: saddoselecti32:
 ; FAST:       ## %bb.0:
-; FAST-NEXT:    movl %edi, %eax
-; FAST-NEXT:    addl %esi, %eax
-; FAST-NEXT:    cmovol %edi, %esi
 ; FAST-NEXT:    movl %esi, %eax
+; FAST-NEXT:    movl %edi, %ecx
+; FAST-NEXT:    addl %esi, %ecx
+; FAST-NEXT:    cmovol %edi, %eax
 ; FAST-NEXT:    retq
 ;
 ; KNL-LABEL: saddoselecti32:
 ; KNL:       ## %bb.0:
-; KNL-NEXT:    movl %edi, %eax
-; KNL-NEXT:    addl %esi, %eax
-; KNL-NEXT:    cmovol %edi, %esi
 ; KNL-NEXT:    movl %esi, %eax
+; KNL-NEXT:    movl %edi, %ecx
+; KNL-NEXT:    addl %esi, %ecx
+; KNL-NEXT:    cmovol %edi, %eax
 ; KNL-NEXT:    retq
   %t = call {i32, i1} @llvm.sadd.with.overflow.i32(i32 %v1, i32 %v2)
   %obit = extractvalue {i32, i1} %t, 1
@@ -749,26 +749,26 @@ define i32 @saddoselecti32(i32 %v1, i32
 define i64 @saddoselecti64(i64 %v1, i64 %v2) {
 ; SDAG-LABEL: saddoselecti64:
 ; SDAG:       ## %bb.0:
-; SDAG-NEXT:    movq %rdi, %rax
-; SDAG-NEXT:    addq %rsi, %rax
-; SDAG-NEXT:    cmovoq %rdi, %rsi
 ; SDAG-NEXT:    movq %rsi, %rax
+; SDAG-NEXT:    movq %rdi, %rcx
+; SDAG-NEXT:    addq %rsi, %rcx
+; SDAG-NEXT:    cmovoq %rdi, %rax
 ; SDAG-NEXT:    retq
 ;
 ; FAST-LABEL: saddoselecti64:
 ; FAST:       ## %bb.0:
-; FAST-NEXT:    movq %rdi, %rax
-; FAST-NEXT:    addq %rsi, %rax
-; FAST-NEXT:    cmovoq %rdi, %rsi
 ; FAST-NEXT:    movq %rsi, %rax
+; FAST-NEXT:    movq %rdi, %rcx
+; FAST-NEXT:    addq %rsi, %rcx
+; FAST-NEXT:    cmovoq %rdi, %rax
 ; FAST-NEXT:    retq
 ;
 ; KNL-LABEL: saddoselecti64:
 ; KNL:       ## %bb.0:
-; KNL-NEXT:    movq %rdi, %rax
-; KNL-NEXT:    addq %rsi, %rax
-; KNL-NEXT:    cmovoq %rdi, %rsi
 ; KNL-NEXT:    movq %rsi, %rax
+; KNL-NEXT:    movq %rdi, %rcx
+; KNL-NEXT:    addq %rsi, %rcx
+; KNL-NEXT:    cmovoq %rdi, %rax
 ; KNL-NEXT:    retq
   %t = call {i64, i1} @llvm.sadd.with.overflow.i64(i64 %v1, i64 %v2)
   %obit = extractvalue {i64, i1} %t, 1
@@ -779,26 +779,26 @@ define i64 @saddoselecti64(i64 %v1, i64
 define i32 @uaddoselecti32(i32 %v1, i32 %v2) {
 ; SDAG-LABEL: uaddoselecti32:
 ; SDAG:       ## %bb.0:
-; SDAG-NEXT:    movl %edi, %eax
-; SDAG-NEXT:    addl %esi, %eax
-; SDAG-NEXT:    cmovbl %edi, %esi
 ; SDAG-NEXT:    movl %esi, %eax
+; SDAG-NEXT:    movl %edi, %ecx
+; SDAG-NEXT:    addl %esi, %ecx
+; SDAG-NEXT:    cmovbl %edi, %eax
 ; SDAG-NEXT:    retq
 ;
 ; FAST-LABEL: uaddoselecti32:
 ; FAST:       ## %bb.0:
-; FAST-NEXT:    movl %edi, %eax
-; FAST-NEXT:    addl %esi, %eax
-; FAST-NEXT:    cmovbl %edi, %esi
 ; FAST-NEXT:    movl %esi, %eax
+; FAST-NEXT:    movl %edi, %ecx
+; FAST-NEXT:    addl %esi, %ecx
+; FAST-NEXT:    cmovbl %edi, %eax
 ; FAST-NEXT:    retq
 ;
 ; KNL-LABEL: uaddoselecti32:
 ; KNL:       ## %bb.0:
-; KNL-NEXT:    movl %edi, %eax
-; KNL-NEXT:    addl %esi, %eax
-; KNL-NEXT:    cmovbl %edi, %esi
 ; KNL-NEXT:    movl %esi, %eax
+; KNL-NEXT:    movl %edi, %ecx
+; KNL-NEXT:    addl %esi, %ecx
+; KNL-NEXT:    cmovbl %edi, %eax
 ; KNL-NEXT:    retq
   %t = call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %v1, i32 %v2)
   %obit = extractvalue {i32, i1} %t, 1
@@ -809,26 +809,26 @@ define i32 @uaddoselecti32(i32 %v1, i32
 define i64 @uaddoselecti64(i64 %v1, i64 %v2) {
 ; SDAG-LABEL: uaddoselecti64:
 ; SDAG:       ## %bb.0:
-; SDAG-NEXT:    movq %rdi, %rax
-; SDAG-NEXT:    addq %rsi, %rax
-; SDAG-NEXT:    cmovbq %rdi, %rsi
 ; SDAG-NEXT:    movq %rsi, %rax
+; SDAG-NEXT:    movq %rdi, %rcx
+; SDAG-NEXT:    addq %rsi, %rcx
+; SDAG-NEXT:    cmovbq %rdi, %rax
 ; SDAG-NEXT:    retq
 ;
 ; FAST-LABEL: uaddoselecti64:
 ; FAST:       ## %bb.0:
-; FAST-NEXT:    movq %rdi, %rax
-; FAST-NEXT:    addq %rsi, %rax
-; FAST-NEXT:    cmovbq %rdi, %rsi
 ; FAST-NEXT:    movq %rsi, %rax
+; FAST-NEXT:    movq %rdi, %rcx
+; FAST-NEXT:    addq %rsi, %rcx
+; FAST-NEXT:    cmovbq %rdi, %rax
 ; FAST-NEXT:    retq
 ;
 ; KNL-LABEL: uaddoselecti64:
 ; KNL:       ## %bb.0:
-; KNL-NEXT:    movq %rdi, %rax
-; KNL-NEXT:    addq %rsi, %rax
-; KNL-NEXT:    cmovbq %rdi, %rsi
 ; KNL-NEXT:    movq %rsi, %rax
+; KNL-NEXT:    movq %rdi, %rcx
+; KNL-NEXT:    addq %rsi, %rcx
+; KNL-NEXT:    cmovbq %rdi, %rax
 ; KNL-NEXT:    retq
   %t = call {i64, i1} @llvm.uadd.with.overflow.i64(i64 %v1, i64 %v2)
   %obit = extractvalue {i64, i1} %t, 1
@@ -839,23 +839,23 @@ define i64 @uaddoselecti64(i64 %v1, i64
 define i32 @ssuboselecti32(i32 %v1, i32 %v2) {
 ; SDAG-LABEL: ssuboselecti32:
 ; SDAG:       ## %bb.0:
-; SDAG-NEXT:    cmpl %esi, %edi
-; SDAG-NEXT:    cmovol %edi, %esi
 ; SDAG-NEXT:    movl %esi, %eax
+; SDAG-NEXT:    cmpl %esi, %edi
+; SDAG-NEXT:    cmovol %edi, %eax
 ; SDAG-NEXT:    retq
 ;
 ; FAST-LABEL: ssuboselecti32:
 ; FAST:       ## %bb.0:
-; FAST-NEXT:    cmpl %esi, %edi
-; FAST-NEXT:    cmovol %edi, %esi
 ; FAST-NEXT:    movl %esi, %eax
+; FAST-NEXT:    cmpl %esi, %edi
+; FAST-NEXT:    cmovol %edi, %eax
 ; FAST-NEXT:    retq
 ;
 ; KNL-LABEL: ssuboselecti32:
 ; KNL:       ## %bb.0:
-; KNL-NEXT:    cmpl %esi, %edi
-; KNL-NEXT:    cmovol %edi, %esi
 ; KNL-NEXT:    movl %esi, %eax
+; KNL-NEXT:    cmpl %esi, %edi
+; KNL-NEXT:    cmovol %edi, %eax
 ; KNL-NEXT:    retq
   %t = call {i32, i1} @llvm.ssub.with.overflow.i32(i32 %v1, i32 %v2)
   %obit = extractvalue {i32, i1} %t, 1
@@ -866,23 +866,23 @@ define i32 @ssuboselecti32(i32 %v1, i32
 define i64 @ssuboselecti64(i64 %v1, i64 %v2) {
 ; SDAG-LABEL: ssuboselecti64:
 ; SDAG:       ## %bb.0:
-; SDAG-NEXT:    cmpq %rsi, %rdi
-; SDAG-NEXT:    cmovoq %rdi, %rsi
 ; SDAG-NEXT:    movq %rsi, %rax
+; SDAG-NEXT:    cmpq %rsi, %rdi
+; SDAG-NEXT:    cmovoq %rdi, %rax
 ; SDAG-NEXT:    retq
 ;
 ; FAST-LABEL: ssuboselecti64:
 ; FAST:       ## %bb.0:
-; FAST-NEXT:    cmpq %rsi, %rdi
-; FAST-NEXT:    cmovoq %rdi, %rsi
 ; FAST-NEXT:    movq %rsi, %rax
+; FAST-NEXT:    cmpq %rsi, %rdi
+; FAST-NEXT:    cmovoq %rdi, %rax
 ; FAST-NEXT:    retq
 ;
 ; KNL-LABEL: ssuboselecti64:
 ; KNL:       ## %bb.0:
-; KNL-NEXT:    cmpq %rsi, %rdi
-; KNL-NEXT:    cmovoq %rdi, %rsi
 ; KNL-NEXT:    movq %rsi, %rax
+; KNL-NEXT:    cmpq %rsi, %rdi
+; KNL-NEXT:    cmovoq %rdi, %rax
 ; KNL-NEXT:    retq
   %t = call {i64, i1} @llvm.ssub.with.overflow.i64(i64 %v1, i64 %v2)
   %obit = extractvalue {i64, i1} %t, 1
@@ -893,23 +893,23 @@ define i64 @ssuboselecti64(i64 %v1, i64
 define i32 @usuboselecti32(i32 %v1, i32 %v2) {
 ; SDAG-LABEL: usuboselecti32:
 ; SDAG:       ## %bb.0:
-; SDAG-NEXT:    cmpl %esi, %edi
-; SDAG-NEXT:    cmovbl %edi, %esi
 ; SDAG-NEXT:    movl %esi, %eax
+; SDAG-NEXT:    cmpl %esi, %edi
+; SDAG-NEXT:    cmovbl %edi, %eax
 ; SDAG-NEXT:    retq
 ;
 ; FAST-LABEL: usuboselecti32:
 ; FAST:       ## %bb.0:
-; FAST-NEXT:    cmpl %esi, %edi
-; FAST-NEXT:    cmovbl %edi, %esi
 ; FAST-NEXT:    movl %esi, %eax
+; FAST-NEXT:    cmpl %esi, %edi
+; FAST-NEXT:    cmovbl %edi, %eax
 ; FAST-NEXT:    retq
 ;
 ; KNL-LABEL: usuboselecti32:
 ; KNL:       ## %bb.0:
-; KNL-NEXT:    cmpl %esi, %edi
-; KNL-NEXT:    cmovbl %edi, %esi
 ; KNL-NEXT:    movl %esi, %eax
+; KNL-NEXT:    cmpl %esi, %edi
+; KNL-NEXT:    cmovbl %edi, %eax
 ; KNL-NEXT:    retq
   %t = call {i32, i1} @llvm.usub.with.overflow.i32(i32 %v1, i32 %v2)
   %obit = extractvalue {i32, i1} %t, 1
@@ -920,23 +920,23 @@ define i32 @usuboselecti32(i32 %v1, i32
 define i64 @usuboselecti64(i64 %v1, i64 %v2) {
 ; SDAG-LABEL: usuboselecti64:
 ; SDAG:       ## %bb.0:
-; SDAG-NEXT:    cmpq %rsi, %rdi
-; SDAG-NEXT:    cmovbq %rdi, %rsi
 ; SDAG-NEXT:    movq %rsi, %rax
+; SDAG-NEXT:    cmpq %rsi, %rdi
+; SDAG-NEXT:    cmovbq %rdi, %rax
 ; SDAG-NEXT:    retq
 ;
 ; FAST-LABEL: usuboselecti64:
 ; FAST:       ## %bb.0:
-; FAST-NEXT:    cmpq %rsi, %rdi
-; FAST-NEXT:    cmovbq %rdi, %rsi
 ; FAST-NEXT:    movq %rsi, %rax
+; FAST-NEXT:    cmpq %rsi, %rdi
+; FAST-NEXT:    cmovbq %rdi, %rax
 ; FAST-NEXT:    retq
 ;
 ; KNL-LABEL: usuboselecti64:
 ; KNL:       ## %bb.0:
-; KNL-NEXT:    cmpq %rsi, %rdi
-; KNL-NEXT:    cmovbq %rdi, %rsi
 ; KNL-NEXT:    movq %rsi, %rax
+; KNL-NEXT:    cmpq %rsi, %rdi
+; KNL-NEXT:    cmovbq %rdi, %rax
 ; KNL-NEXT:    retq
   %t = call {i64, i1} @llvm.usub.with.overflow.i64(i64 %v1, i64 %v2)
   %obit = extractvalue {i64, i1} %t, 1
@@ -1372,23 +1372,23 @@ define {i64, i1} @uaddoovf(i64 %a, i64 %
 define {i64, i1} @usuboovf(i64 %a, i64 %b) {
 ; SDAG-LABEL: usuboovf:
 ; SDAG:       ## %bb.0:
-; SDAG-NEXT:    notq %rsi
-; SDAG-NEXT:    xorl %edx, %edx
 ; SDAG-NEXT:    movq %rsi, %rax
+; SDAG-NEXT:    notq %rax
+; SDAG-NEXT:    xorl %edx, %edx
 ; SDAG-NEXT:    retq
 ;
 ; FAST-LABEL: usuboovf:
 ; FAST:       ## %bb.0:
-; FAST-NEXT:    notq %rsi
-; FAST-NEXT:    xorl %edx, %edx
 ; FAST-NEXT:    movq %rsi, %rax
+; FAST-NEXT:    notq %rax
+; FAST-NEXT:    xorl %edx, %edx
 ; FAST-NEXT:    retq
 ;
 ; KNL-LABEL: usuboovf:
 ; KNL:       ## %bb.0:
-; KNL-NEXT:    notq %rsi
-; KNL-NEXT:    xorl %edx, %edx
 ; KNL-NEXT:    movq %rsi, %rax
+; KNL-NEXT:    notq %rax
+; KNL-NEXT:    xorl %edx, %edx
 ; KNL-NEXT:    retq
   %t0 = call {i64, i1} @llvm.usub.with.overflow.i64(i64 %a, i64 %a)
   %v0 = extractvalue {i64, i1} %t0, 0

Modified: llvm/trunk/test/CodeGen/X86/xchg-nofold.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/xchg-nofold.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/xchg-nofold.ll (original)
+++ llvm/trunk/test/CodeGen/X86/xchg-nofold.ll Wed Sep 19 11:59:08 2018
@@ -9,20 +9,21 @@
 define zeroext i1 @_Z3fooRSt6atomicIbEb(%"struct.std::atomic"* nocapture dereferenceable(1) %a, i1 returned zeroext %b) nounwind {
 ; CHECK-LABEL: _Z3fooRSt6atomicIbEb:
 ; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    movq %rdi, %rax
-; CHECK-NEXT:    shrq $3, %rax
-; CHECK-NEXT:    movb 2147450880(%rax), %al
-; CHECK-NEXT:    testb %al, %al
+; CHECK-NEXT:    movl %esi, %eax
+; CHECK-NEXT:    movq %rdi, %rcx
+; CHECK-NEXT:    shrq $3, %rcx
+; CHECK-NEXT:    movb 2147450880(%rcx), %cl
+; CHECK-NEXT:    testb %cl, %cl
 ; CHECK-NEXT:    je .LBB0_3
 ; CHECK-NEXT:  # %bb.1:
-; CHECK-NEXT:    movl %edi, %ecx
-; CHECK-NEXT:    andl $7, %ecx
-; CHECK-NEXT:    cmpb %al, %cl
+; CHECK-NEXT:    movl %edi, %edx
+; CHECK-NEXT:    andl $7, %edx
+; CHECK-NEXT:    cmpb %cl, %dl
 ; CHECK-NEXT:    jge .LBB0_2
 ; CHECK-NEXT:  .LBB0_3:
-; CHECK-NEXT:    movl %esi, %eax
-; CHECK-NEXT:    xchgb %al, (%rdi)
-; CHECK-NEXT:    movl %esi, %eax
+; CHECK-NEXT:    movl %eax, %ecx
+; CHECK-NEXT:    xchgb %cl, (%rdi)
+; CHECK-NEXT:    # kill: def $al killed $al killed $eax
 ; CHECK-NEXT:    retq
 ; CHECK-NEXT:  .LBB0_2:
 ; CHECK-NEXT:    pushq %rax

Modified: llvm/trunk/test/CodeGen/X86/xmulo.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/xmulo.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/xmulo.ll (original)
+++ llvm/trunk/test/CodeGen/X86/xmulo.ll Wed Sep 19 11:59:08 2018
@@ -92,6 +92,7 @@ define zeroext i1 @smuloi8(i8 %v1, i8 %v
 ; SDAG-LABEL: smuloi8:
 ; SDAG:       ## %bb.0:
 ; SDAG-NEXT:    movl %edi, %eax
+; SDAG-NEXT:    ## kill: def $al killed $al killed $eax
 ; SDAG-NEXT:    imulb %sil
 ; SDAG-NEXT:    seto %cl
 ; SDAG-NEXT:    movb %al, (%rdx)
@@ -101,6 +102,7 @@ define zeroext i1 @smuloi8(i8 %v1, i8 %v
 ; FAST-LABEL: smuloi8:
 ; FAST:       ## %bb.0:
 ; FAST-NEXT:    movl %edi, %eax
+; FAST-NEXT:    ## kill: def $al killed $al killed $eax
 ; FAST-NEXT:    imulb %sil
 ; FAST-NEXT:    seto %cl
 ; FAST-NEXT:    movb %al, (%rdx)
@@ -111,6 +113,7 @@ define zeroext i1 @smuloi8(i8 %v1, i8 %v
 ; KNL-LABEL: smuloi8:
 ; KNL:       ## %bb.0:
 ; KNL-NEXT:    movl %edi, %eax
+; KNL-NEXT:    ## kill: def $al killed $al killed $eax
 ; KNL-NEXT:    imulb %sil
 ; KNL-NEXT:    seto %cl
 ; KNL-NEXT:    movb %al, (%rdx)
@@ -218,6 +221,7 @@ define zeroext i1 @umuloi8(i8 %v1, i8 %v
 ; SDAG-LABEL: umuloi8:
 ; SDAG:       ## %bb.0:
 ; SDAG-NEXT:    movl %edi, %eax
+; SDAG-NEXT:    ## kill: def $al killed $al killed $eax
 ; SDAG-NEXT:    mulb %sil
 ; SDAG-NEXT:    seto %cl
 ; SDAG-NEXT:    movb %al, (%rdx)
@@ -227,6 +231,7 @@ define zeroext i1 @umuloi8(i8 %v1, i8 %v
 ; FAST-LABEL: umuloi8:
 ; FAST:       ## %bb.0:
 ; FAST-NEXT:    movl %edi, %eax
+; FAST-NEXT:    ## kill: def $al killed $al killed $eax
 ; FAST-NEXT:    mulb %sil
 ; FAST-NEXT:    seto %cl
 ; FAST-NEXT:    movb %al, (%rdx)
@@ -237,6 +242,7 @@ define zeroext i1 @umuloi8(i8 %v1, i8 %v
 ; KNL-LABEL: umuloi8:
 ; KNL:       ## %bb.0:
 ; KNL-NEXT:    movl %edi, %eax
+; KNL-NEXT:    ## kill: def $al killed $al killed $eax
 ; KNL-NEXT:    mulb %sil
 ; KNL-NEXT:    seto %cl
 ; KNL-NEXT:    movb %al, (%rdx)
@@ -254,6 +260,7 @@ define zeroext i1 @umuloi16(i16 %v1, i16
 ; SDAG:       ## %bb.0:
 ; SDAG-NEXT:    movq %rdx, %rcx
 ; SDAG-NEXT:    movl %edi, %eax
+; SDAG-NEXT:    ## kill: def $ax killed $ax killed $eax
 ; SDAG-NEXT:    mulw %si
 ; SDAG-NEXT:    seto %dl
 ; SDAG-NEXT:    movw %ax, (%rcx)
@@ -264,6 +271,7 @@ define zeroext i1 @umuloi16(i16 %v1, i16
 ; FAST:       ## %bb.0:
 ; FAST-NEXT:    movq %rdx, %rcx
 ; FAST-NEXT:    movl %edi, %eax
+; FAST-NEXT:    ## kill: def $ax killed $ax killed $eax
 ; FAST-NEXT:    mulw %si
 ; FAST-NEXT:    seto %dl
 ; FAST-NEXT:    movw %ax, (%rcx)
@@ -275,6 +283,7 @@ define zeroext i1 @umuloi16(i16 %v1, i16
 ; KNL:       ## %bb.0:
 ; KNL-NEXT:    movq %rdx, %rcx
 ; KNL-NEXT:    movl %edi, %eax
+; KNL-NEXT:    ## kill: def $ax killed $ax killed $eax
 ; KNL-NEXT:    mulw %si
 ; KNL-NEXT:    seto %dl
 ; KNL-NEXT:    movw %ax, (%rcx)
@@ -369,26 +378,26 @@ define zeroext i1 @umuloi64(i64 %v1, i64
 define i32 @smuloselecti32(i32 %v1, i32 %v2) {
 ; SDAG-LABEL: smuloselecti32:
 ; SDAG:       ## %bb.0:
-; SDAG-NEXT:    movl %edi, %eax
-; SDAG-NEXT:    imull %esi, %eax
-; SDAG-NEXT:    cmovol %edi, %esi
 ; SDAG-NEXT:    movl %esi, %eax
+; SDAG-NEXT:    movl %edi, %ecx
+; SDAG-NEXT:    imull %esi, %ecx
+; SDAG-NEXT:    cmovol %edi, %eax
 ; SDAG-NEXT:    retq
 ;
 ; FAST-LABEL: smuloselecti32:
 ; FAST:       ## %bb.0:
-; FAST-NEXT:    movl %edi, %eax
-; FAST-NEXT:    imull %esi, %eax
-; FAST-NEXT:    cmovol %edi, %esi
 ; FAST-NEXT:    movl %esi, %eax
+; FAST-NEXT:    movl %edi, %ecx
+; FAST-NEXT:    imull %esi, %ecx
+; FAST-NEXT:    cmovol %edi, %eax
 ; FAST-NEXT:    retq
 ;
 ; KNL-LABEL: smuloselecti32:
 ; KNL:       ## %bb.0:
-; KNL-NEXT:    movl %edi, %eax
-; KNL-NEXT:    imull %esi, %eax
-; KNL-NEXT:    cmovol %edi, %esi
 ; KNL-NEXT:    movl %esi, %eax
+; KNL-NEXT:    movl %edi, %ecx
+; KNL-NEXT:    imull %esi, %ecx
+; KNL-NEXT:    cmovol %edi, %eax
 ; KNL-NEXT:    retq
   %t = call {i32, i1} @llvm.smul.with.overflow.i32(i32 %v1, i32 %v2)
   %obit = extractvalue {i32, i1} %t, 1
@@ -399,26 +408,26 @@ define i32 @smuloselecti32(i32 %v1, i32
 define i64 @smuloselecti64(i64 %v1, i64 %v2) {
 ; SDAG-LABEL: smuloselecti64:
 ; SDAG:       ## %bb.0:
-; SDAG-NEXT:    movq %rdi, %rax
-; SDAG-NEXT:    imulq %rsi, %rax
-; SDAG-NEXT:    cmovoq %rdi, %rsi
 ; SDAG-NEXT:    movq %rsi, %rax
+; SDAG-NEXT:    movq %rdi, %rcx
+; SDAG-NEXT:    imulq %rsi, %rcx
+; SDAG-NEXT:    cmovoq %rdi, %rax
 ; SDAG-NEXT:    retq
 ;
 ; FAST-LABEL: smuloselecti64:
 ; FAST:       ## %bb.0:
-; FAST-NEXT:    movq %rdi, %rax
-; FAST-NEXT:    imulq %rsi, %rax
-; FAST-NEXT:    cmovoq %rdi, %rsi
 ; FAST-NEXT:    movq %rsi, %rax
+; FAST-NEXT:    movq %rdi, %rcx
+; FAST-NEXT:    imulq %rsi, %rcx
+; FAST-NEXT:    cmovoq %rdi, %rax
 ; FAST-NEXT:    retq
 ;
 ; KNL-LABEL: smuloselecti64:
 ; KNL:       ## %bb.0:
-; KNL-NEXT:    movq %rdi, %rax
-; KNL-NEXT:    imulq %rsi, %rax
-; KNL-NEXT:    cmovoq %rdi, %rsi
 ; KNL-NEXT:    movq %rsi, %rax
+; KNL-NEXT:    movq %rdi, %rcx
+; KNL-NEXT:    imulq %rsi, %rcx
+; KNL-NEXT:    cmovoq %rdi, %rax
 ; KNL-NEXT:    retq
   %t = call {i64, i1} @llvm.smul.with.overflow.i64(i64 %v1, i64 %v2)
   %obit = extractvalue {i64, i1} %t, 1
@@ -694,8 +703,8 @@ continue:
 define i1 @bug27873(i64 %c1, i1 %c2) {
 ; SDAG-LABEL: bug27873:
 ; SDAG:       ## %bb.0:
-; SDAG-NEXT:    movl $160, %ecx
 ; SDAG-NEXT:    movq %rdi, %rax
+; SDAG-NEXT:    movl $160, %ecx
 ; SDAG-NEXT:    mulq %rcx
 ; SDAG-NEXT:    seto %al
 ; SDAG-NEXT:    orb %sil, %al
@@ -703,8 +712,8 @@ define i1 @bug27873(i64 %c1, i1 %c2) {
 ;
 ; FAST-LABEL: bug27873:
 ; FAST:       ## %bb.0:
-; FAST-NEXT:    movl $160, %ecx
 ; FAST-NEXT:    movq %rdi, %rax
+; FAST-NEXT:    movl $160, %ecx
 ; FAST-NEXT:    mulq %rcx
 ; FAST-NEXT:    seto %al
 ; FAST-NEXT:    orb %sil, %al
@@ -712,8 +721,8 @@ define i1 @bug27873(i64 %c1, i1 %c2) {
 ;
 ; KNL-LABEL: bug27873:
 ; KNL:       ## %bb.0:
-; KNL-NEXT:    movl $160, %ecx
 ; KNL-NEXT:    movq %rdi, %rax
+; KNL-NEXT:    movl $160, %ecx
 ; KNL-NEXT:    mulq %rcx
 ; KNL-NEXT:    seto %al
 ; KNL-NEXT:    orb %sil, %al

Modified: llvm/trunk/test/CodeGen/X86/xor.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/xor.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/xor.ll (original)
+++ llvm/trunk/test/CodeGen/X86/xor.ll Wed Sep 19 11:59:08 2018
@@ -44,18 +44,18 @@ define i32 @test3(i32 %a, i32 %b) nounwi
 ;
 ; X64-LIN-LABEL: test3:
 ; X64-LIN:       # %bb.0: # %entry
-; X64-LIN-NEXT:    notl %esi
-; X64-LIN-NEXT:    andl %edi, %esi
-; X64-LIN-NEXT:    shrl %esi
 ; X64-LIN-NEXT:    movl %esi, %eax
+; X64-LIN-NEXT:    notl %eax
+; X64-LIN-NEXT:    andl %edi, %eax
+; X64-LIN-NEXT:    shrl %eax
 ; X64-LIN-NEXT:    retq
 ;
 ; X64-WIN-LABEL: test3:
 ; X64-WIN:       # %bb.0: # %entry
-; X64-WIN-NEXT:    notl %edx
-; X64-WIN-NEXT:    andl %ecx, %edx
-; X64-WIN-NEXT:    shrl %edx
 ; X64-WIN-NEXT:    movl %edx, %eax
+; X64-WIN-NEXT:    notl %eax
+; X64-WIN-NEXT:    andl %ecx, %eax
+; X64-WIN-NEXT:    shrl %eax
 ; X64-WIN-NEXT:    retq
 entry:
   %tmp1not = xor i32 %b, -2
@@ -84,34 +84,34 @@ define i32 @test4(i32 %a, i32 %b) nounwi
 ;
 ; X64-LIN-LABEL: test4:
 ; X64-LIN:       # %bb.0: # %entry
+; X64-LIN-NEXT:    movl %edi, %eax
 ; X64-LIN-NEXT:    .p2align 4, 0x90
 ; X64-LIN-NEXT:  .LBB3_1: # %bb
 ; X64-LIN-NEXT:    # =>This Inner Loop Header: Depth=1
-; X64-LIN-NEXT:    xorl %esi, %edi
-; X64-LIN-NEXT:    movl %edi, %eax
-; X64-LIN-NEXT:    notl %eax
-; X64-LIN-NEXT:    andl %esi, %eax
-; X64-LIN-NEXT:    addl %eax, %eax
-; X64-LIN-NEXT:    movl %eax, %esi
+; X64-LIN-NEXT:    xorl %esi, %eax
+; X64-LIN-NEXT:    movl %eax, %ecx
+; X64-LIN-NEXT:    notl %ecx
+; X64-LIN-NEXT:    andl %esi, %ecx
+; X64-LIN-NEXT:    addl %ecx, %ecx
+; X64-LIN-NEXT:    movl %ecx, %esi
 ; X64-LIN-NEXT:    jne .LBB3_1
 ; X64-LIN-NEXT:  # %bb.2: # %bb12
-; X64-LIN-NEXT:    movl %edi, %eax
 ; X64-LIN-NEXT:    retq
 ;
 ; X64-WIN-LABEL: test4:
 ; X64-WIN:       # %bb.0: # %entry
+; X64-WIN-NEXT:    movl %ecx, %eax
 ; X64-WIN-NEXT:    .p2align 4, 0x90
 ; X64-WIN-NEXT:  .LBB3_1: # %bb
 ; X64-WIN-NEXT:    # =>This Inner Loop Header: Depth=1
-; X64-WIN-NEXT:    xorl %edx, %ecx
-; X64-WIN-NEXT:    movl %ecx, %eax
-; X64-WIN-NEXT:    notl %eax
-; X64-WIN-NEXT:    andl %edx, %eax
-; X64-WIN-NEXT:    addl %eax, %eax
-; X64-WIN-NEXT:    movl %eax, %edx
+; X64-WIN-NEXT:    xorl %edx, %eax
+; X64-WIN-NEXT:    movl %eax, %ecx
+; X64-WIN-NEXT:    notl %ecx
+; X64-WIN-NEXT:    andl %edx, %ecx
+; X64-WIN-NEXT:    addl %ecx, %ecx
+; X64-WIN-NEXT:    movl %ecx, %edx
 ; X64-WIN-NEXT:    jne .LBB3_1
 ; X64-WIN-NEXT:  # %bb.2: # %bb12
-; X64-WIN-NEXT:    movl %ecx, %eax
 ; X64-WIN-NEXT:    retq
 entry:
   br label %bb
@@ -150,38 +150,39 @@ define i16 @test5(i16 %a, i16 %b) nounwi
 ;
 ; X64-LIN-LABEL: test5:
 ; X64-LIN:       # %bb.0: # %entry
+; X64-LIN-NEXT:    movl %edi, %eax
 ; X64-LIN-NEXT:    .p2align 4, 0x90
 ; X64-LIN-NEXT:  .LBB4_1: # %bb
 ; X64-LIN-NEXT:    # =>This Inner Loop Header: Depth=1
-; X64-LIN-NEXT:    xorl %esi, %edi
-; X64-LIN-NEXT:    movl %edi, %eax
-; X64-LIN-NEXT:    notl %eax
-; X64-LIN-NEXT:    andl %esi, %eax
-; X64-LIN-NEXT:    addl %eax, %eax
-; X64-LIN-NEXT:    testw %ax, %ax
-; X64-LIN-NEXT:    movl %eax, %esi
+; X64-LIN-NEXT:    xorl %esi, %eax
+; X64-LIN-NEXT:    movl %eax, %ecx
+; X64-LIN-NEXT:    notl %ecx
+; X64-LIN-NEXT:    andl %esi, %ecx
+; X64-LIN-NEXT:    addl %ecx, %ecx
+; X64-LIN-NEXT:    testw %cx, %cx
+; X64-LIN-NEXT:    movl %ecx, %esi
 ; X64-LIN-NEXT:    jne .LBB4_1
 ; X64-LIN-NEXT:  # %bb.2: # %bb12
-; X64-LIN-NEXT:    movl %edi, %eax
+; X64-LIN-NEXT:    # kill: def $ax killed $ax killed $eax
 ; X64-LIN-NEXT:    retq
 ;
 ; X64-WIN-LABEL: test5:
 ; X64-WIN:       # %bb.0: # %entry
 ; X64-WIN-NEXT:    # kill: def $dx killed $dx def $edx
-; X64-WIN-NEXT:    # kill: def $cx killed $cx def $ecx
+; X64-WIN-NEXT:    movl %ecx, %eax
 ; X64-WIN-NEXT:    .p2align 4, 0x90
 ; X64-WIN-NEXT:  .LBB4_1: # %bb
 ; X64-WIN-NEXT:    # =>This Inner Loop Header: Depth=1
-; X64-WIN-NEXT:    xorl %edx, %ecx
-; X64-WIN-NEXT:    movl %ecx, %eax
-; X64-WIN-NEXT:    notl %eax
-; X64-WIN-NEXT:    andl %edx, %eax
-; X64-WIN-NEXT:    addl %eax, %eax
-; X64-WIN-NEXT:    testw %ax, %ax
-; X64-WIN-NEXT:    movl %eax, %edx
+; X64-WIN-NEXT:    xorl %edx, %eax
+; X64-WIN-NEXT:    movl %eax, %ecx
+; X64-WIN-NEXT:    notl %ecx
+; X64-WIN-NEXT:    andl %edx, %ecx
+; X64-WIN-NEXT:    addl %ecx, %ecx
+; X64-WIN-NEXT:    testw %cx, %cx
+; X64-WIN-NEXT:    movl %ecx, %edx
 ; X64-WIN-NEXT:    jne .LBB4_1
 ; X64-WIN-NEXT:  # %bb.2: # %bb12
-; X64-WIN-NEXT:    movl %ecx, %eax
+; X64-WIN-NEXT:    # kill: def $ax killed $ax killed $eax
 ; X64-WIN-NEXT:    retq
 entry:
   br label %bb
@@ -218,34 +219,35 @@ define i8 @test6(i8 %a, i8 %b) nounwind
 ;
 ; X64-LIN-LABEL: test6:
 ; X64-LIN:       # %bb.0: # %entry
+; X64-LIN-NEXT:    movl %edi, %eax
 ; X64-LIN-NEXT:    .p2align 4, 0x90
 ; X64-LIN-NEXT:  .LBB5_1: # %bb
 ; X64-LIN-NEXT:    # =>This Inner Loop Header: Depth=1
-; X64-LIN-NEXT:    xorb %sil, %dil
-; X64-LIN-NEXT:    movl %edi, %eax
-; X64-LIN-NEXT:    notb %al
-; X64-LIN-NEXT:    andb %sil, %al
-; X64-LIN-NEXT:    addb %al, %al
-; X64-LIN-NEXT:    movl %eax, %esi
+; X64-LIN-NEXT:    xorb %sil, %al
+; X64-LIN-NEXT:    movl %eax, %ecx
+; X64-LIN-NEXT:    notb %cl
+; X64-LIN-NEXT:    andb %sil, %cl
+; X64-LIN-NEXT:    addb %cl, %cl
+; X64-LIN-NEXT:    movl %ecx, %esi
 ; X64-LIN-NEXT:    jne .LBB5_1
 ; X64-LIN-NEXT:  # %bb.2: # %bb12
-; X64-LIN-NEXT:    movl %edi, %eax
+; X64-LIN-NEXT:    # kill: def $al killed $al killed $eax
 ; X64-LIN-NEXT:    retq
 ;
 ; X64-WIN-LABEL: test6:
 ; X64-WIN:       # %bb.0: # %entry
+; X64-WIN-NEXT:    movl %ecx, %eax
 ; X64-WIN-NEXT:    .p2align 4, 0x90
 ; X64-WIN-NEXT:  .LBB5_1: # %bb
 ; X64-WIN-NEXT:    # =>This Inner Loop Header: Depth=1
-; X64-WIN-NEXT:    xorb %dl, %cl
-; X64-WIN-NEXT:    movl %ecx, %eax
-; X64-WIN-NEXT:    notb %al
-; X64-WIN-NEXT:    andb %dl, %al
-; X64-WIN-NEXT:    addb %al, %al
-; X64-WIN-NEXT:    movl %eax, %edx
+; X64-WIN-NEXT:    xorb %dl, %al
+; X64-WIN-NEXT:    movl %eax, %ecx
+; X64-WIN-NEXT:    notb %cl
+; X64-WIN-NEXT:    andb %dl, %cl
+; X64-WIN-NEXT:    addb %cl, %cl
+; X64-WIN-NEXT:    movl %ecx, %edx
 ; X64-WIN-NEXT:    jne .LBB5_1
 ; X64-WIN-NEXT:  # %bb.2: # %bb12
-; X64-WIN-NEXT:    movl %ecx, %eax
 ; X64-WIN-NEXT:    retq
 entry:
   br label %bb
@@ -282,34 +284,34 @@ define i32 @test7(i32 %a, i32 %b) nounwi
 ;
 ; X64-LIN-LABEL: test7:
 ; X64-LIN:       # %bb.0: # %entry
+; X64-LIN-NEXT:    movl %edi, %eax
 ; X64-LIN-NEXT:    .p2align 4, 0x90
 ; X64-LIN-NEXT:  .LBB6_1: # %bb
 ; X64-LIN-NEXT:    # =>This Inner Loop Header: Depth=1
-; X64-LIN-NEXT:    xorl %esi, %edi
-; X64-LIN-NEXT:    movl %edi, %eax
-; X64-LIN-NEXT:    xorl $2147483646, %eax # imm = 0x7FFFFFFE
-; X64-LIN-NEXT:    andl %esi, %eax
-; X64-LIN-NEXT:    addl %eax, %eax
-; X64-LIN-NEXT:    movl %eax, %esi
+; X64-LIN-NEXT:    xorl %esi, %eax
+; X64-LIN-NEXT:    movl %eax, %ecx
+; X64-LIN-NEXT:    xorl $2147483646, %ecx # imm = 0x7FFFFFFE
+; X64-LIN-NEXT:    andl %esi, %ecx
+; X64-LIN-NEXT:    addl %ecx, %ecx
+; X64-LIN-NEXT:    movl %ecx, %esi
 ; X64-LIN-NEXT:    jne .LBB6_1
 ; X64-LIN-NEXT:  # %bb.2: # %bb12
-; X64-LIN-NEXT:    movl %edi, %eax
 ; X64-LIN-NEXT:    retq
 ;
 ; X64-WIN-LABEL: test7:
 ; X64-WIN:       # %bb.0: # %entry
+; X64-WIN-NEXT:    movl %ecx, %eax
 ; X64-WIN-NEXT:    .p2align 4, 0x90
 ; X64-WIN-NEXT:  .LBB6_1: # %bb
 ; X64-WIN-NEXT:    # =>This Inner Loop Header: Depth=1
-; X64-WIN-NEXT:    xorl %edx, %ecx
-; X64-WIN-NEXT:    movl %ecx, %eax
-; X64-WIN-NEXT:    xorl $2147483646, %eax # imm = 0x7FFFFFFE
-; X64-WIN-NEXT:    andl %edx, %eax
-; X64-WIN-NEXT:    addl %eax, %eax
-; X64-WIN-NEXT:    movl %eax, %edx
+; X64-WIN-NEXT:    xorl %edx, %eax
+; X64-WIN-NEXT:    movl %eax, %ecx
+; X64-WIN-NEXT:    xorl $2147483646, %ecx # imm = 0x7FFFFFFE
+; X64-WIN-NEXT:    andl %edx, %ecx
+; X64-WIN-NEXT:    addl %ecx, %ecx
+; X64-WIN-NEXT:    movl %ecx, %edx
 ; X64-WIN-NEXT:    jne .LBB6_1
 ; X64-WIN-NEXT:  # %bb.2: # %bb12
-; X64-WIN-NEXT:    movl %ecx, %eax
 ; X64-WIN-NEXT:    retq
 entry:
   br label %bb
@@ -336,14 +338,14 @@ define i32 @test8(i32 %a) nounwind {
 ;
 ; X64-LIN-LABEL: test8:
 ; X64-LIN:       # %bb.0: # %entry
-; X64-LIN-NEXT:    notl %edi
 ; X64-LIN-NEXT:    movl %edi, %eax
+; X64-LIN-NEXT:    notl %eax
 ; X64-LIN-NEXT:    retq
 ;
 ; X64-WIN-LABEL: test8:
 ; X64-WIN:       # %bb.0: # %entry
-; X64-WIN-NEXT:    notl %ecx
 ; X64-WIN-NEXT:    movl %ecx, %eax
+; X64-WIN-NEXT:    notl %eax
 ; X64-WIN-NEXT:    retq
 entry:
   %t1 = sub i32 0, %a
@@ -361,16 +363,16 @@ define i32 @test9(i32 %a) nounwind {
 ;
 ; X64-LIN-LABEL: test9:
 ; X64-LIN:       # %bb.0:
-; X64-LIN-NEXT:    notl %edi
-; X64-LIN-NEXT:    andl $4096, %edi # imm = 0x1000
 ; X64-LIN-NEXT:    movl %edi, %eax
+; X64-LIN-NEXT:    notl %eax
+; X64-LIN-NEXT:    andl $4096, %eax # imm = 0x1000
 ; X64-LIN-NEXT:    retq
 ;
 ; X64-WIN-LABEL: test9:
 ; X64-WIN:       # %bb.0:
-; X64-WIN-NEXT:    notl %ecx
-; X64-WIN-NEXT:    andl $4096, %ecx # imm = 0x1000
 ; X64-WIN-NEXT:    movl %ecx, %eax
+; X64-WIN-NEXT:    notl %eax
+; X64-WIN-NEXT:    andl $4096, %eax # imm = 0x1000
 ; X64-WIN-NEXT:    retq
   %1 = and i32 %a, 4096
   %2 = xor i32 %1, 4096
@@ -459,8 +461,9 @@ define i32 @test11(i32 %b) {
 ;
 ; X64-LIN-LABEL: test11:
 ; X64-LIN:       # %bb.0:
-; X64-LIN-NEXT:    movl $-2, %eax
 ; X64-LIN-NEXT:    movl %edi, %ecx
+; X64-LIN-NEXT:    movl $-2, %eax
+; X64-LIN-NEXT:    # kill: def $cl killed $cl killed $ecx
 ; X64-LIN-NEXT:    roll %cl, %eax
 ; X64-LIN-NEXT:    retq
 ;

Modified: llvm/trunk/test/DebugInfo/COFF/pieces.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/pieces.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/COFF/pieces.ll (original)
+++ llvm/trunk/test/DebugInfo/COFF/pieces.ll Wed Sep 19 11:59:08 2018
@@ -65,15 +65,15 @@
 
 
 ; ASM-LABEL: pad_right: # @pad_right
-; ASM:         #DEBUG_VALUE: pad_right:o <- [DW_OP_LLVM_fragment 32 32] $ecx
-; ASM:         movl    %ecx, %eax
+; ASM:         movq    %rcx, %rax
+; ASM:         #DEBUG_VALUE: pad_right:o <- [DW_OP_LLVM_fragment 32 32] $eax
 ; ASM:         retq
 
 
 ; ASM-LABEL: pad_left: # @pad_left
-; ASM:         #DEBUG_VALUE: pad_left:o <- [DW_OP_LLVM_fragment 0 32] $ecx
 ; ASM:         .cv_loc 2 1 24 3                # t.c:24:3
-; ASM:         movl    %ecx, %eax
+; ASM:         movq    %rcx, %rax
+; ASM:         #DEBUG_VALUE: pad_left:o <- [DW_OP_LLVM_fragment 0 32] $eax
 ; ASM:         retq
 
 
@@ -136,7 +136,7 @@
 ; ASM:        .asciz  "pad_right"             # Function name
 ; ASM:        .short  4414                    # Record kind: S_LOCAL
 ; ASM:        .asciz  "o"
-; ASM:        .cv_def_range    .Lfunc_begin1 .Lfunc_end1, "C\021\022\000\000\000\004\000\000\000"
+; ASM:        .cv_def_range    .Lfunc_begin1 .Ltmp8, "C\021\021\000\000\000\004\000\000\000"
 
 ; OBJ-LABEL: {{.*}}Proc{{.*}}Sym {
 ; OBJ:         Kind: S_GPROC32_ID (0x1147)
@@ -146,7 +146,7 @@
 ; OBJ:         VarName: o
 ; OBJ:       }
 ; OBJ:       DefRangeSubfieldRegisterSym {
-; OBJ:         Register: ECX (0x12)
+; OBJ:         Register: EAX (0x11)
 ; OBJ:         MayHaveNoName: 0
 ; OBJ:         OffsetInParent: 4
 ; OBJ:         LocalVariableAddrRange {
@@ -159,7 +159,7 @@
 ; ASM:        .asciz  "pad_left"              # Function name
 ; ASM:        .short  4414                    # Record kind: S_LOCAL
 ; ASM:        .asciz  "o"
-; ASM:        .cv_def_range    .Lfunc_begin2 .Lfunc_end2, "C\021\022\000\000\000\000\000\000\000"
+; ASM:        .cv_def_range    .Lfunc_begin2 .Ltmp10, "C\021\021\000\000\000\000\000\000\000"
 
 ; OBJ-LABEL: {{.*}}Proc{{.*}}Sym {
 ; OBJ:         Kind: S_GPROC32_ID (0x1147)
@@ -169,7 +169,7 @@
 ; OBJ:         VarName: o
 ; OBJ:       }
 ; OBJ:       DefRangeSubfieldRegisterSym {
-; OBJ:         Register: ECX (0x12)
+; OBJ:         Register: EAX (0x11)
 ; OBJ:         MayHaveNoName: 0
 ; OBJ:         OffsetInParent: 0
 ; OBJ:         LocalVariableAddrRange {

Modified: llvm/trunk/test/DebugInfo/X86/live-debug-values.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/live-debug-values.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/X86/live-debug-values.ll (original)
+++ llvm/trunk/test/DebugInfo/X86/live-debug-values.ll Wed Sep 19 11:59:08 2018
@@ -33,7 +33,7 @@
 ; CHECK-NEXT:  #DEBUG_VALUE: main:n <- $ebx
 ;   Other register values have been clobbered.
 ; CHECK-NOT:   #DEBUG_VALUE:
-; CHECK:         movl    %ecx, m(%rip)
+; CHECK:         movl    %esi, m(%rip)
 
 ; ModuleID = 'LiveDebugValues.c'
 source_filename = "test/DebugInfo/X86/live-debug-values.ll"

Modified: llvm/trunk/test/DebugInfo/X86/live-debug-variables.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/live-debug-variables.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/X86/live-debug-variables.ll (original)
+++ llvm/trunk/test/DebugInfo/X86/live-debug-variables.ll Wed Sep 19 11:59:08 2018
@@ -25,7 +25,7 @@
 ; CHECK:      .debug_loc contents:
 ; CHECK-NEXT: 0x00000000:
 ;   We currently emit an entry for the function prologue, too, which could be optimized away.
-; CHECK:              [0x000000000000001f, 0x000000000000003c): DW_OP_reg3 RBX
+; CHECK:              [0x0000000000000018, 0x0000000000000072): DW_OP_reg3 RBX
 ;   We should only have one entry inside the function.
 ; CHECK-NOT: :
 

Modified: llvm/trunk/test/DebugInfo/X86/pieces-3.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/pieces-3.ll?rev=342578&r1=342577&r2=342578&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/X86/pieces-3.ll (original)
+++ llvm/trunk/test/DebugInfo/X86/pieces-3.ll Wed Sep 19 11:59:08 2018
@@ -17,11 +17,12 @@
 ;
 ; CHECK: DW_TAG_formal_parameter [3]
 ; CHECK-NEXT:   DW_AT_location [DW_FORM_data4]        (
-; CHECK-NEXT:     [0x0000000000000000, 0x0000000000000004): DW_OP_reg5 RDI, DW_OP_piece 0x8, DW_OP_piece 0x4, DW_OP_reg4 RSI, DW_OP_piece 0x4
-; CHECK-NEXT:     [0x0000000000000004, 0x0000000000000008): DW_OP_reg5 RDI, DW_OP_piece 0x8, DW_OP_piece 0x4, DW_OP_reg4 RSI, DW_OP_piece 0x4)
+; CHECK-NEXT:     [0x0000000000000000, 0x0000000000000007): DW_OP_reg5 RDI, DW_OP_piece 0x8, DW_OP_piece 0x4, DW_OP_reg4 RSI, DW_OP_piece 0x4
+; CHECK-NEXT:     [0x0000000000000007, 0x0000000000000007): DW_OP_reg5 RDI, DW_OP_piece 0x8, DW_OP_piece 0x4, DW_OP_reg0 RAX, DW_OP_piece 0x4)
 ; CHECK-NEXT:   DW_AT_name {{.*}}"outer"
 ; CHECK: DW_TAG_variable
-; CHECK-NEXT:   DW_AT_location {{.*}}(DW_OP_reg4 RSI, DW_OP_piece 0x4)
+; CHECK-NEXT:   DW_AT_location [DW_FORM_data4]        (0x00000044
+; CHECK-NEXT:     [0x0000000000000007, 0x0000000000000007): DW_OP_reg0 RAX, DW_OP_piece 0x4)
 ; CHECK-NEXT:   "i1"
 
 ; ModuleID = '/Volumes/Data/llvm/test/DebugInfo/X86/sroasplit-2.ll'




More information about the llvm-commits mailing list