diff options
| author | Craig Topper <craig.topper@gmail.com> | 2017-01-11 04:02:23 +0000 |
|---|---|---|
| committer | Craig Topper <craig.topper@gmail.com> | 2017-01-11 04:02:23 +0000 |
| commit | 577d2585692ebce959aecd3d997cfe9b0e045fc0 (patch) | |
| tree | 83f75385b20e501921665c99de4c69f206243266 /llvm | |
| parent | ba1b5c98ba941b4382fc26bcf6b410c3120c22d9 (diff) | |
| download | bcm5719-llvm-577d2585692ebce959aecd3d997cfe9b0e045fc0.tar.gz bcm5719-llvm-577d2585692ebce959aecd3d997cfe9b0e045fc0.zip | |
[DAGCombiner] Teach DAG combiner to fold (vselect (N0 xor AllOnes), N1, N2) -> (vselect N0, N2, N1). Only do this if the target indicates its vector boolean type is ZeroOrNegativeOneBooleanContent.
llvm-svn: 291645
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 9 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/vec_minmax_sint.ll | 136 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/vec_minmax_uint.ll | 159 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/vselect-minmax.ll | 604 |
4 files changed, 348 insertions, 560 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 680f62fa91b..2f603628916 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -5966,6 +5966,15 @@ SDValue DAGCombiner::visitVSELECT(SDNode *N) { return CV; } + // Fold (vselect (N0 xor AllOnes), N1, N2) -> (vselect N0, N2, N1) + if (N0.getOpcode() == ISD::XOR && + ISD::isBuildVectorAllOnes(N0.getOperand(1).getNode()) && + TLI.getBooleanContents(N0.getValueType()) == + TargetLowering::ZeroOrNegativeOneBooleanContent) { + EVT VT = N->getValueType(0); + return DAG.getNode(ISD::VSELECT, DL, VT, N0.getOperand(0), N2, N1); + } + return SDValue(); } diff --git a/llvm/test/CodeGen/X86/vec_minmax_sint.ll b/llvm/test/CodeGen/X86/vec_minmax_sint.ll index 419eb2bed74..090fe2ea8a0 100644 --- a/llvm/test/CodeGen/X86/vec_minmax_sint.ll +++ b/llvm/test/CodeGen/X86/vec_minmax_sint.ll @@ -423,33 +423,27 @@ define <2 x i64> @max_ge_v2i64(<2 x i64> %a, <2 x i64> %b) { ; SSE41-NEXT: pcmpgtd %xmm3, %xmm4 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] ; SSE41-NEXT: pcmpeqd %xmm3, %xmm0 -; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] -; SSE41-NEXT: pand %xmm5, %xmm0 -; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] -; SSE41-NEXT: por %xmm0, %xmm3 -; SSE41-NEXT: pcmpeqd %xmm0, %xmm0 -; SSE41-NEXT: pxor %xmm3, %xmm0 -; SSE41-NEXT: blendvpd %xmm2, %xmm1 -; SSE41-NEXT: movapd %xmm1, %xmm0 +; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3] +; SSE41-NEXT: pand %xmm5, %xmm3 +; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3] +; SSE41-NEXT: por %xmm3, %xmm0 +; SSE41-NEXT: blendvpd %xmm1, %xmm2 +; SSE41-NEXT: movapd %xmm2, %xmm0 ; SSE41-NEXT: retq ; ; SSE42-LABEL: max_ge_v2i64: ; SSE42: # BB#0: ; SSE42-NEXT: movdqa %xmm0, %xmm2 -; SSE42-NEXT: movdqa %xmm1, %xmm3 -; SSE42-NEXT: pcmpgtq %xmm2, %xmm3 -; SSE42-NEXT: pcmpeqd %xmm0, %xmm0 -; SSE42-NEXT: pxor %xmm3, %xmm0 -; SSE42-NEXT: blendvpd %xmm2, %xmm1 -; SSE42-NEXT: movapd %xmm1, %xmm0 +; SSE42-NEXT: movdqa %xmm1, %xmm0 +; SSE42-NEXT: pcmpgtq %xmm2, %xmm0 +; SSE42-NEXT: blendvpd %xmm1, %xmm2 +; SSE42-NEXT: movapd %xmm2, %xmm0 ; SSE42-NEXT: retq ; ; AVX-LABEL: max_ge_v2i64: ; AVX: # BB#0: ; AVX-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 -; AVX-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 -; AVX-NEXT: vpxor %xmm3, %xmm2, %xmm2 -; AVX-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 +; AVX-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 ; AVX-NEXT: retq %1 = icmp sge <2 x i64> %a, %b %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b @@ -499,7 +493,7 @@ define <4 x i64> @max_ge_v4i64(<4 x i64> %a, <4 x i64> %b) { ; ; SSE41-LABEL: max_ge_v4i64: ; SSE41: # BB#0: -; SSE41-NEXT: movdqa %xmm0, %xmm8 +; SSE41-NEXT: movdqa %xmm0, %xmm4 ; SSE41-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,0,2147483648,0] ; SSE41-NEXT: movdqa %xmm1, %xmm5 ; SSE41-NEXT: pxor %xmm0, %xmm5 @@ -507,31 +501,27 @@ define <4 x i64> @max_ge_v4i64(<4 x i64> %a, <4 x i64> %b) { ; SSE41-NEXT: pxor %xmm0, %xmm6 ; SSE41-NEXT: movdqa %xmm6, %xmm7 ; SSE41-NEXT: pcmpgtd %xmm5, %xmm7 -; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2] +; SSE41-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] ; SSE41-NEXT: pcmpeqd %xmm5, %xmm6 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] -; SSE41-NEXT: pand %xmm4, %xmm6 +; SSE41-NEXT: pand %xmm8, %xmm6 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] ; SSE41-NEXT: por %xmm6, %xmm5 -; SSE41-NEXT: pcmpeqd %xmm9, %xmm9 -; SSE41-NEXT: pxor %xmm9, %xmm5 -; SSE41-NEXT: movdqa %xmm8, %xmm6 +; SSE41-NEXT: movdqa %xmm4, %xmm6 ; SSE41-NEXT: pxor %xmm0, %xmm6 ; SSE41-NEXT: pxor %xmm2, %xmm0 ; SSE41-NEXT: movdqa %xmm0, %xmm7 ; SSE41-NEXT: pcmpgtd %xmm6, %xmm7 -; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2] +; SSE41-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] ; SSE41-NEXT: pcmpeqd %xmm6, %xmm0 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] -; SSE41-NEXT: pand %xmm4, %xmm6 +; SSE41-NEXT: pand %xmm8, %xmm6 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm7[1,1,3,3] ; SSE41-NEXT: por %xmm6, %xmm0 -; SSE41-NEXT: pxor %xmm9, %xmm0 -; SSE41-NEXT: blendvpd %xmm8, %xmm2 +; SSE41-NEXT: blendvpd %xmm2, %xmm4 ; SSE41-NEXT: movdqa %xmm5, %xmm0 -; SSE41-NEXT: blendvpd %xmm1, %xmm3 -; SSE41-NEXT: movapd %xmm2, %xmm0 -; SSE41-NEXT: movapd %xmm3, %xmm1 +; SSE41-NEXT: blendvpd %xmm3, %xmm1 +; SSE41-NEXT: movapd %xmm4, %xmm0 ; SSE41-NEXT: retq ; ; SSE42-LABEL: max_ge_v4i64: @@ -539,16 +529,12 @@ define <4 x i64> @max_ge_v4i64(<4 x i64> %a, <4 x i64> %b) { ; SSE42-NEXT: movdqa %xmm0, %xmm4 ; SSE42-NEXT: movdqa %xmm3, %xmm5 ; SSE42-NEXT: pcmpgtq %xmm1, %xmm5 -; SSE42-NEXT: pcmpeqd %xmm0, %xmm0 -; SSE42-NEXT: pxor %xmm0, %xmm5 -; SSE42-NEXT: movdqa %xmm2, %xmm6 -; SSE42-NEXT: pcmpgtq %xmm4, %xmm6 -; SSE42-NEXT: pxor %xmm6, %xmm0 -; SSE42-NEXT: blendvpd %xmm4, %xmm2 +; SSE42-NEXT: movdqa %xmm2, %xmm0 +; SSE42-NEXT: pcmpgtq %xmm4, %xmm0 +; SSE42-NEXT: blendvpd %xmm2, %xmm4 ; SSE42-NEXT: movdqa %xmm5, %xmm0 -; SSE42-NEXT: blendvpd %xmm1, %xmm3 -; SSE42-NEXT: movapd %xmm2, %xmm0 -; SSE42-NEXT: movapd %xmm3, %xmm1 +; SSE42-NEXT: blendvpd %xmm3, %xmm1 +; SSE42-NEXT: movapd %xmm4, %xmm0 ; SSE42-NEXT: retq ; ; AVX1-LABEL: max_ge_v4i64: @@ -567,17 +553,13 @@ define <4 x i64> @max_ge_v4i64(<4 x i64> %a, <4 x i64> %b) { ; AVX2-LABEL: max_ge_v4i64: ; AVX2: # BB#0: ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 -; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 -; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 -; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 +; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 ; AVX2-NEXT: retq ; ; AVX512-LABEL: max_ge_v4i64: ; AVX512: # BB#0: ; AVX512-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 -; AVX512-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 -; AVX512-NEXT: vpxor %ymm3, %ymm2, %ymm2 -; AVX512-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 +; AVX512-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 ; AVX512-NEXT: retq %1 = icmp sge <4 x i64> %a, %b %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b @@ -1217,32 +1199,26 @@ define <2 x i64> @min_le_v2i64(<2 x i64> %a, <2 x i64> %b) { ; SSE41-NEXT: pcmpgtd %xmm3, %xmm4 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] ; SSE41-NEXT: pcmpeqd %xmm3, %xmm0 -; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] -; SSE41-NEXT: pand %xmm5, %xmm0 -; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] -; SSE41-NEXT: por %xmm0, %xmm3 -; SSE41-NEXT: pcmpeqd %xmm0, %xmm0 -; SSE41-NEXT: pxor %xmm3, %xmm0 -; SSE41-NEXT: blendvpd %xmm2, %xmm1 -; SSE41-NEXT: movapd %xmm1, %xmm0 +; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3] +; SSE41-NEXT: pand %xmm5, %xmm3 +; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3] +; SSE41-NEXT: por %xmm3, %xmm0 +; SSE41-NEXT: blendvpd %xmm1, %xmm2 +; SSE41-NEXT: movapd %xmm2, %xmm0 ; SSE41-NEXT: retq ; ; SSE42-LABEL: min_le_v2i64: ; SSE42: # BB#0: ; SSE42-NEXT: movdqa %xmm0, %xmm2 ; SSE42-NEXT: pcmpgtq %xmm1, %xmm0 -; SSE42-NEXT: pcmpeqd %xmm3, %xmm3 -; SSE42-NEXT: pxor %xmm3, %xmm0 -; SSE42-NEXT: blendvpd %xmm2, %xmm1 -; SSE42-NEXT: movapd %xmm1, %xmm0 +; SSE42-NEXT: blendvpd %xmm1, %xmm2 +; SSE42-NEXT: movapd %xmm2, %xmm0 ; SSE42-NEXT: retq ; ; AVX-LABEL: min_le_v2i64: ; AVX: # BB#0: ; AVX-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 -; AVX-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 -; AVX-NEXT: vpxor %xmm3, %xmm2, %xmm2 -; AVX-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 +; AVX-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 ; AVX-NEXT: retq %1 = icmp sle <2 x i64> %a, %b %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b @@ -1292,7 +1268,7 @@ define <4 x i64> @min_le_v4i64(<4 x i64> %a, <4 x i64> %b) { ; ; SSE41-LABEL: min_le_v4i64: ; SSE41: # BB#0: -; SSE41-NEXT: movdqa %xmm0, %xmm8 +; SSE41-NEXT: movdqa %xmm0, %xmm4 ; SSE41-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,0,2147483648,0] ; SSE41-NEXT: movdqa %xmm3, %xmm5 ; SSE41-NEXT: pxor %xmm0, %xmm5 @@ -1300,31 +1276,27 @@ define <4 x i64> @min_le_v4i64(<4 x i64> %a, <4 x i64> %b) { ; SSE41-NEXT: pxor %xmm0, %xmm6 ; SSE41-NEXT: movdqa %xmm6, %xmm7 ; SSE41-NEXT: pcmpgtd %xmm5, %xmm7 -; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2] +; SSE41-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] ; SSE41-NEXT: pcmpeqd %xmm5, %xmm6 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] -; SSE41-NEXT: pand %xmm4, %xmm6 +; SSE41-NEXT: pand %xmm8, %xmm6 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] ; SSE41-NEXT: por %xmm6, %xmm5 -; SSE41-NEXT: pcmpeqd %xmm9, %xmm9 -; SSE41-NEXT: pxor %xmm9, %xmm5 ; SSE41-NEXT: movdqa %xmm2, %xmm6 ; SSE41-NEXT: pxor %xmm0, %xmm6 -; SSE41-NEXT: pxor %xmm8, %xmm0 +; SSE41-NEXT: pxor %xmm4, %xmm0 ; SSE41-NEXT: movdqa %xmm0, %xmm7 ; SSE41-NEXT: pcmpgtd %xmm6, %xmm7 -; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2] +; SSE41-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] ; SSE41-NEXT: pcmpeqd %xmm6, %xmm0 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] -; SSE41-NEXT: pand %xmm4, %xmm6 +; SSE41-NEXT: pand %xmm8, %xmm6 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm7[1,1,3,3] ; SSE41-NEXT: por %xmm6, %xmm0 -; SSE41-NEXT: pxor %xmm9, %xmm0 -; SSE41-NEXT: blendvpd %xmm8, %xmm2 +; SSE41-NEXT: blendvpd %xmm2, %xmm4 ; SSE41-NEXT: movdqa %xmm5, %xmm0 -; SSE41-NEXT: blendvpd %xmm1, %xmm3 -; SSE41-NEXT: movapd %xmm2, %xmm0 -; SSE41-NEXT: movapd %xmm3, %xmm1 +; SSE41-NEXT: blendvpd %xmm3, %xmm1 +; SSE41-NEXT: movapd %xmm4, %xmm0 ; SSE41-NEXT: retq ; ; SSE42-LABEL: min_le_v4i64: @@ -1332,15 +1304,11 @@ define <4 x i64> @min_le_v4i64(<4 x i64> %a, <4 x i64> %b) { ; SSE42-NEXT: movdqa %xmm0, %xmm4 ; SSE42-NEXT: movdqa %xmm1, %xmm5 ; SSE42-NEXT: pcmpgtq %xmm3, %xmm5 -; SSE42-NEXT: pcmpeqd %xmm6, %xmm6 -; SSE42-NEXT: pxor %xmm6, %xmm5 ; SSE42-NEXT: pcmpgtq %xmm2, %xmm0 -; SSE42-NEXT: pxor %xmm6, %xmm0 -; SSE42-NEXT: blendvpd %xmm4, %xmm2 +; SSE42-NEXT: blendvpd %xmm2, %xmm4 ; SSE42-NEXT: movdqa %xmm5, %xmm0 -; SSE42-NEXT: blendvpd %xmm1, %xmm3 -; SSE42-NEXT: movapd %xmm2, %xmm0 -; SSE42-NEXT: movapd %xmm3, %xmm1 +; SSE42-NEXT: blendvpd %xmm3, %xmm1 +; SSE42-NEXT: movapd %xmm4, %xmm0 ; SSE42-NEXT: retq ; ; AVX1-LABEL: min_le_v4i64: @@ -1359,17 +1327,13 @@ define <4 x i64> @min_le_v4i64(<4 x i64> %a, <4 x i64> %b) { ; AVX2-LABEL: min_le_v4i64: ; AVX2: # BB#0: ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 -; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 -; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 -; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 +; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 ; AVX2-NEXT: retq ; ; AVX512-LABEL: min_le_v4i64: ; AVX512: # BB#0: ; AVX512-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 -; AVX512-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 -; AVX512-NEXT: vpxor %ymm3, %ymm2, %ymm2 -; AVX512-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 +; AVX512-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 ; AVX512-NEXT: retq %1 = icmp sle <4 x i64> %a, %b %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b diff --git a/llvm/test/CodeGen/X86/vec_minmax_uint.ll b/llvm/test/CodeGen/X86/vec_minmax_uint.ll index 6e48423c152..feee84f85c5 100644 --- a/llvm/test/CodeGen/X86/vec_minmax_uint.ll +++ b/llvm/test/CodeGen/X86/vec_minmax_uint.ll @@ -462,27 +462,24 @@ define <2 x i64> @max_ge_v2i64(<2 x i64> %a, <2 x i64> %b) { ; SSE41-NEXT: pcmpgtd %xmm3, %xmm4 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] ; SSE41-NEXT: pcmpeqd %xmm3, %xmm0 -; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] -; SSE41-NEXT: pand %xmm5, %xmm0 -; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] -; SSE41-NEXT: por %xmm0, %xmm3 -; SSE41-NEXT: pcmpeqd %xmm0, %xmm0 -; SSE41-NEXT: pxor %xmm3, %xmm0 -; SSE41-NEXT: blendvpd %xmm2, %xmm1 -; SSE41-NEXT: movapd %xmm1, %xmm0 +; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3] +; SSE41-NEXT: pand %xmm5, %xmm3 +; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3] +; SSE41-NEXT: por %xmm3, %xmm0 +; SSE41-NEXT: blendvpd %xmm1, %xmm2 +; SSE41-NEXT: movapd %xmm2, %xmm0 ; SSE41-NEXT: retq ; ; SSE42-LABEL: max_ge_v2i64: ; SSE42: # BB#0: ; SSE42-NEXT: movdqa %xmm0, %xmm2 -; SSE42-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] -; SSE42-NEXT: pxor %xmm3, %xmm0 -; SSE42-NEXT: pxor %xmm1, %xmm3 -; SSE42-NEXT: pcmpgtq %xmm0, %xmm3 -; SSE42-NEXT: pcmpeqd %xmm0, %xmm0 -; SSE42-NEXT: pxor %xmm3, %xmm0 -; SSE42-NEXT: blendvpd %xmm2, %xmm1 -; SSE42-NEXT: movapd %xmm1, %xmm0 +; SSE42-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] +; SSE42-NEXT: movdqa %xmm2, %xmm3 +; SSE42-NEXT: pxor %xmm0, %xmm3 +; SSE42-NEXT: pxor %xmm1, %xmm0 +; SSE42-NEXT: pcmpgtq %xmm3, %xmm0 +; SSE42-NEXT: blendvpd %xmm1, %xmm2 +; SSE42-NEXT: movapd %xmm2, %xmm0 ; SSE42-NEXT: retq ; ; AVX-LABEL: max_ge_v2i64: @@ -491,9 +488,7 @@ define <2 x i64> @max_ge_v2i64(<2 x i64> %a, <2 x i64> %b) { ; AVX-NEXT: vpxor %xmm2, %xmm0, %xmm3 ; AVX-NEXT: vpxor %xmm2, %xmm1, %xmm2 ; AVX-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 -; AVX-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 -; AVX-NEXT: vpxor %xmm3, %xmm2, %xmm2 -; AVX-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 +; AVX-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 ; AVX-NEXT: retq %1 = icmp uge <2 x i64> %a, %b %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b @@ -543,7 +538,7 @@ define <4 x i64> @max_ge_v4i64(<4 x i64> %a, <4 x i64> %b) { ; ; SSE41-LABEL: max_ge_v4i64: ; SSE41: # BB#0: -; SSE41-NEXT: movdqa %xmm0, %xmm8 +; SSE41-NEXT: movdqa %xmm0, %xmm4 ; SSE41-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648] ; SSE41-NEXT: movdqa %xmm1, %xmm5 ; SSE41-NEXT: pxor %xmm0, %xmm5 @@ -551,31 +546,27 @@ define <4 x i64> @max_ge_v4i64(<4 x i64> %a, <4 x i64> %b) { ; SSE41-NEXT: pxor %xmm0, %xmm6 ; SSE41-NEXT: movdqa %xmm6, %xmm7 ; SSE41-NEXT: pcmpgtd %xmm5, %xmm7 -; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2] +; SSE41-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] ; SSE41-NEXT: pcmpeqd %xmm5, %xmm6 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] -; SSE41-NEXT: pand %xmm4, %xmm6 +; SSE41-NEXT: pand %xmm8, %xmm6 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] ; SSE41-NEXT: por %xmm6, %xmm5 -; SSE41-NEXT: pcmpeqd %xmm9, %xmm9 -; SSE41-NEXT: pxor %xmm9, %xmm5 -; SSE41-NEXT: movdqa %xmm8, %xmm6 +; SSE41-NEXT: movdqa %xmm4, %xmm6 ; SSE41-NEXT: pxor %xmm0, %xmm6 ; SSE41-NEXT: pxor %xmm2, %xmm0 ; SSE41-NEXT: movdqa %xmm0, %xmm7 ; SSE41-NEXT: pcmpgtd %xmm6, %xmm7 -; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2] +; SSE41-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] ; SSE41-NEXT: pcmpeqd %xmm6, %xmm0 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] -; SSE41-NEXT: pand %xmm4, %xmm6 +; SSE41-NEXT: pand %xmm8, %xmm6 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm7[1,1,3,3] ; SSE41-NEXT: por %xmm6, %xmm0 -; SSE41-NEXT: pxor %xmm9, %xmm0 -; SSE41-NEXT: blendvpd %xmm8, %xmm2 +; SSE41-NEXT: blendvpd %xmm2, %xmm4 ; SSE41-NEXT: movdqa %xmm5, %xmm0 -; SSE41-NEXT: blendvpd %xmm1, %xmm3 -; SSE41-NEXT: movapd %xmm2, %xmm0 -; SSE41-NEXT: movapd %xmm3, %xmm1 +; SSE41-NEXT: blendvpd %xmm3, %xmm1 +; SSE41-NEXT: movapd %xmm4, %xmm0 ; SSE41-NEXT: retq ; ; SSE42-LABEL: max_ge_v4i64: @@ -587,18 +578,14 @@ define <4 x i64> @max_ge_v4i64(<4 x i64> %a, <4 x i64> %b) { ; SSE42-NEXT: movdqa %xmm3, %xmm5 ; SSE42-NEXT: pxor %xmm0, %xmm5 ; SSE42-NEXT: pcmpgtq %xmm6, %xmm5 -; SSE42-NEXT: pcmpeqd %xmm6, %xmm6 -; SSE42-NEXT: pxor %xmm6, %xmm5 -; SSE42-NEXT: movdqa %xmm4, %xmm7 -; SSE42-NEXT: pxor %xmm0, %xmm7 +; SSE42-NEXT: movdqa %xmm4, %xmm6 +; SSE42-NEXT: pxor %xmm0, %xmm6 ; SSE42-NEXT: pxor %xmm2, %xmm0 -; SSE42-NEXT: pcmpgtq %xmm7, %xmm0 -; SSE42-NEXT: pxor %xmm6, %xmm0 -; SSE42-NEXT: blendvpd %xmm4, %xmm2 +; SSE42-NEXT: pcmpgtq %xmm6, %xmm0 +; SSE42-NEXT: blendvpd %xmm2, %xmm4 ; SSE42-NEXT: movdqa %xmm5, %xmm0 -; SSE42-NEXT: blendvpd %xmm1, %xmm3 -; SSE42-NEXT: movapd %xmm2, %xmm0 -; SSE42-NEXT: movapd %xmm3, %xmm1 +; SSE42-NEXT: blendvpd %xmm3, %xmm1 +; SSE42-NEXT: movapd %xmm4, %xmm0 ; SSE42-NEXT: retq ; ; AVX1-LABEL: max_ge_v4i64: @@ -625,9 +612,7 @@ define <4 x i64> @max_ge_v4i64(<4 x i64> %a, <4 x i64> %b) { ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 -; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 -; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 -; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 +; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 ; AVX2-NEXT: retq ; ; AVX512-LABEL: max_ge_v4i64: @@ -636,9 +621,7 @@ define <4 x i64> @max_ge_v4i64(<4 x i64> %a, <4 x i64> %b) { ; AVX512-NEXT: vpxor %ymm2, %ymm0, %ymm3 ; AVX512-NEXT: vpxor %ymm2, %ymm1, %ymm2 ; AVX512-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 -; AVX512-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 -; AVX512-NEXT: vpxor %ymm3, %ymm2, %ymm2 -; AVX512-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 +; AVX512-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 ; AVX512-NEXT: retq %1 = icmp uge <4 x i64> %a, %b %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b @@ -1324,28 +1307,24 @@ define <2 x i64> @min_le_v2i64(<2 x i64> %a, <2 x i64> %b) { ; SSE41-NEXT: pcmpgtd %xmm3, %xmm4 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] ; SSE41-NEXT: pcmpeqd %xmm3, %xmm0 -; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] -; SSE41-NEXT: pand %xmm5, %xmm0 -; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] -; SSE41-NEXT: por %xmm0, %xmm3 -; SSE41-NEXT: pcmpeqd %xmm0, %xmm0 -; SSE41-NEXT: pxor %xmm3, %xmm0 -; SSE41-NEXT: blendvpd %xmm2, %xmm1 -; SSE41-NEXT: movapd %xmm1, %xmm0 +; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3] +; SSE41-NEXT: pand %xmm5, %xmm3 +; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3] +; SSE41-NEXT: por %xmm3, %xmm0 +; SSE41-NEXT: blendvpd %xmm1, %xmm2 +; SSE41-NEXT: movapd %xmm2, %xmm0 ; SSE41-NEXT: retq ; ; SSE42-LABEL: min_le_v2i64: ; SSE42: # BB#0: ; SSE42-NEXT: movdqa %xmm0, %xmm2 -; SSE42-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] -; SSE42-NEXT: movdqa %xmm1, %xmm0 -; SSE42-NEXT: pxor %xmm3, %xmm0 -; SSE42-NEXT: pxor %xmm2, %xmm3 -; SSE42-NEXT: pcmpgtq %xmm0, %xmm3 -; SSE42-NEXT: pcmpeqd %xmm0, %xmm0 -; SSE42-NEXT: pxor %xmm3, %xmm0 -; SSE42-NEXT: blendvpd %xmm2, %xmm1 -; SSE42-NEXT: movapd %xmm1, %xmm0 +; SSE42-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] +; SSE42-NEXT: movdqa %xmm1, %xmm3 +; SSE42-NEXT: pxor %xmm0, %xmm3 +; SSE42-NEXT: pxor %xmm2, %xmm0 +; SSE42-NEXT: pcmpgtq %xmm3, %xmm0 +; SSE42-NEXT: blendvpd %xmm1, %xmm2 +; SSE42-NEXT: movapd %xmm2, %xmm0 ; SSE42-NEXT: retq ; ; AVX-LABEL: min_le_v2i64: @@ -1354,9 +1333,7 @@ define <2 x i64> @min_le_v2i64(<2 x i64> %a, <2 x i64> %b) { ; AVX-NEXT: vpxor %xmm2, %xmm1, %xmm3 ; AVX-NEXT: vpxor %xmm2, %xmm0, %xmm2 ; AVX-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 -; AVX-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 -; AVX-NEXT: vpxor %xmm3, %xmm2, %xmm2 -; AVX-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 +; AVX-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 ; AVX-NEXT: retq %1 = icmp ule <2 x i64> %a, %b %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b @@ -1406,7 +1383,7 @@ define <4 x i64> @min_le_v4i64(<4 x i64> %a, <4 x i64> %b) { ; ; SSE41-LABEL: min_le_v4i64: ; SSE41: # BB#0: -; SSE41-NEXT: movdqa %xmm0, %xmm8 +; SSE41-NEXT: movdqa %xmm0, %xmm4 ; SSE41-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648] ; SSE41-NEXT: movdqa %xmm3, %xmm5 ; SSE41-NEXT: pxor %xmm0, %xmm5 @@ -1414,31 +1391,27 @@ define <4 x i64> @min_le_v4i64(<4 x i64> %a, <4 x i64> %b) { ; SSE41-NEXT: pxor %xmm0, %xmm6 ; SSE41-NEXT: movdqa %xmm6, %xmm7 ; SSE41-NEXT: pcmpgtd %xmm5, %xmm7 -; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2] +; SSE41-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] ; SSE41-NEXT: pcmpeqd %xmm5, %xmm6 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] -; SSE41-NEXT: pand %xmm4, %xmm6 +; SSE41-NEXT: pand %xmm8, %xmm6 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] ; SSE41-NEXT: por %xmm6, %xmm5 -; SSE41-NEXT: pcmpeqd %xmm9, %xmm9 -; SSE41-NEXT: pxor %xmm9, %xmm5 ; SSE41-NEXT: movdqa %xmm2, %xmm6 ; SSE41-NEXT: pxor %xmm0, %xmm6 -; SSE41-NEXT: pxor %xmm8, %xmm0 +; SSE41-NEXT: pxor %xmm4, %xmm0 ; SSE41-NEXT: movdqa %xmm0, %xmm7 ; SSE41-NEXT: pcmpgtd %xmm6, %xmm7 -; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2] +; SSE41-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] ; SSE41-NEXT: pcmpeqd %xmm6, %xmm0 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] -; SSE41-NEXT: pand %xmm4, %xmm6 +; SSE41-NEXT: pand %xmm8, %xmm6 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm7[1,1,3,3] ; SSE41-NEXT: por %xmm6, %xmm0 -; SSE41-NEXT: pxor %xmm9, %xmm0 -; SSE41-NEXT: blendvpd %xmm8, %xmm2 +; SSE41-NEXT: blendvpd %xmm2, %xmm4 ; SSE41-NEXT: movdqa %xmm5, %xmm0 -; SSE41-NEXT: blendvpd %xmm1, %xmm3 -; SSE41-NEXT: movapd %xmm2, %xmm0 -; SSE41-NEXT: movapd %xmm3, %xmm1 +; SSE41-NEXT: blendvpd %xmm3, %xmm1 +; SSE41-NEXT: movapd %xmm4, %xmm0 ; SSE41-NEXT: retq ; ; SSE42-LABEL: min_le_v4i64: @@ -1450,18 +1423,14 @@ define <4 x i64> @min_le_v4i64(<4 x i64> %a, <4 x i64> %b) { ; SSE42-NEXT: movdqa %xmm1, %xmm5 ; SSE42-NEXT: pxor %xmm0, %xmm5 ; SSE42-NEXT: pcmpgtq %xmm6, %xmm5 -; SSE42-NEXT: pcmpeqd %xmm6, %xmm6 -; SSE42-NEXT: pxor %xmm6, %xmm5 -; SSE42-NEXT: movdqa %xmm2, %xmm7 -; SSE42-NEXT: pxor %xmm0, %xmm7 +; SSE42-NEXT: movdqa %xmm2, %xmm6 +; SSE42-NEXT: pxor %xmm0, %xmm6 ; SSE42-NEXT: pxor %xmm4, %xmm0 -; SSE42-NEXT: pcmpgtq %xmm7, %xmm0 -; SSE42-NEXT: pxor %xmm6, %xmm0 -; SSE42-NEXT: blendvpd %xmm4, %xmm2 +; SSE42-NEXT: pcmpgtq %xmm6, %xmm0 +; SSE42-NEXT: blendvpd %xmm2, %xmm4 ; SSE42-NEXT: movdqa %xmm5, %xmm0 -; SSE42-NEXT: blendvpd %xmm1, %xmm3 -; SSE42-NEXT: movapd %xmm2, %xmm0 -; SSE42-NEXT: movapd %xmm3, %xmm1 +; SSE42-NEXT: blendvpd %xmm3, %xmm1 +; SSE42-NEXT: movapd %xmm4, %xmm0 ; SSE42-NEXT: retq ; ; AVX1-LABEL: min_le_v4i64: @@ -1488,9 +1457,7 @@ define <4 x i64> @min_le_v4i64(<4 x i64> %a, <4 x i64> %b) { ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 -; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 -; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 -; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 +; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 ; AVX2-NEXT: retq ; ; AVX512-LABEL: min_le_v4i64: @@ -1499,9 +1466,7 @@ define <4 x i64> @min_le_v4i64(<4 x i64> %a, <4 x i64> %b) { ; AVX512-NEXT: vpxor %ymm2, %ymm1, %ymm3 ; AVX512-NEXT: vpxor %ymm2, %ymm0, %ymm2 ; AVX512-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 -; AVX512-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 -; AVX512-NEXT: vpxor %ymm3, %ymm2, %ymm2 -; AVX512-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 +; AVX512-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 ; AVX512-NEXT: retq %1 = icmp ule <4 x i64> %a, %b %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b diff --git a/llvm/test/CodeGen/X86/vselect-minmax.ll b/llvm/test/CodeGen/X86/vselect-minmax.ll index 8e9f1d98091..ed2dd75f23f 100644 --- a/llvm/test/CodeGen/X86/vselect-minmax.ll +++ b/llvm/test/CodeGen/X86/vselect-minmax.ll @@ -4973,27 +4973,19 @@ define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) { ; SSE4-NEXT: movdqa %xmm0, %xmm8 ; SSE4-NEXT: movdqa %xmm3, %xmm9 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm9 -; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 -; SSE4-NEXT: pxor %xmm12, %xmm9 ; SSE4-NEXT: movdqa %xmm2, %xmm10 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm10 -; SSE4-NEXT: pxor %xmm12, %xmm10 ; SSE4-NEXT: movdqa %xmm1, %xmm11 ; SSE4-NEXT: pcmpgtq %xmm5, %xmm11 -; SSE4-NEXT: pxor %xmm12, %xmm11 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 -; SSE4-NEXT: pxor %xmm12, %xmm0 -; SSE4-NEXT: blendvpd %xmm8, %xmm4 +; SSE4-NEXT: blendvpd %xmm4, %xmm8 ; SSE4-NEXT: movdqa %xmm11, %xmm0 -; SSE4-NEXT: blendvpd %xmm1, %xmm5 +; SSE4-NEXT: blendvpd %xmm5, %xmm1 ; SSE4-NEXT: movdqa %xmm10, %xmm0 -; SSE4-NEXT: blendvpd %xmm2, %xmm6 +; SSE4-NEXT: blendvpd %xmm6, %xmm2 ; SSE4-NEXT: movdqa %xmm9, %xmm0 -; SSE4-NEXT: blendvpd %xmm3, %xmm7 -; SSE4-NEXT: movapd %xmm4, %xmm0 -; SSE4-NEXT: movapd %xmm5, %xmm1 -; SSE4-NEXT: movapd %xmm6, %xmm2 -; SSE4-NEXT: movapd %xmm7, %xmm3 +; SSE4-NEXT: blendvpd %xmm7, %xmm3 +; SSE4-NEXT: movapd %xmm8, %xmm0 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test122: @@ -5020,12 +5012,9 @@ define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) { ; AVX2-LABEL: test122: ; AVX2: # BB#0: # %entry ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm4 -; AVX2-NEXT: vpcmpeqd %ymm5, %ymm5, %ymm5 -; AVX2-NEXT: vpxor %ymm5, %ymm4, %ymm4 -; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm6 -; AVX2-NEXT: vpxor %ymm5, %ymm6, %ymm5 -; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 -; AVX2-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 +; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm5 +; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 +; AVX2-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 ; AVX2-NEXT: retq ; ; AVX512F-LABEL: test122: @@ -5248,28 +5237,20 @@ define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) { ; SSE4-NEXT: movdqa %xmm0, %xmm8 ; SSE4-NEXT: movdqa %xmm7, %xmm9 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm9 -; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 -; SSE4-NEXT: pxor %xmm0, %xmm9 ; SSE4-NEXT: movdqa %xmm6, %xmm10 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm10 -; SSE4-NEXT: pxor %xmm0, %xmm10 ; SSE4-NEXT: movdqa %xmm5, %xmm11 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm11 -; SSE4-NEXT: pxor %xmm0, %xmm11 -; SSE4-NEXT: movdqa %xmm4, %xmm12 -; SSE4-NEXT: pcmpgtq %xmm8, %xmm12 -; SSE4-NEXT: pxor %xmm12, %xmm0 -; SSE4-NEXT: blendvpd %xmm8, %xmm4 +; SSE4-NEXT: movdqa %xmm4, %xmm0 +; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 +; SSE4-NEXT: blendvpd %xmm4, %xmm8 ; SSE4-NEXT: movdqa %xmm11, %xmm0 -; SSE4-NEXT: blendvpd %xmm1, %xmm5 +; SSE4-NEXT: blendvpd %xmm5, %xmm1 ; SSE4-NEXT: movdqa %xmm10, %xmm0 -; SSE4-NEXT: blendvpd %xmm2, %xmm6 +; SSE4-NEXT: blendvpd %xmm6, %xmm2 ; SSE4-NEXT: movdqa %xmm9, %xmm0 -; SSE4-NEXT: blendvpd %xmm3, %xmm7 -; SSE4-NEXT: movapd %xmm4, %xmm0 -; SSE4-NEXT: movapd %xmm5, %xmm1 -; SSE4-NEXT: movapd %xmm6, %xmm2 -; SSE4-NEXT: movapd %xmm7, %xmm3 +; SSE4-NEXT: blendvpd %xmm7, %xmm3 +; SSE4-NEXT: movapd %xmm8, %xmm0 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test124: @@ -5296,12 +5277,9 @@ define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) { ; AVX2-LABEL: test124: ; AVX2: # BB#0: # %entry ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm4 -; AVX2-NEXT: vpcmpeqd %ymm5, %ymm5, %ymm5 -; AVX2-NEXT: vpxor %ymm5, %ymm4, %ymm4 -; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm6 -; AVX2-NEXT: vpxor %ymm5, %ymm6, %ymm5 -; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 -; AVX2-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 +; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm5 +; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 +; AVX2-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 ; AVX2-NEXT: retq ; ; AVX512F-LABEL: test124: @@ -5547,43 +5525,35 @@ define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) { ; ; SSE4-LABEL: test126: ; SSE4: # BB#0: # %entry -; SSE4-NEXT: movdqa %xmm0, %xmm9 +; SSE4-NEXT: movdqa %xmm0, %xmm8 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] ; SSE4-NEXT: movdqa %xmm7, %xmm10 ; SSE4-NEXT: pxor %xmm0, %xmm10 -; SSE4-NEXT: movdqa %xmm3, %xmm8 -; SSE4-NEXT: pxor %xmm0, %xmm8 -; SSE4-NEXT: pcmpgtq %xmm10, %xmm8 -; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 -; SSE4-NEXT: pxor %xmm12, %xmm8 +; SSE4-NEXT: movdqa %xmm3, %xmm9 +; SSE4-NEXT: pxor %xmm0, %xmm9 +; SSE4-NEXT: pcmpgtq %xmm10, %xmm9 ; SSE4-NEXT: movdqa %xmm6, %xmm11 ; SSE4-NEXT: pxor %xmm0, %xmm11 ; SSE4-NEXT: movdqa %xmm2, %xmm10 ; SSE4-NEXT: pxor %xmm0, %xmm10 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 -; SSE4-NEXT: pxor %xmm12, %xmm10 -; SSE4-NEXT: movdqa %xmm5, %xmm13 -; SSE4-NEXT: pxor %xmm0, %xmm13 +; SSE4-NEXT: movdqa %xmm5, %xmm12 +; SSE4-NEXT: pxor %xmm0, %xmm12 ; SSE4-NEXT: movdqa %xmm1, %xmm11 ; SSE4-NEXT: pxor %xmm0, %xmm11 -; SSE4-NEXT: pcmpgtq %xmm13, %xmm11 -; SSE4-NEXT: pxor %xmm12, %xmm11 -; SSE4-NEXT: movdqa %xmm4, %xmm13 -; SSE4-NEXT: pxor %xmm0, %xmm13 -; SSE4-NEXT: pxor %xmm9, %xmm0 -; SSE4-NEXT: pcmpgtq %xmm13, %xmm0 -; SSE4-NEXT: pxor %xmm12, %xmm0 -; SSE4-NEXT: blendvpd %xmm9, %xmm4 +; SSE4-NEXT: pcmpgtq %xmm12, %xmm11 +; SSE4-NEXT: movdqa %xmm4, %xmm12 +; SSE4-NEXT: pxor %xmm0, %xmm12 +; SSE4-NEXT: pxor %xmm8, %xmm0 +; SSE4-NEXT: pcmpgtq %xmm12, %xmm0 +; SSE4-NEXT: blendvpd %xmm4, %xmm8 ; SSE4-NEXT: movdqa %xmm11, %xmm0 -; SSE4-NEXT: blendvpd %xmm1, %xmm5 +; SSE4-NEXT: blendvpd %xmm5, %xmm1 ; SSE4-NEXT: movdqa %xmm10, %xmm0 -; SSE4-NEXT: blendvpd %xmm2, %xmm6 -; SSE4-NEXT: movdqa %xmm8, %xmm0 -; SSE4-NEXT: blendvpd %xmm3, %xmm7 -; SSE4-NEXT: movapd %xmm4, %xmm0 -; SSE4-NEXT: movapd %xmm5, %xmm1 -; SSE4-NEXT: movapd %xmm6, %xmm2 -; SSE4-NEXT: movapd %xmm7, %xmm3 +; SSE4-NEXT: blendvpd %xmm6, %xmm2 +; SSE4-NEXT: movdqa %xmm9, %xmm0 +; SSE4-NEXT: blendvpd %xmm7, %xmm3 +; SSE4-NEXT: movapd %xmm8, %xmm0 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test126: @@ -5622,14 +5592,11 @@ define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) { ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm5 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm6 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 -; AVX2-NEXT: vpcmpeqd %ymm6, %ymm6, %ymm6 -; AVX2-NEXT: vpxor %ymm6, %ymm5, %ymm5 -; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm7 +; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm4 -; AVX2-NEXT: vpcmpgtq %ymm7, %ymm4, %ymm4 -; AVX2-NEXT: vpxor %ymm6, %ymm4, %ymm4 -; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 -; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm3, %ymm1 +; AVX2-NEXT: vpcmpgtq %ymm6, %ymm4, %ymm4 +; AVX2-NEXT: vblendvpd %ymm4, %ymm2, %ymm0, %ymm0 +; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm1, %ymm1 ; AVX2-NEXT: retq ; ; AVX512F-LABEL: test126: @@ -5876,43 +5843,35 @@ define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) { ; ; SSE4-LABEL: test128: ; SSE4: # BB#0: # %entry -; SSE4-NEXT: movdqa %xmm0, %xmm9 +; SSE4-NEXT: movdqa %xmm0, %xmm8 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] ; SSE4-NEXT: movdqa %xmm3, %xmm10 ; SSE4-NEXT: pxor %xmm0, %xmm10 -; SSE4-NEXT: movdqa %xmm7, %xmm8 -; SSE4-NEXT: pxor %xmm0, %xmm8 -; SSE4-NEXT: pcmpgtq %xmm10, %xmm8 -; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 -; SSE4-NEXT: pxor %xmm12, %xmm8 +; SSE4-NEXT: movdqa %xmm7, %xmm9 +; SSE4-NEXT: pxor %xmm0, %xmm9 +; SSE4-NEXT: pcmpgtq %xmm10, %xmm9 ; SSE4-NEXT: movdqa %xmm2, %xmm11 ; SSE4-NEXT: pxor %xmm0, %xmm11 ; SSE4-NEXT: movdqa %xmm6, %xmm10 ; SSE4-NEXT: pxor %xmm0, %xmm10 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 -; SSE4-NEXT: pxor %xmm12, %xmm10 -; SSE4-NEXT: movdqa %xmm1, %xmm13 -; SSE4-NEXT: pxor %xmm0, %xmm13 +; SSE4-NEXT: movdqa %xmm1, %xmm12 +; SSE4-NEXT: pxor %xmm0, %xmm12 ; SSE4-NEXT: movdqa %xmm5, %xmm11 ; SSE4-NEXT: pxor %xmm0, %xmm11 -; SSE4-NEXT: pcmpgtq %xmm13, %xmm11 -; SSE4-NEXT: pxor %xmm12, %xmm11 -; SSE4-NEXT: movdqa %xmm9, %xmm13 -; SSE4-NEXT: pxor %xmm0, %xmm13 +; SSE4-NEXT: pcmpgtq %xmm12, %xmm11 +; SSE4-NEXT: movdqa %xmm8, %xmm12 +; SSE4-NEXT: pxor %xmm0, %xmm12 ; SSE4-NEXT: pxor %xmm4, %xmm0 -; SSE4-NEXT: pcmpgtq %xmm13, %xmm0 -; SSE4-NEXT: pxor %xmm12, %xmm0 -; SSE4-NEXT: blendvpd %xmm9, %xmm4 +; SSE4-NEXT: pcmpgtq %xmm12, %xmm0 +; SSE4-NEXT: blendvpd %xmm4, %xmm8 ; SSE4-NEXT: movdqa %xmm11, %xmm0 -; SSE4-NEXT: blendvpd %xmm1, %xmm5 +; SSE4-NEXT: blendvpd %xmm5, %xmm1 ; SSE4-NEXT: movdqa %xmm10, %xmm0 -; SSE4-NEXT: blendvpd %xmm2, %xmm6 -; SSE4-NEXT: movdqa %xmm8, %xmm0 -; SSE4-NEXT: blendvpd %xmm3, %xmm7 -; SSE4-NEXT: movapd %xmm4, %xmm0 -; SSE4-NEXT: movapd %xmm5, %xmm1 -; SSE4-NEXT: movapd %xmm6, %xmm2 -; SSE4-NEXT: movapd %xmm7, %xmm3 +; SSE4-NEXT: blendvpd %xmm6, %xmm2 +; SSE4-NEXT: movdqa %xmm9, %xmm0 +; SSE4-NEXT: blendvpd %xmm7, %xmm3 +; SSE4-NEXT: movapd %xmm8, %xmm0 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test128: @@ -5951,14 +5910,11 @@ define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) { ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm5 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm6 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 -; AVX2-NEXT: vpcmpeqd %ymm6, %ymm6, %ymm6 -; AVX2-NEXT: vpxor %ymm6, %ymm5, %ymm5 -; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm7 +; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm4 -; AVX2-NEXT: vpcmpgtq %ymm7, %ymm4, %ymm4 -; AVX2-NEXT: vpxor %ymm6, %ymm4, %ymm4 -; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 -; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm3, %ymm1 +; AVX2-NEXT: vpcmpgtq %ymm6, %ymm4, %ymm4 +; AVX2-NEXT: vblendvpd %ymm4, %ymm2, %ymm0, %ymm0 +; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm1, %ymm1 ; AVX2-NEXT: retq ; ; AVX512F-LABEL: test128: @@ -7693,24 +7649,22 @@ define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) { ; SSE4-NEXT: movdqa %xmm0, %xmm8 ; SSE4-NEXT: movdqa %xmm3, %xmm9 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm9 -; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 -; SSE4-NEXT: pxor %xmm12, %xmm9 ; SSE4-NEXT: movdqa %xmm2, %xmm10 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm10 -; SSE4-NEXT: pxor %xmm12, %xmm10 ; SSE4-NEXT: movdqa %xmm1, %xmm11 ; SSE4-NEXT: pcmpgtq %xmm5, %xmm11 -; SSE4-NEXT: pxor %xmm12, %xmm11 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 -; SSE4-NEXT: pxor %xmm12, %xmm0 -; SSE4-NEXT: blendvpd %xmm4, %xmm8 +; SSE4-NEXT: blendvpd %xmm8, %xmm4 ; SSE4-NEXT: movdqa %xmm11, %xmm0 -; SSE4-NEXT: blendvpd %xmm5, %xmm1 +; SSE4-NEXT: blendvpd %xmm1, %xmm5 ; SSE4-NEXT: movdqa %xmm10, %xmm0 -; SSE4-NEXT: blendvpd %xmm6, %xmm2 +; SSE4-NEXT: blendvpd %xmm2, %xmm6 ; SSE4-NEXT: movdqa %xmm9, %xmm0 -; SSE4-NEXT: blendvpd %xmm7, %xmm3 -; SSE4-NEXT: movapd %xmm8, %xmm0 +; SSE4-NEXT: blendvpd %xmm3, %xmm7 +; SSE4-NEXT: movapd %xmm4, %xmm0 +; SSE4-NEXT: movapd %xmm5, %xmm1 +; SSE4-NEXT: movapd %xmm6, %xmm2 +; SSE4-NEXT: movapd %xmm7, %xmm3 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test154: @@ -7737,12 +7691,9 @@ define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) { ; AVX2-LABEL: test154: ; AVX2: # BB#0: # %entry ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm4 -; AVX2-NEXT: vpcmpeqd %ymm5, %ymm5, %ymm5 -; AVX2-NEXT: vpxor %ymm5, %ymm4, %ymm4 -; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm6 -; AVX2-NEXT: vpxor %ymm5, %ymm6, %ymm5 -; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 -; AVX2-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 +; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm5 +; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 +; AVX2-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 ; AVX2-NEXT: retq ; ; AVX512F-LABEL: test154: @@ -7966,25 +7917,23 @@ define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) { ; SSE4-NEXT: movdqa %xmm0, %xmm8 ; SSE4-NEXT: movdqa %xmm7, %xmm9 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm9 -; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 -; SSE4-NEXT: pxor %xmm0, %xmm9 ; SSE4-NEXT: movdqa %xmm6, %xmm10 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm10 -; SSE4-NEXT: pxor %xmm0, %xmm10 ; SSE4-NEXT: movdqa %xmm5, %xmm11 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm11 -; SSE4-NEXT: pxor %xmm0, %xmm11 -; SSE4-NEXT: movdqa %xmm4, %xmm12 -; SSE4-NEXT: pcmpgtq %xmm8, %xmm12 -; SSE4-NEXT: pxor %xmm12, %xmm0 -; SSE4-NEXT: blendvpd %xmm4, %xmm8 +; SSE4-NEXT: movdqa %xmm4, %xmm0 +; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 +; SSE4-NEXT: blendvpd %xmm8, %xmm4 ; SSE4-NEXT: movdqa %xmm11, %xmm0 -; SSE4-NEXT: blendvpd %xmm5, %xmm1 +; SSE4-NEXT: blendvpd %xmm1, %xmm5 ; SSE4-NEXT: movdqa %xmm10, %xmm0 -; SSE4-NEXT: blendvpd %xmm6, %xmm2 +; SSE4-NEXT: blendvpd %xmm2, %xmm6 ; SSE4-NEXT: movdqa %xmm9, %xmm0 -; SSE4-NEXT: blendvpd %xmm7, %xmm3 -; SSE4-NEXT: movapd %xmm8, %xmm0 +; SSE4-NEXT: blendvpd %xmm3, %xmm7 +; SSE4-NEXT: movapd %xmm4, %xmm0 +; SSE4-NEXT: movapd %xmm5, %xmm1 +; SSE4-NEXT: movapd %xmm6, %xmm2 +; SSE4-NEXT: movapd %xmm7, %xmm3 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test156: @@ -8011,12 +7960,9 @@ define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) { ; AVX2-LABEL: test156: ; AVX2: # BB#0: # %entry ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm4 -; AVX2-NEXT: vpcmpeqd %ymm5, %ymm5, %ymm5 -; AVX2-NEXT: vpxor %ymm5, %ymm4, %ymm4 -; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm6 -; AVX2-NEXT: vpxor %ymm5, %ymm6, %ymm5 -; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 -; AVX2-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 +; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm5 +; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 +; AVX2-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 ; AVX2-NEXT: retq ; ; AVX512F-LABEL: test156: @@ -8270,33 +8216,31 @@ define <8 x i64> @test158(<8 x i64> %a, <8 x i64> %b) { ; SSE4-NEXT: movdqa %xmm3, %xmm9 ; SSE4-NEXT: pxor %xmm0, %xmm9 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm9 -; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 -; SSE4-NEXT: pxor %xmm12, %xmm9 ; SSE4-NEXT: movdqa %xmm6, %xmm11 ; SSE4-NEXT: pxor %xmm0, %xmm11 ; SSE4-NEXT: movdqa %xmm2, %xmm10 ; SSE4-NEXT: pxor %xmm0, %xmm10 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 -; SSE4-NEXT: pxor %xmm12, %xmm10 -; SSE4-NEXT: movdqa %xmm5, %xmm13 -; SSE4-NEXT: pxor %xmm0, %xmm13 +; SSE4-NEXT: movdqa %xmm5, %xmm12 +; SSE4-NEXT: pxor %xmm0, %xmm12 ; SSE4-NEXT: movdqa %xmm1, %xmm11 ; SSE4-NEXT: pxor %xmm0, %xmm11 -; SSE4-NEXT: pcmpgtq %xmm13, %xmm11 -; SSE4-NEXT: pxor %xmm12, %xmm11 -; SSE4-NEXT: movdqa %xmm4, %xmm13 -; SSE4-NEXT: pxor %xmm0, %xmm13 +; SSE4-NEXT: pcmpgtq %xmm12, %xmm11 +; SSE4-NEXT: movdqa %xmm4, %xmm12 +; SSE4-NEXT: pxor %xmm0, %xmm12 ; SSE4-NEXT: pxor %xmm8, %xmm0 -; SSE4-NEXT: pcmpgtq %xmm13, %xmm0 -; SSE4-NEXT: pxor %xmm12, %xmm0 -; SSE4-NEXT: blendvpd %xmm4, %xmm8 +; SSE4-NEXT: pcmpgtq %xmm12, %xmm0 +; SSE4-NEXT: blendvpd %xmm8, %xmm4 ; SSE4-NEXT: movdqa %xmm11, %xmm0 -; SSE4-NEXT: blendvpd %xmm5, %xmm1 +; SSE4-NEXT: blendvpd %xmm1, %xmm5 ; SSE4-NEXT: movdqa %xmm10, %xmm0 -; SSE4-NEXT: blendvpd %xmm6, %xmm2 +; SSE4-NEXT: blendvpd %xmm2, %xmm6 ; SSE4-NEXT: movdqa %xmm9, %xmm0 -; SSE4-NEXT: blendvpd %xmm7, %xmm3 -; SSE4-NEXT: movapd %xmm8, %xmm0 +; SSE4-NEXT: blendvpd %xmm3, %xmm7 +; SSE4-NEXT: movapd %xmm4, %xmm0 +; SSE4-NEXT: movapd %xmm5, %xmm1 +; SSE4-NEXT: movapd %xmm6, %xmm2 +; SSE4-NEXT: movapd %xmm7, %xmm3 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test158: @@ -8335,14 +8279,11 @@ define <8 x i64> @test158(<8 x i64> %a, <8 x i64> %b) { ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm5 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm6 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 -; AVX2-NEXT: vpcmpeqd %ymm6, %ymm6, %ymm6 -; AVX2-NEXT: vpxor %ymm6, %ymm5, %ymm5 -; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm7 +; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm4 -; AVX2-NEXT: vpcmpgtq %ymm7, %ymm4, %ymm4 -; AVX2-NEXT: vpxor %ymm6, %ymm4, %ymm4 -; AVX2-NEXT: vblendvpd %ymm4, %ymm2, %ymm0, %ymm0 -; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm1, %ymm1 +; AVX2-NEXT: vpcmpgtq %ymm6, %ymm4, %ymm4 +; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 +; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm3, %ymm1 ; AVX2-NEXT: retq ; ; AVX512F-LABEL: test158: @@ -8597,33 +8538,31 @@ define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) { ; SSE4-NEXT: movdqa %xmm7, %xmm9 ; SSE4-NEXT: pxor %xmm0, %xmm9 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm9 -; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 -; SSE4-NEXT: pxor %xmm12, %xmm9 ; SSE4-NEXT: movdqa %xmm2, %xmm11 ; SSE4-NEXT: pxor %xmm0, %xmm11 ; SSE4-NEXT: movdqa %xmm6, %xmm10 ; SSE4-NEXT: pxor %xmm0, %xmm10 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 -; SSE4-NEXT: pxor %xmm12, %xmm10 -; SSE4-NEXT: movdqa %xmm1, %xmm13 -; SSE4-NEXT: pxor %xmm0, %xmm13 +; SSE4-NEXT: movdqa %xmm1, %xmm12 +; SSE4-NEXT: pxor %xmm0, %xmm12 ; SSE4-NEXT: movdqa %xmm5, %xmm11 ; SSE4-NEXT: pxor %xmm0, %xmm11 -; SSE4-NEXT: pcmpgtq %xmm13, %xmm11 -; SSE4-NEXT: pxor %xmm12, %xmm11 -; SSE4-NEXT: movdqa %xmm8, %xmm13 -; SSE4-NEXT: pxor %xmm0, %xmm13 +; SSE4-NEXT: pcmpgtq %xmm12, %xmm11 +; SSE4-NEXT: movdqa %xmm8, %xmm12 +; SSE4-NEXT: pxor %xmm0, %xmm12 ; SSE4-NEXT: pxor %xmm4, %xmm0 -; SSE4-NEXT: pcmpgtq %xmm13, %xmm0 -; SSE4-NEXT: pxor %xmm12, %xmm0 -; SSE4-NEXT: blendvpd %xmm4, %xmm8 +; SSE4-NEXT: pcmpgtq %xmm12, %xmm0 +; SSE4-NEXT: blendvpd %xmm8, %xmm4 ; SSE4-NEXT: movdqa %xmm11, %xmm0 -; SSE4-NEXT: blendvpd %xmm5, %xmm1 +; SSE4-NEXT: blendvpd %xmm1, %xmm5 ; SSE4-NEXT: movdqa %xmm10, %xmm0 -; SSE4-NEXT: blendvpd %xmm6, %xmm2 +; SSE4-NEXT: blendvpd %xmm2, %xmm6 ; SSE4-NEXT: movdqa %xmm9, %xmm0 -; SSE4-NEXT: blendvpd %xmm7, %xmm3 -; SSE4-NEXT: movapd %xmm8, %xmm0 +; SSE4-NEXT: blendvpd %xmm3, %xmm7 +; SSE4-NEXT: movapd %xmm4, %xmm0 +; SSE4-NEXT: movapd %xmm5, %xmm1 +; SSE4-NEXT: movapd %xmm6, %xmm2 +; SSE4-NEXT: movapd %xmm7, %xmm3 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test160: @@ -8662,14 +8601,11 @@ define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) { ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm5 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm6 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 -; AVX2-NEXT: vpcmpeqd %ymm6, %ymm6, %ymm6 -; AVX2-NEXT: vpxor %ymm6, %ymm5, %ymm5 -; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm7 +; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm4 -; AVX2-NEXT: vpcmpgtq %ymm7, %ymm4, %ymm4 -; AVX2-NEXT: vpxor %ymm6, %ymm4, %ymm4 -; AVX2-NEXT: vblendvpd %ymm4, %ymm2, %ymm0, %ymm0 -; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm1, %ymm1 +; AVX2-NEXT: vpcmpgtq %ymm6, %ymm4, %ymm4 +; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 +; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm3, %ymm1 ; AVX2-NEXT: retq ; ; AVX512F-LABEL: test160: @@ -8803,15 +8739,11 @@ define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) { ; SSE4-NEXT: movdqa %xmm0, %xmm4 ; SSE4-NEXT: movdqa %xmm1, %xmm5 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm5 -; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 -; SSE4-NEXT: pxor %xmm6, %xmm5 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 -; SSE4-NEXT: pxor %xmm6, %xmm0 -; SSE4-NEXT: blendvpd %xmm4, %xmm2 +; SSE4-NEXT: blendvpd %xmm2, %xmm4 ; SSE4-NEXT: movdqa %xmm5, %xmm0 -; SSE4-NEXT: blendvpd %xmm1, %xmm3 -; SSE4-NEXT: movapd %xmm2, %xmm0 -; SSE4-NEXT: movapd %xmm3, %xmm1 +; SSE4-NEXT: blendvpd %xmm3, %xmm1 +; SSE4-NEXT: movapd %xmm4, %xmm0 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test162: @@ -8830,9 +8762,7 @@ define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) { ; AVX2-LABEL: test162: ; AVX2: # BB#0: # %entry ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 -; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 -; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 -; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 +; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 ; AVX2-NEXT: retq ; ; AVX512BW-LABEL: test162: @@ -8965,16 +8895,12 @@ define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) { ; SSE4-NEXT: movdqa %xmm0, %xmm4 ; SSE4-NEXT: movdqa %xmm3, %xmm5 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm5 -; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 -; SSE4-NEXT: pxor %xmm0, %xmm5 -; SSE4-NEXT: movdqa %xmm2, %xmm6 -; SSE4-NEXT: pcmpgtq %xmm4, %xmm6 -; SSE4-NEXT: pxor %xmm6, %xmm0 -; SSE4-NEXT: blendvpd %xmm4, %xmm2 +; SSE4-NEXT: movdqa %xmm2, %xmm0 +; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 +; SSE4-NEXT: blendvpd %xmm2, %xmm4 ; SSE4-NEXT: movdqa %xmm5, %xmm0 -; SSE4-NEXT: blendvpd %xmm1, %xmm3 -; SSE4-NEXT: movapd %xmm2, %xmm0 -; SSE4-NEXT: movapd %xmm3, %xmm1 +; SSE4-NEXT: blendvpd %xmm3, %xmm1 +; SSE4-NEXT: movapd %xmm4, %xmm0 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test164: @@ -8993,9 +8919,7 @@ define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) { ; AVX2-LABEL: test164: ; AVX2: # BB#0: # %entry ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 -; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 -; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 -; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 +; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 ; AVX2-NEXT: retq ; ; AVX512BW-LABEL: test164: @@ -9147,18 +9071,14 @@ define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) { ; SSE4-NEXT: movdqa %xmm1, %xmm5 ; SSE4-NEXT: pxor %xmm0, %xmm5 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 -; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 -; SSE4-NEXT: pxor %xmm6, %xmm5 -; SSE4-NEXT: movdqa %xmm2, %xmm7 -; SSE4-NEXT: pxor %xmm0, %xmm7 +; SSE4-NEXT: movdqa %xmm2, %xmm6 +; SSE4-NEXT: pxor %xmm0, %xmm6 ; SSE4-NEXT: pxor %xmm4, %xmm0 -; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 -; SSE4-NEXT: pxor %xmm6, %xmm0 -; SSE4-NEXT: blendvpd %xmm4, %xmm2 +; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 +; SSE4-NEXT: blendvpd %xmm2, %xmm4 ; SSE4-NEXT: movdqa %xmm5, %xmm0 -; SSE4-NEXT: blendvpd %xmm1, %xmm3 -; SSE4-NEXT: movapd %xmm2, %xmm0 -; SSE4-NEXT: movapd %xmm3, %xmm1 +; SSE4-NEXT: blendvpd %xmm3, %xmm1 +; SSE4-NEXT: movapd %xmm4, %xmm0 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test166: @@ -9185,9 +9105,7 @@ define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) { ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 -; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 -; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 -; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 +; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 ; AVX2-NEXT: retq ; ; AVX512BW-LABEL: test166: @@ -9339,18 +9257,14 @@ define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) { ; SSE4-NEXT: movdqa %xmm3, %xmm5 ; SSE4-NEXT: pxor %xmm0, %xmm5 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 -; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 -; SSE4-NEXT: pxor %xmm6, %xmm5 -; SSE4-NEXT: movdqa %xmm4, %xmm7 -; SSE4-NEXT: pxor %xmm0, %xmm7 +; SSE4-NEXT: movdqa %xmm4, %xmm6 +; SSE4-NEXT: pxor %xmm0, %xmm6 ; SSE4-NEXT: pxor %xmm2, %xmm0 -; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 -; SSE4-NEXT: pxor %xmm6, %xmm0 -; SSE4-NEXT: blendvpd %xmm4, %xmm2 +; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 +; SSE4-NEXT: blendvpd %xmm2, %xmm4 ; SSE4-NEXT: movdqa %xmm5, %xmm0 -; SSE4-NEXT: blendvpd %xmm1, %xmm3 -; SSE4-NEXT: movapd %xmm2, %xmm0 -; SSE4-NEXT: movapd %xmm3, %xmm1 +; SSE4-NEXT: blendvpd %xmm3, %xmm1 +; SSE4-NEXT: movapd %xmm4, %xmm0 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test168: @@ -9377,9 +9291,7 @@ define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) { ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 -; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 -; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 -; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 +; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 ; AVX2-NEXT: retq ; ; AVX512BW-LABEL: test168: @@ -9514,14 +9426,12 @@ define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) { ; SSE4-NEXT: movdqa %xmm0, %xmm4 ; SSE4-NEXT: movdqa %xmm1, %xmm5 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm5 -; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 -; SSE4-NEXT: pxor %xmm6, %xmm5 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 -; SSE4-NEXT: pxor %xmm6, %xmm0 -; SSE4-NEXT: blendvpd %xmm2, %xmm4 +; SSE4-NEXT: blendvpd %xmm4, %xmm2 ; SSE4-NEXT: movdqa %xmm5, %xmm0 -; SSE4-NEXT: blendvpd %xmm3, %xmm1 -; SSE4-NEXT: movapd %xmm4, %xmm0 +; SSE4-NEXT: blendvpd %xmm1, %xmm3 +; SSE4-NEXT: movapd %xmm2, %xmm0 +; SSE4-NEXT: movapd %xmm3, %xmm1 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test170: @@ -9540,9 +9450,7 @@ define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) { ; AVX2-LABEL: test170: ; AVX2: # BB#0: # %entry ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 -; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 -; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 -; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 +; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 ; AVX2-NEXT: retq ; ; AVX512BW-LABEL: test170: @@ -9676,15 +9584,13 @@ define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) { ; SSE4-NEXT: movdqa %xmm0, %xmm4 ; SSE4-NEXT: movdqa %xmm3, %xmm5 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm5 -; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 -; SSE4-NEXT: pxor %xmm0, %xmm5 -; SSE4-NEXT: movdqa %xmm2, %xmm6 -; SSE4-NEXT: pcmpgtq %xmm4, %xmm6 -; SSE4-NEXT: pxor %xmm6, %xmm0 -; SSE4-NEXT: blendvpd %xmm2, %xmm4 +; SSE4-NEXT: movdqa %xmm2, %xmm0 +; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 +; SSE4-NEXT: blendvpd %xmm4, %xmm2 ; SSE4-NEXT: movdqa %xmm5, %xmm0 -; SSE4-NEXT: blendvpd %xmm3, %xmm1 -; SSE4-NEXT: movapd %xmm4, %xmm0 +; SSE4-NEXT: blendvpd %xmm1, %xmm3 +; SSE4-NEXT: movapd %xmm2, %xmm0 +; SSE4-NEXT: movapd %xmm3, %xmm1 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test172: @@ -9703,9 +9609,7 @@ define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) { ; AVX2-LABEL: test172: ; AVX2: # BB#0: # %entry ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 -; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 -; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 -; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 +; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 ; AVX2-NEXT: retq ; ; AVX512BW-LABEL: test172: @@ -9858,17 +9762,15 @@ define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) { ; SSE4-NEXT: movdqa %xmm1, %xmm5 ; SSE4-NEXT: pxor %xmm0, %xmm5 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 -; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 -; SSE4-NEXT: pxor %xmm6, %xmm5 -; SSE4-NEXT: movdqa %xmm2, %xmm7 -; SSE4-NEXT: pxor %xmm0, %xmm7 +; SSE4-NEXT: movdqa %xmm2, %xmm6 +; SSE4-NEXT: pxor %xmm0, %xmm6 ; SSE4-NEXT: pxor %xmm4, %xmm0 -; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 -; SSE4-NEXT: pxor %xmm6, %xmm0 -; SSE4-NEXT: blendvpd %xmm2, %xmm4 +; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 +; SSE4-NEXT: blendvpd %xmm4, %xmm2 ; SSE4-NEXT: movdqa %xmm5, %xmm0 -; SSE4-NEXT: blendvpd %xmm3, %xmm1 -; SSE4-NEXT: movapd %xmm4, %xmm0 +; SSE4-NEXT: blendvpd %xmm1, %xmm3 +; SSE4-NEXT: movapd %xmm2, %xmm0 +; SSE4-NEXT: movapd %xmm3, %xmm1 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test174: @@ -9895,9 +9797,7 @@ define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) { ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 -; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 -; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 -; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 +; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 ; AVX2-NEXT: retq ; ; AVX512BW-LABEL: test174: @@ -10050,17 +9950,15 @@ define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) { ; SSE4-NEXT: movdqa %xmm3, %xmm5 ; SSE4-NEXT: pxor %xmm0, %xmm5 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 -; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 -; SSE4-NEXT: pxor %xmm6, %xmm5 -; SSE4-NEXT: movdqa %xmm4, %xmm7 -; SSE4-NEXT: pxor %xmm0, %xmm7 +; SSE4-NEXT: movdqa %xmm4, %xmm6 +; SSE4-NEXT: pxor %xmm0, %xmm6 ; SSE4-NEXT: pxor %xmm2, %xmm0 -; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 -; SSE4-NEXT: pxor %xmm6, %xmm0 -; SSE4-NEXT: blendvpd %xmm2, %xmm4 +; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 +; SSE4-NEXT: blendvpd %xmm4, %xmm2 ; SSE4-NEXT: movdqa %xmm5, %xmm0 -; SSE4-NEXT: blendvpd %xmm3, %xmm1 -; SSE4-NEXT: movapd %xmm4, %xmm0 +; SSE4-NEXT: blendvpd %xmm1, %xmm3 +; SSE4-NEXT: movapd %xmm2, %xmm0 +; SSE4-NEXT: movapd %xmm3, %xmm1 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test176: @@ -10087,9 +9985,7 @@ define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) { ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 -; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 -; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 -; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 +; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 ; AVX2-NEXT: retq ; ; AVX512BW-LABEL: test176: @@ -10180,26 +10076,20 @@ define <2 x i64> @test178(<2 x i64> %a, <2 x i64> %b) { ; SSE4: # BB#0: # %entry ; SSE4-NEXT: movdqa %xmm0, %xmm2 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 -; SSE4-NEXT: pcmpeqd %xmm3, %xmm3 -; SSE4-NEXT: pxor %xmm3, %xmm0 -; SSE4-NEXT: blendvpd %xmm2, %xmm1 -; SSE4-NEXT: movapd %xmm1, %xmm0 +; SSE4-NEXT: blendvpd %xmm1, %xmm2 +; SSE4-NEXT: movapd %xmm2, %xmm0 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test178: ; AVX1: # BB#0: # %entry ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 -; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 -; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 -; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 +; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 ; AVX1-NEXT: retq ; ; AVX2-LABEL: test178: ; AVX2: # BB#0: # %entry ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 -; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 -; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 -; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 +; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 ; AVX2-NEXT: retq ; ; AVX512BW-LABEL: test178: @@ -10288,28 +10178,22 @@ define <2 x i64> @test180(<2 x i64> %a, <2 x i64> %b) { ; SSE4-LABEL: test180: ; SSE4: # BB#0: # %entry ; SSE4-NEXT: movdqa %xmm0, %xmm2 -; SSE4-NEXT: movdqa %xmm1, %xmm3 -; SSE4-NEXT: pcmpgtq %xmm2, %xmm3 -; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 -; SSE4-NEXT: pxor %xmm3, %xmm0 -; SSE4-NEXT: blendvpd %xmm2, %xmm1 -; SSE4-NEXT: movapd %xmm1, %xmm0 +; SSE4-NEXT: movdqa %xmm1, %xmm0 +; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 +; SSE4-NEXT: blendvpd %xmm1, %xmm2 +; SSE4-NEXT: movapd %xmm2, %xmm0 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test180: ; AVX1: # BB#0: # %entry ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 -; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 -; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 -; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 +; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 ; AVX1-NEXT: retq ; ; AVX2-LABEL: test180: ; AVX2: # BB#0: # %entry ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 -; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 -; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 -; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 +; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 ; AVX2-NEXT: retq ; ; AVX512BW-LABEL: test180: @@ -10408,15 +10292,13 @@ define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) { ; SSE4-LABEL: test182: ; SSE4: # BB#0: # %entry ; SSE4-NEXT: movdqa %xmm0, %xmm2 -; SSE4-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] -; SSE4-NEXT: movdqa %xmm1, %xmm0 -; SSE4-NEXT: pxor %xmm3, %xmm0 -; SSE4-NEXT: pxor %xmm2, %xmm3 -; SSE4-NEXT: pcmpgtq %xmm0, %xmm3 -; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 -; SSE4-NEXT: pxor %xmm3, %xmm0 -; SSE4-NEXT: blendvpd %xmm2, %xmm1 -; SSE4-NEXT: movapd %xmm1, %xmm0 +; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] +; SSE4-NEXT: movdqa %xmm1, %xmm3 +; SSE4-NEXT: pxor %xmm0, %xmm3 +; SSE4-NEXT: pxor %xmm2, %xmm0 +; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 +; SSE4-NEXT: blendvpd %xmm1, %xmm2 +; SSE4-NEXT: movapd %xmm2, %xmm0 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test182: @@ -10425,9 +10307,7 @@ define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) { ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 -; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 -; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 -; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 +; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 ; AVX1-NEXT: retq ; ; AVX2-LABEL: test182: @@ -10436,9 +10316,7 @@ define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) { ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 -; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 -; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 -; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 +; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 ; AVX2-NEXT: retq ; ; AVX512BW-LABEL: test182: @@ -10537,14 +10415,13 @@ define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) { ; SSE4-LABEL: test184: ; SSE4: # BB#0: # %entry ; SSE4-NEXT: movdqa %xmm0, %xmm2 -; SSE4-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] -; SSE4-NEXT: pxor %xmm3, %xmm0 -; SSE4-NEXT: pxor %xmm1, %xmm3 -; SSE4-NEXT: pcmpgtq %xmm0, %xmm3 -; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 -; SSE4-NEXT: pxor %xmm3, %xmm0 -; SSE4-NEXT: blendvpd %xmm2, %xmm1 -; SSE4-NEXT: movapd %xmm1, %xmm0 +; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] +; SSE4-NEXT: movdqa %xmm2, %xmm3 +; SSE4-NEXT: pxor %xmm0, %xmm3 +; SSE4-NEXT: pxor %xmm1, %xmm0 +; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 +; SSE4-NEXT: blendvpd %xmm1, %xmm2 +; SSE4-NEXT: movapd %xmm2, %xmm0 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test184: @@ -10553,9 +10430,7 @@ define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) { ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 -; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 -; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 -; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 +; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 ; AVX1-NEXT: retq ; ; AVX2-LABEL: test184: @@ -10564,9 +10439,7 @@ define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) { ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 -; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 -; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 -; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 +; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 ; AVX2-NEXT: retq ; ; AVX512BW-LABEL: test184: @@ -10658,26 +10531,20 @@ define <2 x i64> @test186(<2 x i64> %a, <2 x i64> %b) { ; SSE4: # BB#0: # %entry ; SSE4-NEXT: movdqa %xmm0, %xmm2 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 -; SSE4-NEXT: pcmpeqd %xmm3, %xmm3 -; SSE4-NEXT: pxor %xmm3, %xmm0 -; SSE4-NEXT: blendvpd %xmm1, %xmm2 -; SSE4-NEXT: movapd %xmm2, %xmm0 +; SSE4-NEXT: blendvpd %xmm2, %xmm1 +; SSE4-NEXT: movapd %xmm1, %xmm0 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test186: ; AVX1: # BB#0: # %entry ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 -; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 -; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 -; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 +; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 ; AVX1-NEXT: retq ; ; AVX2-LABEL: test186: ; AVX2: # BB#0: # %entry ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 -; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 -; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 -; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 +; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 ; AVX2-NEXT: retq ; ; AVX512BW-LABEL: test186: @@ -10767,28 +10634,22 @@ define <2 x i64> @test188(<2 x i64> %a, <2 x i64> %b) { ; SSE4-LABEL: test188: ; SSE4: # BB#0: # %entry ; SSE4-NEXT: movdqa %xmm0, %xmm2 -; SSE4-NEXT: movdqa %xmm1, %xmm3 -; SSE4-NEXT: pcmpgtq %xmm2, %xmm3 -; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 -; SSE4-NEXT: pxor %xmm3, %xmm0 -; SSE4-NEXT: blendvpd %xmm1, %xmm2 -; SSE4-NEXT: movapd %xmm2, %xmm0 +; SSE4-NEXT: movdqa %xmm1, %xmm0 +; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 +; SSE4-NEXT: blendvpd %xmm2, %xmm1 +; SSE4-NEXT: movapd %xmm1, %xmm0 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test188: ; AVX1: # BB#0: # %entry ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 -; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 -; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 -; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 +; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 ; AVX1-NEXT: retq ; ; AVX2-LABEL: test188: ; AVX2: # BB#0: # %entry ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 -; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 -; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 -; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 +; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 ; AVX2-NEXT: retq ; ; AVX512BW-LABEL: test188: @@ -10888,15 +10749,13 @@ define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) { ; SSE4-LABEL: test190: ; SSE4: # BB#0: # %entry ; SSE4-NEXT: movdqa %xmm0, %xmm2 -; SSE4-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] -; SSE4-NEXT: movdqa %xmm1, %xmm0 -; SSE4-NEXT: pxor %xmm3, %xmm0 -; SSE4-NEXT: pxor %xmm2, %xmm3 -; SSE4-NEXT: pcmpgtq %xmm0, %xmm3 -; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 -; SSE4-NEXT: pxor %xmm3, %xmm0 -; SSE4-NEXT: blendvpd %xmm1, %xmm2 -; SSE4-NEXT: movapd %xmm2, %xmm0 +; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] +; SSE4-NEXT: movdqa %xmm1, %xmm3 +; SSE4-NEXT: pxor %xmm0, %xmm3 +; SSE4-NEXT: pxor %xmm2, %xmm0 +; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 +; SSE4-NEXT: blendvpd %xmm2, %xmm1 +; SSE4-NEXT: movapd %xmm1, %xmm0 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test190: @@ -10905,9 +10764,7 @@ define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) { ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 -; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 -; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 -; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 +; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 ; AVX1-NEXT: retq ; ; AVX2-LABEL: test190: @@ -10916,9 +10773,7 @@ define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) { ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 -; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 -; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 -; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 +; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 ; AVX2-NEXT: retq ; ; AVX512BW-LABEL: test190: @@ -11018,14 +10873,13 @@ define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) { ; SSE4-LABEL: test192: ; SSE4: # BB#0: # %entry ; SSE4-NEXT: movdqa %xmm0, %xmm2 -; SSE4-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] -; SSE4-NEXT: pxor %xmm3, %xmm0 -; SSE4-NEXT: pxor %xmm1, %xmm3 -; SSE4-NEXT: pcmpgtq %xmm0, %xmm3 -; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 -; SSE4-NEXT: pxor %xmm3, %xmm0 -; SSE4-NEXT: blendvpd %xmm1, %xmm2 -; SSE4-NEXT: movapd %xmm2, %xmm0 +; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] +; SSE4-NEXT: movdqa %xmm2, %xmm3 +; SSE4-NEXT: pxor %xmm0, %xmm3 +; SSE4-NEXT: pxor %xmm1, %xmm0 +; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 +; SSE4-NEXT: blendvpd %xmm2, %xmm1 +; SSE4-NEXT: movapd %xmm1, %xmm0 ; SSE4-NEXT: retq ; ; AVX1-LABEL: test192: @@ -11034,9 +10888,7 @@ define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) { ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 -; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 -; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 -; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 +; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 ; AVX1-NEXT: retq ; ; AVX2-LABEL: test192: @@ -11045,9 +10897,7 @@ define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) { ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 -; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 -; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 -; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 +; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 ; AVX2-NEXT: retq ; ; AVX512BW-LABEL: test192: |

