@@ -50,31 +50,15 @@ define <2 x double> @sitofp_2vf64_i32(<4 x i32> %a) {
50
50
define <2 x double > @sitofp_2vf64_i16 (<8 x i16 > %a ) {
51
51
; SSE2-LABEL: sitofp_2vf64_i16:
52
52
; SSE2: # BB#0:
53
- ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,3]
54
- ; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,5,6,7]
55
- ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
56
- ; SSE2-NEXT: movd %xmm1, %rax
57
- ; SSE2-NEXT: movswq %ax, %rax
58
- ; SSE2-NEXT: movd %xmm0, %rcx
59
- ; SSE2-NEXT: movswq %cx, %rcx
60
- ; SSE2-NEXT: xorps %xmm0, %xmm0
61
- ; SSE2-NEXT: cvtsi2sdq %rcx, %xmm0
62
- ; SSE2-NEXT: xorps %xmm1, %xmm1
63
- ; SSE2-NEXT: cvtsi2sdq %rax, %xmm1
64
- ; SSE2-NEXT: unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]
53
+ ; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
54
+ ; SSE2-NEXT: psrad $16, %xmm0
55
+ ; SSE2-NEXT: cvtdq2pd %xmm0, %xmm0
65
56
; SSE2-NEXT: retq
66
57
;
67
58
; AVX-LABEL: sitofp_2vf64_i16:
68
59
; AVX: # BB#0:
69
- ; AVX-NEXT: vpmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero
70
- ; AVX-NEXT: vmovq %xmm0, %rax
71
- ; AVX-NEXT: movswq %ax, %rax
72
- ; AVX-NEXT: vpextrq $1, %xmm0, %rcx
73
- ; AVX-NEXT: movswq %cx, %rcx
74
- ; AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0
75
- ; AVX-NEXT: vcvtsi2sdq %rcx, %xmm0, %xmm0
76
- ; AVX-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm1
77
- ; AVX-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]
60
+ ; AVX-NEXT: vpmovsxwd %xmm0, %xmm0
61
+ ; AVX-NEXT: vcvtdq2pd %xmm0, %xmm0
78
62
; AVX-NEXT: retq
79
63
%shuf = shufflevector <8 x i16 > %a , <8 x i16 > undef , <2 x i32 > <i32 0 , i32 1 >
80
64
%cvt = sitofp <2 x i16 > %shuf to <2 x double >
@@ -86,30 +70,14 @@ define <2 x double> @sitofp_2vf64_i8(<16 x i8> %a) {
86
70
; SSE2: # BB#0:
87
71
; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
88
72
; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
89
- ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0,0,1,1]
90
- ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
91
- ; SSE2-NEXT: movd %xmm1, %rax
92
- ; SSE2-NEXT: movsbq %al, %rax
93
- ; SSE2-NEXT: movd %xmm0, %rcx
94
- ; SSE2-NEXT: movsbq %cl, %rcx
95
- ; SSE2-NEXT: xorps %xmm0, %xmm0
96
- ; SSE2-NEXT: cvtsi2sdq %rcx, %xmm0
97
- ; SSE2-NEXT: xorps %xmm1, %xmm1
98
- ; SSE2-NEXT: cvtsi2sdq %rax, %xmm1
99
- ; SSE2-NEXT: unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]
73
+ ; SSE2-NEXT: psrad $24, %xmm0
74
+ ; SSE2-NEXT: cvtdq2pd %xmm0, %xmm0
100
75
; SSE2-NEXT: retq
101
76
;
102
77
; AVX-LABEL: sitofp_2vf64_i8:
103
78
; AVX: # BB#0:
104
- ; AVX-NEXT: vpmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero
105
- ; AVX-NEXT: vmovq %xmm0, %rax
106
- ; AVX-NEXT: movsbq %al, %rax
107
- ; AVX-NEXT: vpextrq $1, %xmm0, %rcx
108
- ; AVX-NEXT: movsbq %cl, %rcx
109
- ; AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0
110
- ; AVX-NEXT: vcvtsi2sdq %rcx, %xmm0, %xmm0
111
- ; AVX-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm1
112
- ; AVX-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]
79
+ ; AVX-NEXT: vpmovsxbd %xmm0, %xmm0
80
+ ; AVX-NEXT: vcvtdq2pd %xmm0, %xmm0
113
81
; AVX-NEXT: retq
114
82
%shuf = shufflevector <16 x i8 > %a , <16 x i8 > undef , <2 x i32 > <i32 0 , i32 1 >
115
83
%cvt = sitofp <2 x i8 > %shuf to <2 x double >
0 commit comments