5
5
define arm_aapcs_vfpcc <2 x float > @t1 (<2 x i32 > %vecinit2.i ) nounwind {
6
6
; CHECK-LABEL: t1:
7
7
; CHECK: @ %bb.0: @ %entry
8
- ; CHECK-NEXT: vcvt.f32.s32 d0, d0, #3
8
+ ; CHECK-NEXT: vmov.f32 s2, #8.000000e+00
9
+ ; CHECK-NEXT: vcvt.f32.s32 d2, d0
10
+ ; CHECK-NEXT: vdiv.f32 s1, s5, s2
11
+ ; CHECK-NEXT: vdiv.f32 s0, s4, s2
9
12
; CHECK-NEXT: bx lr
10
13
entry:
11
14
%vcvt.i = sitofp <2 x i32 > %vecinit2.i to <2 x float >
@@ -17,7 +20,10 @@ entry:
17
20
define arm_aapcs_vfpcc <2 x float > @t2 (<2 x i32 > %vecinit2.i ) nounwind {
18
21
; CHECK-LABEL: t2:
19
22
; CHECK: @ %bb.0: @ %entry
20
- ; CHECK-NEXT: vcvt.f32.u32 d0, d0, #3
23
+ ; CHECK-NEXT: vmov.f32 s2, #8.000000e+00
24
+ ; CHECK-NEXT: vcvt.f32.u32 d2, d0
25
+ ; CHECK-NEXT: vdiv.f32 s1, s5, s2
26
+ ; CHECK-NEXT: vdiv.f32 s0, s4, s2
21
27
; CHECK-NEXT: bx lr
22
28
entry:
23
29
%vcvt.i = uitofp <2 x i32 > %vecinit2.i to <2 x float >
@@ -71,8 +77,17 @@ entry:
71
77
define arm_aapcs_vfpcc <2 x float > @t5 (<2 x i32 > %vecinit2.i ) nounwind {
72
78
; CHECK-LABEL: t5:
73
79
; CHECK: @ %bb.0: @ %entry
74
- ; CHECK-NEXT: vcvt.f32.s32 d0, d0, #32
80
+ ; CHECK-NEXT: vcvt.f32.s32 d2, d0
81
+ ; CHECK-NEXT: vldr s2, LCPI4_0
82
+ ; CHECK-NEXT: vdiv.f32 s1, s5, s2
83
+ ; CHECK-NEXT: vdiv.f32 s0, s4, s2
75
84
; CHECK-NEXT: bx lr
85
+ ; CHECK-NEXT: .p2align 2
86
+ ; CHECK-NEXT: @ %bb.1:
87
+ ; CHECK-NEXT: .data_region
88
+ ; CHECK-NEXT: LCPI4_0:
89
+ ; CHECK-NEXT: .long 0x4f800000 @ float 4.2949673E+9
90
+ ; CHECK-NEXT: .end_data_region
76
91
entry:
77
92
%vcvt.i = sitofp <2 x i32 > %vecinit2.i to <2 x float >
78
93
%div.i = fdiv <2 x float > %vcvt.i , <float 0x41F0000000000000 , float 0x41F0000000000000 >
@@ -83,7 +98,12 @@ entry:
83
98
define arm_aapcs_vfpcc <4 x float > @t6 (<4 x i32 > %vecinit6.i ) nounwind {
84
99
; CHECK-LABEL: t6:
85
100
; CHECK: @ %bb.0: @ %entry
86
- ; CHECK-NEXT: vcvt.f32.s32 q0, q0, #3
101
+ ; CHECK-NEXT: vmov.f32 s4, #8.000000e+00
102
+ ; CHECK-NEXT: vcvt.f32.s32 q2, q0
103
+ ; CHECK-NEXT: vdiv.f32 s3, s11, s4
104
+ ; CHECK-NEXT: vdiv.f32 s2, s10, s4
105
+ ; CHECK-NEXT: vdiv.f32 s1, s9, s4
106
+ ; CHECK-NEXT: vdiv.f32 s0, s8, s4
87
107
; CHECK-NEXT: bx lr
88
108
entry:
89
109
%vcvt.i = sitofp <4 x i32 > %vecinit6.i to <4 x float >
@@ -95,7 +115,12 @@ define arm_aapcs_vfpcc <4 x float> @fix_unsigned_i16_to_float(<4 x i16> %in) {
95
115
; CHECK-LABEL: fix_unsigned_i16_to_float:
96
116
; CHECK: @ %bb.0:
97
117
; CHECK-NEXT: vmovl.u16 q8, d0
98
- ; CHECK-NEXT: vcvt.f32.u32 q0, q8, #1
118
+ ; CHECK-NEXT: vmov.f32 s4, #2.000000e+00
119
+ ; CHECK-NEXT: vcvt.f32.u32 q2, q8
120
+ ; CHECK-NEXT: vdiv.f32 s3, s11, s4
121
+ ; CHECK-NEXT: vdiv.f32 s2, s10, s4
122
+ ; CHECK-NEXT: vdiv.f32 s1, s9, s4
123
+ ; CHECK-NEXT: vdiv.f32 s0, s8, s4
99
124
; CHECK-NEXT: bx lr
100
125
%conv = uitofp <4 x i16 > %in to <4 x float >
101
126
%shift = fdiv <4 x float > %conv , <float 2 .0 , float 2 .0 , float 2 .0 , float 2 .0 >
@@ -106,7 +131,12 @@ define arm_aapcs_vfpcc <4 x float> @fix_signed_i16_to_float(<4 x i16> %in) {
106
131
; CHECK-LABEL: fix_signed_i16_to_float:
107
132
; CHECK: @ %bb.0:
108
133
; CHECK-NEXT: vmovl.s16 q8, d0
109
- ; CHECK-NEXT: vcvt.f32.s32 q0, q8, #1
134
+ ; CHECK-NEXT: vmov.f32 s4, #2.000000e+00
135
+ ; CHECK-NEXT: vcvt.f32.s32 q2, q8
136
+ ; CHECK-NEXT: vdiv.f32 s3, s11, s4
137
+ ; CHECK-NEXT: vdiv.f32 s2, s10, s4
138
+ ; CHECK-NEXT: vdiv.f32 s1, s9, s4
139
+ ; CHECK-NEXT: vdiv.f32 s0, s8, s4
110
140
; CHECK-NEXT: bx lr
111
141
%conv = sitofp <4 x i16 > %in to <4 x float >
112
142
%shift = fdiv <4 x float > %conv , <float 2 .0 , float 2 .0 , float 2 .0 , float 2 .0 >
@@ -166,8 +196,19 @@ define arm_aapcs_vfpcc <2 x double> @fix_i64_to_double(<2 x i64> %in) {
166
196
define arm_aapcs_vfpcc <8 x float > @test7 (<8 x i32 > %in ) nounwind {
167
197
; CHECK-LABEL: test7:
168
198
; CHECK: @ %bb.0: @ %entry
169
- ; CHECK-NEXT: vcvt.f32.s32 q0, q0, #3
170
- ; CHECK-NEXT: vcvt.f32.s32 q1, q1, #3
199
+ ; CHECK-NEXT: vpush {d8, d9}
200
+ ; CHECK-NEXT: vmov.f32 s12, #8.000000e+00
201
+ ; CHECK-NEXT: vcvt.f32.s32 q4, q0
202
+ ; CHECK-NEXT: vcvt.f32.s32 q2, q1
203
+ ; CHECK-NEXT: vdiv.f32 s3, s19, s12
204
+ ; CHECK-NEXT: vdiv.f32 s7, s11, s12
205
+ ; CHECK-NEXT: vdiv.f32 s2, s18, s12
206
+ ; CHECK-NEXT: vdiv.f32 s6, s10, s12
207
+ ; CHECK-NEXT: vdiv.f32 s1, s17, s12
208
+ ; CHECK-NEXT: vdiv.f32 s5, s9, s12
209
+ ; CHECK-NEXT: vdiv.f32 s0, s16, s12
210
+ ; CHECK-NEXT: vdiv.f32 s4, s8, s12
211
+ ; CHECK-NEXT: vpop {d8, d9}
171
212
; CHECK-NEXT: bx lr
172
213
entry:
173
214
%vcvt.i = sitofp <8 x i32 > %in to <8 x float >
@@ -179,8 +220,19 @@ entry:
179
220
define arm_aapcs_vfpcc <4 x float > @test8 (<4 x i32 > %in ) {
180
221
; CHECK-LABEL: test8:
181
222
; CHECK: @ %bb.0:
182
- ; CHECK-NEXT: vcvt.f32.s32 q0, q0, #1
223
+ ; CHECK-NEXT: vmov.f32 s4, #2.000000e+00
224
+ ; CHECK-NEXT: vcvt.f32.s32 q2, q0
225
+ ; CHECK-NEXT: vdiv.f32 s2, s10, s4
226
+ ; CHECK-NEXT: vdiv.f32 s1, s9, s4
227
+ ; CHECK-NEXT: vdiv.f32 s0, s8, s4
228
+ ; CHECK-NEXT: vldr s3, LCPI11_0
183
229
; CHECK-NEXT: bx lr
230
+ ; CHECK-NEXT: .p2align 2
231
+ ; CHECK-NEXT: @ %bb.1:
232
+ ; CHECK-NEXT: .data_region
233
+ ; CHECK-NEXT: LCPI11_0:
234
+ ; CHECK-NEXT: .long 0x7fc00000 @ float NaN
235
+ ; CHECK-NEXT: .end_data_region
184
236
%vcvt.i = sitofp <4 x i32 > %in to <4 x float >
185
237
%div.i = fdiv <4 x float > %vcvt.i , <float 2 .0 , float 2 .0 , float 2 .0 , float undef >
186
238
ret <4 x float > %div.i
@@ -189,8 +241,19 @@ define arm_aapcs_vfpcc <4 x float> @test8(<4 x i32> %in) {
189
241
define arm_aapcs_vfpcc <3 x float > @test_illegal_int_to_fp (<3 x i32 > %in ) {
190
242
; CHECK-LABEL: test_illegal_int_to_fp:
191
243
; CHECK: @ %bb.0:
192
- ; CHECK-NEXT: vcvt.f32.s32 q0, q0, #2
244
+ ; CHECK-NEXT: vmov.f32 s4, #4.000000e+00
245
+ ; CHECK-NEXT: vcvt.f32.s32 q2, q0
246
+ ; CHECK-NEXT: vdiv.f32 s2, s10, s4
247
+ ; CHECK-NEXT: vdiv.f32 s1, s9, s4
248
+ ; CHECK-NEXT: vdiv.f32 s0, s8, s4
249
+ ; CHECK-NEXT: vldr s3, LCPI12_0
193
250
; CHECK-NEXT: bx lr
251
+ ; CHECK-NEXT: .p2align 2
252
+ ; CHECK-NEXT: @ %bb.1:
253
+ ; CHECK-NEXT: .data_region
254
+ ; CHECK-NEXT: LCPI12_0:
255
+ ; CHECK-NEXT: .long 0x7fc00000 @ float NaN
256
+ ; CHECK-NEXT: .end_data_region
194
257
%conv = sitofp <3 x i32 > %in to <3 x float >
195
258
%res = fdiv <3 x float > %conv , <float 4 .0 , float 4 .0 , float 4 .0 >
196
259
ret <3 x float > %res
@@ -200,9 +263,7 @@ define arm_aapcs_vfpcc <3 x float> @test_illegal_int_to_fp(<3 x i32> %in) {
200
263
define arm_aapcs_vfpcc <2 x float > @t1_mul (<2 x i32 > %vecinit2.i ) local_unnamed_addr #0 {
201
264
; CHECK-LABEL: t1_mul:
202
265
; CHECK: @ %bb.0: @ %entry
203
- ; CHECK-NEXT: vcvt.f32.s32 d16, d0
204
- ; CHECK-NEXT: vmov.i32 d17, #0x3e000000
205
- ; CHECK-NEXT: vmul.f32 d0, d16, d17
266
+ ; CHECK-NEXT: vcvt.f32.s32 d0, d0, #3
206
267
; CHECK-NEXT: bx lr
207
268
entry:
208
269
%vcvt.i = sitofp <2 x i32 > %vecinit2.i to <2 x float >
@@ -213,9 +274,7 @@ entry:
213
274
define arm_aapcs_vfpcc <2 x float > @t2_mul (<2 x i32 > %vecinit2.i ) local_unnamed_addr #0 {
214
275
; CHECK-LABEL: t2_mul:
215
276
; CHECK: @ %bb.0: @ %entry
216
- ; CHECK-NEXT: vcvt.f32.u32 d16, d0
217
- ; CHECK-NEXT: vmov.i32 d17, #0x3e000000
218
- ; CHECK-NEXT: vmul.f32 d0, d16, d17
277
+ ; CHECK-NEXT: vcvt.f32.u32 d0, d0, #3
219
278
; CHECK-NEXT: bx lr
220
279
entry:
221
280
%vcvt.i = uitofp <2 x i32 > %vecinit2.i to <2 x float >
@@ -239,10 +298,7 @@ entry:
239
298
define arm_aapcs_vfpcc <2 x float > @t5_mul (<2 x i32 > %vecinit2.i ) local_unnamed_addr #0 {
240
299
; CHECK-LABEL: t5_mul:
241
300
; CHECK: @ %bb.0: @ %entry
242
- ; CHECK-NEXT: vcvt.f32.s32 d16, d0
243
- ; CHECK-NEXT: mov r0, #796917760
244
- ; CHECK-NEXT: vdup.32 d17, r0
245
- ; CHECK-NEXT: vmul.f32 d0, d16, d17
301
+ ; CHECK-NEXT: vcvt.f32.s32 d0, d0, #32
246
302
; CHECK-NEXT: bx lr
247
303
entry:
248
304
%vcvt.i = sitofp <2 x i32 > %vecinit2.i to <2 x float >
@@ -253,9 +309,7 @@ entry:
253
309
define arm_aapcs_vfpcc <4 x float > @t6_mul (<4 x i32 > %vecinit6.i ) local_unnamed_addr #0 {
254
310
; CHECK-LABEL: t6_mul:
255
311
; CHECK: @ %bb.0: @ %entry
256
- ; CHECK-NEXT: vcvt.f32.s32 q8, q0
257
- ; CHECK-NEXT: vmov.i32 q9, #0x3e000000
258
- ; CHECK-NEXT: vmul.f32 q0, q8, q9
312
+ ; CHECK-NEXT: vcvt.f32.s32 q0, q0, #3
259
313
; CHECK-NEXT: bx lr
260
314
entry:
261
315
%vcvt.i = sitofp <4 x i32 > %vecinit6.i to <4 x float >
@@ -267,9 +321,7 @@ define arm_aapcs_vfpcc <4 x float> @fix_unsigned_i16_to_float_mul(<4 x i16> %in)
267
321
; CHECK-LABEL: fix_unsigned_i16_to_float_mul:
268
322
; CHECK: @ %bb.0:
269
323
; CHECK-NEXT: vmovl.u16 q8, d0
270
- ; CHECK-NEXT: vmov.i32 q9, #0x3f000000
271
- ; CHECK-NEXT: vcvt.f32.u32 q8, q8
272
- ; CHECK-NEXT: vmul.f32 q0, q8, q9
324
+ ; CHECK-NEXT: vcvt.f32.u32 q0, q8, #1
273
325
; CHECK-NEXT: bx lr
274
326
%conv = uitofp <4 x i16 > %in to <4 x float >
275
327
%shift = fmul <4 x float > %conv , <float 5.000000e-01 , float 5.000000e-01 , float 5.000000e-01 , float 5.000000e-01 >
@@ -280,9 +332,7 @@ define arm_aapcs_vfpcc <4 x float> @fix_signed_i16_to_float_mul(<4 x i16> %in) l
280
332
; CHECK-LABEL: fix_signed_i16_to_float_mul:
281
333
; CHECK: @ %bb.0:
282
334
; CHECK-NEXT: vmovl.s16 q8, d0
283
- ; CHECK-NEXT: vmov.i32 q9, #0x3f000000
284
- ; CHECK-NEXT: vcvt.f32.s32 q8, q8
285
- ; CHECK-NEXT: vmul.f32 q0, q8, q9
335
+ ; CHECK-NEXT: vcvt.f32.s32 q0, q8, #1
286
336
; CHECK-NEXT: bx lr
287
337
%conv = sitofp <4 x i16 > %in to <4 x float >
288
338
%shift = fmul <4 x float > %conv , <float 5.000000e-01 , float 5.000000e-01 , float 5.000000e-01 , float 5.000000e-01 >
@@ -340,11 +390,8 @@ define arm_aapcs_vfpcc <2 x double> @fix_i64_to_double_mul(<2 x i64> %in) local_
340
390
define arm_aapcs_vfpcc <8 x float > @test7_mul (<8 x i32 > %in ) local_unnamed_addr #0 {
341
391
; CHECK-LABEL: test7_mul:
342
392
; CHECK: @ %bb.0: @ %entry
343
- ; CHECK-NEXT: vcvt.f32.s32 q8, q0
344
- ; CHECK-NEXT: vcvt.f32.s32 q9, q1
345
- ; CHECK-NEXT: vmov.i32 q10, #0x3e000000
346
- ; CHECK-NEXT: vmul.f32 q0, q8, q10
347
- ; CHECK-NEXT: vmul.f32 q1, q9, q10
393
+ ; CHECK-NEXT: vcvt.f32.s32 q0, q0, #3
394
+ ; CHECK-NEXT: vcvt.f32.s32 q1, q1, #3
348
395
; CHECK-NEXT: bx lr
349
396
entry:
350
397
%vcvt.i = sitofp <8 x i32 > %in to <8 x float >
@@ -355,9 +402,7 @@ entry:
355
402
define arm_aapcs_vfpcc <3 x float > @test_illegal_int_to_fp_mul (<3 x i32 > %in ) local_unnamed_addr #0 {
356
403
; CHECK-LABEL: test_illegal_int_to_fp_mul:
357
404
; CHECK: @ %bb.0:
358
- ; CHECK-NEXT: vcvt.f32.s32 q8, q0
359
- ; CHECK-NEXT: vmov.f32 q9, #2.500000e-01
360
- ; CHECK-NEXT: vmul.f32 q0, q8, q9
405
+ ; CHECK-NEXT: vcvt.f32.s32 q0, q0, #2
361
406
; CHECK-NEXT: bx lr
362
407
%conv = sitofp <3 x i32 > %in to <3 x float >
363
408
%res = fmul <3 x float > %conv , <float 2.500000e-01 , float 2.500000e-01 , float 2.500000e-01 >
0 commit comments