@@ -100,10 +100,7 @@ define float @signbits_ashr_extract_sitofp_0(<2 x i64> %a0) nounwind {
100
100
define float @signbits_ashr_extract_sitofp_1 (<2 x i64 > %a0 ) nounwind {
101
101
; X32-LABEL: signbits_ashr_extract_sitofp_1:
102
102
; 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
107
104
; X32-NEXT: vmovdqa {{.*#+}} xmm1 = [0,2147483648,0,2147483648]
108
105
; X32-NEXT: vpsrlq $63, %xmm1, %xmm2
109
106
; X32-NEXT: vpsrlq $32, %xmm1, %xmm1
@@ -113,12 +110,11 @@ define float @signbits_ashr_extract_sitofp_1(<2 x i64> %a0) nounwind {
113
110
; X32-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7]
114
111
; X32-NEXT: vpxor %xmm1, %xmm0, %xmm0
115
112
; 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
122
118
; X32-NEXT: retl
123
119
;
124
120
; X64-LABEL: signbits_ashr_extract_sitofp_1:
@@ -130,7 +126,7 @@ define float @signbits_ashr_extract_sitofp_1(<2 x i64> %a0) nounwind {
130
126
; X64-NEXT: vpxor %xmm1, %xmm0, %xmm0
131
127
; X64-NEXT: vpsubq %xmm1, %xmm0, %xmm0
132
128
; X64-NEXT: vmovq %xmm0, %rax
133
- ; X64-NEXT: vcvtsi2ssq %rax , %xmm2, %xmm0
129
+ ; X64-NEXT: vcvtsi2ssl %eax , %xmm2, %xmm0
134
130
; X64-NEXT: retq
135
131
%1 = ashr <2 x i64 > %a0 , <i64 32 , i64 63 >
136
132
%2 = extractelement <2 x i64 > %1 , i32 0
@@ -141,10 +137,7 @@ define float @signbits_ashr_extract_sitofp_1(<2 x i64> %a0) nounwind {
141
137
define float @signbits_ashr_shl_extract_sitofp (<2 x i64 > %a0 ) nounwind {
142
138
; X32-LABEL: signbits_ashr_shl_extract_sitofp:
143
139
; 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
148
141
; X32-NEXT: vmovdqa {{.*#+}} xmm1 = [0,2147483648,0,2147483648]
149
142
; X32-NEXT: vpsrlq $60, %xmm1, %xmm2
150
143
; X32-NEXT: vpsrlq $61, %xmm1, %xmm1
@@ -154,15 +147,12 @@ define float @signbits_ashr_shl_extract_sitofp(<2 x i64> %a0) nounwind {
154
147
; X32-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7]
155
148
; X32-NEXT: vpxor %xmm1, %xmm0, %xmm0
156
149
; X32-NEXT: vpsubq %xmm1, %xmm0, %xmm0
157
- ; X32-NEXT: vpsllq $16, %xmm0, %xmm1
158
150
; 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
166
156
; X32-NEXT: retl
167
157
;
168
158
; X64-LABEL: signbits_ashr_shl_extract_sitofp:
@@ -175,7 +165,7 @@ define float @signbits_ashr_shl_extract_sitofp(<2 x i64> %a0) nounwind {
175
165
; X64-NEXT: vpsubq %xmm1, %xmm0, %xmm0
176
166
; X64-NEXT: vpsllq $20, %xmm0, %xmm0
177
167
; X64-NEXT: vmovq %xmm0, %rax
178
- ; X64-NEXT: vcvtsi2ssq %rax , %xmm2, %xmm0
168
+ ; X64-NEXT: vcvtsi2ssl %eax , %xmm2, %xmm0
179
169
; X64-NEXT: retq
180
170
%1 = ashr <2 x i64 > %a0 , <i64 61 , i64 60 >
181
171
%2 = shl <2 x i64 > %1 , <i64 20 , i64 16 >
0 commit comments