summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2018-11-18 22:13:31 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2018-11-18 22:13:31 +0000
commit7f92efa5a9c6f3c1c9d7cdbd83460792d5984689 (patch)
treee22dd33f63653a1a8eb4c999779726d2dba85ece /llvm/test/CodeGen/X86
parent0468c860b7b078bdd47d645e113481a4ab646178 (diff)
downloadbcm5719-llvm-7f92efa5a9c6f3c1c9d7cdbd83460792d5984689.tar.gz
bcm5719-llvm-7f92efa5a9c6f3c1c9d7cdbd83460792d5984689.zip
[X86][SSE] Add SimplifyDemandedVectorElts support for SSE packed i2fp conversions.
llvm-svn: 347177
Diffstat (limited to 'llvm/test/CodeGen/X86')
-rw-r--r--llvm/test/CodeGen/X86/pr30511.ll1
-rw-r--r--llvm/test/CodeGen/X86/vec_int_to_fp-widen.ll78
-rw-r--r--llvm/test/CodeGen/X86/vec_int_to_fp.ll78
3 files changed, 82 insertions, 75 deletions
diff --git a/llvm/test/CodeGen/X86/pr30511.ll b/llvm/test/CodeGen/X86/pr30511.ll
index 7372980b41e..69d0a94cc11 100644
--- a/llvm/test/CodeGen/X86/pr30511.ll
+++ b/llvm/test/CodeGen/X86/pr30511.ll
@@ -8,7 +8,6 @@ define i64 @PR30511(<2 x double> %a) {
; CHECK-LABEL: PR30511:
; CHECK: # %bb.0:
; CHECK-NEXT: addpd {{.*}}(%rip), %xmm0
-; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2,2,3]
; CHECK-NEXT: cvtdq2pd %xmm0, %xmm0
; CHECK-NEXT: mulpd {{.*}}(%rip), %xmm0
; CHECK-NEXT: movq %xmm0, %rax
diff --git a/llvm/test/CodeGen/X86/vec_int_to_fp-widen.ll b/llvm/test/CodeGen/X86/vec_int_to_fp-widen.ll
index 13fe0f6220e..03b2a3db49a 100644
--- a/llvm/test/CodeGen/X86/vec_int_to_fp-widen.ll
+++ b/llvm/test/CodeGen/X86/vec_int_to_fp-widen.ll
@@ -579,7 +579,7 @@ define <2 x double> @uitofp_2i64_to_2f64(<2 x i64> %a) {
define <2 x double> @uitofp_2i32_to_2f64(<4 x i32> %a) {
; SSE2-LABEL: uitofp_2i32_to_2f64:
; SSE2: # %bb.0:
-; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [65535,0,65535,0,65535,0,65535,0]
+; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [65535,0,65535,0,0,0,0,0]
; SSE2-NEXT: pand %xmm0, %xmm1
; SSE2-NEXT: cvtdq2pd %xmm1, %xmm1
; SSE2-NEXT: psrld $16, %xmm0
@@ -591,7 +591,7 @@ define <2 x double> @uitofp_2i32_to_2f64(<4 x i32> %a) {
; SSE41-LABEL: uitofp_2i32_to_2f64:
; SSE41: # %bb.0:
; SSE41-NEXT: pxor %xmm1, %xmm1
-; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7]
+; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4,5,6,7]
; SSE41-NEXT: cvtdq2pd %xmm1, %xmm1
; SSE41-NEXT: psrld $16, %xmm0
; SSE41-NEXT: cvtdq2pd %xmm0, %xmm0
@@ -602,7 +602,7 @@ define <2 x double> @uitofp_2i32_to_2f64(<4 x i32> %a) {
; VEX-LABEL: uitofp_2i32_to_2f64:
; VEX: # %bb.0:
; VEX-NEXT: vpxor %xmm1, %xmm1, %xmm1
-; VEX-NEXT: vpblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7]
+; VEX-NEXT: vpblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4,5,6,7]
; VEX-NEXT: vcvtdq2pd %xmm1, %xmm1
; VEX-NEXT: vpsrld $16, %xmm0, %xmm0
; VEX-NEXT: vcvtdq2pd %xmm0, %xmm0
@@ -643,7 +643,7 @@ define <2 x double> @uitofp_2i32_to_2f64(<4 x i32> %a) {
define <2 x double> @uitofp_4i32_to_2f64(<4 x i32> %a) {
; SSE2-LABEL: uitofp_4i32_to_2f64:
; SSE2: # %bb.0:
-; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [65535,0,65535,0,65535,0,65535,0]
+; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [65535,0,65535,0,0,0,0,0]
; SSE2-NEXT: pand %xmm0, %xmm1
; SSE2-NEXT: cvtdq2pd %xmm1, %xmm1
; SSE2-NEXT: psrld $16, %xmm0
@@ -655,7 +655,7 @@ define <2 x double> @uitofp_4i32_to_2f64(<4 x i32> %a) {
; SSE41-LABEL: uitofp_4i32_to_2f64:
; SSE41: # %bb.0:
; SSE41-NEXT: pxor %xmm1, %xmm1
-; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7]
+; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4,5,6,7]
; SSE41-NEXT: cvtdq2pd %xmm1, %xmm1
; SSE41-NEXT: psrld $16, %xmm0
; SSE41-NEXT: cvtdq2pd %xmm0, %xmm0
@@ -940,17 +940,18 @@ define <4 x double> @uitofp_4i32_to_4f64(<4 x i32> %a) {
; SSE2-NEXT: cvtdq2pd %xmm1, %xmm1
; SSE2-NEXT: movapd {{.*#+}} xmm2 = [6.5536E+4,6.5536E+4]
; SSE2-NEXT: mulpd %xmm2, %xmm1
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm0[2,3,0,1]
-; SSE2-NEXT: pand {{.*}}(%rip), %xmm0
+; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [65535,0,65535,0,0,0,0,0]
+; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm0[2,3,0,1]
+; SSE2-NEXT: pand %xmm3, %xmm0
; SSE2-NEXT: cvtdq2pd %xmm0, %xmm0
; SSE2-NEXT: addpd %xmm1, %xmm0
-; SSE2-NEXT: movdqa %xmm3, %xmm1
+; SSE2-NEXT: movdqa %xmm4, %xmm1
; SSE2-NEXT: psrld $16, %xmm1
-; SSE2-NEXT: cvtdq2pd %xmm1, %xmm4
-; SSE2-NEXT: mulpd %xmm2, %xmm4
-; SSE2-NEXT: pand {{.*}}(%rip), %xmm3
-; SSE2-NEXT: cvtdq2pd %xmm3, %xmm1
-; SSE2-NEXT: addpd %xmm4, %xmm1
+; SSE2-NEXT: cvtdq2pd %xmm1, %xmm5
+; SSE2-NEXT: mulpd %xmm2, %xmm5
+; SSE2-NEXT: pand %xmm3, %xmm4
+; SSE2-NEXT: cvtdq2pd %xmm4, %xmm1
+; SSE2-NEXT: addpd %xmm5, %xmm1
; SSE2-NEXT: retq
;
; SSE41-LABEL: uitofp_4i32_to_4f64:
@@ -962,15 +963,16 @@ define <4 x double> @uitofp_4i32_to_4f64(<4 x i32> %a) {
; SSE41-NEXT: mulpd %xmm2, %xmm1
; SSE41-NEXT: pxor %xmm3, %xmm3
; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[2,3,0,1]
-; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1],xmm0[2],xmm3[3],xmm0[4],xmm3[5],xmm0[6],xmm3[7]
+; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1],xmm0[2],xmm3[3],xmm0[4,5,6,7]
; SSE41-NEXT: cvtdq2pd %xmm0, %xmm0
; SSE41-NEXT: addpd %xmm1, %xmm0
-; SSE41-NEXT: pblendw {{.*#+}} xmm3 = xmm4[0],xmm3[1],xmm4[2],xmm3[3,4,5,6,7]
-; SSE41-NEXT: psrld $16, %xmm4
-; SSE41-NEXT: cvtdq2pd %xmm4, %xmm4
-; SSE41-NEXT: mulpd %xmm2, %xmm4
-; SSE41-NEXT: cvtdq2pd %xmm3, %xmm1
-; SSE41-NEXT: addpd %xmm4, %xmm1
+; SSE41-NEXT: movdqa %xmm4, %xmm1
+; SSE41-NEXT: psrld $16, %xmm1
+; SSE41-NEXT: cvtdq2pd %xmm1, %xmm5
+; SSE41-NEXT: mulpd %xmm2, %xmm5
+; SSE41-NEXT: pblendw {{.*#+}} xmm4 = xmm4[0],xmm3[1],xmm4[2],xmm3[3],xmm4[4,5,6,7]
+; SSE41-NEXT: cvtdq2pd %xmm4, %xmm1
+; SSE41-NEXT: addpd %xmm5, %xmm1
; SSE41-NEXT: retq
;
; AVX1-LABEL: uitofp_4i32_to_4f64:
@@ -3510,7 +3512,7 @@ define <2 x double> @uitofp_load_2i32_to_2f64(<2 x i32> *%a) {
; SSE41: # %bb.0:
; SSE41-NEXT: movq {{.*#+}} xmm0 = mem[0],zero
; SSE41-NEXT: pxor %xmm1, %xmm1
-; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3,4,5,6,7]
+; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4,5,6,7]
; SSE41-NEXT: cvtdq2pd %xmm1, %xmm1
; SSE41-NEXT: psrld $16, %xmm0
; SSE41-NEXT: cvtdq2pd %xmm0, %xmm0
@@ -3522,7 +3524,7 @@ define <2 x double> @uitofp_load_2i32_to_2f64(<2 x i32> *%a) {
; VEX: # %bb.0:
; VEX-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero
; VEX-NEXT: vpxor %xmm1, %xmm1, %xmm1
-; VEX-NEXT: vpblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3,4,5,6,7]
+; VEX-NEXT: vpblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4,5,6,7]
; VEX-NEXT: vcvtdq2pd %xmm1, %xmm1
; VEX-NEXT: vpsrld $16, %xmm0, %xmm0
; VEX-NEXT: vcvtdq2pd %xmm0, %xmm0
@@ -3746,17 +3748,18 @@ define <4 x double> @uitofp_load_4i32_to_4f64(<4 x i32> *%a) {
; SSE2-NEXT: cvtdq2pd %xmm1, %xmm1
; SSE2-NEXT: movapd {{.*#+}} xmm2 = [6.5536E+4,6.5536E+4]
; SSE2-NEXT: mulpd %xmm2, %xmm1
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm0[2,3,0,1]
-; SSE2-NEXT: pand {{.*}}(%rip), %xmm0
+; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [65535,0,65535,0,0,0,0,0]
+; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm0[2,3,0,1]
+; SSE2-NEXT: pand %xmm3, %xmm0
; SSE2-NEXT: cvtdq2pd %xmm0, %xmm0
; SSE2-NEXT: addpd %xmm1, %xmm0
-; SSE2-NEXT: movdqa %xmm3, %xmm1
+; SSE2-NEXT: movdqa %xmm4, %xmm1
; SSE2-NEXT: psrld $16, %xmm1
-; SSE2-NEXT: cvtdq2pd %xmm1, %xmm4
-; SSE2-NEXT: mulpd %xmm2, %xmm4
-; SSE2-NEXT: pand {{.*}}(%rip), %xmm3
-; SSE2-NEXT: cvtdq2pd %xmm3, %xmm1
-; SSE2-NEXT: addpd %xmm4, %xmm1
+; SSE2-NEXT: cvtdq2pd %xmm1, %xmm5
+; SSE2-NEXT: mulpd %xmm2, %xmm5
+; SSE2-NEXT: pand %xmm3, %xmm4
+; SSE2-NEXT: cvtdq2pd %xmm4, %xmm1
+; SSE2-NEXT: addpd %xmm5, %xmm1
; SSE2-NEXT: retq
;
; SSE41-LABEL: uitofp_load_4i32_to_4f64:
@@ -3769,15 +3772,16 @@ define <4 x double> @uitofp_load_4i32_to_4f64(<4 x i32> *%a) {
; SSE41-NEXT: mulpd %xmm2, %xmm1
; SSE41-NEXT: pxor %xmm3, %xmm3
; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[2,3,0,1]
-; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1],xmm0[2],xmm3[3],xmm0[4],xmm3[5],xmm0[6],xmm3[7]
+; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1],xmm0[2],xmm3[3],xmm0[4,5,6,7]
; SSE41-NEXT: cvtdq2pd %xmm0, %xmm0
; SSE41-NEXT: addpd %xmm1, %xmm0
-; SSE41-NEXT: pblendw {{.*#+}} xmm3 = xmm4[0],xmm3[1],xmm4[2],xmm3[3,4,5,6,7]
-; SSE41-NEXT: psrld $16, %xmm4
-; SSE41-NEXT: cvtdq2pd %xmm4, %xmm4
-; SSE41-NEXT: mulpd %xmm2, %xmm4
-; SSE41-NEXT: cvtdq2pd %xmm3, %xmm1
-; SSE41-NEXT: addpd %xmm4, %xmm1
+; SSE41-NEXT: movdqa %xmm4, %xmm1
+; SSE41-NEXT: psrld $16, %xmm1
+; SSE41-NEXT: cvtdq2pd %xmm1, %xmm5
+; SSE41-NEXT: mulpd %xmm2, %xmm5
+; SSE41-NEXT: pblendw {{.*#+}} xmm4 = xmm4[0],xmm3[1],xmm4[2],xmm3[3],xmm4[4,5,6,7]
+; SSE41-NEXT: cvtdq2pd %xmm4, %xmm1
+; SSE41-NEXT: addpd %xmm5, %xmm1
; SSE41-NEXT: retq
;
; AVX1-LABEL: uitofp_load_4i32_to_4f64:
diff --git a/llvm/test/CodeGen/X86/vec_int_to_fp.ll b/llvm/test/CodeGen/X86/vec_int_to_fp.ll
index 16924c44617..1ccd636a7c1 100644
--- a/llvm/test/CodeGen/X86/vec_int_to_fp.ll
+++ b/llvm/test/CodeGen/X86/vec_int_to_fp.ll
@@ -579,7 +579,7 @@ define <2 x double> @uitofp_2i64_to_2f64(<2 x i64> %a) {
define <2 x double> @uitofp_2i32_to_2f64(<4 x i32> %a) {
; SSE2-LABEL: uitofp_2i32_to_2f64:
; SSE2: # %bb.0:
-; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [65535,0,65535,0,65535,0,65535,0]
+; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [65535,0,65535,0,0,0,0,0]
; SSE2-NEXT: pand %xmm0, %xmm1
; SSE2-NEXT: cvtdq2pd %xmm1, %xmm1
; SSE2-NEXT: psrld $16, %xmm0
@@ -591,7 +591,7 @@ define <2 x double> @uitofp_2i32_to_2f64(<4 x i32> %a) {
; SSE41-LABEL: uitofp_2i32_to_2f64:
; SSE41: # %bb.0:
; SSE41-NEXT: pxor %xmm1, %xmm1
-; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7]
+; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4,5,6,7]
; SSE41-NEXT: cvtdq2pd %xmm1, %xmm1
; SSE41-NEXT: psrld $16, %xmm0
; SSE41-NEXT: cvtdq2pd %xmm0, %xmm0
@@ -602,7 +602,7 @@ define <2 x double> @uitofp_2i32_to_2f64(<4 x i32> %a) {
; VEX-LABEL: uitofp_2i32_to_2f64:
; VEX: # %bb.0:
; VEX-NEXT: vpxor %xmm1, %xmm1, %xmm1
-; VEX-NEXT: vpblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7]
+; VEX-NEXT: vpblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4,5,6,7]
; VEX-NEXT: vcvtdq2pd %xmm1, %xmm1
; VEX-NEXT: vpsrld $16, %xmm0, %xmm0
; VEX-NEXT: vcvtdq2pd %xmm0, %xmm0
@@ -643,7 +643,7 @@ define <2 x double> @uitofp_2i32_to_2f64(<4 x i32> %a) {
define <2 x double> @uitofp_4i32_to_2f64(<4 x i32> %a) {
; SSE2-LABEL: uitofp_4i32_to_2f64:
; SSE2: # %bb.0:
-; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [65535,0,65535,0,65535,0,65535,0]
+; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [65535,0,65535,0,0,0,0,0]
; SSE2-NEXT: pand %xmm0, %xmm1
; SSE2-NEXT: cvtdq2pd %xmm1, %xmm1
; SSE2-NEXT: psrld $16, %xmm0
@@ -655,7 +655,7 @@ define <2 x double> @uitofp_4i32_to_2f64(<4 x i32> %a) {
; SSE41-LABEL: uitofp_4i32_to_2f64:
; SSE41: # %bb.0:
; SSE41-NEXT: pxor %xmm1, %xmm1
-; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7]
+; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4,5,6,7]
; SSE41-NEXT: cvtdq2pd %xmm1, %xmm1
; SSE41-NEXT: psrld $16, %xmm0
; SSE41-NEXT: cvtdq2pd %xmm0, %xmm0
@@ -940,17 +940,18 @@ define <4 x double> @uitofp_4i32_to_4f64(<4 x i32> %a) {
; SSE2-NEXT: cvtdq2pd %xmm1, %xmm1
; SSE2-NEXT: movapd {{.*#+}} xmm2 = [6.5536E+4,6.5536E+4]
; SSE2-NEXT: mulpd %xmm2, %xmm1
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm0[2,3,0,1]
-; SSE2-NEXT: pand {{.*}}(%rip), %xmm0
+; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [65535,0,65535,0,0,0,0,0]
+; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm0[2,3,0,1]
+; SSE2-NEXT: pand %xmm3, %xmm0
; SSE2-NEXT: cvtdq2pd %xmm0, %xmm0
; SSE2-NEXT: addpd %xmm1, %xmm0
-; SSE2-NEXT: movdqa %xmm3, %xmm1
+; SSE2-NEXT: movdqa %xmm4, %xmm1
; SSE2-NEXT: psrld $16, %xmm1
-; SSE2-NEXT: cvtdq2pd %xmm1, %xmm4
-; SSE2-NEXT: mulpd %xmm2, %xmm4
-; SSE2-NEXT: pand {{.*}}(%rip), %xmm3
-; SSE2-NEXT: cvtdq2pd %xmm3, %xmm1
-; SSE2-NEXT: addpd %xmm4, %xmm1
+; SSE2-NEXT: cvtdq2pd %xmm1, %xmm5
+; SSE2-NEXT: mulpd %xmm2, %xmm5
+; SSE2-NEXT: pand %xmm3, %xmm4
+; SSE2-NEXT: cvtdq2pd %xmm4, %xmm1
+; SSE2-NEXT: addpd %xmm5, %xmm1
; SSE2-NEXT: retq
;
; SSE41-LABEL: uitofp_4i32_to_4f64:
@@ -962,15 +963,16 @@ define <4 x double> @uitofp_4i32_to_4f64(<4 x i32> %a) {
; SSE41-NEXT: mulpd %xmm2, %xmm1
; SSE41-NEXT: pxor %xmm3, %xmm3
; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[2,3,0,1]
-; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1],xmm0[2],xmm3[3],xmm0[4],xmm3[5],xmm0[6],xmm3[7]
+; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1],xmm0[2],xmm3[3],xmm0[4,5,6,7]
; SSE41-NEXT: cvtdq2pd %xmm0, %xmm0
; SSE41-NEXT: addpd %xmm1, %xmm0
-; SSE41-NEXT: pblendw {{.*#+}} xmm3 = xmm4[0],xmm3[1],xmm4[2],xmm3[3,4,5,6,7]
-; SSE41-NEXT: psrld $16, %xmm4
-; SSE41-NEXT: cvtdq2pd %xmm4, %xmm4
-; SSE41-NEXT: mulpd %xmm2, %xmm4
-; SSE41-NEXT: cvtdq2pd %xmm3, %xmm1
-; SSE41-NEXT: addpd %xmm4, %xmm1
+; SSE41-NEXT: movdqa %xmm4, %xmm1
+; SSE41-NEXT: psrld $16, %xmm1
+; SSE41-NEXT: cvtdq2pd %xmm1, %xmm5
+; SSE41-NEXT: mulpd %xmm2, %xmm5
+; SSE41-NEXT: pblendw {{.*#+}} xmm4 = xmm4[0],xmm3[1],xmm4[2],xmm3[3],xmm4[4,5,6,7]
+; SSE41-NEXT: cvtdq2pd %xmm4, %xmm1
+; SSE41-NEXT: addpd %xmm5, %xmm1
; SSE41-NEXT: retq
;
; AVX1-LABEL: uitofp_4i32_to_4f64:
@@ -3508,7 +3510,7 @@ define <2 x double> @uitofp_load_2i32_to_2f64(<2 x i32> *%a) {
; SSE41: # %bb.0:
; SSE41-NEXT: movq {{.*#+}} xmm0 = mem[0],zero
; SSE41-NEXT: pxor %xmm1, %xmm1
-; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3,4,5,6,7]
+; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4,5,6,7]
; SSE41-NEXT: cvtdq2pd %xmm1, %xmm1
; SSE41-NEXT: psrld $16, %xmm0
; SSE41-NEXT: cvtdq2pd %xmm0, %xmm0
@@ -3520,7 +3522,7 @@ define <2 x double> @uitofp_load_2i32_to_2f64(<2 x i32> *%a) {
; VEX: # %bb.0:
; VEX-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero
; VEX-NEXT: vpxor %xmm1, %xmm1, %xmm1
-; VEX-NEXT: vpblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3,4,5,6,7]
+; VEX-NEXT: vpblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4,5,6,7]
; VEX-NEXT: vcvtdq2pd %xmm1, %xmm1
; VEX-NEXT: vpsrld $16, %xmm0, %xmm0
; VEX-NEXT: vcvtdq2pd %xmm0, %xmm0
@@ -3742,17 +3744,18 @@ define <4 x double> @uitofp_load_4i32_to_4f64(<4 x i32> *%a) {
; SSE2-NEXT: cvtdq2pd %xmm1, %xmm1
; SSE2-NEXT: movapd {{.*#+}} xmm2 = [6.5536E+4,6.5536E+4]
; SSE2-NEXT: mulpd %xmm2, %xmm1
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm0[2,3,0,1]
-; SSE2-NEXT: pand {{.*}}(%rip), %xmm0
+; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [65535,0,65535,0,0,0,0,0]
+; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm0[2,3,0,1]
+; SSE2-NEXT: pand %xmm3, %xmm0
; SSE2-NEXT: cvtdq2pd %xmm0, %xmm0
; SSE2-NEXT: addpd %xmm1, %xmm0
-; SSE2-NEXT: movdqa %xmm3, %xmm1
+; SSE2-NEXT: movdqa %xmm4, %xmm1
; SSE2-NEXT: psrld $16, %xmm1
-; SSE2-NEXT: cvtdq2pd %xmm1, %xmm4
-; SSE2-NEXT: mulpd %xmm2, %xmm4
-; SSE2-NEXT: pand {{.*}}(%rip), %xmm3
-; SSE2-NEXT: cvtdq2pd %xmm3, %xmm1
-; SSE2-NEXT: addpd %xmm4, %xmm1
+; SSE2-NEXT: cvtdq2pd %xmm1, %xmm5
+; SSE2-NEXT: mulpd %xmm2, %xmm5
+; SSE2-NEXT: pand %xmm3, %xmm4
+; SSE2-NEXT: cvtdq2pd %xmm4, %xmm1
+; SSE2-NEXT: addpd %xmm5, %xmm1
; SSE2-NEXT: retq
;
; SSE41-LABEL: uitofp_load_4i32_to_4f64:
@@ -3765,15 +3768,16 @@ define <4 x double> @uitofp_load_4i32_to_4f64(<4 x i32> *%a) {
; SSE41-NEXT: mulpd %xmm2, %xmm1
; SSE41-NEXT: pxor %xmm3, %xmm3
; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[2,3,0,1]
-; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1],xmm0[2],xmm3[3],xmm0[4],xmm3[5],xmm0[6],xmm3[7]
+; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1],xmm0[2],xmm3[3],xmm0[4,5,6,7]
; SSE41-NEXT: cvtdq2pd %xmm0, %xmm0
; SSE41-NEXT: addpd %xmm1, %xmm0
-; SSE41-NEXT: pblendw {{.*#+}} xmm3 = xmm4[0],xmm3[1],xmm4[2],xmm3[3,4,5,6,7]
-; SSE41-NEXT: psrld $16, %xmm4
-; SSE41-NEXT: cvtdq2pd %xmm4, %xmm4
-; SSE41-NEXT: mulpd %xmm2, %xmm4
-; SSE41-NEXT: cvtdq2pd %xmm3, %xmm1
-; SSE41-NEXT: addpd %xmm4, %xmm1
+; SSE41-NEXT: movdqa %xmm4, %xmm1
+; SSE41-NEXT: psrld $16, %xmm1
+; SSE41-NEXT: cvtdq2pd %xmm1, %xmm5
+; SSE41-NEXT: mulpd %xmm2, %xmm5
+; SSE41-NEXT: pblendw {{.*#+}} xmm4 = xmm4[0],xmm3[1],xmm4[2],xmm3[3],xmm4[4,5,6,7]
+; SSE41-NEXT: cvtdq2pd %xmm4, %xmm1
+; SSE41-NEXT: addpd %xmm5, %xmm1
; SSE41-NEXT: retq
;
; AVX1-LABEL: uitofp_load_4i32_to_4f64:
OpenPOWER on IntegriCloud