@@ -100,10 +100,7 @@ define float @signbits_ashr_extract_sitofp_0(<2 x i64> %a0) nounwind {
100100define float @signbits_ashr_extract_sitofp_1 (<2 x i64 > %a0 ) nounwind {
101101; X32-LABEL: signbits_ashr_extract_sitofp_1:
102102; X32: # BB#0:
103- ; X32-NEXT: pushl %ebp
104- ; X32-NEXT: movl %esp, %ebp
105- ; X32-NEXT: andl $-8, %esp
106- ; X32-NEXT: subl $16, %esp
103+ ; X32-NEXT: pushl %eax
107104; X32-NEXT: vmovdqa {{.*#+}} xmm1 = [0,2147483648,0,2147483648]
108105; X32-NEXT: vpsrlq $63, %xmm1, %xmm2
109106; X32-NEXT: vpsrlq $32, %xmm1, %xmm1
@@ -113,12 +110,11 @@ define float @signbits_ashr_extract_sitofp_1(<2 x i64> %a0) nounwind {
113110; X32-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7]
114111; X32-NEXT: vpxor %xmm1, %xmm0, %xmm0
115112; X32-NEXT: vpsubq %xmm1, %xmm0, %xmm0
116- ; X32-NEXT: vmovq %xmm0, {{[0-9]+}}(%esp)
117- ; X32-NEXT: fildll {{[0-9]+}}(%esp)
118- ; X32-NEXT: fstps {{[0-9]+}}(%esp)
119- ; X32-NEXT: flds {{[0-9]+}}(%esp)
120- ; X32-NEXT: movl %ebp, %esp
121- ; X32-NEXT: popl %ebp
113+ ; X32-NEXT: vmovd %xmm0, %eax
114+ ; X32-NEXT: vcvtsi2ssl %eax, %xmm3, %xmm0
115+ ; X32-NEXT: vmovss %xmm0, (%esp)
116+ ; X32-NEXT: flds (%esp)
117+ ; X32-NEXT: popl %eax
122118; X32-NEXT: retl
123119;
124120; X64-LABEL: signbits_ashr_extract_sitofp_1:
@@ -130,7 +126,7 @@ define float @signbits_ashr_extract_sitofp_1(<2 x i64> %a0) nounwind {
130126; X64-NEXT: vpxor %xmm1, %xmm0, %xmm0
131127; X64-NEXT: vpsubq %xmm1, %xmm0, %xmm0
132128; X64-NEXT: vmovq %xmm0, %rax
133- ; X64-NEXT: vcvtsi2ssq %rax , %xmm2, %xmm0
129+ ; X64-NEXT: vcvtsi2ssl %eax , %xmm2, %xmm0
134130; X64-NEXT: retq
135131 %1 = ashr <2 x i64 > %a0 , <i64 32 , i64 63 >
136132 %2 = extractelement <2 x i64 > %1 , i32 0
@@ -141,10 +137,7 @@ define float @signbits_ashr_extract_sitofp_1(<2 x i64> %a0) nounwind {
141137define float @signbits_ashr_shl_extract_sitofp (<2 x i64 > %a0 ) nounwind {
142138; X32-LABEL: signbits_ashr_shl_extract_sitofp:
143139; X32: # BB#0:
144- ; X32-NEXT: pushl %ebp
145- ; X32-NEXT: movl %esp, %ebp
146- ; X32-NEXT: andl $-8, %esp
147- ; X32-NEXT: subl $16, %esp
140+ ; X32-NEXT: pushl %eax
148141; X32-NEXT: vmovdqa {{.*#+}} xmm1 = [0,2147483648,0,2147483648]
149142; X32-NEXT: vpsrlq $60, %xmm1, %xmm2
150143; X32-NEXT: vpsrlq $61, %xmm1, %xmm1
@@ -154,15 +147,12 @@ define float @signbits_ashr_shl_extract_sitofp(<2 x i64> %a0) nounwind {
154147; X32-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7]
155148; X32-NEXT: vpxor %xmm1, %xmm0, %xmm0
156149; X32-NEXT: vpsubq %xmm1, %xmm0, %xmm0
157- ; X32-NEXT: vpsllq $16, %xmm0, %xmm1
158150; X32-NEXT: vpsllq $20, %xmm0, %xmm0
159- ; X32-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
160- ; X32-NEXT: vmovq %xmm0, {{[0-9]+}}(%esp)
161- ; X32-NEXT: fildll {{[0-9]+}}(%esp)
162- ; X32-NEXT: fstps {{[0-9]+}}(%esp)
163- ; X32-NEXT: flds {{[0-9]+}}(%esp)
164- ; X32-NEXT: movl %ebp, %esp
165- ; X32-NEXT: popl %ebp
151+ ; X32-NEXT: vmovd %xmm0, %eax
152+ ; X32-NEXT: vcvtsi2ssl %eax, %xmm3, %xmm0
153+ ; X32-NEXT: vmovss %xmm0, (%esp)
154+ ; X32-NEXT: flds (%esp)
155+ ; X32-NEXT: popl %eax
166156; X32-NEXT: retl
167157;
168158; X64-LABEL: signbits_ashr_shl_extract_sitofp:
@@ -175,7 +165,7 @@ define float @signbits_ashr_shl_extract_sitofp(<2 x i64> %a0) nounwind {
175165; X64-NEXT: vpsubq %xmm1, %xmm0, %xmm0
176166; X64-NEXT: vpsllq $20, %xmm0, %xmm0
177167; X64-NEXT: vmovq %xmm0, %rax
178- ; X64-NEXT: vcvtsi2ssq %rax , %xmm2, %xmm0
168+ ; X64-NEXT: vcvtsi2ssl %eax , %xmm2, %xmm0
179169; X64-NEXT: retq
180170 %1 = ashr <2 x i64 > %a0 , <i64 61 , i64 60 >
181171 %2 = shl <2 x i64 > %1 , <i64 20 , i64 16 >
0 commit comments