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: vmov.f32 s2, #1.250000e-01
9
- ; CHECK-NEXT: vcvt.f32.s32 d2, d0
10
- ; CHECK-NEXT: vmul.f32 s1, s5, s2
11
- ; CHECK-NEXT: vmul.f32 s0, s4, s2
8
+ ; CHECK-NEXT: vcvt.f32.s32 d0, d0, #3
12
9
; CHECK-NEXT: bx lr
13
10
entry:
14
11
%vcvt.i = sitofp <2 x i32 > %vecinit2.i to <2 x float >
@@ -20,10 +17,7 @@ entry:
20
17
define arm_aapcs_vfpcc <2 x float > @t2 (<2 x i32 > %vecinit2.i ) nounwind {
21
18
; CHECK-LABEL: t2:
22
19
; CHECK: @ %bb.0: @ %entry
23
- ; CHECK-NEXT: vmov.f32 s2, #1.250000e-01
24
- ; CHECK-NEXT: vcvt.f32.u32 d2, d0
25
- ; CHECK-NEXT: vmul.f32 s1, s5, s2
26
- ; CHECK-NEXT: vmul.f32 s0, s4, s2
20
+ ; CHECK-NEXT: vcvt.f32.u32 d0, d0, #3
27
21
; CHECK-NEXT: bx lr
28
22
entry:
29
23
%vcvt.i = uitofp <2 x i32 > %vecinit2.i to <2 x float >
@@ -56,17 +50,10 @@ entry:
56
50
define arm_aapcs_vfpcc <2 x float > @t4 (<2 x i32 > %vecinit2.i ) nounwind {
57
51
; CHECK-LABEL: t4:
58
52
; CHECK: @ %bb.0: @ %entry
59
- ; CHECK-NEXT: vcvt.f32.s32 d2, d0
60
- ; CHECK-NEXT: vldr s2, LCPI3_0
61
- ; CHECK-NEXT: vdiv.f32 s1, s5, s2
62
- ; CHECK-NEXT: vdiv.f32 s0, s4, s2
53
+ ; CHECK-NEXT: vcvt.f32.s32 d16, d0
54
+ ; CHECK-NEXT: vmov.i32 d17, #0x2f000000
55
+ ; CHECK-NEXT: vmul.f32 d0, d16, d17
63
56
; CHECK-NEXT: bx lr
64
- ; CHECK-NEXT: .p2align 2
65
- ; CHECK-NEXT: @ %bb.1:
66
- ; CHECK-NEXT: .data_region
67
- ; CHECK-NEXT: LCPI3_0:
68
- ; CHECK-NEXT: .long 0x50000000 @ float 8.58993459E+9
69
- ; CHECK-NEXT: .end_data_region
70
57
entry:
71
58
%vcvt.i = sitofp <2 x i32 > %vecinit2.i to <2 x float >
72
59
%div.i = fdiv <2 x float > %vcvt.i , <float 0x4200000000000000 , float 0x4200000000000000 >
@@ -77,17 +64,8 @@ entry:
77
64
define arm_aapcs_vfpcc <2 x float > @t5 (<2 x i32 > %vecinit2.i ) nounwind {
78
65
; CHECK-LABEL: t5:
79
66
; CHECK: @ %bb.0: @ %entry
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
67
+ ; CHECK-NEXT: vcvt.f32.s32 d0, d0, #32
84
68
; 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
91
69
entry:
92
70
%vcvt.i = sitofp <2 x i32 > %vecinit2.i to <2 x float >
93
71
%div.i = fdiv <2 x float > %vcvt.i , <float 0x41F0000000000000 , float 0x41F0000000000000 >
@@ -98,12 +76,7 @@ entry:
98
76
define arm_aapcs_vfpcc <4 x float > @t6 (<4 x i32 > %vecinit6.i ) nounwind {
99
77
; CHECK-LABEL: t6:
100
78
; CHECK: @ %bb.0: @ %entry
101
- ; CHECK-NEXT: vmov.f32 s4, #1.250000e-01
102
- ; CHECK-NEXT: vcvt.f32.s32 q2, q0
103
- ; CHECK-NEXT: vmul.f32 s3, s11, s4
104
- ; CHECK-NEXT: vmul.f32 s2, s10, s4
105
- ; CHECK-NEXT: vmul.f32 s1, s9, s4
106
- ; CHECK-NEXT: vmul.f32 s0, s8, s4
79
+ ; CHECK-NEXT: vcvt.f32.s32 q0, q0, #3
107
80
; CHECK-NEXT: bx lr
108
81
entry:
109
82
%vcvt.i = sitofp <4 x i32 > %vecinit6.i to <4 x float >
@@ -115,12 +88,7 @@ define arm_aapcs_vfpcc <4 x float> @fix_unsigned_i16_to_float(<4 x i16> %in) {
115
88
; CHECK-LABEL: fix_unsigned_i16_to_float:
116
89
; CHECK: @ %bb.0:
117
90
; CHECK-NEXT: vmovl.u16 q8, d0
118
- ; CHECK-NEXT: vmov.f32 s4, #5.000000e-01
119
- ; CHECK-NEXT: vcvt.f32.u32 q2, q8
120
- ; CHECK-NEXT: vmul.f32 s3, s11, s4
121
- ; CHECK-NEXT: vmul.f32 s2, s10, s4
122
- ; CHECK-NEXT: vmul.f32 s1, s9, s4
123
- ; CHECK-NEXT: vmul.f32 s0, s8, s4
91
+ ; CHECK-NEXT: vcvt.f32.u32 q0, q8, #1
124
92
; CHECK-NEXT: bx lr
125
93
%conv = uitofp <4 x i16 > %in to <4 x float >
126
94
%shift = fdiv <4 x float > %conv , <float 2 .0 , float 2 .0 , float 2 .0 , float 2 .0 >
@@ -131,12 +99,7 @@ define arm_aapcs_vfpcc <4 x float> @fix_signed_i16_to_float(<4 x i16> %in) {
131
99
; CHECK-LABEL: fix_signed_i16_to_float:
132
100
; CHECK: @ %bb.0:
133
101
; CHECK-NEXT: vmovl.s16 q8, d0
134
- ; CHECK-NEXT: vmov.f32 s4, #5.000000e-01
135
- ; CHECK-NEXT: vcvt.f32.s32 q2, q8
136
- ; CHECK-NEXT: vmul.f32 s3, s11, s4
137
- ; CHECK-NEXT: vmul.f32 s2, s10, s4
138
- ; CHECK-NEXT: vmul.f32 s1, s9, s4
139
- ; CHECK-NEXT: vmul.f32 s0, s8, s4
102
+ ; CHECK-NEXT: vcvt.f32.s32 q0, q8, #1
140
103
; CHECK-NEXT: bx lr
141
104
%conv = sitofp <4 x i16 > %in to <4 x float >
142
105
%shift = fdiv <4 x float > %conv , <float 2 .0 , float 2 .0 , float 2 .0 , float 2 .0 >
@@ -152,13 +115,12 @@ define arm_aapcs_vfpcc <2 x float> @fix_i64_to_float(<2 x i64> %in) {
152
115
; CHECK-NEXT: vmov r0, r1, d9
153
116
; CHECK-NEXT: bl ___floatundisf
154
117
; CHECK-NEXT: vmov r2, r1, d8
155
- ; CHECK-NEXT: vmov s18 , r0
156
- ; CHECK-NEXT: vmov.f32 s16 , #5.000000e-01
118
+ ; CHECK-NEXT: vmov s19 , r0
119
+ ; CHECK-NEXT: vmov.i32 d8 , #0x3f000000
157
120
; CHECK-NEXT: mov r0, r2
158
121
; CHECK-NEXT: bl ___floatundisf
159
- ; CHECK-NEXT: vmov s2, r0
160
- ; CHECK-NEXT: vmul.f32 s1, s18, s16
161
- ; CHECK-NEXT: vmul.f32 s0, s2, s16
122
+ ; CHECK-NEXT: vmov s18, r0
123
+ ; CHECK-NEXT: vmul.f32 d0, d9, d8
162
124
; CHECK-NEXT: vpop {d8, d9}
163
125
; CHECK-NEXT: pop {lr}
164
126
; CHECK-NEXT: bx lr
@@ -196,19 +158,8 @@ define arm_aapcs_vfpcc <2 x double> @fix_i64_to_double(<2 x i64> %in) {
196
158
define arm_aapcs_vfpcc <8 x float > @test7 (<8 x i32 > %in ) nounwind {
197
159
; CHECK-LABEL: test7:
198
160
; CHECK: @ %bb.0: @ %entry
199
- ; CHECK-NEXT: vpush {d8, d9}
200
- ; CHECK-NEXT: vmov.f32 s12, #1.250000e-01
201
- ; CHECK-NEXT: vcvt.f32.s32 q4, q0
202
- ; CHECK-NEXT: vcvt.f32.s32 q2, q1
203
- ; CHECK-NEXT: vmul.f32 s3, s19, s12
204
- ; CHECK-NEXT: vmul.f32 s2, s18, s12
205
- ; CHECK-NEXT: vmul.f32 s7, s11, s12
206
- ; CHECK-NEXT: vmul.f32 s6, s10, s12
207
- ; CHECK-NEXT: vmul.f32 s1, s17, s12
208
- ; CHECK-NEXT: vmul.f32 s5, s9, s12
209
- ; CHECK-NEXT: vmul.f32 s0, s16, s12
210
- ; CHECK-NEXT: vmul.f32 s4, s8, s12
211
- ; CHECK-NEXT: vpop {d8, d9}
161
+ ; CHECK-NEXT: vcvt.f32.s32 q0, q0, #3
162
+ ; CHECK-NEXT: vcvt.f32.s32 q1, q1, #3
212
163
; CHECK-NEXT: bx lr
213
164
entry:
214
165
%vcvt.i = sitofp <8 x i32 > %in to <8 x float >
@@ -220,19 +171,8 @@ entry:
220
171
define arm_aapcs_vfpcc <4 x float > @test8 (<4 x i32 > %in ) {
221
172
; CHECK-LABEL: test8:
222
173
; CHECK: @ %bb.0:
223
- ; CHECK-NEXT: vmov.f32 s4, #5.000000e-01
224
- ; CHECK-NEXT: vcvt.f32.s32 q2, q0
225
- ; CHECK-NEXT: vmul.f32 s2, s10, s4
226
- ; CHECK-NEXT: vmul.f32 s1, s9, s4
227
- ; CHECK-NEXT: vmul.f32 s0, s8, s4
228
- ; CHECK-NEXT: vldr s3, LCPI11_0
174
+ ; CHECK-NEXT: vcvt.f32.s32 q0, q0, #1
229
175
; 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
236
176
%vcvt.i = sitofp <4 x i32 > %in to <4 x float >
237
177
%div.i = fdiv <4 x float > %vcvt.i , <float 2 .0 , float 2 .0 , float 2 .0 , float undef >
238
178
ret <4 x float > %div.i
@@ -241,19 +181,8 @@ define arm_aapcs_vfpcc <4 x float> @test8(<4 x i32> %in) {
241
181
define arm_aapcs_vfpcc <3 x float > @test_illegal_int_to_fp (<3 x i32 > %in ) {
242
182
; CHECK-LABEL: test_illegal_int_to_fp:
243
183
; CHECK: @ %bb.0:
244
- ; CHECK-NEXT: vmov.f32 s4, #2.500000e-01
245
- ; CHECK-NEXT: vcvt.f32.s32 q2, q0
246
- ; CHECK-NEXT: vmul.f32 s2, s10, s4
247
- ; CHECK-NEXT: vmul.f32 s1, s9, s4
248
- ; CHECK-NEXT: vmul.f32 s0, s8, s4
249
- ; CHECK-NEXT: vldr s3, LCPI12_0
184
+ ; CHECK-NEXT: vcvt.f32.s32 q0, q0, #2
250
185
; 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
257
186
%conv = sitofp <3 x i32 > %in to <3 x float >
258
187
%res = fdiv <3 x float > %conv , <float 4 .0 , float 4 .0 , float 4 .0 >
259
188
ret <3 x float > %res
0 commit comments