[llvm] [DAG] ComputeKnownBits - set low bit to zero for ADD(X, X) (PR #186461)

Xinlong Chen via llvm-commits llvm-commits at lists.llvm.org
Sat Mar 14 09:14:58 PDT 2026


https://github.com/Xinlong-Chen updated https://github.com/llvm/llvm-project/pull/186461

>From c00beff9fb1bb9d20b4b46ed063372803a2b864c Mon Sep 17 00:00:00 2001
From: xinlongchen <xinlongchen at tencent.com>
Date: Sat, 14 Mar 2026 00:40:33 +0800
Subject: [PATCH 1/2] [DAG] ComputeKnownBits - set low bit to zero for ADD(X,X)

---
 llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp |  5 +++++
 llvm/test/CodeGen/X86/known-bits.ll            | 11 +++++++++++
 2 files changed, 16 insertions(+)

diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index 1c5b2d00fe83c..0ed2853cc714f 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -4147,6 +4147,11 @@ KnownBits SelectionDAG::computeKnownBits(SDValue Op, const APInt &DemandedElts,
     Known = KnownBits::computeForAddSub(
         Op.getOpcode() == ISD::ADD, Flags.hasNoSignedWrap(),
         Flags.hasNoUnsignedWrap(), Known, Known2);
+    // ADD(X,X) is equivalent to SHL(X,1), the low bit is always zero.
+    if (Op.getOpcode() == ISD::ADD && Op.getOperand(0) == Op.getOperand(1) &&
+        isGuaranteedNotToBeUndefOrPoison(Op.getOperand(0), DemandedElts, false,
+                                         Depth + 1))
+      Known.Zero.setBit(0);
     break;
   }
   case ISD::USUBO:
diff --git a/llvm/test/CodeGen/X86/known-bits.ll b/llvm/test/CodeGen/X86/known-bits.ll
index 58a0595e4322a..b29ccaf9981bc 100644
--- a/llvm/test/CodeGen/X86/known-bits.ll
+++ b/llvm/test/CodeGen/X86/known-bits.ll
@@ -232,3 +232,14 @@ define i32 @knownbits_fshr(i32 %a0) nounwind {
 
 declare i32 @llvm.fshl.i32(i32, i32, i32) nounwind readnone
 declare i32 @llvm.fshr.i32(i32, i32, i32) nounwind readnone
+
+define i32 @knownbits_add_self_lsb(i32 %a0) nounwind {
+; CHECK-LABEL: knownbits_add_self_lsb:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    xorl %eax, %eax
+; CHECK-NEXT:    ret{{[l|q]}}
+  %x = freeze i32 %a0
+  %sum = add i32 %x, %x
+  %and = and i32 %sum, 1
+  ret i32 %and
+}

>From fbf7bfaeb501b3d5ec033c8ac92698001b3db11b Mon Sep 17 00:00:00 2001
From: xinlongchen <xinlongchen at tencent.com>
Date: Sun, 15 Mar 2026 00:14:40 +0800
Subject: [PATCH 2/2] fix CodeGen test in X86

---
 .../test/CodeGen/X86/avx512-insert-extract.ll |    2 +-
 llvm/test/CodeGen/X86/clmul-vector.ll         | 3688 +++++++++--------
 2 files changed, 1849 insertions(+), 1841 deletions(-)

diff --git a/llvm/test/CodeGen/X86/avx512-insert-extract.ll b/llvm/test/CodeGen/X86/avx512-insert-extract.ll
index f8b0c3465f3db..67e5dfdc98ca8 100644
--- a/llvm/test/CodeGen/X86/avx512-insert-extract.ll
+++ b/llvm/test/CodeGen/X86/avx512-insert-extract.ll
@@ -1445,7 +1445,7 @@ define i8 @test_extractelement_variable_v64i8_indexi8(<64 x i8> %t1, i8 %index)
 ; CHECK-NEXT:    addb %dil, %dil
 ; CHECK-NEXT:    vmovaps %zmm0, (%rsp)
 ; CHECK-NEXT:    movzbl %dil, %eax
-; CHECK-NEXT:    andl $63, %eax
+; CHECK-NEXT:    andl $62, %eax
 ; CHECK-NEXT:    movzbl (%rsp,%rax), %eax
 ; CHECK-NEXT:    movq %rbp, %rsp
 ; CHECK-NEXT:    popq %rbp
diff --git a/llvm/test/CodeGen/X86/clmul-vector.ll b/llvm/test/CodeGen/X86/clmul-vector.ll
index 8ca41b57072ed..6fd01e446897d 100644
--- a/llvm/test/CodeGen/X86/clmul-vector.ll
+++ b/llvm/test/CodeGen/X86/clmul-vector.ll
@@ -1397,34 +1397,25 @@ define <16 x i8> @clmulr_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
 ; SSE2-NEXT:    pand %xmm3, %xmm5
 ; SSE2-NEXT:    psllw $2, %xmm5
 ; SSE2-NEXT:    por %xmm1, %xmm5
-; SSE2-NEXT:    movdqa %xmm5, %xmm1
-; SSE2-NEXT:    psrlw $1, %xmm1
+; SSE2-NEXT:    movdqa %xmm5, %xmm8
+; SSE2-NEXT:    psrlw $1, %xmm8
+; SSE2-NEXT:    movdqa %xmm8, %xmm1
 ; SSE2-NEXT:    pand %xmm4, %xmm1
 ; SSE2-NEXT:    pand %xmm4, %xmm5
 ; SSE2-NEXT:    paddb %xmm5, %xmm5
 ; SSE2-NEXT:    por %xmm5, %xmm1
 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
 ; SSE2-NEXT:    pand %xmm1, %xmm9
-; SSE2-NEXT:    movdqa %xmm9, %xmm8
-; SSE2-NEXT:    punpckhbw {{.*#+}} xmm8 = xmm8[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
-; SSE2-NEXT:    pmullw %xmm6, %xmm8
+; SSE2-NEXT:    movdqa %xmm9, %xmm10
+; SSE2-NEXT:    punpckhbw {{.*#+}} xmm10 = xmm10[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
+; SSE2-NEXT:    pmullw %xmm6, %xmm10
 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [255,255,255,255,255,255,255,255]
-; SSE2-NEXT:    pand %xmm7, %xmm8
+; SSE2-NEXT:    pand %xmm7, %xmm10
 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm9 = xmm9[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
 ; SSE2-NEXT:    pmullw %xmm0, %xmm9
 ; SSE2-NEXT:    pand %xmm7, %xmm9
-; SSE2-NEXT:    packuswb %xmm8, %xmm9
-; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
-; SSE2-NEXT:    pand %xmm1, %xmm8
-; SSE2-NEXT:    movdqa %xmm8, %xmm10
-; SSE2-NEXT:    punpckhbw {{.*#+}} xmm10 = xmm10[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
-; SSE2-NEXT:    pmullw %xmm6, %xmm10
-; SSE2-NEXT:    pand %xmm7, %xmm10
-; SSE2-NEXT:    punpcklbw {{.*#+}} xmm8 = xmm8[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
-; SSE2-NEXT:    pmullw %xmm0, %xmm8
-; SSE2-NEXT:    pand %xmm7, %xmm8
-; SSE2-NEXT:    packuswb %xmm10, %xmm8
+; SSE2-NEXT:    packuswb %xmm10, %xmm9
 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
 ; SSE2-NEXT:    pand %xmm5, %xmm10
 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
@@ -1435,9 +1426,7 @@ define <16 x i8> @clmulr_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
 ; SSE2-NEXT:    pmullw %xmm0, %xmm10
 ; SSE2-NEXT:    pand %xmm7, %xmm10
 ; SSE2-NEXT:    packuswb %xmm11, %xmm10
-; SSE2-NEXT:    pxor %xmm8, %xmm10
-; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
-; SSE2-NEXT:    pand %xmm5, %xmm8
+; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm8
 ; SSE2-NEXT:    movdqa %xmm8, %xmm11
 ; SSE2-NEXT:    punpckhbw {{.*#+}} xmm11 = xmm11[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
 ; SSE2-NEXT:    pmullw %xmm6, %xmm11
@@ -1446,10 +1435,10 @@ define <16 x i8> @clmulr_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
 ; SSE2-NEXT:    pmullw %xmm0, %xmm8
 ; SSE2-NEXT:    pand %xmm7, %xmm8
 ; SSE2-NEXT:    packuswb %xmm11, %xmm8
-; SSE2-NEXT:    pxor %xmm9, %xmm8
 ; SSE2-NEXT:    pxor %xmm10, %xmm8
-; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
-; SSE2-NEXT:    pand %xmm1, %xmm10
+; SSE2-NEXT:    pxor %xmm9, %xmm8
+; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
+; SSE2-NEXT:    pand %xmm5, %xmm10
 ; SSE2-NEXT:    movdqa %xmm10, %xmm9
 ; SSE2-NEXT:    punpckhbw {{.*#+}} xmm9 = xmm9[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
 ; SSE2-NEXT:    pmullw %xmm6, %xmm9
@@ -1458,8 +1447,8 @@ define <16 x i8> @clmulr_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
 ; SSE2-NEXT:    pmullw %xmm0, %xmm10
 ; SSE2-NEXT:    pand %xmm7, %xmm10
 ; SSE2-NEXT:    packuswb %xmm9, %xmm10
-; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32]
-; SSE2-NEXT:    pand %xmm5, %xmm9
+; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
+; SSE2-NEXT:    pand %xmm1, %xmm9
 ; SSE2-NEXT:    movdqa %xmm9, %xmm11
 ; SSE2-NEXT:    punpckhbw {{.*#+}} xmm11 = xmm11[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
 ; SSE2-NEXT:    pmullw %xmm6, %xmm11
@@ -1469,6 +1458,17 @@ define <16 x i8> @clmulr_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
 ; SSE2-NEXT:    pand %xmm7, %xmm9
 ; SSE2-NEXT:    packuswb %xmm11, %xmm9
 ; SSE2-NEXT:    pxor %xmm10, %xmm9
+; SSE2-NEXT:    pxor %xmm8, %xmm9
+; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32]
+; SSE2-NEXT:    pand %xmm5, %xmm8
+; SSE2-NEXT:    movdqa %xmm8, %xmm10
+; SSE2-NEXT:    punpckhbw {{.*#+}} xmm10 = xmm10[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
+; SSE2-NEXT:    pmullw %xmm6, %xmm10
+; SSE2-NEXT:    pand %xmm7, %xmm10
+; SSE2-NEXT:    punpcklbw {{.*#+}} xmm8 = xmm8[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
+; SSE2-NEXT:    pmullw %xmm0, %xmm8
+; SSE2-NEXT:    pand %xmm7, %xmm8
+; SSE2-NEXT:    packuswb %xmm10, %xmm8
 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
 ; SSE2-NEXT:    punpckhbw {{.*#+}} xmm10 = xmm10[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
@@ -1478,7 +1478,6 @@ define <16 x i8> @clmulr_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
 ; SSE2-NEXT:    pmullw %xmm0, %xmm1
 ; SSE2-NEXT:    pand %xmm7, %xmm1
 ; SSE2-NEXT:    packuswb %xmm10, %xmm1
-; SSE2-NEXT:    pxor %xmm9, %xmm1
 ; SSE2-NEXT:    pxor %xmm8, %xmm1
 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
 ; SSE2-NEXT:    movdqa %xmm5, %xmm8
@@ -1490,6 +1489,7 @@ define <16 x i8> @clmulr_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
 ; SSE2-NEXT:    pand %xmm7, %xmm0
 ; SSE2-NEXT:    packuswb %xmm8, %xmm0
 ; SSE2-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NEXT:    pxor %xmm9, %xmm0
 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
 ; SSE2-NEXT:    psrlw $4, %xmm1
 ; SSE2-NEXT:    pand %xmm2, %xmm1
@@ -1748,64 +1748,64 @@ define <8 x i16> @clmulr_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
 ; SSE2-NEXT:    pand %xmm3, %xmm5
 ; SSE2-NEXT:    psllw $2, %xmm5
 ; SSE2-NEXT:    por %xmm1, %xmm5
-; SSE2-NEXT:    movdqa %xmm5, %xmm1
-; SSE2-NEXT:    psrlw $1, %xmm1
+; SSE2-NEXT:    movdqa %xmm5, %xmm6
+; SSE2-NEXT:    psrlw $1, %xmm6
+; SSE2-NEXT:    movdqa %xmm6, %xmm1
 ; SSE2-NEXT:    pand %xmm4, %xmm1
 ; SSE2-NEXT:    pand %xmm4, %xmm5
 ; SSE2-NEXT:    paddb %xmm5, %xmm5
 ; SSE2-NEXT:    por %xmm5, %xmm1
-; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [4,4,4,4,4,4,4,4]
-; SSE2-NEXT:    pand %xmm1, %xmm6
-; SSE2-NEXT:    pmullw %xmm0, %xmm6
-; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [1,1,1,1,1,1,1,1]
+; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [4,4,4,4,4,4,4,4]
 ; SSE2-NEXT:    pand %xmm1, %xmm7
 ; SSE2-NEXT:    pmullw %xmm0, %xmm7
 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2,2,2,2,2,2,2,2]
 ; SSE2-NEXT:    pand %xmm5, %xmm8
 ; SSE2-NEXT:    pmullw %xmm0, %xmm8
-; SSE2-NEXT:    pxor %xmm7, %xmm8
+; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [1,1,1,1,1,1,1,1]
+; SSE2-NEXT:    pand %xmm6, %xmm9
+; SSE2-NEXT:    pmullw %xmm0, %xmm9
+; SSE2-NEXT:    pxor %xmm8, %xmm9
+; SSE2-NEXT:    pxor %xmm7, %xmm9
 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [8,8,8,8,8,8,8,8]
 ; SSE2-NEXT:    pand %xmm5, %xmm7
 ; SSE2-NEXT:    pmullw %xmm0, %xmm7
-; SSE2-NEXT:    pxor %xmm6, %xmm7
-; SSE2-NEXT:    pxor %xmm8, %xmm7
-; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [16,16,16,16,16,16,16,16]
-; SSE2-NEXT:    pand %xmm1, %xmm6
-; SSE2-NEXT:    pmullw %xmm0, %xmm6
-; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32,32,32,32,32,32,32,32]
-; SSE2-NEXT:    pand %xmm5, %xmm8
+; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [16,16,16,16,16,16,16,16]
+; SSE2-NEXT:    pand %xmm1, %xmm8
 ; SSE2-NEXT:    pmullw %xmm0, %xmm8
-; SSE2-NEXT:    pxor %xmm6, %xmm8
+; SSE2-NEXT:    pxor %xmm7, %xmm8
+; SSE2-NEXT:    pxor %xmm9, %xmm8
+; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [32,32,32,32,32,32,32,32]
+; SSE2-NEXT:    pand %xmm5, %xmm7
+; SSE2-NEXT:    pmullw %xmm0, %xmm7
 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [64,64,64,64,64,64,64,64]
 ; SSE2-NEXT:    pand %xmm1, %xmm9
 ; SSE2-NEXT:    pmullw %xmm0, %xmm9
-; SSE2-NEXT:    pxor %xmm8, %xmm9
 ; SSE2-NEXT:    pxor %xmm7, %xmm9
-; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [128,128,128,128,128,128,128,128]
-; SSE2-NEXT:    pand %xmm5, %xmm6
-; SSE2-NEXT:    pmullw %xmm0, %xmm6
-; SSE2-NEXT:    pxor %xmm9, %xmm6
-; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [256,256,256,256,256,256,256,256]
-; SSE2-NEXT:    pand %xmm1, %xmm7
+; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [128,128,128,128,128,128,128,128]
+; SSE2-NEXT:    pand %xmm5, %xmm7
 ; SSE2-NEXT:    pmullw %xmm0, %xmm7
+; SSE2-NEXT:    pxor %xmm9, %xmm7
+; SSE2-NEXT:    pxor %xmm8, %xmm7
+; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm6
+; SSE2-NEXT:    pmullw %xmm0, %xmm6
 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [512,512,512,512,512,512,512,512]
 ; SSE2-NEXT:    pand %xmm5, %xmm8
 ; SSE2-NEXT:    pmullw %xmm0, %xmm8
-; SSE2-NEXT:    pxor %xmm7, %xmm8
-; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [1024,1024,1024,1024,1024,1024,1024,1024]
-; SSE2-NEXT:    pand %xmm1, %xmm7
-; SSE2-NEXT:    pmullw %xmm0, %xmm7
-; SSE2-NEXT:    pxor %xmm8, %xmm7
+; SSE2-NEXT:    pxor %xmm6, %xmm8
+; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [1024,1024,1024,1024,1024,1024,1024,1024]
+; SSE2-NEXT:    pand %xmm1, %xmm6
+; SSE2-NEXT:    pmullw %xmm0, %xmm6
+; SSE2-NEXT:    pxor %xmm8, %xmm6
 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2048,2048,2048,2048,2048,2048,2048,2048]
 ; SSE2-NEXT:    pand %xmm5, %xmm8
 ; SSE2-NEXT:    pmullw %xmm0, %xmm8
-; SSE2-NEXT:    pxor %xmm7, %xmm8
-; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [4096,4096,4096,4096,4096,4096,4096,4096]
-; SSE2-NEXT:    pand %xmm1, %xmm7
-; SSE2-NEXT:    pmullw %xmm0, %xmm7
-; SSE2-NEXT:    pxor %xmm8, %xmm7
-; SSE2-NEXT:    pxor %xmm6, %xmm7
-; SSE2-NEXT:    psllw $8, %xmm6
+; SSE2-NEXT:    pxor %xmm6, %xmm8
+; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [4096,4096,4096,4096,4096,4096,4096,4096]
+; SSE2-NEXT:    pand %xmm1, %xmm6
+; SSE2-NEXT:    pmullw %xmm0, %xmm6
+; SSE2-NEXT:    pxor %xmm8, %xmm6
+; SSE2-NEXT:    pxor %xmm7, %xmm6
+; SSE2-NEXT:    psllw $8, %xmm7
 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [8192,8192,8192,8192,8192,8192,8192,8192]
 ; SSE2-NEXT:    pand %xmm5, %xmm8
 ; SSE2-NEXT:    pmullw %xmm0, %xmm8
@@ -1815,9 +1815,9 @@ define <8 x i16> @clmulr_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
 ; SSE2-NEXT:    pmullw %xmm5, %xmm0
 ; SSE2-NEXT:    pxor %xmm1, %xmm0
-; SSE2-NEXT:    pxor %xmm7, %xmm0
+; SSE2-NEXT:    pxor %xmm6, %xmm0
 ; SSE2-NEXT:    psrlw $8, %xmm0
-; SSE2-NEXT:    por %xmm6, %xmm0
+; SSE2-NEXT:    por %xmm7, %xmm0
 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
 ; SSE2-NEXT:    psrlw $4, %xmm1
 ; SSE2-NEXT:    pand %xmm2, %xmm1
@@ -2072,325 +2072,325 @@ define <4 x i32> @clmulr_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    psllw $2, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    por %xmm6, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm6
-; SSE2-NOPCLMUL-NEXT:    psrlw $1, %xmm6
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm6
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm8
+; SSE2-NOPCLMUL-NEXT:    psrlw $1, %xmm8
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    paddb %xmm1, %xmm1
-; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm6
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [4,4,4,4]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm8
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm7
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm7
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm7[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm9 = xmm9[0],xmm8[0],xmm9[1],xmm8[1]
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [1,1,1,1]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm8
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm8[0],xmm10[1],xmm8[1]
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [2,2,2,2]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm8
+; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [4,4,4,4]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm9
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm9[0],xmm10[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [2,2,2,2]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm8[0],xmm11[1],xmm8[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm9[0],xmm11[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm12 = [1,1,1,1]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm8, %xmm12
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm9 = xmm9[0],xmm12[0],xmm9[1],xmm12[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [8,8,8,8]
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm8 = xmm8[0],xmm10[0],xmm8[1],xmm10[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm8
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [16,16,16,16]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm9
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm10[0],xmm11[1],xmm10[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm12 = [16,16,16,16]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm12
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm9[0],xmm10[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm12[0],xmm10[1],xmm12[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [32,32,32,32]
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm9[0],xmm11[1],xmm9[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [64,64,64,64]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [64,64,64,64]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm9
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm12 = xmm12[0],xmm9[0],xmm12[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm12
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm11 = [128,128,128,128]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm11, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm9 = xmm9[0],xmm11[0],xmm9[1],xmm11[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm9
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [256,256,256,256]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm8, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm9 = xmm9[0],xmm10[0],xmm9[1],xmm10[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm8, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [128,128,128,128]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm8
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm10
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm10[0],xmm11[1],xmm10[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [512,512,512,512]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm8[0],xmm10[1],xmm8[1]
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [256,256,256,256]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm8
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm12 = xmm12[0],xmm10[0],xmm12[1],xmm10[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm12
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [1024,1024,1024,1024]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm8[0],xmm11[1],xmm8[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [512,512,512,512]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm8
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm8[0],xmm10[1],xmm8[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm10
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm11 = [1024,1024,1024,1024]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm11
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm11, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm11
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm10[0],xmm11[1],xmm10[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm11
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [2048,2048,2048,2048]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm12 = xmm12[0],xmm10[0],xmm12[1],xmm10[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm12
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [4096,4096,4096,4096]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm8 = xmm8[0],xmm11[0],xmm8[1],xmm11[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm8
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [2048,2048,2048,2048]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm10[0],xmm11[1],xmm10[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm11
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [8192,8192,8192,8192]
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm9[0],xmm10[1],xmm9[1]
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [4096,4096,4096,4096]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm11
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [16384,16384,16384,16384]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm9
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm9[0],xmm11[1],xmm9[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [8192,8192,8192,8192]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm12 = xmm12[0],xmm9[0],xmm12[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm12
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [32768,32768,32768,32768]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm9[0],xmm10[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [65536,65536,65536,65536]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm8, %xmm9
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm12 = xmm12[0],xmm9[0],xmm12[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm12
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [131072,131072,131072,131072]
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm9[0],xmm10[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm10
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [16384,16384,16384,16384]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm9
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [262144,262144,262144,262144]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm9[0],xmm11[1],xmm9[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [32768,32768,32768,32768]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [524288,524288,524288,524288]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm12 = xmm12[0],xmm9[0],xmm12[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm12
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [1048576,1048576,1048576,1048576]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm9
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm9[0],xmm11[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm11
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [2097152,2097152,2097152,2097152]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm12 = xmm12[0],xmm9[0],xmm12[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm12
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [4194304,4194304,4194304,4194304]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm9
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm9[0],xmm11[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm11
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm12 = [8388608,8388608,8388608,8388608]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm12
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm9 = xmm9[0],xmm10[0],xmm9[1],xmm10[1]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm9 = xmm9[0],xmm12[0],xmm9[1],xmm12[1]
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm8, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [65536,65536,65536,65536]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm8[0],xmm10[1],xmm8[1]
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [131072,131072,131072,131072]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [33554432,33554432,33554432,33554432]
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm8[0],xmm11[1],xmm8[1]
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [262144,262144,262144,262144]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm8
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [67108864,67108864,67108864,67108864]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm8[0],xmm10[1],xmm8[1]
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm10
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [524288,524288,524288,524288]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [134217728,134217728,134217728,134217728]
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm8[0],xmm11[1],xmm8[1]
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [1048576,1048576,1048576,1048576]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm8
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [268435456,268435456,268435456,268435456]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm8[0],xmm10[1],xmm8[1]
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm10
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm11 = [2097152,2097152,2097152,2097152]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm11
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm11, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm11
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [536870912,536870912,536870912,536870912]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm8
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm8 = xmm8[0],xmm11[0],xmm8[1],xmm11[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm8
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [4194304,4194304,4194304,4194304]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm9[0],xmm10[1],xmm9[1]
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [8388608,8388608,8388608,8388608]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm11
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm9[0],xmm11[1],xmm9[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [16777216,16777216,16777216,16777216]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm9[0],xmm10[1],xmm9[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm10
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [33554432,33554432,33554432,33554432]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm11
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm9[0],xmm11[1],xmm9[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [67108864,67108864,67108864,67108864]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm9[0],xmm10[1],xmm9[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm10
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [134217728,134217728,134217728,134217728]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm11
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm9[0],xmm11[1],xmm9[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [268435456,268435456,268435456,268435456]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm10
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm9 = xmm9[0],xmm10[0],xmm9[1],xmm10[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm8, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [536870912,536870912,536870912,536870912]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm8
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm8[0],xmm10[1],xmm8[1]
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm6
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm8[0],xmm11[1],xmm8[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm7
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm6
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm8 = xmm8[0],xmm6[0],xmm8[1],xmm6[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm8 = xmm8[0],xmm7[0],xmm8[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm8, %xmm0
@@ -2653,16 +2653,16 @@ define <2 x i64> @clmulr_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
 ; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psrlw $2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm8
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    psllw $2, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psrlw $1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm6 = [85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm8
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    paddb %xmm8, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
@@ -2674,329 +2674,330 @@ define <2 x i64> @clmulr_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
 ; SSE2-NOPCLMUL-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
 ; SSE2-NOPCLMUL-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[3,2,1,0,4,5,6,7]
-; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm4 = xmm1[0,1,2,3,7,6,5,4]
-; SSE2-NOPCLMUL-NEXT:    packuswb %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm2 = xmm1[0,1,2,3,7,6,5,4]
+; SSE2-NOPCLMUL-NEXT:    packuswb %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psrlw $4, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm4
-; SSE2-NOPCLMUL-NEXT:    psllw $4, %xmm4
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    psllw $4, %xmm2
+; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psrlw $2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm4
-; SSE2-NOPCLMUL-NEXT:    psllw $2, %xmm4
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    psrlw $1, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm4
-; SSE2-NOPCLMUL-NEXT:    paddb %xmm4, %xmm4
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [4,4]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pand %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm2
+; SSE2-NOPCLMUL-NEXT:    psllw $2, %xmm2
+; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psrlw $1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    paddb %xmm2, %xmm2
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [4,4]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    psrlq $32, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm7
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm7
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm7
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm7
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm12 = [2,2]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm12, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [8,8]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pand %xmm10, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm11 = [16,16]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm11, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm12 = [2,2]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pand %xmm12, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm7
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
-; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm15 = [512,512]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm15, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm7
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm11 = [64,64]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand %xmm11, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm14 = [4096,4096]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pand %xmm14, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [8192,8192]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
-; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [65536,65536]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm15 = [512,512]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pand %xmm15, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [131072,131072]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm7
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [262144,262144]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [524288,524288]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm14 = [4096,4096]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pand %xmm14, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm5
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm6 = [8192,8192]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm5
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [65536,65536]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [1048576,1048576]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm6 = [131072,131072]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm5
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [262144,262144]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand %xmm10, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm6 = [524288,524288]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm5
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [1048576,1048576]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm7
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [2097152,2097152]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [4194304,4194304]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [8388608,8388608]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [16777216,16777216]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [4194304,4194304]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm9, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [8388608,8388608]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm5
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE2-NOPCLMUL-NEXT:    por %xmm9, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [16777216,16777216]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [33554432,33554432]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, (%rsp) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [67108864,67108864]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [134217728,134217728]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pand %xmm2, %xmm5
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [134217728,134217728]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
-; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [268435456,268435456]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pand %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand %xmm0, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [536870912,536870912]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [536870912,536870912]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm6
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm6
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    por %xmm6, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm6, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
 ; SSE2-NOPCLMUL-NEXT:    psrlq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [1,1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [1,1]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm12, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm12, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [8,8]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [16,16]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [32,32]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [32,32]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [64,64]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm11 = [128,128]
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm12 = [256,256]
@@ -3023,8 +3024,8 @@ define <2 x i64> @clmulr_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm7
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
@@ -3060,18 +3061,19 @@ define <2 x i64> @clmulr_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
 ; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psrlq $32, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psrlq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm6 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm6
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm9, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm12
@@ -3135,23 +3137,23 @@ define <2 x i64> @clmulr_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm14
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    pmuludq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    por %xmm8, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    pxor {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    pxor {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Folded Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm9
@@ -3160,82 +3162,82 @@ define <2 x i64> @clmulr_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm12
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm12
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm2
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm13
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm13
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm13, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm13
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm13
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm13, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm4 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
-; SSE2-NOPCLMUL-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm1[0],xmm4[1],xmm1[1],xmm4[2],xmm1[2],xmm4[3],xmm1[3],xmm4[4],xmm1[4],xmm4[5],xmm1[5],xmm4[6],xmm1[6],xmm4[7],xmm1[7]
+; SSE2-NOPCLMUL-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
 ; SSE2-NOPCLMUL-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
 ; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm1 = xmm0[0,1,2,3,7,6,5,4]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[2,3,0,1]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[2,3,0,1]
 ; SSE2-NOPCLMUL-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
 ; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]
 ; SSE2-NOPCLMUL-NEXT:    packuswb %xmm1, %xmm0
@@ -3343,34 +3345,25 @@ define <16 x i8> @clmulh_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
 ; SSE2-NEXT:    pand %xmm3, %xmm5
 ; SSE2-NEXT:    psllw $2, %xmm5
 ; SSE2-NEXT:    por %xmm1, %xmm5
-; SSE2-NEXT:    movdqa %xmm5, %xmm1
-; SSE2-NEXT:    psrlw $1, %xmm1
+; SSE2-NEXT:    movdqa %xmm5, %xmm8
+; SSE2-NEXT:    psrlw $1, %xmm8
+; SSE2-NEXT:    movdqa %xmm8, %xmm1
 ; SSE2-NEXT:    pand %xmm4, %xmm1
 ; SSE2-NEXT:    pand %xmm4, %xmm5
 ; SSE2-NEXT:    paddb %xmm5, %xmm5
 ; SSE2-NEXT:    por %xmm5, %xmm1
 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
 ; SSE2-NEXT:    pand %xmm1, %xmm9
-; SSE2-NEXT:    movdqa %xmm9, %xmm8
-; SSE2-NEXT:    punpckhbw {{.*#+}} xmm8 = xmm8[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
-; SSE2-NEXT:    pmullw %xmm6, %xmm8
+; SSE2-NEXT:    movdqa %xmm9, %xmm10
+; SSE2-NEXT:    punpckhbw {{.*#+}} xmm10 = xmm10[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
+; SSE2-NEXT:    pmullw %xmm6, %xmm10
 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [255,255,255,255,255,255,255,255]
-; SSE2-NEXT:    pand %xmm7, %xmm8
+; SSE2-NEXT:    pand %xmm7, %xmm10
 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm9 = xmm9[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
 ; SSE2-NEXT:    pmullw %xmm0, %xmm9
 ; SSE2-NEXT:    pand %xmm7, %xmm9
-; SSE2-NEXT:    packuswb %xmm8, %xmm9
-; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
-; SSE2-NEXT:    pand %xmm1, %xmm8
-; SSE2-NEXT:    movdqa %xmm8, %xmm10
-; SSE2-NEXT:    punpckhbw {{.*#+}} xmm10 = xmm10[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
-; SSE2-NEXT:    pmullw %xmm6, %xmm10
-; SSE2-NEXT:    pand %xmm7, %xmm10
-; SSE2-NEXT:    punpcklbw {{.*#+}} xmm8 = xmm8[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
-; SSE2-NEXT:    pmullw %xmm0, %xmm8
-; SSE2-NEXT:    pand %xmm7, %xmm8
-; SSE2-NEXT:    packuswb %xmm10, %xmm8
+; SSE2-NEXT:    packuswb %xmm10, %xmm9
 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
 ; SSE2-NEXT:    pand %xmm5, %xmm10
 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
@@ -3381,9 +3374,7 @@ define <16 x i8> @clmulh_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
 ; SSE2-NEXT:    pmullw %xmm0, %xmm10
 ; SSE2-NEXT:    pand %xmm7, %xmm10
 ; SSE2-NEXT:    packuswb %xmm11, %xmm10
-; SSE2-NEXT:    pxor %xmm8, %xmm10
-; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
-; SSE2-NEXT:    pand %xmm5, %xmm8
+; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm8
 ; SSE2-NEXT:    movdqa %xmm8, %xmm11
 ; SSE2-NEXT:    punpckhbw {{.*#+}} xmm11 = xmm11[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
 ; SSE2-NEXT:    pmullw %xmm6, %xmm11
@@ -3392,10 +3383,10 @@ define <16 x i8> @clmulh_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
 ; SSE2-NEXT:    pmullw %xmm0, %xmm8
 ; SSE2-NEXT:    pand %xmm7, %xmm8
 ; SSE2-NEXT:    packuswb %xmm11, %xmm8
-; SSE2-NEXT:    pxor %xmm9, %xmm8
 ; SSE2-NEXT:    pxor %xmm10, %xmm8
-; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
-; SSE2-NEXT:    pand %xmm1, %xmm10
+; SSE2-NEXT:    pxor %xmm9, %xmm8
+; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
+; SSE2-NEXT:    pand %xmm5, %xmm10
 ; SSE2-NEXT:    movdqa %xmm10, %xmm9
 ; SSE2-NEXT:    punpckhbw {{.*#+}} xmm9 = xmm9[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
 ; SSE2-NEXT:    pmullw %xmm6, %xmm9
@@ -3404,8 +3395,8 @@ define <16 x i8> @clmulh_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
 ; SSE2-NEXT:    pmullw %xmm0, %xmm10
 ; SSE2-NEXT:    pand %xmm7, %xmm10
 ; SSE2-NEXT:    packuswb %xmm9, %xmm10
-; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32]
-; SSE2-NEXT:    pand %xmm5, %xmm9
+; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
+; SSE2-NEXT:    pand %xmm1, %xmm9
 ; SSE2-NEXT:    movdqa %xmm9, %xmm11
 ; SSE2-NEXT:    punpckhbw {{.*#+}} xmm11 = xmm11[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
 ; SSE2-NEXT:    pmullw %xmm6, %xmm11
@@ -3415,6 +3406,17 @@ define <16 x i8> @clmulh_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
 ; SSE2-NEXT:    pand %xmm7, %xmm9
 ; SSE2-NEXT:    packuswb %xmm11, %xmm9
 ; SSE2-NEXT:    pxor %xmm10, %xmm9
+; SSE2-NEXT:    pxor %xmm8, %xmm9
+; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32]
+; SSE2-NEXT:    pand %xmm5, %xmm8
+; SSE2-NEXT:    movdqa %xmm8, %xmm10
+; SSE2-NEXT:    punpckhbw {{.*#+}} xmm10 = xmm10[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
+; SSE2-NEXT:    pmullw %xmm6, %xmm10
+; SSE2-NEXT:    pand %xmm7, %xmm10
+; SSE2-NEXT:    punpcklbw {{.*#+}} xmm8 = xmm8[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
+; SSE2-NEXT:    pmullw %xmm0, %xmm8
+; SSE2-NEXT:    pand %xmm7, %xmm8
+; SSE2-NEXT:    packuswb %xmm10, %xmm8
 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
 ; SSE2-NEXT:    movdqa %xmm1, %xmm10
 ; SSE2-NEXT:    punpckhbw {{.*#+}} xmm10 = xmm10[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
@@ -3424,7 +3426,6 @@ define <16 x i8> @clmulh_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
 ; SSE2-NEXT:    pmullw %xmm0, %xmm1
 ; SSE2-NEXT:    pand %xmm7, %xmm1
 ; SSE2-NEXT:    packuswb %xmm10, %xmm1
-; SSE2-NEXT:    pxor %xmm9, %xmm1
 ; SSE2-NEXT:    pxor %xmm8, %xmm1
 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
 ; SSE2-NEXT:    movdqa %xmm5, %xmm8
@@ -3436,6 +3437,7 @@ define <16 x i8> @clmulh_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
 ; SSE2-NEXT:    pand %xmm7, %xmm0
 ; SSE2-NEXT:    packuswb %xmm8, %xmm0
 ; SSE2-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NEXT:    pxor %xmm9, %xmm0
 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
 ; SSE2-NEXT:    psrlw $4, %xmm1
 ; SSE2-NEXT:    pand %xmm2, %xmm1
@@ -3697,64 +3699,64 @@ define <8 x i16> @clmulh_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
 ; SSE2-NEXT:    pand %xmm3, %xmm5
 ; SSE2-NEXT:    psllw $2, %xmm5
 ; SSE2-NEXT:    por %xmm1, %xmm5
-; SSE2-NEXT:    movdqa %xmm5, %xmm1
-; SSE2-NEXT:    psrlw $1, %xmm1
+; SSE2-NEXT:    movdqa %xmm5, %xmm6
+; SSE2-NEXT:    psrlw $1, %xmm6
+; SSE2-NEXT:    movdqa %xmm6, %xmm1
 ; SSE2-NEXT:    pand %xmm4, %xmm1
 ; SSE2-NEXT:    pand %xmm4, %xmm5
 ; SSE2-NEXT:    paddb %xmm5, %xmm5
 ; SSE2-NEXT:    por %xmm5, %xmm1
-; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [4,4,4,4,4,4,4,4]
-; SSE2-NEXT:    pand %xmm1, %xmm6
-; SSE2-NEXT:    pmullw %xmm0, %xmm6
-; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [1,1,1,1,1,1,1,1]
+; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [4,4,4,4,4,4,4,4]
 ; SSE2-NEXT:    pand %xmm1, %xmm7
 ; SSE2-NEXT:    pmullw %xmm0, %xmm7
 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2,2,2,2,2,2,2,2]
 ; SSE2-NEXT:    pand %xmm5, %xmm8
 ; SSE2-NEXT:    pmullw %xmm0, %xmm8
-; SSE2-NEXT:    pxor %xmm7, %xmm8
+; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [1,1,1,1,1,1,1,1]
+; SSE2-NEXT:    pand %xmm6, %xmm9
+; SSE2-NEXT:    pmullw %xmm0, %xmm9
+; SSE2-NEXT:    pxor %xmm8, %xmm9
+; SSE2-NEXT:    pxor %xmm7, %xmm9
 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [8,8,8,8,8,8,8,8]
 ; SSE2-NEXT:    pand %xmm5, %xmm7
 ; SSE2-NEXT:    pmullw %xmm0, %xmm7
-; SSE2-NEXT:    pxor %xmm6, %xmm7
-; SSE2-NEXT:    pxor %xmm8, %xmm7
-; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [16,16,16,16,16,16,16,16]
-; SSE2-NEXT:    pand %xmm1, %xmm6
-; SSE2-NEXT:    pmullw %xmm0, %xmm6
-; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32,32,32,32,32,32,32,32]
-; SSE2-NEXT:    pand %xmm5, %xmm8
+; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [16,16,16,16,16,16,16,16]
+; SSE2-NEXT:    pand %xmm1, %xmm8
 ; SSE2-NEXT:    pmullw %xmm0, %xmm8
-; SSE2-NEXT:    pxor %xmm6, %xmm8
+; SSE2-NEXT:    pxor %xmm7, %xmm8
+; SSE2-NEXT:    pxor %xmm9, %xmm8
+; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [32,32,32,32,32,32,32,32]
+; SSE2-NEXT:    pand %xmm5, %xmm7
+; SSE2-NEXT:    pmullw %xmm0, %xmm7
 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [64,64,64,64,64,64,64,64]
 ; SSE2-NEXT:    pand %xmm1, %xmm9
 ; SSE2-NEXT:    pmullw %xmm0, %xmm9
-; SSE2-NEXT:    pxor %xmm8, %xmm9
 ; SSE2-NEXT:    pxor %xmm7, %xmm9
-; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [128,128,128,128,128,128,128,128]
-; SSE2-NEXT:    pand %xmm5, %xmm6
-; SSE2-NEXT:    pmullw %xmm0, %xmm6
-; SSE2-NEXT:    pxor %xmm9, %xmm6
-; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [256,256,256,256,256,256,256,256]
-; SSE2-NEXT:    pand %xmm1, %xmm7
+; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [128,128,128,128,128,128,128,128]
+; SSE2-NEXT:    pand %xmm5, %xmm7
 ; SSE2-NEXT:    pmullw %xmm0, %xmm7
+; SSE2-NEXT:    pxor %xmm9, %xmm7
+; SSE2-NEXT:    pxor %xmm8, %xmm7
+; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm6
+; SSE2-NEXT:    pmullw %xmm0, %xmm6
 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [512,512,512,512,512,512,512,512]
 ; SSE2-NEXT:    pand %xmm5, %xmm8
 ; SSE2-NEXT:    pmullw %xmm0, %xmm8
-; SSE2-NEXT:    pxor %xmm7, %xmm8
-; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [1024,1024,1024,1024,1024,1024,1024,1024]
-; SSE2-NEXT:    pand %xmm1, %xmm7
-; SSE2-NEXT:    pmullw %xmm0, %xmm7
-; SSE2-NEXT:    pxor %xmm8, %xmm7
+; SSE2-NEXT:    pxor %xmm6, %xmm8
+; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [1024,1024,1024,1024,1024,1024,1024,1024]
+; SSE2-NEXT:    pand %xmm1, %xmm6
+; SSE2-NEXT:    pmullw %xmm0, %xmm6
+; SSE2-NEXT:    pxor %xmm8, %xmm6
 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2048,2048,2048,2048,2048,2048,2048,2048]
 ; SSE2-NEXT:    pand %xmm5, %xmm8
 ; SSE2-NEXT:    pmullw %xmm0, %xmm8
-; SSE2-NEXT:    pxor %xmm7, %xmm8
-; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [4096,4096,4096,4096,4096,4096,4096,4096]
-; SSE2-NEXT:    pand %xmm1, %xmm7
-; SSE2-NEXT:    pmullw %xmm0, %xmm7
-; SSE2-NEXT:    pxor %xmm8, %xmm7
-; SSE2-NEXT:    pxor %xmm6, %xmm7
-; SSE2-NEXT:    psllw $8, %xmm6
+; SSE2-NEXT:    pxor %xmm6, %xmm8
+; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [4096,4096,4096,4096,4096,4096,4096,4096]
+; SSE2-NEXT:    pand %xmm1, %xmm6
+; SSE2-NEXT:    pmullw %xmm0, %xmm6
+; SSE2-NEXT:    pxor %xmm8, %xmm6
+; SSE2-NEXT:    pxor %xmm7, %xmm6
+; SSE2-NEXT:    psllw $8, %xmm7
 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [8192,8192,8192,8192,8192,8192,8192,8192]
 ; SSE2-NEXT:    pand %xmm5, %xmm8
 ; SSE2-NEXT:    pmullw %xmm0, %xmm8
@@ -3764,9 +3766,9 @@ define <8 x i16> @clmulh_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
 ; SSE2-NEXT:    pmullw %xmm5, %xmm0
 ; SSE2-NEXT:    pxor %xmm1, %xmm0
-; SSE2-NEXT:    pxor %xmm7, %xmm0
+; SSE2-NEXT:    pxor %xmm6, %xmm0
 ; SSE2-NEXT:    psrlw $8, %xmm0
-; SSE2-NEXT:    por %xmm6, %xmm0
+; SSE2-NEXT:    por %xmm7, %xmm0
 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
 ; SSE2-NEXT:    psrlw $4, %xmm1
 ; SSE2-NEXT:    pand %xmm2, %xmm1
@@ -4023,325 +4025,325 @@ define <4 x i32> @clmulh_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    psllw $2, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    por %xmm6, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm6
-; SSE2-NOPCLMUL-NEXT:    psrlw $1, %xmm6
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm6
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm8
+; SSE2-NOPCLMUL-NEXT:    psrlw $1, %xmm8
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    paddb %xmm1, %xmm1
-; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm6
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [4,4,4,4]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm8
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm7
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm7
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm7[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm9 = xmm9[0],xmm8[0],xmm9[1],xmm8[1]
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [1,1,1,1]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm8
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm8[0],xmm10[1],xmm8[1]
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [2,2,2,2]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm8
+; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [4,4,4,4]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm9
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm9[0],xmm10[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [2,2,2,2]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm8[0],xmm11[1],xmm8[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm9[0],xmm11[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm12 = [1,1,1,1]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm8, %xmm12
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm9 = xmm9[0],xmm12[0],xmm9[1],xmm12[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [8,8,8,8]
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm8 = xmm8[0],xmm10[0],xmm8[1],xmm10[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm8
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [16,16,16,16]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm9
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm10[0],xmm11[1],xmm10[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm12 = [16,16,16,16]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm12
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm9[0],xmm10[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm12[0],xmm10[1],xmm12[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [32,32,32,32]
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm9[0],xmm11[1],xmm9[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [64,64,64,64]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [64,64,64,64]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm9
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm12 = xmm12[0],xmm9[0],xmm12[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm12
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm11 = [128,128,128,128]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm11, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm9 = xmm9[0],xmm11[0],xmm9[1],xmm11[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm9
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [256,256,256,256]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm8, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm9 = xmm9[0],xmm10[0],xmm9[1],xmm10[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm8, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [128,128,128,128]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm8
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm10
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm10[0],xmm11[1],xmm10[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [512,512,512,512]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm8[0],xmm10[1],xmm8[1]
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [256,256,256,256]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm8
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm12 = xmm12[0],xmm10[0],xmm12[1],xmm10[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm12
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [1024,1024,1024,1024]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm8[0],xmm11[1],xmm8[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [512,512,512,512]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm8
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm8[0],xmm10[1],xmm8[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm10
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm11 = [1024,1024,1024,1024]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm11
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm11, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm11
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm10[0],xmm11[1],xmm10[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm11
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [2048,2048,2048,2048]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm12 = xmm12[0],xmm10[0],xmm12[1],xmm10[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm12
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [4096,4096,4096,4096]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm8 = xmm8[0],xmm11[0],xmm8[1],xmm11[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm8
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [2048,2048,2048,2048]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm10[0],xmm11[1],xmm10[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm11
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [8192,8192,8192,8192]
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm9[0],xmm10[1],xmm9[1]
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [4096,4096,4096,4096]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm11
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [16384,16384,16384,16384]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm9
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm9[0],xmm11[1],xmm9[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [8192,8192,8192,8192]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm12 = xmm12[0],xmm9[0],xmm12[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm12
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [32768,32768,32768,32768]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm9[0],xmm10[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [65536,65536,65536,65536]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm8, %xmm9
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm12 = xmm12[0],xmm9[0],xmm12[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm12
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [131072,131072,131072,131072]
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm9[0],xmm10[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm10
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [16384,16384,16384,16384]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm9
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [262144,262144,262144,262144]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm9[0],xmm11[1],xmm9[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [32768,32768,32768,32768]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [524288,524288,524288,524288]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm12 = xmm12[0],xmm9[0],xmm12[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm12
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [1048576,1048576,1048576,1048576]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm9
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm9[0],xmm11[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm11
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [2097152,2097152,2097152,2097152]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm12 = xmm12[0],xmm9[0],xmm12[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm12
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [4194304,4194304,4194304,4194304]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm9
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm9[0],xmm11[1],xmm9[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm11
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm12 = [8388608,8388608,8388608,8388608]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm12
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm9 = xmm9[0],xmm10[0],xmm9[1],xmm10[1]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm9 = xmm9[0],xmm12[0],xmm9[1],xmm12[1]
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm8, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [65536,65536,65536,65536]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm8[0],xmm10[1],xmm8[1]
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [131072,131072,131072,131072]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [33554432,33554432,33554432,33554432]
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm8[0],xmm11[1],xmm8[1]
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [262144,262144,262144,262144]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm8
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [67108864,67108864,67108864,67108864]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm8[0],xmm10[1],xmm8[1]
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm10
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [524288,524288,524288,524288]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [134217728,134217728,134217728,134217728]
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm8[0],xmm11[1],xmm8[1]
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [1048576,1048576,1048576,1048576]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm8
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [268435456,268435456,268435456,268435456]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm8[0],xmm10[1],xmm8[1]
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm10
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm11 = [2097152,2097152,2097152,2097152]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm11
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm11, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm11
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm8 = xmm8[0],xmm11[0],xmm8[1],xmm11[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm8
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [4194304,4194304,4194304,4194304]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm9[0],xmm10[1],xmm9[1]
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [8388608,8388608,8388608,8388608]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm11
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm9[0],xmm11[1],xmm9[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [16777216,16777216,16777216,16777216]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm9[0],xmm10[1],xmm9[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm10
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [33554432,33554432,33554432,33554432]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm11
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm9[0],xmm11[1],xmm9[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [67108864,67108864,67108864,67108864]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm9[0],xmm10[1],xmm9[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm10
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [134217728,134217728,134217728,134217728]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm11
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm9[0],xmm11[1],xmm9[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [268435456,268435456,268435456,268435456]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm10
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm9 = xmm9[0],xmm10[0],xmm9[1],xmm10[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm8, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [536870912,536870912,536870912,536870912]
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm8
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm10
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm8[0],xmm10[1],xmm8[1]
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm6
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm8[0],xmm11[1],xmm8[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm7
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm8
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm6
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
-; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm8 = xmm8[0],xmm6[0],xmm8[1],xmm6[1]
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm8 = xmm8[0],xmm7[0],xmm8[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
 ; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm8, %xmm0
@@ -4539,16 +4541,16 @@ define <2 x i64> @clmulh_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
 ; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psrlw $2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm8
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    psllw $2, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psrlw $1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm6 = [85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm8
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    paddb %xmm8, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
@@ -4560,112 +4562,112 @@ define <2 x i64> @clmulh_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
 ; SSE2-NOPCLMUL-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
 ; SSE2-NOPCLMUL-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[3,2,1,0,4,5,6,7]
-; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm4 = xmm1[0,1,2,3,7,6,5,4]
-; SSE2-NOPCLMUL-NEXT:    packuswb %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm2 = xmm1[0,1,2,3,7,6,5,4]
+; SSE2-NOPCLMUL-NEXT:    packuswb %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psrlw $4, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm4
-; SSE2-NOPCLMUL-NEXT:    psllw $4, %xmm4
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    psllw $4, %xmm2
+; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psrlw $2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm4
-; SSE2-NOPCLMUL-NEXT:    psllw $2, %xmm4
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    psrlw $1, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm4
-; SSE2-NOPCLMUL-NEXT:    paddb %xmm4, %xmm4
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [4,4]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pand %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm2
+; SSE2-NOPCLMUL-NEXT:    psllw $2, %xmm2
+; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psrlw $1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    paddb %xmm2, %xmm2
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [4,4]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    psrlq $32, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm7
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm7
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm7
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm7
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm12 = [2,2]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm12, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [8,8]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pand %xmm10, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm11 = [16,16]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm11, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm12 = [2,2]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pand %xmm12, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm7
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
-; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm7
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm11 = [64,64]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand %xmm11, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm5
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm15 = [512,512]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm15, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pand %xmm15, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm7
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
@@ -4673,216 +4675,217 @@ define <2 x i64> @clmulh_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm14 = [4096,4096]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pand %xmm14, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [8192,8192]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm14 = [4096,4096]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pand %xmm14, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm5
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm6 = [8192,8192]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
-; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [65536,65536]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [131072,131072]
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [65536,65536]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [262144,262144]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [524288,524288]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm6 = [131072,131072]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm5
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [262144,262144]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand %xmm10, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [1048576,1048576]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm6 = [524288,524288]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm5
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [1048576,1048576]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm7
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [2097152,2097152]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [4194304,4194304]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [8388608,8388608]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [16777216,16777216]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [4194304,4194304]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm9, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [8388608,8388608]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm5
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE2-NOPCLMUL-NEXT:    por %xmm9, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [16777216,16777216]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [33554432,33554432]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, (%rsp) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [67108864,67108864]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [134217728,134217728]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pand %xmm2, %xmm5
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [134217728,134217728]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
-; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [268435456,268435456]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pand %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand %xmm0, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [536870912,536870912]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [536870912,536870912]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm6
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm6
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    por %xmm6, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm6, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
 ; SSE2-NOPCLMUL-NEXT:    psrlq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [1,1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [1,1]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm12, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm12, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [8,8]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [16,16]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [32,32]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [32,32]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [64,64]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm11 = [128,128]
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm12 = [256,256]
@@ -4909,8 +4912,8 @@ define <2 x i64> @clmulh_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm7
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
@@ -4946,18 +4949,19 @@ define <2 x i64> @clmulh_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
 ; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psrlq $32, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psrlq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm6 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm6
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm9, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm12
@@ -5021,23 +5025,23 @@ define <2 x i64> @clmulh_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm14
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    pmuludq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    por %xmm8, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    pxor {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    pxor {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Folded Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm9
@@ -5046,82 +5050,82 @@ define <2 x i64> @clmulh_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm12
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm12
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm13
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm13
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm13, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm13
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm13, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm4 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
-; SSE2-NOPCLMUL-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm1[0],xmm4[1],xmm1[1],xmm4[2],xmm1[2],xmm4[3],xmm1[3],xmm4[4],xmm1[4],xmm4[5],xmm1[5],xmm4[6],xmm1[6],xmm4[7],xmm1[7]
+; SSE2-NOPCLMUL-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
 ; SSE2-NOPCLMUL-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
 ; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm1 = xmm0[0,1,2,3,7,6,5,4]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[2,3,0,1]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[2,3,0,1]
 ; SSE2-NOPCLMUL-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
 ; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]
 ; SSE2-NOPCLMUL-NEXT:    packuswb %xmm1, %xmm0
@@ -5790,22 +5794,23 @@ define void @commutative_clmulh_v2i64(<2 x i64> %x, <2 x i64> %y, ptr %p0, ptr %
 ; SSE2-NOPCLMUL-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,2,1,0,4,5,6,7]
 ; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]
 ; SSE2-NOPCLMUL-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
 ; SSE2-NOPCLMUL-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[3,2,1,0,4,5,6,7]
 ; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm8 = xmm1[0,1,2,3,7,6,5,4]
 ; SSE2-NOPCLMUL-NEXT:    packuswb %xmm2, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    psrlw $4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm8
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    psllw $4, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    psrlw $2, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm8
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    psllw $2, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm1
@@ -5816,120 +5821,119 @@ define void @commutative_clmulh_v2i64(<2 x i64> %x, <2 x i64> %y, ptr %p0, ptr %
 ; SSE2-NOPCLMUL-NEXT:    paddb %xmm8, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm2
-; SSE2-NOPCLMUL-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm2[8],xmm1[9],xmm2[9],xmm1[10],xmm2[10],xmm1[11],xmm2[11],xmm1[12],xmm2[12],xmm1[13],xmm2[13],xmm1[14],xmm2[14],xmm1[15],xmm2[15]
+; SSE2-NOPCLMUL-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm5[8],xmm1[9],xmm5[9],xmm1[10],xmm5[10],xmm1[11],xmm5[11],xmm1[12],xmm5[12],xmm1[13],xmm5[13],xmm1[14],xmm5[14],xmm1[15],xmm5[15]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
 ; SSE2-NOPCLMUL-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[3,2,1,0,4,5,6,7]
-; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,6,5,4]
-; SSE2-NOPCLMUL-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
+; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm2 = xmm1[0,1,2,3,7,6,5,4]
+; SSE2-NOPCLMUL-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1],xmm0[2],xmm5[2],xmm0[3],xmm5[3],xmm0[4],xmm5[4],xmm0[5],xmm5[5],xmm0[6],xmm5[6],xmm0[7],xmm5[7]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
 ; SSE2-NOPCLMUL-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
-; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm3 = xmm0[0,1,2,3,7,6,5,4]
-; SSE2-NOPCLMUL-NEXT:    packuswb %xmm1, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm1 = xmm0[0,1,2,3,7,6,5,4]
+; SSE2-NOPCLMUL-NEXT:    packuswb %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psrlw $4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm3
-; SSE2-NOPCLMUL-NEXT:    psllw $4, %xmm3
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    psllw $4, %xmm1
+; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psrlw $2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm3
-; SSE2-NOPCLMUL-NEXT:    psllw $2, %xmm3
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm5
-; SSE2-NOPCLMUL-NEXT:    psrlw $1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm1
+; SSE2-NOPCLMUL-NEXT:    psllw $2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psrlw $1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm3
-; SSE2-NOPCLMUL-NEXT:    paddb %xmm3, %xmm3
-; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm5
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [4,4]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm1
+; SSE2-NOPCLMUL-NEXT:    paddb %xmm1, %xmm1
+; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [4,4]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    psrlq $32, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm7
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm7
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm7
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm7
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm12 = [2,2]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm12, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [8,8]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pand %xmm10, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm11 = [16,16]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm11, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm12 = [2,2]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pand %xmm12, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm7
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
-; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm7
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm11 = [64,64]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand %xmm11, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm15 = [512,512]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm15, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pand %xmm15, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm7
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
@@ -5937,216 +5941,217 @@ define void @commutative_clmulh_v2i64(<2 x i64> %x, <2 x i64> %y, ptr %p0, ptr %
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm14 = [4096,4096]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [8192,8192]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm14 = [4096,4096]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand %xmm14, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm6 = [8192,8192]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
-; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [65536,65536]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [131072,131072]
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [65536,65536]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [262144,262144]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [524288,524288]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm6 = [131072,131072]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [262144,262144]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pand %xmm10, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [1048576,1048576]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm6 = [524288,524288]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [1048576,1048576]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pand %xmm2, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm7
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [2097152,2097152]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [4194304,4194304]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [8388608,8388608]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [16777216,16777216]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [4194304,4194304]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm9, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [8388608,8388608]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [16777216,16777216]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [33554432,33554432]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, (%rsp) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [67108864,67108864]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [134217728,134217728]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm4
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [134217728,134217728]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
-; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [268435456,268435456]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand %xmm0, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [536870912,536870912]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [536870912,536870912]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pand %xmm2, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm6
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm6
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    por %xmm6, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    por %xmm6, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
 ; SSE2-NOPCLMUL-NEXT:    psrlq $32, %xmm5
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [1,1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [1,1]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm12, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm12, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [8,8]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [16,16]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [32,32]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [32,32]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm10
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [64,64]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm11 = [128,128]
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm12 = [256,256]
@@ -6173,8 +6178,8 @@ define void @commutative_clmulh_v2i64(<2 x i64> %x, <2 x i64> %y, ptr %p0, ptr %
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm7
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
@@ -6210,18 +6215,19 @@ define void @commutative_clmulh_v2i64(<2 x i64> %x, <2 x i64> %y, ptr %p0, ptr %
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
 ; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psrlq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psrlq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm6 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm6
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm4
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm9, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm12
@@ -6285,23 +6291,23 @@ define void @commutative_clmulh_v2i64(<2 x i64> %x, <2 x i64> %y, ptr %p0, ptr %
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm14
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    pmuludq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    por %xmm8, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    pxor {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    pxor {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Folded Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm9
@@ -6310,85 +6316,85 @@ define void @commutative_clmulh_v2i64(<2 x i64> %x, <2 x i64> %y, ptr %p0, ptr %
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm12
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm12
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm13
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm13
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm13, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm13
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm13, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm1
-; SSE2-NOPCLMUL-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
-; SSE2-NOPCLMUL-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3],xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm2
+; SSE2-NOPCLMUL-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]
+; SSE2-NOPCLMUL-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
 ; SSE2-NOPCLMUL-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
-; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm1 = xmm0[0,1,2,3,7,6,5,4]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[2,3,0,1]
+; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm2 = xmm0[0,1,2,3,7,6,5,4]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
 ; SSE2-NOPCLMUL-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
 ; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]
-; SSE2-NOPCLMUL-NEXT:    packuswb %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    packuswb %xmm2, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    psrlw $4, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
@@ -6467,22 +6473,23 @@ define void @commutative_clmulr_v2i64(<2 x i64> %x, <2 x i64> %y, ptr %p0, ptr %
 ; SSE2-NOPCLMUL-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,2,1,0,4,5,6,7]
 ; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]
 ; SSE2-NOPCLMUL-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
 ; SSE2-NOPCLMUL-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[3,2,1,0,4,5,6,7]
 ; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm8 = xmm1[0,1,2,3,7,6,5,4]
 ; SSE2-NOPCLMUL-NEXT:    packuswb %xmm2, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    psrlw $4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm8
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    psllw $4, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    psrlw $2, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm8
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    psllw $2, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm1
@@ -6493,120 +6500,119 @@ define void @commutative_clmulr_v2i64(<2 x i64> %x, <2 x i64> %y, ptr %p0, ptr %
 ; SSE2-NOPCLMUL-NEXT:    paddb %xmm8, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm2
-; SSE2-NOPCLMUL-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm2[8],xmm1[9],xmm2[9],xmm1[10],xmm2[10],xmm1[11],xmm2[11],xmm1[12],xmm2[12],xmm1[13],xmm2[13],xmm1[14],xmm2[14],xmm1[15],xmm2[15]
+; SSE2-NOPCLMUL-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm5[8],xmm1[9],xmm5[9],xmm1[10],xmm5[10],xmm1[11],xmm5[11],xmm1[12],xmm5[12],xmm1[13],xmm5[13],xmm1[14],xmm5[14],xmm1[15],xmm5[15]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
 ; SSE2-NOPCLMUL-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[3,2,1,0,4,5,6,7]
-; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,6,5,4]
-; SSE2-NOPCLMUL-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
+; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm2 = xmm1[0,1,2,3,7,6,5,4]
+; SSE2-NOPCLMUL-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1],xmm0[2],xmm5[2],xmm0[3],xmm5[3],xmm0[4],xmm5[4],xmm0[5],xmm5[5],xmm0[6],xmm5[6],xmm0[7],xmm5[7]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
 ; SSE2-NOPCLMUL-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
-; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm3 = xmm0[0,1,2,3,7,6,5,4]
-; SSE2-NOPCLMUL-NEXT:    packuswb %xmm1, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm1 = xmm0[0,1,2,3,7,6,5,4]
+; SSE2-NOPCLMUL-NEXT:    packuswb %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psrlw $4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm3
-; SSE2-NOPCLMUL-NEXT:    psllw $4, %xmm3
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    psllw $4, %xmm1
+; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psrlw $2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm3
-; SSE2-NOPCLMUL-NEXT:    psllw $2, %xmm3
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm5
-; SSE2-NOPCLMUL-NEXT:    psrlw $1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm1
+; SSE2-NOPCLMUL-NEXT:    psllw $2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psrlw $1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm3
-; SSE2-NOPCLMUL-NEXT:    paddb %xmm3, %xmm3
-; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm5
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [4,4]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm1
+; SSE2-NOPCLMUL-NEXT:    paddb %xmm1, %xmm1
+; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [4,4]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm9
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    psrlq $32, %xmm9
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm7
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm7
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm7
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm7
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm12 = [2,2]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm12, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [8,8]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pand %xmm10, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm11 = [16,16]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm11, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm12 = [2,2]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pand %xmm12, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm7
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
-; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm7
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm11 = [64,64]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand %xmm11, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm15 = [512,512]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm15, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pand %xmm15, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm7
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
@@ -6614,216 +6620,217 @@ define void @commutative_clmulr_v2i64(<2 x i64> %x, <2 x i64> %y, ptr %p0, ptr %
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm14 = [4096,4096]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand %xmm14, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [8192,8192]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm14 = [4096,4096]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand %xmm14, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm6 = [8192,8192]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
-; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [65536,65536]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [131072,131072]
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [65536,65536]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [262144,262144]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [524288,524288]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm6 = [131072,131072]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [262144,262144]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pand %xmm10, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [1048576,1048576]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm6 = [524288,524288]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [1048576,1048576]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pand %xmm2, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm7
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [2097152,2097152]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [4194304,4194304]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [8388608,8388608]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [16777216,16777216]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [4194304,4194304]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm9, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [8388608,8388608]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [16777216,16777216]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [33554432,33554432]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, (%rsp) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [67108864,67108864]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm4, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    por %xmm4, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [134217728,134217728]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm4
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [134217728,134217728]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pand %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
-; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [268435456,268435456]
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pand %xmm0, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [536870912,536870912]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pand %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [536870912,536870912]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pand %xmm2, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm6
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm6
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    por %xmm6, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    por %xmm6, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
 ; SSE2-NOPCLMUL-NEXT:    psrlq $32, %xmm5
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [1,1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [1,1]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm12, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm12, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [8,8]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [16,16]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [32,32]
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [32,32]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm10
-; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [64,64]
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm11 = [128,128]
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm12 = [256,256]
@@ -6850,8 +6857,8 @@ define void @commutative_clmulr_v2i64(<2 x i64> %x, <2 x i64> %y, ptr %p0, ptr %
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm7
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
@@ -6887,18 +6894,19 @@ define void @commutative_clmulr_v2i64(<2 x i64> %x, <2 x i64> %y, ptr %p0, ptr %
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
 ; SSE2-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648]
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psrlq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psrlq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pand %xmm6, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm6 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm6
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm4
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm9, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm9
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm12
@@ -6962,23 +6970,23 @@ define void @commutative_clmulr_v2i64(<2 x i64> %x, <2 x i64> %y, ptr %p0, ptr %
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm14
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm8
 ; SSE2-NOPCLMUL-NEXT:    pmuludq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    por %xmm8, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    pxor {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm7
 ; SSE2-NOPCLMUL-NEXT:    pxor {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Folded Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm10
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm9
@@ -6987,85 +6995,85 @@ define void @commutative_clmulr_v2i64(<2 x i64> %x, <2 x i64> %y, ptr %p0, ptr %
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm11
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm12
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm12
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm2
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm13
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm13
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm13, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm13
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm0
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm13, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
-; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
 ; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
-; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
-; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm1
-; SSE2-NOPCLMUL-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
-; SSE2-NOPCLMUL-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3],xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm2
+; SSE2-NOPCLMUL-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]
+; SSE2-NOPCLMUL-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
 ; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
 ; SSE2-NOPCLMUL-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
-; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm1 = xmm0[0,1,2,3,7,6,5,4]
-; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[2,3,0,1]
+; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm2 = xmm0[0,1,2,3,7,6,5,4]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
 ; SSE2-NOPCLMUL-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
 ; SSE2-NOPCLMUL-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]
-; SSE2-NOPCLMUL-NEXT:    packuswb %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    packuswb %xmm2, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    psrlw $4, %xmm1
 ; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]



More information about the llvm-commits mailing list