[llvm] 61d5add - [X86] SimplifyDemandedBitsForTargetNode - call SimplifyMultipleUseDemandedBits on SSE shift-by-immediate nodes.
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 5 10:24:32 PST 2024
Author: Simon Pilgrim
Date: 2024-11-05T18:24:13Z
New Revision: 61d5addd942a5ef8128e48d3617419e6320d8280
URL: https://github.com/llvm/llvm-project/commit/61d5addd942a5ef8128e48d3617419e6320d8280
DIFF: https://github.com/llvm/llvm-project/commit/61d5addd942a5ef8128e48d3617419e6320d8280.diff
LOG: [X86] SimplifyDemandedBitsForTargetNode - call SimplifyMultipleUseDemandedBits on SSE shift-by-immediate nodes.
Attempt to peek through multiple-use SHLI/SRLI/SRAI source vectors.
Added:
Modified:
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/combine-sdiv.ll
llvm/test/CodeGen/X86/combine-srem.ll
llvm/test/CodeGen/X86/midpoint-int-vec-128.ll
llvm/test/CodeGen/X86/midpoint-int-vec-256.ll
llvm/test/CodeGen/X86/vector-bo-select.ll
llvm/test/CodeGen/X86/vector-fshr-128.ll
llvm/test/CodeGen/X86/vector-idiv-udiv-128.ll
llvm/test/CodeGen/X86/vector-idiv-udiv-256.ll
llvm/test/CodeGen/X86/vector-idiv-udiv-512.ll
llvm/test/CodeGen/X86/vector_splat-const-shift-of-constmasked.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 3c0c1d7f56869e..9de202d2a89afd 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -43418,6 +43418,16 @@ bool X86TargetLowering::SimplifyDemandedBitsForTargetNode(
// Low bits known zero.
Known.Zero.setLowBits(ShAmt);
+
+ if (!OriginalDemandedBits.isSubsetOf(Known.Zero | Known.One)) {
+ // Attempt to avoid multi-use ops if we don't need anything from them.
+ if (SDValue DemandedOp0 = SimplifyMultipleUseDemandedBits(
+ Op0, DemandedMask, OriginalDemandedElts, TLO.DAG, Depth + 1)) {
+ SDValue NewOp =
+ TLO.DAG.getNode(Op.getOpcode(), SDLoc(Op), VT, DemandedOp0, Op1);
+ return TLO.CombineTo(Op, NewOp);
+ }
+ }
return false;
}
case X86ISD::VSRLI: {
@@ -43439,6 +43449,16 @@ bool X86TargetLowering::SimplifyDemandedBitsForTargetNode(
// High bits known zero.
Known.Zero.setHighBits(ShAmt);
+
+ if (!OriginalDemandedBits.isSubsetOf(Known.Zero | Known.One)) {
+ // Attempt to avoid multi-use ops if we don't need anything from them.
+ if (SDValue DemandedOp0 = SimplifyMultipleUseDemandedBits(
+ Op0, DemandedMask, OriginalDemandedElts, TLO.DAG, Depth + 1)) {
+ SDValue NewOp =
+ TLO.DAG.getNode(Op.getOpcode(), SDLoc(Op), VT, DemandedOp0, Op1);
+ return TLO.CombineTo(Op, NewOp);
+ }
+ }
return false;
}
case X86ISD::VSRAI: {
@@ -43486,6 +43506,16 @@ bool X86TargetLowering::SimplifyDemandedBitsForTargetNode(
// High bits are known one.
if (Known.One[BitWidth - ShAmt - 1])
Known.One.setHighBits(ShAmt);
+
+ if (!OriginalDemandedBits.isSubsetOf(Known.Zero | Known.One)) {
+ // Attempt to avoid multi-use ops if we don't need anything from them.
+ if (SDValue DemandedOp0 = SimplifyMultipleUseDemandedBits(
+ Op0, DemandedMask, OriginalDemandedElts, TLO.DAG, Depth + 1)) {
+ SDValue NewOp =
+ TLO.DAG.getNode(Op.getOpcode(), SDLoc(Op), VT, DemandedOp0, Op1);
+ return TLO.CombineTo(Op, NewOp);
+ }
+ }
return false;
}
case X86ISD::BLENDV: {
diff --git a/llvm/test/CodeGen/X86/combine-sdiv.ll b/llvm/test/CodeGen/X86/combine-sdiv.ll
index 2f19d14ef42560..76f21604500482 100644
--- a/llvm/test/CodeGen/X86/combine-sdiv.ll
+++ b/llvm/test/CodeGen/X86/combine-sdiv.ll
@@ -1632,7 +1632,7 @@ define <4 x i64> @combine_vec_sdiv_by_pow2b_v4i64(<4 x i64> %x) {
; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
; SSE2-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]
; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3]
-; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]
+; SSE2-NEXT: movdqa %xmm1, %xmm2
; SSE2-NEXT: psrad $31, %xmm2
; SSE2-NEXT: movdqa %xmm2, %xmm3
; SSE2-NEXT: psrlq $61, %xmm3
@@ -1659,7 +1659,7 @@ define <4 x i64> @combine_vec_sdiv_by_pow2b_v4i64(<4 x i64> %x) {
; SSE41-NEXT: psrlq $2, %xmm2
; SSE41-NEXT: pblendw {{.*#+}} xmm2 = xmm2[0,1],xmm3[2,3],xmm2[4,5],xmm3[6,7]
; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7]
-; SSE41-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]
+; SSE41-NEXT: movdqa %xmm1, %xmm2
; SSE41-NEXT: psrad $31, %xmm2
; SSE41-NEXT: movdqa %xmm2, %xmm3
; SSE41-NEXT: psrlq $60, %xmm3
@@ -1775,7 +1775,7 @@ define <8 x i64> @combine_vec_sdiv_by_pow2b_v8i64(<8 x i64> %x) {
; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
; SSE2-NEXT: punpckldq {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1]
; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,1],xmm4[2,3]
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm1[1,1,3,3]
+; SSE2-NEXT: movdqa %xmm1, %xmm4
; SSE2-NEXT: psrad $31, %xmm4
; SSE2-NEXT: movdqa %xmm4, %xmm5
; SSE2-NEXT: psrlq $61, %xmm5
@@ -1789,7 +1789,7 @@ define <8 x i64> @combine_vec_sdiv_by_pow2b_v8i64(<8 x i64> %x) {
; SSE2-NEXT: movapd {{.*#+}} xmm4 = [1152921504606846976,576460752303423488]
; SSE2-NEXT: xorpd %xmm4, %xmm1
; SSE2-NEXT: psubq %xmm4, %xmm1
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm3[1,1,3,3]
+; SSE2-NEXT: movdqa %xmm3, %xmm5
; SSE2-NEXT: psrad $31, %xmm5
; SSE2-NEXT: movdqa %xmm5, %xmm6
; SSE2-NEXT: psrlq $61, %xmm6
@@ -1824,7 +1824,7 @@ define <8 x i64> @combine_vec_sdiv_by_pow2b_v8i64(<8 x i64> %x) {
; SSE41-NEXT: psrlq $2, %xmm4
; SSE41-NEXT: pblendw {{.*#+}} xmm4 = xmm4[0,1],xmm5[2,3],xmm4[4,5],xmm5[6,7]
; SSE41-NEXT: pblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm4[4,5,6,7]
-; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm1[1,1,3,3]
+; SSE41-NEXT: movdqa %xmm1, %xmm4
; SSE41-NEXT: psrad $31, %xmm4
; SSE41-NEXT: movdqa %xmm4, %xmm5
; SSE41-NEXT: psrlq $60, %xmm5
@@ -1838,7 +1838,7 @@ define <8 x i64> @combine_vec_sdiv_by_pow2b_v8i64(<8 x i64> %x) {
; SSE41-NEXT: movdqa {{.*#+}} xmm4 = [1152921504606846976,576460752303423488]
; SSE41-NEXT: pxor %xmm4, %xmm1
; SSE41-NEXT: psubq %xmm4, %xmm1
-; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm3[1,1,3,3]
+; SSE41-NEXT: movdqa %xmm3, %xmm5
; SSE41-NEXT: psrad $31, %xmm5
; SSE41-NEXT: movdqa %xmm5, %xmm6
; SSE41-NEXT: psrlq $60, %xmm6
diff --git a/llvm/test/CodeGen/X86/combine-srem.ll b/llvm/test/CodeGen/X86/combine-srem.ll
index 8bfaa6118b791c..4b01c16a6324e4 100644
--- a/llvm/test/CodeGen/X86/combine-srem.ll
+++ b/llvm/test/CodeGen/X86/combine-srem.ll
@@ -255,35 +255,35 @@ define <4 x i32> @combine_vec_srem_by_pow2b(<4 x i32> %x) {
; SSE-LABEL: combine_vec_srem_by_pow2b:
; SSE: # %bb.0:
; SSE-NEXT: movdqa %xmm0, %xmm1
-; SSE-NEXT: psrad $31, %xmm1
-; SSE-NEXT: movdqa %xmm1, %xmm2
-; SSE-NEXT: psrld $29, %xmm2
-; SSE-NEXT: movdqa %xmm1, %xmm3
-; SSE-NEXT: psrld $31, %xmm3
-; SSE-NEXT: pblendw {{.*#+}} xmm3 = xmm3[0,1,2,3],xmm2[4,5,6,7]
-; SSE-NEXT: psrld $30, %xmm1
-; SSE-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0,1],xmm3[2,3],xmm1[4,5],xmm3[6,7]
-; SSE-NEXT: paddd %xmm0, %xmm1
-; SSE-NEXT: movdqa %xmm1, %xmm2
-; SSE-NEXT: psrad $3, %xmm2
-; SSE-NEXT: movdqa %xmm1, %xmm3
+; SSE-NEXT: psrld $31, %xmm1
+; SSE-NEXT: movdqa %xmm0, %xmm2
+; SSE-NEXT: psrad $31, %xmm2
+; SSE-NEXT: movdqa %xmm2, %xmm3
+; SSE-NEXT: psrld $29, %xmm3
+; SSE-NEXT: pblendw {{.*#+}} xmm3 = xmm1[0,1,2,3],xmm3[4,5,6,7]
+; SSE-NEXT: psrld $30, %xmm2
+; SSE-NEXT: pblendw {{.*#+}} xmm2 = xmm2[0,1],xmm3[2,3],xmm2[4,5],xmm3[6,7]
+; SSE-NEXT: paddd %xmm0, %xmm2
+; SSE-NEXT: movdqa %xmm2, %xmm1
+; SSE-NEXT: psrad $3, %xmm1
+; SSE-NEXT: movdqa %xmm2, %xmm3
; SSE-NEXT: psrad $1, %xmm3
-; SSE-NEXT: pblendw {{.*#+}} xmm3 = xmm3[0,1,2,3],xmm2[4,5,6,7]
-; SSE-NEXT: psrad $2, %xmm1
-; SSE-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0,1],xmm3[2,3],xmm1[4,5],xmm3[6,7]
-; SSE-NEXT: pblendw {{.*#+}} xmm1 = xmm0[0,1],xmm1[2,3,4,5,6,7]
-; SSE-NEXT: pmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE-NEXT: psubd %xmm1, %xmm0
+; SSE-NEXT: pblendw {{.*#+}} xmm3 = xmm3[0,1,2,3],xmm1[4,5,6,7]
+; SSE-NEXT: psrad $2, %xmm2
+; SSE-NEXT: pblendw {{.*#+}} xmm2 = xmm2[0,1],xmm3[2,3],xmm2[4,5],xmm3[6,7]
+; SSE-NEXT: pblendw {{.*#+}} xmm2 = xmm0[0,1],xmm2[2,3,4,5,6,7]
+; SSE-NEXT: pmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE-NEXT: psubd %xmm2, %xmm0
; SSE-NEXT: retq
;
; AVX1-LABEL: combine_vec_srem_by_pow2b:
; AVX1: # %bb.0:
-; AVX1-NEXT: vpsrad $31, %xmm0, %xmm1
-; AVX1-NEXT: vpsrld $29, %xmm1, %xmm2
-; AVX1-NEXT: vpsrld $31, %xmm1, %xmm3
-; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7]
-; AVX1-NEXT: vpsrld $30, %xmm1, %xmm1
-; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]
+; AVX1-NEXT: vpsrld $31, %xmm0, %xmm1
+; AVX1-NEXT: vpsrad $31, %xmm0, %xmm2
+; AVX1-NEXT: vpsrld $29, %xmm2, %xmm3
+; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm3[4,5,6,7]
+; AVX1-NEXT: vpsrld $30, %xmm2, %xmm2
+; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm2[0,1],xmm1[2,3],xmm2[4,5],xmm1[6,7]
; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm1
; AVX1-NEXT: vpsrad $3, %xmm1, %xmm2
; AVX1-NEXT: vpsrad $1, %xmm1, %xmm3
@@ -320,10 +320,10 @@ define <4 x i32> @combine_vec_srem_by_pow2b_neg(<4 x i32> %x) {
; SSE-NEXT: movdqa %xmm1, %xmm3
; SSE-NEXT: psrld $30, %xmm3
; SSE-NEXT: pblendw {{.*#+}} xmm3 = xmm3[0,1,2,3],xmm2[4,5,6,7]
-; SSE-NEXT: movdqa %xmm1, %xmm2
-; SSE-NEXT: psrld $29, %xmm2
-; SSE-NEXT: psrld $31, %xmm1
-; SSE-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5,6,7]
+; SSE-NEXT: movdqa %xmm0, %xmm2
+; SSE-NEXT: psrld $31, %xmm2
+; SSE-NEXT: psrld $29, %xmm1
+; SSE-NEXT: pblendw {{.*#+}} xmm1 = xmm2[0,1,2,3],xmm1[4,5,6,7]
; SSE-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0,1],xmm3[2,3],xmm1[4,5],xmm3[6,7]
; SSE-NEXT: paddd %xmm0, %xmm1
; SSE-NEXT: movdqa %xmm1, %xmm2
@@ -346,9 +346,9 @@ define <4 x i32> @combine_vec_srem_by_pow2b_neg(<4 x i32> %x) {
; AVX1-NEXT: vpsrld $28, %xmm1, %xmm2
; AVX1-NEXT: vpsrld $30, %xmm1, %xmm3
; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7]
-; AVX1-NEXT: vpsrld $29, %xmm1, %xmm3
-; AVX1-NEXT: vpsrld $31, %xmm1, %xmm1
-; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm3[4,5,6,7]
+; AVX1-NEXT: vpsrld $31, %xmm0, %xmm3
+; AVX1-NEXT: vpsrld $29, %xmm1, %xmm1
+; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm3[0,1,2,3],xmm1[4,5,6,7]
; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]
; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm1
; AVX1-NEXT: vpsrad $4, %xmm1, %xmm2
diff --git a/llvm/test/CodeGen/X86/midpoint-int-vec-128.ll b/llvm/test/CodeGen/X86/midpoint-int-vec-128.ll
index ee83a79b6dd550..ac6b7e54ca5b5f 100644
--- a/llvm/test/CodeGen/X86/midpoint-int-vec-128.ll
+++ b/llvm/test/CodeGen/X86/midpoint-int-vec-128.ll
@@ -848,19 +848,19 @@ define <2 x i64> @vec128_i64_signed_reg_reg(<2 x i64> %a1, <2 x i64> %a2) nounwi
; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [1,1]
; SSE2-NEXT: por %xmm2, %xmm1
; SSE2-NEXT: pxor %xmm2, %xmm3
-; SSE2-NEXT: psubq %xmm3, %xmm2
-; SSE2-NEXT: movdqa %xmm2, %xmm3
+; SSE2-NEXT: movdqa %xmm2, %xmm4
+; SSE2-NEXT: psubq %xmm3, %xmm4
+; SSE2-NEXT: movdqa %xmm4, %xmm3
; SSE2-NEXT: psrlq $1, %xmm3
-; SSE2-NEXT: psrlq $33, %xmm2
-; SSE2-NEXT: pmuludq %xmm1, %xmm2
-; SSE2-NEXT: movdqa %xmm1, %xmm4
-; SSE2-NEXT: psrlq $32, %xmm4
-; SSE2-NEXT: pmuludq %xmm3, %xmm4
-; SSE2-NEXT: paddq %xmm2, %xmm4
-; SSE2-NEXT: psllq $32, %xmm4
+; SSE2-NEXT: psrlq $33, %xmm4
+; SSE2-NEXT: pmuludq %xmm1, %xmm4
+; SSE2-NEXT: psrlq $32, %xmm2
+; SSE2-NEXT: pmuludq %xmm3, %xmm2
+; SSE2-NEXT: paddq %xmm4, %xmm2
+; SSE2-NEXT: psllq $32, %xmm2
; SSE2-NEXT: pmuludq %xmm1, %xmm3
; SSE2-NEXT: paddq %xmm3, %xmm0
-; SSE2-NEXT: paddq %xmm4, %xmm0
+; SSE2-NEXT: paddq %xmm2, %xmm0
; SSE2-NEXT: retq
;
; SSE41-LABEL: vec128_i64_signed_reg_reg:
@@ -881,19 +881,19 @@ define <2 x i64> @vec128_i64_signed_reg_reg(<2 x i64> %a1, <2 x i64> %a2) nounwi
; SSE41-NEXT: pmovsxbq {{.*#+}} xmm1 = [1,1]
; SSE41-NEXT: por %xmm2, %xmm1
; SSE41-NEXT: pxor %xmm2, %xmm3
-; SSE41-NEXT: psubq %xmm3, %xmm2
-; SSE41-NEXT: movdqa %xmm2, %xmm3
+; SSE41-NEXT: movdqa %xmm2, %xmm4
+; SSE41-NEXT: psubq %xmm3, %xmm4
+; SSE41-NEXT: movdqa %xmm4, %xmm3
; SSE41-NEXT: psrlq $1, %xmm3
-; SSE41-NEXT: psrlq $33, %xmm2
-; SSE41-NEXT: pmuludq %xmm1, %xmm2
-; SSE41-NEXT: movdqa %xmm1, %xmm4
-; SSE41-NEXT: psrlq $32, %xmm4
-; SSE41-NEXT: pmuludq %xmm3, %xmm4
-; SSE41-NEXT: paddq %xmm2, %xmm4
-; SSE41-NEXT: psllq $32, %xmm4
+; SSE41-NEXT: psrlq $33, %xmm4
+; SSE41-NEXT: pmuludq %xmm1, %xmm4
+; SSE41-NEXT: psrlq $32, %xmm2
+; SSE41-NEXT: pmuludq %xmm3, %xmm2
+; SSE41-NEXT: paddq %xmm4, %xmm2
+; SSE41-NEXT: psllq $32, %xmm2
; SSE41-NEXT: pmuludq %xmm1, %xmm3
; SSE41-NEXT: paddq %xmm3, %xmm0
-; SSE41-NEXT: paddq %xmm4, %xmm0
+; SSE41-NEXT: paddq %xmm2, %xmm0
; SSE41-NEXT: retq
;
; AVX-LABEL: vec128_i64_signed_reg_reg:
@@ -903,14 +903,14 @@ define <2 x i64> @vec128_i64_signed_reg_reg(<2 x i64> %a1, <2 x i64> %a2) nounwi
; AVX-NEXT: vpsubq %xmm1, %xmm0, %xmm1
; AVX-NEXT: vpxor %xmm2, %xmm1, %xmm1
; AVX-NEXT: vpsubq %xmm1, %xmm2, %xmm1
-; AVX-NEXT: vpsrlq $1, %xmm1, %xmm2
+; AVX-NEXT: vpsrlq $1, %xmm1, %xmm4
; AVX-NEXT: vpsrlq $33, %xmm1, %xmm1
; AVX-NEXT: vpmuludq %xmm3, %xmm1, %xmm1
-; AVX-NEXT: vpsrlq $32, %xmm3, %xmm4
-; AVX-NEXT: vpmuludq %xmm4, %xmm2, %xmm4
-; AVX-NEXT: vpaddq %xmm1, %xmm4, %xmm1
+; AVX-NEXT: vpsrlq $32, %xmm2, %xmm2
+; AVX-NEXT: vpmuludq %xmm2, %xmm4, %xmm2
+; AVX-NEXT: vpaddq %xmm1, %xmm2, %xmm1
; AVX-NEXT: vpsllq $32, %xmm1, %xmm1
-; AVX-NEXT: vpmuludq %xmm3, %xmm2, %xmm2
+; AVX-NEXT: vpmuludq %xmm3, %xmm4, %xmm2
; AVX-NEXT: vpaddq %xmm0, %xmm2, %xmm0
; AVX-NEXT: vpaddq %xmm1, %xmm0, %xmm0
; AVX-NEXT: retq
@@ -922,14 +922,14 @@ define <2 x i64> @vec128_i64_signed_reg_reg(<2 x i64> %a1, <2 x i64> %a2) nounwi
; XOP-NEXT: vpsubq %xmm1, %xmm0, %xmm1
; XOP-NEXT: vpxor %xmm2, %xmm1, %xmm1
; XOP-NEXT: vpsubq %xmm1, %xmm2, %xmm1
-; XOP-NEXT: vpsrlq $1, %xmm1, %xmm2
+; XOP-NEXT: vpsrlq $1, %xmm1, %xmm4
; XOP-NEXT: vpsrlq $33, %xmm1, %xmm1
; XOP-NEXT: vpmuludq %xmm3, %xmm1, %xmm1
-; XOP-NEXT: vpsrlq $32, %xmm3, %xmm4
-; XOP-NEXT: vpmuludq %xmm4, %xmm2, %xmm4
-; XOP-NEXT: vpaddq %xmm1, %xmm4, %xmm1
+; XOP-NEXT: vpsrlq $32, %xmm2, %xmm2
+; XOP-NEXT: vpmuludq %xmm2, %xmm4, %xmm2
+; XOP-NEXT: vpaddq %xmm1, %xmm2, %xmm1
; XOP-NEXT: vpsllq $32, %xmm1, %xmm1
-; XOP-NEXT: vpmuludq %xmm3, %xmm2, %xmm2
+; XOP-NEXT: vpmuludq %xmm3, %xmm4, %xmm2
; XOP-NEXT: vpaddq %xmm0, %xmm2, %xmm0
; XOP-NEXT: vpaddq %xmm1, %xmm0, %xmm0
; XOP-NEXT: retq
@@ -1023,19 +1023,19 @@ define <2 x i64> @vec128_i64_unsigned_reg_reg(<2 x i64> %a1, <2 x i64> %a2) noun
; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [1,1]
; SSE2-NEXT: por %xmm2, %xmm1
; SSE2-NEXT: pxor %xmm2, %xmm3
-; SSE2-NEXT: psubq %xmm3, %xmm2
-; SSE2-NEXT: movdqa %xmm2, %xmm3
+; SSE2-NEXT: movdqa %xmm2, %xmm4
+; SSE2-NEXT: psubq %xmm3, %xmm4
+; SSE2-NEXT: movdqa %xmm4, %xmm3
; SSE2-NEXT: psrlq $1, %xmm3
-; SSE2-NEXT: psrlq $33, %xmm2
-; SSE2-NEXT: pmuludq %xmm1, %xmm2
-; SSE2-NEXT: movdqa %xmm1, %xmm4
-; SSE2-NEXT: psrlq $32, %xmm4
-; SSE2-NEXT: pmuludq %xmm3, %xmm4
-; SSE2-NEXT: paddq %xmm2, %xmm4
-; SSE2-NEXT: psllq $32, %xmm4
+; SSE2-NEXT: psrlq $33, %xmm4
+; SSE2-NEXT: pmuludq %xmm1, %xmm4
+; SSE2-NEXT: psrlq $32, %xmm2
+; SSE2-NEXT: pmuludq %xmm3, %xmm2
+; SSE2-NEXT: paddq %xmm4, %xmm2
+; SSE2-NEXT: psllq $32, %xmm2
; SSE2-NEXT: pmuludq %xmm1, %xmm3
; SSE2-NEXT: paddq %xmm3, %xmm0
-; SSE2-NEXT: paddq %xmm4, %xmm0
+; SSE2-NEXT: paddq %xmm2, %xmm0
; SSE2-NEXT: retq
;
; SSE41-LABEL: vec128_i64_unsigned_reg_reg:
@@ -1056,19 +1056,19 @@ define <2 x i64> @vec128_i64_unsigned_reg_reg(<2 x i64> %a1, <2 x i64> %a2) noun
; SSE41-NEXT: pmovsxbq {{.*#+}} xmm1 = [1,1]
; SSE41-NEXT: por %xmm2, %xmm1
; SSE41-NEXT: pxor %xmm2, %xmm3
-; SSE41-NEXT: psubq %xmm3, %xmm2
-; SSE41-NEXT: movdqa %xmm2, %xmm3
+; SSE41-NEXT: movdqa %xmm2, %xmm4
+; SSE41-NEXT: psubq %xmm3, %xmm4
+; SSE41-NEXT: movdqa %xmm4, %xmm3
; SSE41-NEXT: psrlq $1, %xmm3
-; SSE41-NEXT: psrlq $33, %xmm2
-; SSE41-NEXT: pmuludq %xmm1, %xmm2
-; SSE41-NEXT: movdqa %xmm1, %xmm4
-; SSE41-NEXT: psrlq $32, %xmm4
-; SSE41-NEXT: pmuludq %xmm3, %xmm4
-; SSE41-NEXT: paddq %xmm2, %xmm4
-; SSE41-NEXT: psllq $32, %xmm4
+; SSE41-NEXT: psrlq $33, %xmm4
+; SSE41-NEXT: pmuludq %xmm1, %xmm4
+; SSE41-NEXT: psrlq $32, %xmm2
+; SSE41-NEXT: pmuludq %xmm3, %xmm2
+; SSE41-NEXT: paddq %xmm4, %xmm2
+; SSE41-NEXT: psllq $32, %xmm2
; SSE41-NEXT: pmuludq %xmm1, %xmm3
; SSE41-NEXT: paddq %xmm3, %xmm0
-; SSE41-NEXT: paddq %xmm4, %xmm0
+; SSE41-NEXT: paddq %xmm2, %xmm0
; SSE41-NEXT: retq
;
; AVX1-LABEL: vec128_i64_unsigned_reg_reg:
@@ -1082,14 +1082,14 @@ define <2 x i64> @vec128_i64_unsigned_reg_reg(<2 x i64> %a1, <2 x i64> %a2) noun
; AVX1-NEXT: vpsubq %xmm1, %xmm0, %xmm1
; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm1
; AVX1-NEXT: vpsubq %xmm1, %xmm2, %xmm1
-; AVX1-NEXT: vpsrlq $1, %xmm1, %xmm2
+; AVX1-NEXT: vpsrlq $1, %xmm1, %xmm4
; AVX1-NEXT: vpsrlq $33, %xmm1, %xmm1
; AVX1-NEXT: vpmuludq %xmm3, %xmm1, %xmm1
-; AVX1-NEXT: vpsrlq $32, %xmm3, %xmm4
-; AVX1-NEXT: vpmuludq %xmm4, %xmm2, %xmm4
-; AVX1-NEXT: vpaddq %xmm1, %xmm4, %xmm1
+; AVX1-NEXT: vpsrlq $32, %xmm2, %xmm2
+; AVX1-NEXT: vpmuludq %xmm2, %xmm4, %xmm2
+; AVX1-NEXT: vpaddq %xmm1, %xmm2, %xmm1
; AVX1-NEXT: vpsllq $32, %xmm1, %xmm1
-; AVX1-NEXT: vpmuludq %xmm3, %xmm2, %xmm2
+; AVX1-NEXT: vpmuludq %xmm3, %xmm4, %xmm2
; AVX1-NEXT: vpaddq %xmm0, %xmm2, %xmm0
; AVX1-NEXT: vpaddq %xmm1, %xmm0, %xmm0
; AVX1-NEXT: retq
@@ -1104,14 +1104,14 @@ define <2 x i64> @vec128_i64_unsigned_reg_reg(<2 x i64> %a1, <2 x i64> %a2) noun
; AVX2-NEXT: vpsubq %xmm1, %xmm0, %xmm1
; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm1
; AVX2-NEXT: vpsubq %xmm1, %xmm2, %xmm1
-; AVX2-NEXT: vpsrlq $1, %xmm1, %xmm2
+; AVX2-NEXT: vpsrlq $1, %xmm1, %xmm4
; AVX2-NEXT: vpsrlq $33, %xmm1, %xmm1
; AVX2-NEXT: vpmuludq %xmm3, %xmm1, %xmm1
-; AVX2-NEXT: vpsrlq $32, %xmm3, %xmm4
-; AVX2-NEXT: vpmuludq %xmm4, %xmm2, %xmm4
-; AVX2-NEXT: vpaddq %xmm1, %xmm4, %xmm1
+; AVX2-NEXT: vpsrlq $32, %xmm2, %xmm2
+; AVX2-NEXT: vpmuludq %xmm2, %xmm4, %xmm2
+; AVX2-NEXT: vpaddq %xmm1, %xmm2, %xmm1
; AVX2-NEXT: vpsllq $32, %xmm1, %xmm1
-; AVX2-NEXT: vpmuludq %xmm3, %xmm2, %xmm2
+; AVX2-NEXT: vpmuludq %xmm3, %xmm4, %xmm2
; AVX2-NEXT: vpaddq %xmm0, %xmm2, %xmm0
; AVX2-NEXT: vpaddq %xmm1, %xmm0, %xmm0
; AVX2-NEXT: retq
@@ -1123,14 +1123,14 @@ define <2 x i64> @vec128_i64_unsigned_reg_reg(<2 x i64> %a1, <2 x i64> %a2) noun
; XOP-NEXT: vpsubq %xmm1, %xmm0, %xmm1
; XOP-NEXT: vpxor %xmm2, %xmm1, %xmm1
; XOP-NEXT: vpsubq %xmm1, %xmm2, %xmm1
-; XOP-NEXT: vpsrlq $1, %xmm1, %xmm2
+; XOP-NEXT: vpsrlq $1, %xmm1, %xmm4
; XOP-NEXT: vpsrlq $33, %xmm1, %xmm1
; XOP-NEXT: vpmuludq %xmm3, %xmm1, %xmm1
-; XOP-NEXT: vpsrlq $32, %xmm3, %xmm4
-; XOP-NEXT: vpmuludq %xmm4, %xmm2, %xmm4
-; XOP-NEXT: vpaddq %xmm1, %xmm4, %xmm1
+; XOP-NEXT: vpsrlq $32, %xmm2, %xmm2
+; XOP-NEXT: vpmuludq %xmm2, %xmm4, %xmm2
+; XOP-NEXT: vpaddq %xmm1, %xmm2, %xmm1
; XOP-NEXT: vpsllq $32, %xmm1, %xmm1
-; XOP-NEXT: vpmuludq %xmm3, %xmm2, %xmm2
+; XOP-NEXT: vpmuludq %xmm3, %xmm4, %xmm2
; XOP-NEXT: vpaddq %xmm0, %xmm2, %xmm0
; XOP-NEXT: vpaddq %xmm1, %xmm0, %xmm0
; XOP-NEXT: retq
@@ -1227,19 +1227,19 @@ define <2 x i64> @vec128_i64_signed_mem_reg(ptr %a1_addr, <2 x i64> %a2) nounwin
; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [1,1]
; SSE2-NEXT: por %xmm2, %xmm4
; SSE2-NEXT: pxor %xmm2, %xmm3
-; SSE2-NEXT: psubq %xmm3, %xmm2
-; SSE2-NEXT: movdqa %xmm2, %xmm0
+; SSE2-NEXT: movdqa %xmm2, %xmm5
+; SSE2-NEXT: psubq %xmm3, %xmm5
+; SSE2-NEXT: movdqa %xmm5, %xmm0
; SSE2-NEXT: psrlq $1, %xmm0
-; SSE2-NEXT: psrlq $33, %xmm2
-; SSE2-NEXT: pmuludq %xmm4, %xmm2
-; SSE2-NEXT: movdqa %xmm4, %xmm3
-; SSE2-NEXT: psrlq $32, %xmm3
-; SSE2-NEXT: pmuludq %xmm0, %xmm3
-; SSE2-NEXT: paddq %xmm2, %xmm3
-; SSE2-NEXT: psllq $32, %xmm3
+; SSE2-NEXT: psrlq $33, %xmm5
+; SSE2-NEXT: pmuludq %xmm4, %xmm5
+; SSE2-NEXT: psrlq $32, %xmm2
+; SSE2-NEXT: pmuludq %xmm0, %xmm2
+; SSE2-NEXT: paddq %xmm5, %xmm2
+; SSE2-NEXT: psllq $32, %xmm2
; SSE2-NEXT: pmuludq %xmm4, %xmm0
; SSE2-NEXT: paddq %xmm1, %xmm0
-; SSE2-NEXT: paddq %xmm3, %xmm0
+; SSE2-NEXT: paddq %xmm2, %xmm0
; SSE2-NEXT: retq
;
; SSE41-LABEL: vec128_i64_signed_mem_reg:
@@ -1261,19 +1261,19 @@ define <2 x i64> @vec128_i64_signed_mem_reg(ptr %a1_addr, <2 x i64> %a2) nounwin
; SSE41-NEXT: pmovsxbq {{.*#+}} xmm4 = [1,1]
; SSE41-NEXT: por %xmm2, %xmm4
; SSE41-NEXT: pxor %xmm2, %xmm3
-; SSE41-NEXT: psubq %xmm3, %xmm2
-; SSE41-NEXT: movdqa %xmm2, %xmm0
+; SSE41-NEXT: movdqa %xmm2, %xmm5
+; SSE41-NEXT: psubq %xmm3, %xmm5
+; SSE41-NEXT: movdqa %xmm5, %xmm0
; SSE41-NEXT: psrlq $1, %xmm0
-; SSE41-NEXT: psrlq $33, %xmm2
-; SSE41-NEXT: pmuludq %xmm4, %xmm2
-; SSE41-NEXT: movdqa %xmm4, %xmm3
-; SSE41-NEXT: psrlq $32, %xmm3
-; SSE41-NEXT: pmuludq %xmm0, %xmm3
-; SSE41-NEXT: paddq %xmm2, %xmm3
-; SSE41-NEXT: psllq $32, %xmm3
+; SSE41-NEXT: psrlq $33, %xmm5
+; SSE41-NEXT: pmuludq %xmm4, %xmm5
+; SSE41-NEXT: psrlq $32, %xmm2
+; SSE41-NEXT: pmuludq %xmm0, %xmm2
+; SSE41-NEXT: paddq %xmm5, %xmm2
+; SSE41-NEXT: psllq $32, %xmm2
; SSE41-NEXT: pmuludq %xmm4, %xmm0
; SSE41-NEXT: paddq %xmm1, %xmm0
-; SSE41-NEXT: paddq %xmm3, %xmm0
+; SSE41-NEXT: paddq %xmm2, %xmm0
; SSE41-NEXT: retq
;
; AVX-LABEL: vec128_i64_signed_mem_reg:
@@ -1284,14 +1284,14 @@ define <2 x i64> @vec128_i64_signed_mem_reg(ptr %a1_addr, <2 x i64> %a2) nounwin
; AVX-NEXT: vpsubq %xmm0, %xmm1, %xmm0
; AVX-NEXT: vpxor %xmm2, %xmm0, %xmm0
; AVX-NEXT: vpsubq %xmm0, %xmm2, %xmm0
-; AVX-NEXT: vpsrlq $1, %xmm0, %xmm2
+; AVX-NEXT: vpsrlq $1, %xmm0, %xmm4
; AVX-NEXT: vpsrlq $33, %xmm0, %xmm0
; AVX-NEXT: vpmuludq %xmm3, %xmm0, %xmm0
-; AVX-NEXT: vpsrlq $32, %xmm3, %xmm4
-; AVX-NEXT: vpmuludq %xmm4, %xmm2, %xmm4
-; AVX-NEXT: vpaddq %xmm0, %xmm4, %xmm0
+; AVX-NEXT: vpsrlq $32, %xmm2, %xmm2
+; AVX-NEXT: vpmuludq %xmm2, %xmm4, %xmm2
+; AVX-NEXT: vpaddq %xmm0, %xmm2, %xmm0
; AVX-NEXT: vpsllq $32, %xmm0, %xmm0
-; AVX-NEXT: vpmuludq %xmm3, %xmm2, %xmm2
+; AVX-NEXT: vpmuludq %xmm3, %xmm4, %xmm2
; AVX-NEXT: vpaddq %xmm1, %xmm2, %xmm1
; AVX-NEXT: vpaddq %xmm0, %xmm1, %xmm0
; AVX-NEXT: retq
@@ -1304,14 +1304,14 @@ define <2 x i64> @vec128_i64_signed_mem_reg(ptr %a1_addr, <2 x i64> %a2) nounwin
; XOP-NEXT: vpsubq %xmm0, %xmm1, %xmm0
; XOP-NEXT: vpxor %xmm2, %xmm0, %xmm0
; XOP-NEXT: vpsubq %xmm0, %xmm2, %xmm0
-; XOP-NEXT: vpsrlq $1, %xmm0, %xmm2
+; XOP-NEXT: vpsrlq $1, %xmm0, %xmm4
; XOP-NEXT: vpsrlq $33, %xmm0, %xmm0
; XOP-NEXT: vpmuludq %xmm3, %xmm0, %xmm0
-; XOP-NEXT: vpsrlq $32, %xmm3, %xmm4
-; XOP-NEXT: vpmuludq %xmm4, %xmm2, %xmm4
-; XOP-NEXT: vpaddq %xmm0, %xmm4, %xmm0
+; XOP-NEXT: vpsrlq $32, %xmm2, %xmm2
+; XOP-NEXT: vpmuludq %xmm2, %xmm4, %xmm2
+; XOP-NEXT: vpaddq %xmm0, %xmm2, %xmm0
; XOP-NEXT: vpsllq $32, %xmm0, %xmm0
-; XOP-NEXT: vpmuludq %xmm3, %xmm2, %xmm2
+; XOP-NEXT: vpmuludq %xmm3, %xmm4, %xmm2
; XOP-NEXT: vpaddq %xmm1, %xmm2, %xmm1
; XOP-NEXT: vpaddq %xmm0, %xmm1, %xmm0
; XOP-NEXT: retq
@@ -1409,19 +1409,19 @@ define <2 x i64> @vec128_i64_signed_reg_mem(<2 x i64> %a1, ptr %a2_addr) nounwin
; SSE2-NEXT: movdqa %xmm0, %xmm4
; SSE2-NEXT: psubq %xmm1, %xmm4
; SSE2-NEXT: pxor %xmm3, %xmm4
-; SSE2-NEXT: psubq %xmm4, %xmm3
; SSE2-NEXT: movdqa %xmm3, %xmm1
-; SSE2-NEXT: psrlq $1, %xmm1
-; SSE2-NEXT: psrlq $33, %xmm3
-; SSE2-NEXT: pmuludq %xmm2, %xmm3
-; SSE2-NEXT: movdqa %xmm2, %xmm4
-; SSE2-NEXT: psrlq $32, %xmm4
-; SSE2-NEXT: pmuludq %xmm1, %xmm4
-; SSE2-NEXT: paddq %xmm3, %xmm4
-; SSE2-NEXT: psllq $32, %xmm4
+; SSE2-NEXT: psubq %xmm4, %xmm1
+; SSE2-NEXT: movdqa %xmm1, %xmm4
+; SSE2-NEXT: psrlq $1, %xmm4
+; SSE2-NEXT: psrlq $33, %xmm1
; SSE2-NEXT: pmuludq %xmm2, %xmm1
-; SSE2-NEXT: paddq %xmm1, %xmm0
+; SSE2-NEXT: psrlq $32, %xmm3
+; SSE2-NEXT: pmuludq %xmm4, %xmm3
+; SSE2-NEXT: paddq %xmm1, %xmm3
+; SSE2-NEXT: psllq $32, %xmm3
+; SSE2-NEXT: pmuludq %xmm2, %xmm4
; SSE2-NEXT: paddq %xmm4, %xmm0
+; SSE2-NEXT: paddq %xmm3, %xmm0
; SSE2-NEXT: retq
;
; SSE41-LABEL: vec128_i64_signed_reg_mem:
@@ -1444,19 +1444,19 @@ define <2 x i64> @vec128_i64_signed_reg_mem(<2 x i64> %a1, ptr %a2_addr) nounwin
; SSE41-NEXT: movdqa %xmm0, %xmm4
; SSE41-NEXT: psubq %xmm1, %xmm4
; SSE41-NEXT: pxor %xmm3, %xmm4
-; SSE41-NEXT: psubq %xmm4, %xmm3
; SSE41-NEXT: movdqa %xmm3, %xmm1
-; SSE41-NEXT: psrlq $1, %xmm1
-; SSE41-NEXT: psrlq $33, %xmm3
-; SSE41-NEXT: pmuludq %xmm2, %xmm3
-; SSE41-NEXT: movdqa %xmm2, %xmm4
-; SSE41-NEXT: psrlq $32, %xmm4
-; SSE41-NEXT: pmuludq %xmm1, %xmm4
-; SSE41-NEXT: paddq %xmm3, %xmm4
-; SSE41-NEXT: psllq $32, %xmm4
+; SSE41-NEXT: psubq %xmm4, %xmm1
+; SSE41-NEXT: movdqa %xmm1, %xmm4
+; SSE41-NEXT: psrlq $1, %xmm4
+; SSE41-NEXT: psrlq $33, %xmm1
; SSE41-NEXT: pmuludq %xmm2, %xmm1
-; SSE41-NEXT: paddq %xmm1, %xmm0
+; SSE41-NEXT: psrlq $32, %xmm3
+; SSE41-NEXT: pmuludq %xmm4, %xmm3
+; SSE41-NEXT: paddq %xmm1, %xmm3
+; SSE41-NEXT: psllq $32, %xmm3
+; SSE41-NEXT: pmuludq %xmm2, %xmm4
; SSE41-NEXT: paddq %xmm4, %xmm0
+; SSE41-NEXT: paddq %xmm3, %xmm0
; SSE41-NEXT: retq
;
; AVX-LABEL: vec128_i64_signed_reg_mem:
@@ -1467,14 +1467,14 @@ define <2 x i64> @vec128_i64_signed_reg_mem(<2 x i64> %a1, ptr %a2_addr) nounwin
; AVX-NEXT: vpsubq %xmm1, %xmm0, %xmm1
; AVX-NEXT: vpxor %xmm2, %xmm1, %xmm1
; AVX-NEXT: vpsubq %xmm1, %xmm2, %xmm1
-; AVX-NEXT: vpsrlq $1, %xmm1, %xmm2
+; AVX-NEXT: vpsrlq $1, %xmm1, %xmm4
; AVX-NEXT: vpsrlq $33, %xmm1, %xmm1
; AVX-NEXT: vpmuludq %xmm3, %xmm1, %xmm1
-; AVX-NEXT: vpsrlq $32, %xmm3, %xmm4
-; AVX-NEXT: vpmuludq %xmm4, %xmm2, %xmm4
-; AVX-NEXT: vpaddq %xmm1, %xmm4, %xmm1
+; AVX-NEXT: vpsrlq $32, %xmm2, %xmm2
+; AVX-NEXT: vpmuludq %xmm2, %xmm4, %xmm2
+; AVX-NEXT: vpaddq %xmm1, %xmm2, %xmm1
; AVX-NEXT: vpsllq $32, %xmm1, %xmm1
-; AVX-NEXT: vpmuludq %xmm3, %xmm2, %xmm2
+; AVX-NEXT: vpmuludq %xmm3, %xmm4, %xmm2
; AVX-NEXT: vpaddq %xmm0, %xmm2, %xmm0
; AVX-NEXT: vpaddq %xmm1, %xmm0, %xmm0
; AVX-NEXT: retq
@@ -1487,14 +1487,14 @@ define <2 x i64> @vec128_i64_signed_reg_mem(<2 x i64> %a1, ptr %a2_addr) nounwin
; XOP-NEXT: vpsubq %xmm1, %xmm0, %xmm1
; XOP-NEXT: vpxor %xmm2, %xmm1, %xmm1
; XOP-NEXT: vpsubq %xmm1, %xmm2, %xmm1
-; XOP-NEXT: vpsrlq $1, %xmm1, %xmm2
+; XOP-NEXT: vpsrlq $1, %xmm1, %xmm4
; XOP-NEXT: vpsrlq $33, %xmm1, %xmm1
; XOP-NEXT: vpmuludq %xmm3, %xmm1, %xmm1
-; XOP-NEXT: vpsrlq $32, %xmm3, %xmm4
-; XOP-NEXT: vpmuludq %xmm4, %xmm2, %xmm4
-; XOP-NEXT: vpaddq %xmm1, %xmm4, %xmm1
+; XOP-NEXT: vpsrlq $32, %xmm2, %xmm2
+; XOP-NEXT: vpmuludq %xmm2, %xmm4, %xmm2
+; XOP-NEXT: vpaddq %xmm1, %xmm2, %xmm1
; XOP-NEXT: vpsllq $32, %xmm1, %xmm1
-; XOP-NEXT: vpmuludq %xmm3, %xmm2, %xmm2
+; XOP-NEXT: vpmuludq %xmm3, %xmm4, %xmm2
; XOP-NEXT: vpaddq %xmm0, %xmm2, %xmm0
; XOP-NEXT: vpaddq %xmm1, %xmm0, %xmm0
; XOP-NEXT: retq
@@ -1592,19 +1592,19 @@ define <2 x i64> @vec128_i64_signed_mem_mem(ptr %a1_addr, ptr %a2_addr) nounwind
; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [1,1]
; SSE2-NEXT: por %xmm2, %xmm4
; SSE2-NEXT: pxor %xmm2, %xmm3
-; SSE2-NEXT: psubq %xmm3, %xmm2
-; SSE2-NEXT: movdqa %xmm2, %xmm0
+; SSE2-NEXT: movdqa %xmm2, %xmm5
+; SSE2-NEXT: psubq %xmm3, %xmm5
+; SSE2-NEXT: movdqa %xmm5, %xmm0
; SSE2-NEXT: psrlq $1, %xmm0
-; SSE2-NEXT: psrlq $33, %xmm2
-; SSE2-NEXT: pmuludq %xmm4, %xmm2
-; SSE2-NEXT: movdqa %xmm4, %xmm3
-; SSE2-NEXT: psrlq $32, %xmm3
-; SSE2-NEXT: pmuludq %xmm0, %xmm3
-; SSE2-NEXT: paddq %xmm2, %xmm3
-; SSE2-NEXT: psllq $32, %xmm3
+; SSE2-NEXT: psrlq $33, %xmm5
+; SSE2-NEXT: pmuludq %xmm4, %xmm5
+; SSE2-NEXT: psrlq $32, %xmm2
+; SSE2-NEXT: pmuludq %xmm0, %xmm2
+; SSE2-NEXT: paddq %xmm5, %xmm2
+; SSE2-NEXT: psllq $32, %xmm2
; SSE2-NEXT: pmuludq %xmm4, %xmm0
; SSE2-NEXT: paddq %xmm1, %xmm0
-; SSE2-NEXT: paddq %xmm3, %xmm0
+; SSE2-NEXT: paddq %xmm2, %xmm0
; SSE2-NEXT: retq
;
; SSE41-LABEL: vec128_i64_signed_mem_mem:
@@ -1627,19 +1627,19 @@ define <2 x i64> @vec128_i64_signed_mem_mem(ptr %a1_addr, ptr %a2_addr) nounwind
; SSE41-NEXT: pmovsxbq {{.*#+}} xmm4 = [1,1]
; SSE41-NEXT: por %xmm2, %xmm4
; SSE41-NEXT: pxor %xmm2, %xmm3
-; SSE41-NEXT: psubq %xmm3, %xmm2
-; SSE41-NEXT: movdqa %xmm2, %xmm0
+; SSE41-NEXT: movdqa %xmm2, %xmm5
+; SSE41-NEXT: psubq %xmm3, %xmm5
+; SSE41-NEXT: movdqa %xmm5, %xmm0
; SSE41-NEXT: psrlq $1, %xmm0
-; SSE41-NEXT: psrlq $33, %xmm2
-; SSE41-NEXT: pmuludq %xmm4, %xmm2
-; SSE41-NEXT: movdqa %xmm4, %xmm3
-; SSE41-NEXT: psrlq $32, %xmm3
-; SSE41-NEXT: pmuludq %xmm0, %xmm3
-; SSE41-NEXT: paddq %xmm2, %xmm3
-; SSE41-NEXT: psllq $32, %xmm3
+; SSE41-NEXT: psrlq $33, %xmm5
+; SSE41-NEXT: pmuludq %xmm4, %xmm5
+; SSE41-NEXT: psrlq $32, %xmm2
+; SSE41-NEXT: pmuludq %xmm0, %xmm2
+; SSE41-NEXT: paddq %xmm5, %xmm2
+; SSE41-NEXT: psllq $32, %xmm2
; SSE41-NEXT: pmuludq %xmm4, %xmm0
; SSE41-NEXT: paddq %xmm1, %xmm0
-; SSE41-NEXT: paddq %xmm3, %xmm0
+; SSE41-NEXT: paddq %xmm2, %xmm0
; SSE41-NEXT: retq
;
; AVX-LABEL: vec128_i64_signed_mem_mem:
@@ -1651,14 +1651,14 @@ define <2 x i64> @vec128_i64_signed_mem_mem(ptr %a1_addr, ptr %a2_addr) nounwind
; AVX-NEXT: vpsubq %xmm1, %xmm0, %xmm1
; AVX-NEXT: vpxor %xmm2, %xmm1, %xmm1
; AVX-NEXT: vpsubq %xmm1, %xmm2, %xmm1
-; AVX-NEXT: vpsrlq $1, %xmm1, %xmm2
+; AVX-NEXT: vpsrlq $1, %xmm1, %xmm4
; AVX-NEXT: vpsrlq $33, %xmm1, %xmm1
; AVX-NEXT: vpmuludq %xmm3, %xmm1, %xmm1
-; AVX-NEXT: vpsrlq $32, %xmm3, %xmm4
-; AVX-NEXT: vpmuludq %xmm4, %xmm2, %xmm4
-; AVX-NEXT: vpaddq %xmm1, %xmm4, %xmm1
+; AVX-NEXT: vpsrlq $32, %xmm2, %xmm2
+; AVX-NEXT: vpmuludq %xmm2, %xmm4, %xmm2
+; AVX-NEXT: vpaddq %xmm1, %xmm2, %xmm1
; AVX-NEXT: vpsllq $32, %xmm1, %xmm1
-; AVX-NEXT: vpmuludq %xmm3, %xmm2, %xmm2
+; AVX-NEXT: vpmuludq %xmm3, %xmm4, %xmm2
; AVX-NEXT: vpaddq %xmm0, %xmm2, %xmm0
; AVX-NEXT: vpaddq %xmm1, %xmm0, %xmm0
; AVX-NEXT: retq
@@ -1672,14 +1672,14 @@ define <2 x i64> @vec128_i64_signed_mem_mem(ptr %a1_addr, ptr %a2_addr) nounwind
; XOP-NEXT: vpsubq %xmm1, %xmm0, %xmm1
; XOP-NEXT: vpxor %xmm2, %xmm1, %xmm1
; XOP-NEXT: vpsubq %xmm1, %xmm2, %xmm1
-; XOP-NEXT: vpsrlq $1, %xmm1, %xmm2
+; XOP-NEXT: vpsrlq $1, %xmm1, %xmm4
; XOP-NEXT: vpsrlq $33, %xmm1, %xmm1
; XOP-NEXT: vpmuludq %xmm3, %xmm1, %xmm1
-; XOP-NEXT: vpsrlq $32, %xmm3, %xmm4
-; XOP-NEXT: vpmuludq %xmm4, %xmm2, %xmm4
-; XOP-NEXT: vpaddq %xmm1, %xmm4, %xmm1
+; XOP-NEXT: vpsrlq $32, %xmm2, %xmm2
+; XOP-NEXT: vpmuludq %xmm2, %xmm4, %xmm2
+; XOP-NEXT: vpaddq %xmm1, %xmm2, %xmm1
; XOP-NEXT: vpsllq $32, %xmm1, %xmm1
-; XOP-NEXT: vpmuludq %xmm3, %xmm2, %xmm2
+; XOP-NEXT: vpmuludq %xmm3, %xmm4, %xmm2
; XOP-NEXT: vpaddq %xmm0, %xmm2, %xmm0
; XOP-NEXT: vpaddq %xmm1, %xmm0, %xmm0
; XOP-NEXT: retq
diff --git a/llvm/test/CodeGen/X86/midpoint-int-vec-256.ll b/llvm/test/CodeGen/X86/midpoint-int-vec-256.ll
index b4e8f0a2301674..f6dc470c18a103 100644
--- a/llvm/test/CodeGen/X86/midpoint-int-vec-256.ll
+++ b/llvm/test/CodeGen/X86/midpoint-int-vec-256.ll
@@ -400,21 +400,21 @@ define <4 x i64> @vec256_i64_signed_reg_reg(<4 x i64> %a1, <4 x i64> %a2) nounwi
; AVX1-NEXT: vpsrlq $1, %xmm1, %xmm7
; AVX1-NEXT: vpsrlq $33, %xmm1, %xmm1
; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm8 = [1,1]
-; AVX1-NEXT: vpor %xmm5, %xmm8, %xmm5
-; AVX1-NEXT: vpmuludq %xmm5, %xmm1, %xmm1
-; AVX1-NEXT: vpsrlq $32, %xmm5, %xmm9
-; AVX1-NEXT: vpmuludq %xmm7, %xmm9, %xmm9
-; AVX1-NEXT: vpaddq %xmm1, %xmm9, %xmm1
-; AVX1-NEXT: vpsllq $32, %xmm1, %xmm1
+; AVX1-NEXT: vpor %xmm5, %xmm8, %xmm9
+; AVX1-NEXT: vpmuludq %xmm1, %xmm9, %xmm1
+; AVX1-NEXT: vpsrlq $32, %xmm5, %xmm5
; AVX1-NEXT: vpmuludq %xmm5, %xmm7, %xmm5
+; AVX1-NEXT: vpaddq %xmm1, %xmm5, %xmm1
+; AVX1-NEXT: vpsllq $32, %xmm1, %xmm1
+; AVX1-NEXT: vpmuludq %xmm7, %xmm9, %xmm5
; AVX1-NEXT: vpsrlq $33, %xmm2, %xmm2
-; AVX1-NEXT: vpor %xmm4, %xmm8, %xmm4
-; AVX1-NEXT: vpmuludq %xmm4, %xmm2, %xmm2
-; AVX1-NEXT: vpsrlq $32, %xmm4, %xmm7
-; AVX1-NEXT: vpmuludq %xmm7, %xmm6, %xmm7
-; AVX1-NEXT: vpaddq %xmm2, %xmm7, %xmm2
-; AVX1-NEXT: vpsllq $32, %xmm2, %xmm2
+; AVX1-NEXT: vpor %xmm4, %xmm8, %xmm7
+; AVX1-NEXT: vpmuludq %xmm7, %xmm2, %xmm2
+; AVX1-NEXT: vpsrlq $32, %xmm4, %xmm4
; AVX1-NEXT: vpmuludq %xmm4, %xmm6, %xmm4
+; AVX1-NEXT: vpaddq %xmm2, %xmm4, %xmm2
+; AVX1-NEXT: vpsllq $32, %xmm2, %xmm2
+; AVX1-NEXT: vpmuludq %xmm7, %xmm6, %xmm4
; AVX1-NEXT: vpaddq %xmm3, %xmm4, %xmm3
; AVX1-NEXT: vpaddq %xmm2, %xmm3, %xmm2
; AVX1-NEXT: vpaddq %xmm0, %xmm5, %xmm0
@@ -430,14 +430,14 @@ define <4 x i64> @vec256_i64_signed_reg_reg(<4 x i64> %a1, <4 x i64> %a2) nounwi
; AVX2-NEXT: vpsubq %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm1
; AVX2-NEXT: vpsubq %ymm1, %ymm2, %ymm1
-; AVX2-NEXT: vpsrlq $1, %ymm1, %ymm2
+; AVX2-NEXT: vpsrlq $1, %ymm1, %ymm4
; AVX2-NEXT: vpsrlq $33, %ymm1, %ymm1
; AVX2-NEXT: vpmuludq %ymm3, %ymm1, %ymm1
-; AVX2-NEXT: vpsrlq $32, %ymm3, %ymm4
-; AVX2-NEXT: vpmuludq %ymm4, %ymm2, %ymm4
-; AVX2-NEXT: vpaddq %ymm1, %ymm4, %ymm1
+; AVX2-NEXT: vpsrlq $32, %ymm2, %ymm2
+; AVX2-NEXT: vpmuludq %ymm2, %ymm4, %ymm2
+; AVX2-NEXT: vpaddq %ymm1, %ymm2, %ymm1
; AVX2-NEXT: vpsllq $32, %ymm1, %ymm1
-; AVX2-NEXT: vpmuludq %ymm3, %ymm2, %ymm2
+; AVX2-NEXT: vpmuludq %ymm3, %ymm4, %ymm2
; AVX2-NEXT: vpaddq %ymm0, %ymm2, %ymm0
; AVX2-NEXT: vpaddq %ymm1, %ymm0, %ymm0
; AVX2-NEXT: retq
@@ -458,21 +458,21 @@ define <4 x i64> @vec256_i64_signed_reg_reg(<4 x i64> %a1, <4 x i64> %a2) nounwi
; XOP-NEXT: vpsrlq $1, %xmm1, %xmm7
; XOP-NEXT: vpsrlq $33, %xmm1, %xmm1
; XOP-NEXT: vpmovsxbq {{.*#+}} xmm8 = [1,1]
-; XOP-NEXT: vpor %xmm5, %xmm8, %xmm5
-; XOP-NEXT: vpmuludq %xmm5, %xmm1, %xmm1
-; XOP-NEXT: vpsrlq $32, %xmm5, %xmm9
-; XOP-NEXT: vpmuludq %xmm7, %xmm9, %xmm9
-; XOP-NEXT: vpaddq %xmm1, %xmm9, %xmm1
-; XOP-NEXT: vpsllq $32, %xmm1, %xmm1
+; XOP-NEXT: vpor %xmm5, %xmm8, %xmm9
+; XOP-NEXT: vpmuludq %xmm1, %xmm9, %xmm1
+; XOP-NEXT: vpsrlq $32, %xmm5, %xmm5
; XOP-NEXT: vpmuludq %xmm5, %xmm7, %xmm5
+; XOP-NEXT: vpaddq %xmm1, %xmm5, %xmm1
+; XOP-NEXT: vpsllq $32, %xmm1, %xmm1
+; XOP-NEXT: vpmuludq %xmm7, %xmm9, %xmm5
; XOP-NEXT: vpsrlq $33, %xmm2, %xmm2
-; XOP-NEXT: vpor %xmm4, %xmm8, %xmm4
-; XOP-NEXT: vpmuludq %xmm4, %xmm2, %xmm2
-; XOP-NEXT: vpsrlq $32, %xmm4, %xmm7
-; XOP-NEXT: vpmuludq %xmm7, %xmm6, %xmm7
-; XOP-NEXT: vpaddq %xmm2, %xmm7, %xmm2
-; XOP-NEXT: vpsllq $32, %xmm2, %xmm2
+; XOP-NEXT: vpor %xmm4, %xmm8, %xmm7
+; XOP-NEXT: vpmuludq %xmm7, %xmm2, %xmm2
+; XOP-NEXT: vpsrlq $32, %xmm4, %xmm4
; XOP-NEXT: vpmuludq %xmm4, %xmm6, %xmm4
+; XOP-NEXT: vpaddq %xmm2, %xmm4, %xmm2
+; XOP-NEXT: vpsllq $32, %xmm2, %xmm2
+; XOP-NEXT: vpmuludq %xmm7, %xmm6, %xmm4
; XOP-NEXT: vpaddq %xmm3, %xmm4, %xmm3
; XOP-NEXT: vpaddq %xmm2, %xmm3, %xmm2
; XOP-NEXT: vpaddq %xmm0, %xmm5, %xmm0
@@ -571,21 +571,21 @@ define <4 x i64> @vec256_i64_unsigned_reg_reg(<4 x i64> %a1, <4 x i64> %a2) noun
; AVX1-NEXT: vpsrlq $1, %xmm1, %xmm7
; AVX1-NEXT: vpsrlq $33, %xmm1, %xmm1
; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm8 = [1,1]
-; AVX1-NEXT: vpor %xmm4, %xmm8, %xmm4
-; AVX1-NEXT: vpmuludq %xmm4, %xmm1, %xmm1
-; AVX1-NEXT: vpsrlq $32, %xmm4, %xmm9
-; AVX1-NEXT: vpmuludq %xmm7, %xmm9, %xmm9
-; AVX1-NEXT: vpaddq %xmm1, %xmm9, %xmm1
-; AVX1-NEXT: vpsllq $32, %xmm1, %xmm1
+; AVX1-NEXT: vpor %xmm4, %xmm8, %xmm9
+; AVX1-NEXT: vpmuludq %xmm1, %xmm9, %xmm1
+; AVX1-NEXT: vpsrlq $32, %xmm4, %xmm4
; AVX1-NEXT: vpmuludq %xmm4, %xmm7, %xmm4
+; AVX1-NEXT: vpaddq %xmm1, %xmm4, %xmm1
+; AVX1-NEXT: vpsllq $32, %xmm1, %xmm1
+; AVX1-NEXT: vpmuludq %xmm7, %xmm9, %xmm4
; AVX1-NEXT: vpsrlq $33, %xmm3, %xmm3
-; AVX1-NEXT: vpor %xmm5, %xmm8, %xmm5
-; AVX1-NEXT: vpmuludq %xmm5, %xmm3, %xmm3
-; AVX1-NEXT: vpsrlq $32, %xmm5, %xmm7
-; AVX1-NEXT: vpmuludq %xmm7, %xmm6, %xmm7
-; AVX1-NEXT: vpaddq %xmm3, %xmm7, %xmm3
-; AVX1-NEXT: vpsllq $32, %xmm3, %xmm3
+; AVX1-NEXT: vpor %xmm5, %xmm8, %xmm7
+; AVX1-NEXT: vpmuludq %xmm7, %xmm3, %xmm3
+; AVX1-NEXT: vpsrlq $32, %xmm5, %xmm5
; AVX1-NEXT: vpmuludq %xmm5, %xmm6, %xmm5
+; AVX1-NEXT: vpaddq %xmm3, %xmm5, %xmm3
+; AVX1-NEXT: vpsllq $32, %xmm3, %xmm3
+; AVX1-NEXT: vpmuludq %xmm7, %xmm6, %xmm5
; AVX1-NEXT: vpaddq %xmm2, %xmm5, %xmm2
; AVX1-NEXT: vpaddq %xmm3, %xmm2, %xmm2
; AVX1-NEXT: vpaddq %xmm0, %xmm4, %xmm0
@@ -604,14 +604,14 @@ define <4 x i64> @vec256_i64_unsigned_reg_reg(<4 x i64> %a1, <4 x i64> %a2) noun
; AVX2-NEXT: vpsubq %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm1
; AVX2-NEXT: vpsubq %ymm1, %ymm2, %ymm1
-; AVX2-NEXT: vpsrlq $1, %ymm1, %ymm2
+; AVX2-NEXT: vpsrlq $1, %ymm1, %ymm4
; AVX2-NEXT: vpsrlq $33, %ymm1, %ymm1
; AVX2-NEXT: vpmuludq %ymm3, %ymm1, %ymm1
-; AVX2-NEXT: vpsrlq $32, %ymm3, %ymm4
-; AVX2-NEXT: vpmuludq %ymm4, %ymm2, %ymm4
-; AVX2-NEXT: vpaddq %ymm1, %ymm4, %ymm1
+; AVX2-NEXT: vpsrlq $32, %ymm2, %ymm2
+; AVX2-NEXT: vpmuludq %ymm2, %ymm4, %ymm2
+; AVX2-NEXT: vpaddq %ymm1, %ymm2, %ymm1
; AVX2-NEXT: vpsllq $32, %ymm1, %ymm1
-; AVX2-NEXT: vpmuludq %ymm3, %ymm2, %ymm2
+; AVX2-NEXT: vpmuludq %ymm3, %ymm4, %ymm2
; AVX2-NEXT: vpaddq %ymm0, %ymm2, %ymm0
; AVX2-NEXT: vpaddq %ymm1, %ymm0, %ymm0
; AVX2-NEXT: retq
@@ -632,21 +632,21 @@ define <4 x i64> @vec256_i64_unsigned_reg_reg(<4 x i64> %a1, <4 x i64> %a2) noun
; XOP-NEXT: vpsrlq $1, %xmm1, %xmm7
; XOP-NEXT: vpsrlq $33, %xmm1, %xmm1
; XOP-NEXT: vpmovsxbq {{.*#+}} xmm8 = [1,1]
-; XOP-NEXT: vpor %xmm5, %xmm8, %xmm5
-; XOP-NEXT: vpmuludq %xmm5, %xmm1, %xmm1
-; XOP-NEXT: vpsrlq $32, %xmm5, %xmm9
-; XOP-NEXT: vpmuludq %xmm7, %xmm9, %xmm9
-; XOP-NEXT: vpaddq %xmm1, %xmm9, %xmm1
-; XOP-NEXT: vpsllq $32, %xmm1, %xmm1
+; XOP-NEXT: vpor %xmm5, %xmm8, %xmm9
+; XOP-NEXT: vpmuludq %xmm1, %xmm9, %xmm1
+; XOP-NEXT: vpsrlq $32, %xmm5, %xmm5
; XOP-NEXT: vpmuludq %xmm5, %xmm7, %xmm5
+; XOP-NEXT: vpaddq %xmm1, %xmm5, %xmm1
+; XOP-NEXT: vpsllq $32, %xmm1, %xmm1
+; XOP-NEXT: vpmuludq %xmm7, %xmm9, %xmm5
; XOP-NEXT: vpsrlq $33, %xmm2, %xmm2
-; XOP-NEXT: vpor %xmm4, %xmm8, %xmm4
-; XOP-NEXT: vpmuludq %xmm4, %xmm2, %xmm2
-; XOP-NEXT: vpsrlq $32, %xmm4, %xmm7
-; XOP-NEXT: vpmuludq %xmm7, %xmm6, %xmm7
-; XOP-NEXT: vpaddq %xmm2, %xmm7, %xmm2
-; XOP-NEXT: vpsllq $32, %xmm2, %xmm2
+; XOP-NEXT: vpor %xmm4, %xmm8, %xmm7
+; XOP-NEXT: vpmuludq %xmm7, %xmm2, %xmm2
+; XOP-NEXT: vpsrlq $32, %xmm4, %xmm4
; XOP-NEXT: vpmuludq %xmm4, %xmm6, %xmm4
+; XOP-NEXT: vpaddq %xmm2, %xmm4, %xmm2
+; XOP-NEXT: vpsllq $32, %xmm2, %xmm2
+; XOP-NEXT: vpmuludq %xmm7, %xmm6, %xmm4
; XOP-NEXT: vpaddq %xmm3, %xmm4, %xmm3
; XOP-NEXT: vpaddq %xmm2, %xmm3, %xmm2
; XOP-NEXT: vpaddq %xmm0, %xmm5, %xmm0
@@ -742,21 +742,21 @@ define <4 x i64> @vec256_i64_signed_mem_reg(ptr %a1_addr, <4 x i64> %a2) nounwin
; AVX1-NEXT: vpsrlq $1, %xmm0, %xmm7
; AVX1-NEXT: vpsrlq $33, %xmm0, %xmm0
; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm8 = [1,1]
-; AVX1-NEXT: vpor %xmm5, %xmm8, %xmm5
-; AVX1-NEXT: vpmuludq %xmm5, %xmm0, %xmm0
-; AVX1-NEXT: vpsrlq $32, %xmm5, %xmm9
-; AVX1-NEXT: vpmuludq %xmm7, %xmm9, %xmm9
-; AVX1-NEXT: vpaddq %xmm0, %xmm9, %xmm0
-; AVX1-NEXT: vpsllq $32, %xmm0, %xmm0
+; AVX1-NEXT: vpor %xmm5, %xmm8, %xmm9
+; AVX1-NEXT: vpmuludq %xmm0, %xmm9, %xmm0
+; AVX1-NEXT: vpsrlq $32, %xmm5, %xmm5
; AVX1-NEXT: vpmuludq %xmm5, %xmm7, %xmm5
+; AVX1-NEXT: vpaddq %xmm0, %xmm5, %xmm0
+; AVX1-NEXT: vpsllq $32, %xmm0, %xmm0
+; AVX1-NEXT: vpmuludq %xmm7, %xmm9, %xmm5
; AVX1-NEXT: vpsrlq $33, %xmm1, %xmm1
-; AVX1-NEXT: vpor %xmm4, %xmm8, %xmm4
-; AVX1-NEXT: vpmuludq %xmm4, %xmm1, %xmm1
-; AVX1-NEXT: vpsrlq $32, %xmm4, %xmm7
-; AVX1-NEXT: vpmuludq %xmm7, %xmm6, %xmm7
-; AVX1-NEXT: vpaddq %xmm1, %xmm7, %xmm1
-; AVX1-NEXT: vpsllq $32, %xmm1, %xmm1
+; AVX1-NEXT: vpor %xmm4, %xmm8, %xmm7
+; AVX1-NEXT: vpmuludq %xmm7, %xmm1, %xmm1
+; AVX1-NEXT: vpsrlq $32, %xmm4, %xmm4
; AVX1-NEXT: vpmuludq %xmm4, %xmm6, %xmm4
+; AVX1-NEXT: vpaddq %xmm1, %xmm4, %xmm1
+; AVX1-NEXT: vpsllq $32, %xmm1, %xmm1
+; AVX1-NEXT: vpmuludq %xmm7, %xmm6, %xmm4
; AVX1-NEXT: vpaddq %xmm3, %xmm4, %xmm3
; AVX1-NEXT: vpaddq %xmm1, %xmm3, %xmm1
; AVX1-NEXT: vpaddq %xmm2, %xmm5, %xmm2
@@ -773,14 +773,14 @@ define <4 x i64> @vec256_i64_signed_mem_reg(ptr %a1_addr, <4 x i64> %a2) nounwin
; AVX2-NEXT: vpsubq %ymm0, %ymm1, %ymm0
; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0
; AVX2-NEXT: vpsubq %ymm0, %ymm2, %ymm0
-; AVX2-NEXT: vpsrlq $1, %ymm0, %ymm2
+; AVX2-NEXT: vpsrlq $1, %ymm0, %ymm4
; AVX2-NEXT: vpsrlq $33, %ymm0, %ymm0
; AVX2-NEXT: vpmuludq %ymm3, %ymm0, %ymm0
-; AVX2-NEXT: vpsrlq $32, %ymm3, %ymm4
-; AVX2-NEXT: vpmuludq %ymm4, %ymm2, %ymm4
-; AVX2-NEXT: vpaddq %ymm0, %ymm4, %ymm0
+; AVX2-NEXT: vpsrlq $32, %ymm2, %ymm2
+; AVX2-NEXT: vpmuludq %ymm2, %ymm4, %ymm2
+; AVX2-NEXT: vpaddq %ymm0, %ymm2, %ymm0
; AVX2-NEXT: vpsllq $32, %ymm0, %ymm0
-; AVX2-NEXT: vpmuludq %ymm3, %ymm2, %ymm2
+; AVX2-NEXT: vpmuludq %ymm3, %ymm4, %ymm2
; AVX2-NEXT: vpaddq %ymm1, %ymm2, %ymm1
; AVX2-NEXT: vpaddq %ymm0, %ymm1, %ymm0
; AVX2-NEXT: retq
@@ -802,21 +802,21 @@ define <4 x i64> @vec256_i64_signed_mem_reg(ptr %a1_addr, <4 x i64> %a2) nounwin
; XOP-NEXT: vpsrlq $1, %xmm0, %xmm7
; XOP-NEXT: vpsrlq $33, %xmm0, %xmm0
; XOP-NEXT: vpmovsxbq {{.*#+}} xmm8 = [1,1]
-; XOP-NEXT: vpor %xmm5, %xmm8, %xmm5
-; XOP-NEXT: vpmuludq %xmm5, %xmm0, %xmm0
-; XOP-NEXT: vpsrlq $32, %xmm5, %xmm9
-; XOP-NEXT: vpmuludq %xmm7, %xmm9, %xmm9
-; XOP-NEXT: vpaddq %xmm0, %xmm9, %xmm0
-; XOP-NEXT: vpsllq $32, %xmm0, %xmm0
+; XOP-NEXT: vpor %xmm5, %xmm8, %xmm9
+; XOP-NEXT: vpmuludq %xmm0, %xmm9, %xmm0
+; XOP-NEXT: vpsrlq $32, %xmm5, %xmm5
; XOP-NEXT: vpmuludq %xmm5, %xmm7, %xmm5
+; XOP-NEXT: vpaddq %xmm0, %xmm5, %xmm0
+; XOP-NEXT: vpsllq $32, %xmm0, %xmm0
+; XOP-NEXT: vpmuludq %xmm7, %xmm9, %xmm5
; XOP-NEXT: vpsrlq $33, %xmm1, %xmm1
-; XOP-NEXT: vpor %xmm4, %xmm8, %xmm4
-; XOP-NEXT: vpmuludq %xmm4, %xmm1, %xmm1
-; XOP-NEXT: vpsrlq $32, %xmm4, %xmm7
-; XOP-NEXT: vpmuludq %xmm7, %xmm6, %xmm7
-; XOP-NEXT: vpaddq %xmm1, %xmm7, %xmm1
-; XOP-NEXT: vpsllq $32, %xmm1, %xmm1
+; XOP-NEXT: vpor %xmm4, %xmm8, %xmm7
+; XOP-NEXT: vpmuludq %xmm7, %xmm1, %xmm1
+; XOP-NEXT: vpsrlq $32, %xmm4, %xmm4
; XOP-NEXT: vpmuludq %xmm4, %xmm6, %xmm4
+; XOP-NEXT: vpaddq %xmm1, %xmm4, %xmm1
+; XOP-NEXT: vpsllq $32, %xmm1, %xmm1
+; XOP-NEXT: vpmuludq %xmm7, %xmm6, %xmm4
; XOP-NEXT: vpaddq %xmm3, %xmm4, %xmm3
; XOP-NEXT: vpaddq %xmm1, %xmm3, %xmm1
; XOP-NEXT: vpaddq %xmm2, %xmm5, %xmm2
@@ -912,21 +912,21 @@ define <4 x i64> @vec256_i64_signed_reg_mem(<4 x i64> %a1, ptr %a2_addr) nounwin
; AVX1-NEXT: vpsrlq $1, %xmm1, %xmm7
; AVX1-NEXT: vpsrlq $33, %xmm1, %xmm1
; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm8 = [1,1]
-; AVX1-NEXT: vpor %xmm5, %xmm8, %xmm5
-; AVX1-NEXT: vpmuludq %xmm5, %xmm1, %xmm1
-; AVX1-NEXT: vpsrlq $32, %xmm5, %xmm9
-; AVX1-NEXT: vpmuludq %xmm7, %xmm9, %xmm9
-; AVX1-NEXT: vpaddq %xmm1, %xmm9, %xmm1
-; AVX1-NEXT: vpsllq $32, %xmm1, %xmm1
+; AVX1-NEXT: vpor %xmm5, %xmm8, %xmm9
+; AVX1-NEXT: vpmuludq %xmm1, %xmm9, %xmm1
+; AVX1-NEXT: vpsrlq $32, %xmm5, %xmm5
; AVX1-NEXT: vpmuludq %xmm5, %xmm7, %xmm5
+; AVX1-NEXT: vpaddq %xmm1, %xmm5, %xmm1
+; AVX1-NEXT: vpsllq $32, %xmm1, %xmm1
+; AVX1-NEXT: vpmuludq %xmm7, %xmm9, %xmm5
; AVX1-NEXT: vpsrlq $33, %xmm2, %xmm2
-; AVX1-NEXT: vpor %xmm4, %xmm8, %xmm4
-; AVX1-NEXT: vpmuludq %xmm4, %xmm2, %xmm2
-; AVX1-NEXT: vpsrlq $32, %xmm4, %xmm7
-; AVX1-NEXT: vpmuludq %xmm7, %xmm6, %xmm7
-; AVX1-NEXT: vpaddq %xmm2, %xmm7, %xmm2
-; AVX1-NEXT: vpsllq $32, %xmm2, %xmm2
+; AVX1-NEXT: vpor %xmm4, %xmm8, %xmm7
+; AVX1-NEXT: vpmuludq %xmm7, %xmm2, %xmm2
+; AVX1-NEXT: vpsrlq $32, %xmm4, %xmm4
; AVX1-NEXT: vpmuludq %xmm4, %xmm6, %xmm4
+; AVX1-NEXT: vpaddq %xmm2, %xmm4, %xmm2
+; AVX1-NEXT: vpsllq $32, %xmm2, %xmm2
+; AVX1-NEXT: vpmuludq %xmm7, %xmm6, %xmm4
; AVX1-NEXT: vpaddq %xmm3, %xmm4, %xmm3
; AVX1-NEXT: vpaddq %xmm2, %xmm3, %xmm2
; AVX1-NEXT: vpaddq %xmm0, %xmm5, %xmm0
@@ -943,14 +943,14 @@ define <4 x i64> @vec256_i64_signed_reg_mem(<4 x i64> %a1, ptr %a2_addr) nounwin
; AVX2-NEXT: vpsubq %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm1
; AVX2-NEXT: vpsubq %ymm1, %ymm2, %ymm1
-; AVX2-NEXT: vpsrlq $1, %ymm1, %ymm2
+; AVX2-NEXT: vpsrlq $1, %ymm1, %ymm4
; AVX2-NEXT: vpsrlq $33, %ymm1, %ymm1
; AVX2-NEXT: vpmuludq %ymm3, %ymm1, %ymm1
-; AVX2-NEXT: vpsrlq $32, %ymm3, %ymm4
-; AVX2-NEXT: vpmuludq %ymm4, %ymm2, %ymm4
-; AVX2-NEXT: vpaddq %ymm1, %ymm4, %ymm1
+; AVX2-NEXT: vpsrlq $32, %ymm2, %ymm2
+; AVX2-NEXT: vpmuludq %ymm2, %ymm4, %ymm2
+; AVX2-NEXT: vpaddq %ymm1, %ymm2, %ymm1
; AVX2-NEXT: vpsllq $32, %ymm1, %ymm1
-; AVX2-NEXT: vpmuludq %ymm3, %ymm2, %ymm2
+; AVX2-NEXT: vpmuludq %ymm3, %ymm4, %ymm2
; AVX2-NEXT: vpaddq %ymm0, %ymm2, %ymm0
; AVX2-NEXT: vpaddq %ymm1, %ymm0, %ymm0
; AVX2-NEXT: retq
@@ -972,21 +972,21 @@ define <4 x i64> @vec256_i64_signed_reg_mem(<4 x i64> %a1, ptr %a2_addr) nounwin
; XOP-NEXT: vpsrlq $1, %xmm1, %xmm7
; XOP-NEXT: vpsrlq $33, %xmm1, %xmm1
; XOP-NEXT: vpmovsxbq {{.*#+}} xmm8 = [1,1]
-; XOP-NEXT: vpor %xmm5, %xmm8, %xmm5
-; XOP-NEXT: vpmuludq %xmm5, %xmm1, %xmm1
-; XOP-NEXT: vpsrlq $32, %xmm5, %xmm9
-; XOP-NEXT: vpmuludq %xmm7, %xmm9, %xmm9
-; XOP-NEXT: vpaddq %xmm1, %xmm9, %xmm1
-; XOP-NEXT: vpsllq $32, %xmm1, %xmm1
+; XOP-NEXT: vpor %xmm5, %xmm8, %xmm9
+; XOP-NEXT: vpmuludq %xmm1, %xmm9, %xmm1
+; XOP-NEXT: vpsrlq $32, %xmm5, %xmm5
; XOP-NEXT: vpmuludq %xmm5, %xmm7, %xmm5
+; XOP-NEXT: vpaddq %xmm1, %xmm5, %xmm1
+; XOP-NEXT: vpsllq $32, %xmm1, %xmm1
+; XOP-NEXT: vpmuludq %xmm7, %xmm9, %xmm5
; XOP-NEXT: vpsrlq $33, %xmm2, %xmm2
-; XOP-NEXT: vpor %xmm4, %xmm8, %xmm4
-; XOP-NEXT: vpmuludq %xmm4, %xmm2, %xmm2
-; XOP-NEXT: vpsrlq $32, %xmm4, %xmm7
-; XOP-NEXT: vpmuludq %xmm7, %xmm6, %xmm7
-; XOP-NEXT: vpaddq %xmm2, %xmm7, %xmm2
-; XOP-NEXT: vpsllq $32, %xmm2, %xmm2
+; XOP-NEXT: vpor %xmm4, %xmm8, %xmm7
+; XOP-NEXT: vpmuludq %xmm7, %xmm2, %xmm2
+; XOP-NEXT: vpsrlq $32, %xmm4, %xmm4
; XOP-NEXT: vpmuludq %xmm4, %xmm6, %xmm4
+; XOP-NEXT: vpaddq %xmm2, %xmm4, %xmm2
+; XOP-NEXT: vpsllq $32, %xmm2, %xmm2
+; XOP-NEXT: vpmuludq %xmm7, %xmm6, %xmm4
; XOP-NEXT: vpaddq %xmm3, %xmm4, %xmm3
; XOP-NEXT: vpaddq %xmm2, %xmm3, %xmm2
; XOP-NEXT: vpaddq %xmm0, %xmm5, %xmm0
@@ -1083,21 +1083,21 @@ define <4 x i64> @vec256_i64_signed_mem_mem(ptr %a1_addr, ptr %a2_addr) nounwind
; AVX1-NEXT: vpsrlq $1, %xmm0, %xmm7
; AVX1-NEXT: vpsrlq $33, %xmm0, %xmm0
; AVX1-NEXT: vpmovsxbq {{.*#+}} xmm8 = [1,1]
-; AVX1-NEXT: vpor %xmm5, %xmm8, %xmm5
-; AVX1-NEXT: vpmuludq %xmm5, %xmm0, %xmm0
-; AVX1-NEXT: vpsrlq $32, %xmm5, %xmm9
-; AVX1-NEXT: vpmuludq %xmm7, %xmm9, %xmm9
-; AVX1-NEXT: vpaddq %xmm0, %xmm9, %xmm0
-; AVX1-NEXT: vpsllq $32, %xmm0, %xmm0
+; AVX1-NEXT: vpor %xmm5, %xmm8, %xmm9
+; AVX1-NEXT: vpmuludq %xmm0, %xmm9, %xmm0
+; AVX1-NEXT: vpsrlq $32, %xmm5, %xmm5
; AVX1-NEXT: vpmuludq %xmm5, %xmm7, %xmm5
+; AVX1-NEXT: vpaddq %xmm0, %xmm5, %xmm0
+; AVX1-NEXT: vpsllq $32, %xmm0, %xmm0
+; AVX1-NEXT: vpmuludq %xmm7, %xmm9, %xmm5
; AVX1-NEXT: vpsrlq $33, %xmm1, %xmm1
-; AVX1-NEXT: vpor %xmm4, %xmm8, %xmm4
-; AVX1-NEXT: vpmuludq %xmm4, %xmm1, %xmm1
-; AVX1-NEXT: vpsrlq $32, %xmm4, %xmm7
-; AVX1-NEXT: vpmuludq %xmm7, %xmm6, %xmm7
-; AVX1-NEXT: vpaddq %xmm1, %xmm7, %xmm1
-; AVX1-NEXT: vpsllq $32, %xmm1, %xmm1
+; AVX1-NEXT: vpor %xmm4, %xmm8, %xmm7
+; AVX1-NEXT: vpmuludq %xmm7, %xmm1, %xmm1
+; AVX1-NEXT: vpsrlq $32, %xmm4, %xmm4
; AVX1-NEXT: vpmuludq %xmm4, %xmm6, %xmm4
+; AVX1-NEXT: vpaddq %xmm1, %xmm4, %xmm1
+; AVX1-NEXT: vpsllq $32, %xmm1, %xmm1
+; AVX1-NEXT: vpmuludq %xmm7, %xmm6, %xmm4
; AVX1-NEXT: vpaddq %xmm3, %xmm4, %xmm3
; AVX1-NEXT: vpaddq %xmm1, %xmm3, %xmm1
; AVX1-NEXT: vpaddq %xmm2, %xmm5, %xmm2
@@ -1115,14 +1115,14 @@ define <4 x i64> @vec256_i64_signed_mem_mem(ptr %a1_addr, ptr %a2_addr) nounwind
; AVX2-NEXT: vpsubq %ymm1, %ymm0, %ymm1
; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm1
; AVX2-NEXT: vpsubq %ymm1, %ymm2, %ymm1
-; AVX2-NEXT: vpsrlq $1, %ymm1, %ymm2
+; AVX2-NEXT: vpsrlq $1, %ymm1, %ymm4
; AVX2-NEXT: vpsrlq $33, %ymm1, %ymm1
; AVX2-NEXT: vpmuludq %ymm3, %ymm1, %ymm1
-; AVX2-NEXT: vpsrlq $32, %ymm3, %ymm4
-; AVX2-NEXT: vpmuludq %ymm4, %ymm2, %ymm4
-; AVX2-NEXT: vpaddq %ymm1, %ymm4, %ymm1
+; AVX2-NEXT: vpsrlq $32, %ymm2, %ymm2
+; AVX2-NEXT: vpmuludq %ymm2, %ymm4, %ymm2
+; AVX2-NEXT: vpaddq %ymm1, %ymm2, %ymm1
; AVX2-NEXT: vpsllq $32, %ymm1, %ymm1
-; AVX2-NEXT: vpmuludq %ymm3, %ymm2, %ymm2
+; AVX2-NEXT: vpmuludq %ymm3, %ymm4, %ymm2
; AVX2-NEXT: vpaddq %ymm0, %ymm2, %ymm0
; AVX2-NEXT: vpaddq %ymm1, %ymm0, %ymm0
; AVX2-NEXT: retq
@@ -1145,21 +1145,21 @@ define <4 x i64> @vec256_i64_signed_mem_mem(ptr %a1_addr, ptr %a2_addr) nounwind
; XOP-NEXT: vpsrlq $1, %xmm0, %xmm7
; XOP-NEXT: vpsrlq $33, %xmm0, %xmm0
; XOP-NEXT: vpmovsxbq {{.*#+}} xmm8 = [1,1]
-; XOP-NEXT: vpor %xmm5, %xmm8, %xmm5
-; XOP-NEXT: vpmuludq %xmm5, %xmm0, %xmm0
-; XOP-NEXT: vpsrlq $32, %xmm5, %xmm9
-; XOP-NEXT: vpmuludq %xmm7, %xmm9, %xmm9
-; XOP-NEXT: vpaddq %xmm0, %xmm9, %xmm0
-; XOP-NEXT: vpsllq $32, %xmm0, %xmm0
+; XOP-NEXT: vpor %xmm5, %xmm8, %xmm9
+; XOP-NEXT: vpmuludq %xmm0, %xmm9, %xmm0
+; XOP-NEXT: vpsrlq $32, %xmm5, %xmm5
; XOP-NEXT: vpmuludq %xmm5, %xmm7, %xmm5
+; XOP-NEXT: vpaddq %xmm0, %xmm5, %xmm0
+; XOP-NEXT: vpsllq $32, %xmm0, %xmm0
+; XOP-NEXT: vpmuludq %xmm7, %xmm9, %xmm5
; XOP-NEXT: vpsrlq $33, %xmm1, %xmm1
-; XOP-NEXT: vpor %xmm4, %xmm8, %xmm4
-; XOP-NEXT: vpmuludq %xmm4, %xmm1, %xmm1
-; XOP-NEXT: vpsrlq $32, %xmm4, %xmm7
-; XOP-NEXT: vpmuludq %xmm7, %xmm6, %xmm7
-; XOP-NEXT: vpaddq %xmm1, %xmm7, %xmm1
-; XOP-NEXT: vpsllq $32, %xmm1, %xmm1
+; XOP-NEXT: vpor %xmm4, %xmm8, %xmm7
+; XOP-NEXT: vpmuludq %xmm7, %xmm1, %xmm1
+; XOP-NEXT: vpsrlq $32, %xmm4, %xmm4
; XOP-NEXT: vpmuludq %xmm4, %xmm6, %xmm4
+; XOP-NEXT: vpaddq %xmm1, %xmm4, %xmm1
+; XOP-NEXT: vpsllq $32, %xmm1, %xmm1
+; XOP-NEXT: vpmuludq %xmm7, %xmm6, %xmm4
; XOP-NEXT: vpaddq %xmm3, %xmm4, %xmm3
; XOP-NEXT: vpaddq %xmm1, %xmm3, %xmm1
; XOP-NEXT: vpaddq %xmm2, %xmm5, %xmm2
diff --git a/llvm/test/CodeGen/X86/vector-bo-select.ll b/llvm/test/CodeGen/X86/vector-bo-select.ll
index 27aaad6353ed68..11e7fe85d0239a 100644
--- a/llvm/test/CodeGen/X86/vector-bo-select.ll
+++ b/llvm/test/CodeGen/X86/vector-bo-select.ll
@@ -2952,83 +2952,83 @@ define <8 x i64> @mul_v8i64_cast_cond(i8 noundef zeroext %pb, <8 x i64> noundef
; SSE2-LABEL: mul_v8i64_cast_cond:
; SSE2: # %bb.0:
; SSE2-NEXT: movd %edi, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm8[0,1,0,1]
+; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm8[0,1,0,1]
; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [64,128]
-; SSE2-NEXT: movdqa %xmm9, %xmm10
-; SSE2-NEXT: pand %xmm8, %xmm10
-; SSE2-NEXT: pcmpeqd %xmm8, %xmm10
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm10[1,0,3,2]
-; SSE2-NEXT: pand %xmm10, %xmm8
-; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [1,1]
+; SSE2-NEXT: movdqa %xmm10, %xmm9
+; SSE2-NEXT: pand %xmm8, %xmm9
+; SSE2-NEXT: pcmpeqd %xmm8, %xmm9
+; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm9[1,0,3,2]
+; SSE2-NEXT: pand %xmm9, %xmm8
+; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [1,1]
; SSE2-NEXT: pand %xmm8, %xmm7
-; SSE2-NEXT: pandn %xmm10, %xmm8
+; SSE2-NEXT: pandn %xmm11, %xmm8
; SSE2-NEXT: por %xmm7, %xmm8
-; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [16,32]
-; SSE2-NEXT: movdqa %xmm9, %xmm11
-; SSE2-NEXT: pand %xmm7, %xmm11
-; SSE2-NEXT: pcmpeqd %xmm7, %xmm11
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm11[1,0,3,2]
-; SSE2-NEXT: pand %xmm11, %xmm7
-; SSE2-NEXT: pand %xmm7, %xmm6
-; SSE2-NEXT: pandn %xmm10, %xmm7
-; SSE2-NEXT: por %xmm6, %xmm7
-; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [4,8]
-; SSE2-NEXT: movdqa %xmm9, %xmm11
-; SSE2-NEXT: pand %xmm6, %xmm11
-; SSE2-NEXT: pcmpeqd %xmm6, %xmm11
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm11[1,0,3,2]
-; SSE2-NEXT: pand %xmm11, %xmm6
-; SSE2-NEXT: pand %xmm6, %xmm5
-; SSE2-NEXT: pandn %xmm10, %xmm6
-; SSE2-NEXT: por %xmm5, %xmm6
-; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [1,2]
-; SSE2-NEXT: pand %xmm5, %xmm9
-; SSE2-NEXT: pcmpeqd %xmm5, %xmm9
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,0,3,2]
-; SSE2-NEXT: pand %xmm9, %xmm5
-; SSE2-NEXT: pand %xmm5, %xmm4
-; SSE2-NEXT: pandn %xmm10, %xmm5
-; SSE2-NEXT: por %xmm4, %xmm5
-; SSE2-NEXT: movdqa %xmm0, %xmm4
+; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [16,32]
+; SSE2-NEXT: movdqa %xmm10, %xmm12
+; SSE2-NEXT: pand %xmm9, %xmm12
+; SSE2-NEXT: pcmpeqd %xmm9, %xmm12
+; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,0,3,2]
+; SSE2-NEXT: pand %xmm12, %xmm9
+; SSE2-NEXT: pand %xmm9, %xmm6
+; SSE2-NEXT: pandn %xmm11, %xmm9
+; SSE2-NEXT: por %xmm6, %xmm9
+; SSE2-NEXT: movdqa {{.*#+}} xmm12 = [4,8]
+; SSE2-NEXT: movdqa %xmm10, %xmm13
+; SSE2-NEXT: pand %xmm12, %xmm13
+; SSE2-NEXT: pcmpeqd %xmm12, %xmm13
+; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm13[1,0,3,2]
+; SSE2-NEXT: pand %xmm13, %xmm12
+; SSE2-NEXT: pand %xmm12, %xmm5
+; SSE2-NEXT: pandn %xmm11, %xmm12
+; SSE2-NEXT: por %xmm5, %xmm12
+; SSE2-NEXT: movdqa {{.*#+}} xmm13 = [1,2]
+; SSE2-NEXT: pand %xmm13, %xmm10
+; SSE2-NEXT: pcmpeqd %xmm13, %xmm10
+; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm10[1,0,3,2]
+; SSE2-NEXT: pand %xmm10, %xmm13
+; SSE2-NEXT: pand %xmm13, %xmm4
+; SSE2-NEXT: pandn %xmm11, %xmm13
+; SSE2-NEXT: por %xmm4, %xmm13
+; SSE2-NEXT: movdqa %xmm0, %xmm10
+; SSE2-NEXT: pmuludq %xmm13, %xmm10
+; SSE2-NEXT: movdqa %xmm0, %xmm11
+; SSE2-NEXT: psrlq $32, %xmm11
+; SSE2-NEXT: pmuludq %xmm13, %xmm11
; SSE2-NEXT: psrlq $32, %xmm4
-; SSE2-NEXT: pmuludq %xmm5, %xmm4
-; SSE2-NEXT: movdqa %xmm5, %xmm9
-; SSE2-NEXT: psrlq $32, %xmm9
-; SSE2-NEXT: pmuludq %xmm0, %xmm9
-; SSE2-NEXT: paddq %xmm4, %xmm9
-; SSE2-NEXT: psllq $32, %xmm9
-; SSE2-NEXT: pmuludq %xmm5, %xmm0
-; SSE2-NEXT: paddq %xmm9, %xmm0
+; SSE2-NEXT: pmuludq %xmm4, %xmm0
+; SSE2-NEXT: paddq %xmm11, %xmm0
+; SSE2-NEXT: psllq $32, %xmm0
+; SSE2-NEXT: paddq %xmm10, %xmm0
; SSE2-NEXT: movdqa %xmm1, %xmm4
-; SSE2-NEXT: psrlq $32, %xmm4
-; SSE2-NEXT: pmuludq %xmm6, %xmm4
-; SSE2-NEXT: movdqa %xmm6, %xmm5
+; SSE2-NEXT: pmuludq %xmm12, %xmm4
+; SSE2-NEXT: movdqa %xmm1, %xmm10
+; SSE2-NEXT: psrlq $32, %xmm10
+; SSE2-NEXT: pmuludq %xmm12, %xmm10
; SSE2-NEXT: psrlq $32, %xmm5
-; SSE2-NEXT: pmuludq %xmm1, %xmm5
-; SSE2-NEXT: paddq %xmm4, %xmm5
-; SSE2-NEXT: psllq $32, %xmm5
-; SSE2-NEXT: pmuludq %xmm6, %xmm1
-; SSE2-NEXT: paddq %xmm5, %xmm1
+; SSE2-NEXT: pmuludq %xmm5, %xmm1
+; SSE2-NEXT: paddq %xmm10, %xmm1
+; SSE2-NEXT: psllq $32, %xmm1
+; SSE2-NEXT: paddq %xmm4, %xmm1
; SSE2-NEXT: movdqa %xmm2, %xmm4
-; SSE2-NEXT: psrlq $32, %xmm4
-; SSE2-NEXT: pmuludq %xmm7, %xmm4
-; SSE2-NEXT: movdqa %xmm7, %xmm5
+; SSE2-NEXT: pmuludq %xmm9, %xmm4
+; SSE2-NEXT: movdqa %xmm2, %xmm5
; SSE2-NEXT: psrlq $32, %xmm5
-; SSE2-NEXT: pmuludq %xmm2, %xmm5
-; SSE2-NEXT: paddq %xmm4, %xmm5
-; SSE2-NEXT: psllq $32, %xmm5
-; SSE2-NEXT: pmuludq %xmm7, %xmm2
+; SSE2-NEXT: pmuludq %xmm9, %xmm5
+; SSE2-NEXT: psrlq $32, %xmm6
+; SSE2-NEXT: pmuludq %xmm6, %xmm2
; SSE2-NEXT: paddq %xmm5, %xmm2
+; SSE2-NEXT: psllq $32, %xmm2
+; SSE2-NEXT: paddq %xmm4, %xmm2
; SSE2-NEXT: movdqa %xmm3, %xmm4
-; SSE2-NEXT: psrlq $32, %xmm4
; SSE2-NEXT: pmuludq %xmm8, %xmm4
-; SSE2-NEXT: movdqa %xmm8, %xmm5
+; SSE2-NEXT: movdqa %xmm3, %xmm5
; SSE2-NEXT: psrlq $32, %xmm5
-; SSE2-NEXT: pmuludq %xmm3, %xmm5
-; SSE2-NEXT: paddq %xmm4, %xmm5
-; SSE2-NEXT: psllq $32, %xmm5
-; SSE2-NEXT: pmuludq %xmm8, %xmm3
+; SSE2-NEXT: pmuludq %xmm8, %xmm5
+; SSE2-NEXT: psrlq $32, %xmm7
+; SSE2-NEXT: pmuludq %xmm7, %xmm3
; SSE2-NEXT: paddq %xmm5, %xmm3
+; SSE2-NEXT: psllq $32, %xmm3
+; SSE2-NEXT: paddq %xmm4, %xmm3
; SSE2-NEXT: retq
;
; SSE42-LABEL: mul_v8i64_cast_cond:
diff --git a/llvm/test/CodeGen/X86/vector-fshr-128.ll b/llvm/test/CodeGen/X86/vector-fshr-128.ll
index 9ba70473ad99b5..d830834a83ab42 100644
--- a/llvm/test/CodeGen/X86/vector-fshr-128.ll
+++ b/llvm/test/CodeGen/X86/vector-fshr-128.ll
@@ -485,11 +485,11 @@ define <8 x i16> @var_funnnel_v8i16(<8 x i16> %x, <8 x i16> %y, <8 x i16> %amt)
; SSE41: # %bb.0:
; SSE41-NEXT: movdqa %xmm0, %xmm3
; SSE41-NEXT: pmovsxbw {{.*#+}} xmm5 = [15,15,15,15,15,15,15,15]
+; SSE41-NEXT: movdqa %xmm2, %xmm4
+; SSE41-NEXT: pand %xmm5, %xmm4
+; SSE41-NEXT: psllw $4, %xmm4
; SSE41-NEXT: movdqa %xmm2, %xmm0
-; SSE41-NEXT: pand %xmm5, %xmm0
-; SSE41-NEXT: movdqa %xmm0, %xmm4
-; SSE41-NEXT: psllw $12, %xmm4
-; SSE41-NEXT: psllw $4, %xmm0
+; SSE41-NEXT: psllw $12, %xmm0
; SSE41-NEXT: por %xmm4, %xmm0
; SSE41-NEXT: movdqa %xmm0, %xmm4
; SSE41-NEXT: paddw %xmm0, %xmm4
@@ -531,8 +531,8 @@ define <8 x i16> @var_funnnel_v8i16(<8 x i16> %x, <8 x i16> %y, <8 x i16> %amt)
; AVX1: # %bb.0:
; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15]
; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm4
-; AVX1-NEXT: vpsllw $12, %xmm4, %xmm5
; AVX1-NEXT: vpsllw $4, %xmm4, %xmm4
+; AVX1-NEXT: vpsllw $12, %xmm2, %xmm5
; AVX1-NEXT: vpor %xmm5, %xmm4, %xmm4
; AVX1-NEXT: vpaddw %xmm4, %xmm4, %xmm5
; AVX1-NEXT: vpsrlw $8, %xmm1, %xmm6
diff --git a/llvm/test/CodeGen/X86/vector-idiv-udiv-128.ll b/llvm/test/CodeGen/X86/vector-idiv-udiv-128.ll
index a9427be39ca3e3..13f7d68ccb8932 100644
--- a/llvm/test/CodeGen/X86/vector-idiv-udiv-128.ll
+++ b/llvm/test/CodeGen/X86/vector-idiv-udiv-128.ll
@@ -651,11 +651,11 @@ define <16 x i8> @test_rem7_16i8(<16 x i8> %a) nounwind {
; SSE2-NEXT: psrlw $1, %xmm1
; SSE2-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; SSE2-NEXT: paddb %xmm4, %xmm1
-; SSE2-NEXT: psrlw $2, %xmm1
-; SSE2-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; SSE2-NEXT: movdqa %xmm1, %xmm2
-; SSE2-NEXT: psllw $3, %xmm2
+; SSE2-NEXT: psllw $1, %xmm2
; SSE2-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE2-NEXT: psrlw $2, %xmm1
+; SSE2-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; SSE2-NEXT: psubb %xmm2, %xmm1
; SSE2-NEXT: paddb %xmm1, %xmm0
; SSE2-NEXT: retq
@@ -677,11 +677,11 @@ define <16 x i8> @test_rem7_16i8(<16 x i8> %a) nounwind {
; SSE41-NEXT: psrlw $1, %xmm1
; SSE41-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; SSE41-NEXT: paddb %xmm3, %xmm1
-; SSE41-NEXT: psrlw $2, %xmm1
-; SSE41-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; SSE41-NEXT: movdqa %xmm1, %xmm2
-; SSE41-NEXT: psllw $3, %xmm2
+; SSE41-NEXT: psllw $1, %xmm2
; SSE41-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE41-NEXT: psrlw $2, %xmm1
+; SSE41-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; SSE41-NEXT: psubb %xmm2, %xmm1
; SSE41-NEXT: paddb %xmm1, %xmm0
; SSE41-NEXT: retq
@@ -701,10 +701,10 @@ define <16 x i8> @test_rem7_16i8(<16 x i8> %a) nounwind {
; AVX1-NEXT: vpsrlw $1, %xmm2, %xmm2
; AVX1-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2
; AVX1-NEXT: vpaddb %xmm1, %xmm2, %xmm1
+; AVX1-NEXT: vpsllw $1, %xmm1, %xmm2
+; AVX1-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2
; AVX1-NEXT: vpsrlw $2, %xmm1, %xmm1
; AVX1-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1
-; AVX1-NEXT: vpsllw $3, %xmm1, %xmm2
-; AVX1-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2
; AVX1-NEXT: vpsubb %xmm2, %xmm1, %xmm1
; AVX1-NEXT: vpaddb %xmm1, %xmm0, %xmm0
; AVX1-NEXT: retq
@@ -720,10 +720,10 @@ define <16 x i8> @test_rem7_16i8(<16 x i8> %a) nounwind {
; AVX2NOBW-NEXT: vpsrlw $1, %xmm2, %xmm2
; AVX2NOBW-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2
; AVX2NOBW-NEXT: vpaddb %xmm1, %xmm2, %xmm1
+; AVX2NOBW-NEXT: vpsllw $1, %xmm1, %xmm2
+; AVX2NOBW-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2
; AVX2NOBW-NEXT: vpsrlw $2, %xmm1, %xmm1
; AVX2NOBW-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1
-; AVX2NOBW-NEXT: vpsllw $3, %xmm1, %xmm2
-; AVX2NOBW-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2
; AVX2NOBW-NEXT: vpsubb %xmm2, %xmm1, %xmm1
; AVX2NOBW-NEXT: vpaddb %xmm1, %xmm0, %xmm0
; AVX2NOBW-NEXT: vzeroupper
@@ -739,10 +739,10 @@ define <16 x i8> @test_rem7_16i8(<16 x i8> %a) nounwind {
; AVX512BW-NEXT: vpsrlw $1, %xmm2, %xmm2
; AVX512BW-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2
; AVX512BW-NEXT: vpaddb %xmm1, %xmm2, %xmm1
+; AVX512BW-NEXT: vpsllw $1, %xmm1, %xmm2
+; AVX512BW-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2
; AVX512BW-NEXT: vpsrlw $2, %xmm1, %xmm1
; AVX512BW-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1
-; AVX512BW-NEXT: vpsllw $3, %xmm1, %xmm2
-; AVX512BW-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2
; AVX512BW-NEXT: vpsubb %xmm2, %xmm1, %xmm1
; AVX512BW-NEXT: vpaddb %xmm1, %xmm0, %xmm0
; AVX512BW-NEXT: vzeroupper
diff --git a/llvm/test/CodeGen/X86/vector-idiv-udiv-256.ll b/llvm/test/CodeGen/X86/vector-idiv-udiv-256.ll
index 3ed716881281d3..e97d7e5bb090cb 100644
--- a/llvm/test/CodeGen/X86/vector-idiv-udiv-256.ll
+++ b/llvm/test/CodeGen/X86/vector-idiv-udiv-256.ll
@@ -593,13 +593,13 @@ define <32 x i8> @test_rem7_32i8(<32 x i8> %a) nounwind {
; AVX1-NEXT: vbroadcastss {{.*#+}} xmm6 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
; AVX1-NEXT: vpand %xmm6, %xmm5, %xmm5
; AVX1-NEXT: vpaddb %xmm3, %xmm5, %xmm3
+; AVX1-NEXT: vpsllw $1, %xmm3, %xmm5
+; AVX1-NEXT: vbroadcastss {{.*#+}} xmm7 = [248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248]
+; AVX1-NEXT: vpand %xmm7, %xmm5, %xmm5
; AVX1-NEXT: vpsrlw $2, %xmm3, %xmm3
-; AVX1-NEXT: vbroadcastss {{.*#+}} xmm5 = [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63]
-; AVX1-NEXT: vpand %xmm5, %xmm3, %xmm3
-; AVX1-NEXT: vpsllw $3, %xmm3, %xmm7
-; AVX1-NEXT: vbroadcastss {{.*#+}} xmm8 = [248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248]
-; AVX1-NEXT: vpand %xmm7, %xmm8, %xmm7
-; AVX1-NEXT: vpsubb %xmm7, %xmm3, %xmm3
+; AVX1-NEXT: vbroadcastss {{.*#+}} xmm8 = [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63]
+; AVX1-NEXT: vpand %xmm3, %xmm8, %xmm3
+; AVX1-NEXT: vpsubb %xmm5, %xmm3, %xmm3
; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm1
; AVX1-NEXT: vpunpckhbw {{.*#+}} xmm2 = 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]
; AVX1-NEXT: vpmullw %xmm4, %xmm2, %xmm2
@@ -612,10 +612,10 @@ define <32 x i8> @test_rem7_32i8(<32 x i8> %a) nounwind {
; AVX1-NEXT: vpsrlw $1, %xmm3, %xmm3
; AVX1-NEXT: vpand %xmm6, %xmm3, %xmm3
; AVX1-NEXT: vpaddb %xmm2, %xmm3, %xmm2
+; AVX1-NEXT: vpsllw $1, %xmm2, %xmm3
+; AVX1-NEXT: vpand %xmm7, %xmm3, %xmm3
; AVX1-NEXT: vpsrlw $2, %xmm2, %xmm2
-; AVX1-NEXT: vpand %xmm5, %xmm2, %xmm2
-; AVX1-NEXT: vpsllw $3, %xmm2, %xmm3
-; AVX1-NEXT: vpand %xmm3, %xmm8, %xmm3
+; AVX1-NEXT: vpand %xmm2, %xmm8, %xmm2
; AVX1-NEXT: vpsubb %xmm3, %xmm2, %xmm2
; AVX1-NEXT: vpaddb %xmm2, %xmm0, %xmm0
; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
@@ -636,10 +636,10 @@ define <32 x i8> @test_rem7_32i8(<32 x i8> %a) nounwind {
; AVX2NOBW-NEXT: vpsrlw $1, %ymm2, %ymm2
; AVX2NOBW-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2
; AVX2NOBW-NEXT: vpaddb %ymm1, %ymm2, %ymm1
+; AVX2NOBW-NEXT: vpsllw $1, %ymm1, %ymm2
+; AVX2NOBW-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2
; AVX2NOBW-NEXT: vpsrlw $2, %ymm1, %ymm1
; AVX2NOBW-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
-; AVX2NOBW-NEXT: vpsllw $3, %ymm1, %ymm2
-; AVX2NOBW-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2
; AVX2NOBW-NEXT: vpsubb %ymm2, %ymm1, %ymm1
; AVX2NOBW-NEXT: vpaddb %ymm1, %ymm0, %ymm0
; AVX2NOBW-NEXT: retq
@@ -654,10 +654,10 @@ define <32 x i8> @test_rem7_32i8(<32 x i8> %a) nounwind {
; AVX512BW-NEXT: vpsrlw $1, %ymm2, %ymm2
; AVX512BW-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2
; AVX512BW-NEXT: vpaddb %ymm1, %ymm2, %ymm1
+; AVX512BW-NEXT: vpsllw $1, %ymm1, %ymm2
+; AVX512BW-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2
; AVX512BW-NEXT: vpsrlw $2, %ymm1, %ymm1
; AVX512BW-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
-; AVX512BW-NEXT: vpsllw $3, %ymm1, %ymm2
-; AVX512BW-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2
; AVX512BW-NEXT: vpsubb %ymm2, %ymm1, %ymm1
; AVX512BW-NEXT: vpaddb %ymm1, %ymm0, %ymm0
; AVX512BW-NEXT: retq
diff --git a/llvm/test/CodeGen/X86/vector-idiv-udiv-512.ll b/llvm/test/CodeGen/X86/vector-idiv-udiv-512.ll
index 83ccfd727a8e82..fd7a4c9b8d5adb 100644
--- a/llvm/test/CodeGen/X86/vector-idiv-udiv-512.ll
+++ b/llvm/test/CodeGen/X86/vector-idiv-udiv-512.ll
@@ -485,13 +485,13 @@ define <64 x i8> @test_rem7_64i8(<64 x i8> %a) nounwind {
; AVX512F-NEXT: vpbroadcastb {{.*#+}} ymm6 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
; AVX512F-NEXT: vpand %ymm6, %ymm5, %ymm5
; AVX512F-NEXT: vpaddb %ymm3, %ymm5, %ymm3
+; AVX512F-NEXT: vpsllw $1, %ymm3, %ymm5
+; AVX512F-NEXT: vpbroadcastb {{.*#+}} ymm7 = [248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248]
+; AVX512F-NEXT: vpand %ymm7, %ymm5, %ymm5
; AVX512F-NEXT: vpsrlw $2, %ymm3, %ymm3
-; AVX512F-NEXT: vpbroadcastb {{.*#+}} ymm5 = [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63]
-; AVX512F-NEXT: vpand %ymm5, %ymm3, %ymm3
-; AVX512F-NEXT: vpsllw $3, %ymm3, %ymm7
-; AVX512F-NEXT: vpbroadcastb {{.*#+}} ymm8 = [248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248]
-; AVX512F-NEXT: vpand %ymm7, %ymm8, %ymm7
-; AVX512F-NEXT: vpsubb %ymm7, %ymm3, %ymm3
+; AVX512F-NEXT: vpbroadcastb {{.*#+}} ymm8 = [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63]
+; AVX512F-NEXT: vpand %ymm3, %ymm8, %ymm3
+; AVX512F-NEXT: vpsubb %ymm5, %ymm3, %ymm3
; AVX512F-NEXT: vpaddb %ymm3, %ymm1, %ymm1
; AVX512F-NEXT: vpunpckhbw {{.*#+}} ymm3 = ymm0[8],ymm2[8],ymm0[9],ymm2[9],ymm0[10],ymm2[10],ymm0[11],ymm2[11],ymm0[12],ymm2[12],ymm0[13],ymm2[13],ymm0[14],ymm2[14],ymm0[15],ymm2[15],ymm0[24],ymm2[24],ymm0[25],ymm2[25],ymm0[26],ymm2[26],ymm0[27],ymm2[27],ymm0[28],ymm2[28],ymm0[29],ymm2[29],ymm0[30],ymm2[30],ymm0[31],ymm2[31]
; AVX512F-NEXT: vpmullw %ymm4, %ymm3, %ymm3
@@ -504,10 +504,10 @@ define <64 x i8> @test_rem7_64i8(<64 x i8> %a) nounwind {
; AVX512F-NEXT: vpsrlw $1, %ymm3, %ymm3
; AVX512F-NEXT: vpand %ymm6, %ymm3, %ymm3
; AVX512F-NEXT: vpaddb %ymm2, %ymm3, %ymm2
+; AVX512F-NEXT: vpsllw $1, %ymm2, %ymm3
+; AVX512F-NEXT: vpand %ymm7, %ymm3, %ymm3
; AVX512F-NEXT: vpsrlw $2, %ymm2, %ymm2
-; AVX512F-NEXT: vpand %ymm5, %ymm2, %ymm2
-; AVX512F-NEXT: vpsllw $3, %ymm2, %ymm3
-; AVX512F-NEXT: vpand %ymm3, %ymm8, %ymm3
+; AVX512F-NEXT: vpand %ymm2, %ymm8, %ymm2
; AVX512F-NEXT: vpsubb %ymm3, %ymm2, %ymm2
; AVX512F-NEXT: vpaddb %ymm2, %ymm0, %ymm0
; AVX512F-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0
@@ -528,10 +528,10 @@ define <64 x i8> @test_rem7_64i8(<64 x i8> %a) nounwind {
; AVX512BW-NEXT: vpsrlw $1, %zmm2, %zmm2
; AVX512BW-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm2, %zmm2
; AVX512BW-NEXT: vpaddb %zmm1, %zmm2, %zmm1
+; AVX512BW-NEXT: vpsllw $1, %zmm1, %zmm2
+; AVX512BW-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm2, %zmm2
; AVX512BW-NEXT: vpsrlw $2, %zmm1, %zmm1
; AVX512BW-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm1, %zmm1
-; AVX512BW-NEXT: vpsllw $3, %zmm1, %zmm2
-; AVX512BW-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm2, %zmm2
; AVX512BW-NEXT: vpsubb %zmm2, %zmm1, %zmm1
; AVX512BW-NEXT: vpaddb %zmm1, %zmm0, %zmm0
; AVX512BW-NEXT: retq
diff --git a/llvm/test/CodeGen/X86/vector_splat-const-shift-of-constmasked.ll b/llvm/test/CodeGen/X86/vector_splat-const-shift-of-constmasked.ll
index b39e2bb620d6f4..54dc107fd0c10c 100644
--- a/llvm/test/CodeGen/X86/vector_splat-const-shift-of-constmasked.ll
+++ b/llvm/test/CodeGen/X86/vector_splat-const-shift-of-constmasked.ll
@@ -3177,10 +3177,10 @@ define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_ashr_32(<2 x i64> %
; X86-AVX2-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_32:
; X86-AVX2: # %bb.0:
; X86-AVX2-NEXT: vpbroadcastd {{.*#+}} xmm1 = [4294967294,4294967294,4294967294,4294967294]
-; X86-AVX2-NEXT: vpand %xmm1, %xmm0, %xmm0
-; X86-AVX2-NEXT: vpsrad $31, %xmm0, %xmm1
-; X86-AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
-; X86-AVX2-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
+; X86-AVX2-NEXT: vpand %xmm1, %xmm0, %xmm1
+; X86-AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
+; X86-AVX2-NEXT: vpsrad $31, %xmm0, %xmm0
+; X86-AVX2-NEXT: vpblendd {{.*#+}} xmm0 = xmm1[0],xmm0[1],xmm1[2],xmm0[3]
; X86-AVX2-NEXT: retl
;
; X64-SSE2-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_32:
More information about the llvm-commits
mailing list