[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