[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / Thumb2 / mve-vcvt-fixed-to-float.ll
blob38a2cfc1a579d751fed9a85e6a7b828f8de8e085
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=thumbv8.1m.main-arm-none-eabi %s -o - -mattr=+mve.fp | FileCheck %s
4 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_1(<4 x i32> %0) {
5 ; CHECK-LABEL: vcvt_i32_1:
6 ; CHECK:       @ %bb.0:
7 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #1
8 ; CHECK-NEXT:    bx lr
9   %2 = sitofp <4 x i32> %0 to <4 x float>
10   %3 = fmul <4 x float> %2, <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>
11   ret <4 x float> %3
14 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_2(<4 x i32> %0) {
15 ; CHECK-LABEL: vcvt_i32_2:
16 ; CHECK:       @ %bb.0:
17 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #2
18 ; CHECK-NEXT:    bx lr
19   %2 = sitofp <4 x i32> %0 to <4 x float>
20   %3 = fmul <4 x float> %2, <float 2.500000e-01, float 2.500000e-01, float 2.500000e-01, float 2.500000e-01>
21   ret <4 x float> %3
24 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_3(<4 x i32> %0) {
25 ; CHECK-LABEL: vcvt_i32_3:
26 ; CHECK:       @ %bb.0:
27 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #3
28 ; CHECK-NEXT:    bx lr
29   %2 = sitofp <4 x i32> %0 to <4 x float>
30   %3 = fmul <4 x float> %2, <float 1.250000e-01, float 1.250000e-01, float 1.250000e-01, float 1.250000e-01>
31   ret <4 x float> %3
34 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_4(<4 x i32> %0) {
35 ; CHECK-LABEL: vcvt_i32_4:
36 ; CHECK:       @ %bb.0:
37 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #4
38 ; CHECK-NEXT:    bx lr
39   %2 = sitofp <4 x i32> %0 to <4 x float>
40   %3 = fmul <4 x float> %2, <float 6.250000e-02, float 6.250000e-02, float 6.250000e-02, float 6.250000e-02>
41   ret <4 x float> %3
44 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_5(<4 x i32> %0) {
45 ; CHECK-LABEL: vcvt_i32_5:
46 ; CHECK:       @ %bb.0:
47 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #5
48 ; CHECK-NEXT:    bx lr
49   %2 = sitofp <4 x i32> %0 to <4 x float>
50   %3 = fmul <4 x float> %2, <float 3.125000e-02, float 3.125000e-02, float 3.125000e-02, float 3.125000e-02>
51   ret <4 x float> %3
54 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_6(<4 x i32> %0) {
55 ; CHECK-LABEL: vcvt_i32_6:
56 ; CHECK:       @ %bb.0:
57 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #6
58 ; CHECK-NEXT:    bx lr
59   %2 = sitofp <4 x i32> %0 to <4 x float>
60   %3 = fmul <4 x float> %2, <float 1.562500e-02, float 1.562500e-02, float 1.562500e-02, float 1.562500e-02>
61   ret <4 x float> %3
64 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_7(<4 x i32> %0) {
65 ; CHECK-LABEL: vcvt_i32_7:
66 ; CHECK:       @ %bb.0:
67 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #7
68 ; CHECK-NEXT:    bx lr
69   %2 = sitofp <4 x i32> %0 to <4 x float>
70   %3 = fmul <4 x float> %2, <float 7.812500e-03, float 7.812500e-03, float 7.812500e-03, float 7.812500e-03>
71   ret <4 x float> %3
74 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_8(<4 x i32> %0) {
75 ; CHECK-LABEL: vcvt_i32_8:
76 ; CHECK:       @ %bb.0:
77 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #8
78 ; CHECK-NEXT:    bx lr
79   %2 = sitofp <4 x i32> %0 to <4 x float>
80   %3 = fmul <4 x float> %2, <float 3.906250e-03, float 3.906250e-03, float 3.906250e-03, float 3.906250e-03>
81   ret <4 x float> %3
84 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_9(<4 x i32> %0) {
85 ; CHECK-LABEL: vcvt_i32_9:
86 ; CHECK:       @ %bb.0:
87 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #9
88 ; CHECK-NEXT:    bx lr
89   %2 = sitofp <4 x i32> %0 to <4 x float>
90   %3 = fmul <4 x float> %2, <float 0x3F60000000000000, float 0x3F60000000000000, float 0x3F60000000000000, float 0x3F60000000000000>
91   ret <4 x float> %3
94 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_10(<4 x i32> %0) {
95 ; CHECK-LABEL: vcvt_i32_10:
96 ; CHECK:       @ %bb.0:
97 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #10
98 ; CHECK-NEXT:    bx lr
99   %2 = sitofp <4 x i32> %0 to <4 x float>
100   %3 = fmul <4 x float> %2, <float 0x3F50000000000000, float 0x3F50000000000000, float 0x3F50000000000000, float 0x3F50000000000000>
101   ret <4 x float> %3
104 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_11(<4 x i32> %0) {
105 ; CHECK-LABEL: vcvt_i32_11:
106 ; CHECK:       @ %bb.0:
107 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #11
108 ; CHECK-NEXT:    bx lr
109   %2 = sitofp <4 x i32> %0 to <4 x float>
110   %3 = fmul <4 x float> %2, <float 0x3F40000000000000, float 0x3F40000000000000, float 0x3F40000000000000, float 0x3F40000000000000>
111   ret <4 x float> %3
114 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_12(<4 x i32> %0) {
115 ; CHECK-LABEL: vcvt_i32_12:
116 ; CHECK:       @ %bb.0:
117 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #12
118 ; CHECK-NEXT:    bx lr
119   %2 = sitofp <4 x i32> %0 to <4 x float>
120   %3 = fmul <4 x float> %2, <float 0x3F30000000000000, float 0x3F30000000000000, float 0x3F30000000000000, float 0x3F30000000000000>
121   ret <4 x float> %3
124 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_13(<4 x i32> %0) {
125 ; CHECK-LABEL: vcvt_i32_13:
126 ; CHECK:       @ %bb.0:
127 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #13
128 ; CHECK-NEXT:    bx lr
129   %2 = sitofp <4 x i32> %0 to <4 x float>
130   %3 = fmul <4 x float> %2, <float 0x3F20000000000000, float 0x3F20000000000000, float 0x3F20000000000000, float 0x3F20000000000000>
131   ret <4 x float> %3
134 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_14(<4 x i32> %0)  {
135 ; CHECK-LABEL: vcvt_i32_14:
136 ; CHECK:       @ %bb.0:
137 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #14
138 ; CHECK-NEXT:    bx lr
139   %2 = sitofp <4 x i32> %0 to <4 x float>
140   %3 = fmul <4 x float> %2, <float 0x3F10000000000000, float 0x3F10000000000000, float 0x3F10000000000000, float 0x3F10000000000000>
141   ret <4 x float> %3
144 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_15(<4 x i32> %0) {
145 ; CHECK-LABEL: vcvt_i32_15:
146 ; CHECK:       @ %bb.0:
147 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #15
148 ; CHECK-NEXT:    bx lr
149   %2 = sitofp <4 x i32> %0 to <4 x float>
150   %3 = fmul <4 x float> %2, <float 0x3F00000000000000, float 0x3F00000000000000, float 0x3F00000000000000, float 0x3F00000000000000>
151   ret <4 x float> %3
154 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_16(<4 x i32> %0) {
155 ; CHECK-LABEL: vcvt_i32_16:
156 ; CHECK:       @ %bb.0:
157 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #16
158 ; CHECK-NEXT:    bx lr
159   %2 = sitofp <4 x i32> %0 to <4 x float>
160   %3 = fmul <4 x float> %2, <float 0x3EF0000000000000, float 0x3EF0000000000000, float 0x3EF0000000000000, float 0x3EF0000000000000>
161   ret <4 x float> %3
164 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_17(<4 x i32> %0) {
165 ; CHECK-LABEL: vcvt_i32_17:
166 ; CHECK:       @ %bb.0:
167 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #17
168 ; CHECK-NEXT:    bx lr
169   %2 = sitofp <4 x i32> %0 to <4 x float>
170   %3 = fmul <4 x float> %2, <float 0x3EE0000000000000, float 0x3EE0000000000000, float 0x3EE0000000000000, float 0x3EE0000000000000>
171   ret <4 x float> %3
174 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_18(<4 x i32> %0) {
175 ; CHECK-LABEL: vcvt_i32_18:
176 ; CHECK:       @ %bb.0:
177 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #18
178 ; CHECK-NEXT:    bx lr
179   %2 = sitofp <4 x i32> %0 to <4 x float>
180   %3 = fmul <4 x float> %2, <float 0x3ED0000000000000, float 0x3ED0000000000000, float 0x3ED0000000000000, float 0x3ED0000000000000>
181   ret <4 x float> %3
184 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_19(<4 x i32> %0) {
185 ; CHECK-LABEL: vcvt_i32_19:
186 ; CHECK:       @ %bb.0:
187 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #19
188 ; CHECK-NEXT:    bx lr
189   %2 = sitofp <4 x i32> %0 to <4 x float>
190   %3 = fmul <4 x float> %2, <float 0x3EC0000000000000, float 0x3EC0000000000000, float 0x3EC0000000000000, float 0x3EC0000000000000>
191   ret <4 x float> %3
194 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_20(<4 x i32> %0) {
195 ; CHECK-LABEL: vcvt_i32_20:
196 ; CHECK:       @ %bb.0:
197 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #20
198 ; CHECK-NEXT:    bx lr
199   %2 = sitofp <4 x i32> %0 to <4 x float>
200   %3 = fmul <4 x float> %2, <float 0x3EB0000000000000, float 0x3EB0000000000000, float 0x3EB0000000000000, float 0x3EB0000000000000>
201   ret <4 x float> %3
204 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_21(<4 x i32> %0) {
205 ; CHECK-LABEL: vcvt_i32_21:
206 ; CHECK:       @ %bb.0:
207 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #21
208 ; CHECK-NEXT:    bx lr
209   %2 = sitofp <4 x i32> %0 to <4 x float>
210   %3 = fmul <4 x float> %2, <float 0x3EA0000000000000, float 0x3EA0000000000000, float 0x3EA0000000000000, float 0x3EA0000000000000>
211   ret <4 x float> %3
214 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_22(<4 x i32> %0) {
215 ; CHECK-LABEL: vcvt_i32_22:
216 ; CHECK:       @ %bb.0:
217 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #22
218 ; CHECK-NEXT:    bx lr
219   %2 = sitofp <4 x i32> %0 to <4 x float>
220   %3 = fmul <4 x float> %2, <float 0x3E90000000000000, float 0x3E90000000000000, float 0x3E90000000000000, float 0x3E90000000000000>
221   ret <4 x float> %3
224 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_23(<4 x i32> %0) {
225 ; CHECK-LABEL: vcvt_i32_23:
226 ; CHECK:       @ %bb.0:
227 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #23
228 ; CHECK-NEXT:    bx lr
229   %2 = sitofp <4 x i32> %0 to <4 x float>
230   %3 = fmul <4 x float> %2, <float 0x3E80000000000000, float 0x3E80000000000000, float 0x3E80000000000000, float 0x3E80000000000000>
231   ret <4 x float> %3
234 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_24(<4 x i32> %0) {
235 ; CHECK-LABEL: vcvt_i32_24:
236 ; CHECK:       @ %bb.0:
237 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #24
238 ; CHECK-NEXT:    bx lr
239   %2 = sitofp <4 x i32> %0 to <4 x float>
240   %3 = fmul <4 x float> %2, <float 0x3E70000000000000, float 0x3E70000000000000, float 0x3E70000000000000, float 0x3E70000000000000>
241   ret <4 x float> %3
244 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_25(<4 x i32> %0) {
245 ; CHECK-LABEL: vcvt_i32_25:
246 ; CHECK:       @ %bb.0:
247 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #25
248 ; CHECK-NEXT:    bx lr
249   %2 = sitofp <4 x i32> %0 to <4 x float>
250   %3 = fmul <4 x float> %2, <float 0x3E60000000000000, float 0x3E60000000000000, float 0x3E60000000000000, float 0x3E60000000000000>
251   ret <4 x float> %3
254 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_26(<4 x i32> %0) {
255 ; CHECK-LABEL: vcvt_i32_26:
256 ; CHECK:       @ %bb.0:
257 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #26
258 ; CHECK-NEXT:    bx lr
259   %2 = sitofp <4 x i32> %0 to <4 x float>
260   %3 = fmul <4 x float> %2, <float 0x3E50000000000000, float 0x3E50000000000000, float 0x3E50000000000000, float 0x3E50000000000000>
261   ret <4 x float> %3
264 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_27(<4 x i32> %0) {
265 ; CHECK-LABEL: vcvt_i32_27:
266 ; CHECK:       @ %bb.0:
267 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #27
268 ; CHECK-NEXT:    bx lr
269   %2 = sitofp <4 x i32> %0 to <4 x float>
270   %3 = fmul <4 x float> %2, <float 0x3E40000000000000, float 0x3E40000000000000, float 0x3E40000000000000, float 0x3E40000000000000>
271   ret <4 x float> %3
274 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_28(<4 x i32> %0) {
275 ; CHECK-LABEL: vcvt_i32_28:
276 ; CHECK:       @ %bb.0:
277 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #28
278 ; CHECK-NEXT:    bx lr
279   %2 = sitofp <4 x i32> %0 to <4 x float>
280   %3 = fmul <4 x float> %2, <float 0x3E30000000000000, float 0x3E30000000000000, float 0x3E30000000000000, float 0x3E30000000000000>
281   ret <4 x float> %3
284 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_29(<4 x i32> %0) {
285 ; CHECK-LABEL: vcvt_i32_29:
286 ; CHECK:       @ %bb.0:
287 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #29
288 ; CHECK-NEXT:    bx lr
289   %2 = sitofp <4 x i32> %0 to <4 x float>
290   %3 = fmul <4 x float> %2, <float 0x3E20000000000000, float 0x3E20000000000000, float 0x3E20000000000000, float 0x3E20000000000000>
291   ret <4 x float> %3
294 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_30(<4 x i32> %0) {
295 ; CHECK-LABEL: vcvt_i32_30:
296 ; CHECK:       @ %bb.0:
297 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #30
298 ; CHECK-NEXT:    bx lr
299   %2 = sitofp <4 x i32> %0 to <4 x float>
300   %3 = fmul <4 x float> %2, <float 0x3E10000000000000, float 0x3E10000000000000, float 0x3E10000000000000, float 0x3E10000000000000>
301   ret <4 x float> %3
304 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_31(<4 x i32> %0) {
305 ; CHECK-LABEL: vcvt_i32_31:
306 ; CHECK:       @ %bb.0:
307 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #31
308 ; CHECK-NEXT:    bx lr
309   %2 = sitofp <4 x i32> %0 to <4 x float>
310   %3 = fmul <4 x float> %2, <float 0x3E00000000000000, float 0x3E00000000000000, float 0x3E00000000000000, float 0x3E00000000000000>
311   ret <4 x float> %3
314 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_32(<4 x i32> %0) {
315 ; CHECK-LABEL: vcvt_i32_32:
316 ; CHECK:       @ %bb.0:
317 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0, #32
318 ; CHECK-NEXT:    bx lr
319   %2 = sitofp <4 x i32> %0 to <4 x float>
320   %3 = fmul <4 x float> %2, <float 0x3DF0000000000000, float 0x3DF0000000000000, float 0x3DF0000000000000, float 0x3DF0000000000000>
321   ret <4 x float> %3
324 define arm_aapcs_vfpcc <4 x float> @vcvt_i32_33(<4 x i32> %0) {
325 ; CHECK-LABEL: vcvt_i32_33:
326 ; CHECK:       @ %bb.0:
327 ; CHECK-NEXT:    vmov.i32 q1, #0x2f000000
328 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0
329 ; CHECK-NEXT:    vmul.f32 q0, q0, q1
330 ; CHECK-NEXT:    bx lr
331   %2 = sitofp <4 x i32> %0 to <4 x float>
332   %3 = fmul <4 x float> %2, <float 0x3DE0000000000000, float 0x3DE0000000000000, float 0x3DE0000000000000, float 0x3DE0000000000000>
333   ret <4 x float> %3
336 define arm_aapcs_vfpcc <8 x half> @vcvt_i16_1(<8 x i16> %0) {
337 ; CHECK-LABEL: vcvt_i16_1:
338 ; CHECK:       @ %bb.0:
339 ; CHECK-NEXT:    vcvt.f16.s16 q0, q0, #1
340 ; CHECK-NEXT:    bx lr
341   %2 = sitofp <8 x i16> %0 to <8 x half>
342   %3 = fmul ninf <8 x half> %2, <half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800>
343   ret <8 x half> %3
346 define arm_aapcs_vfpcc <8 x half> @vcvt_i16_2(<8 x i16> %0) {
347 ; CHECK-LABEL: vcvt_i16_2:
348 ; CHECK:       @ %bb.0:
349 ; CHECK-NEXT:    vcvt.f16.s16 q0, q0, #2
350 ; CHECK-NEXT:    bx lr
351   %2 = sitofp <8 x i16> %0 to <8 x half>
352   %3 = fmul ninf <8 x half> %2, <half 0xH3400, half 0xH3400, half 0xH3400, half 0xH3400, half 0xH3400, half 0xH3400, half 0xH3400, half 0xH3400>
353   ret <8 x half> %3
356 define arm_aapcs_vfpcc <8 x half> @vcvt_i16_3(<8 x i16> %0) {
357 ; CHECK-LABEL: vcvt_i16_3:
358 ; CHECK:       @ %bb.0:
359 ; CHECK-NEXT:    vcvt.f16.s16 q0, q0, #3
360 ; CHECK-NEXT:    bx lr
361   %2 = sitofp <8 x i16> %0 to <8 x half>
362   %3 = fmul ninf <8 x half> %2, <half 0xH3000, half 0xH3000, half 0xH3000, half 0xH3000, half 0xH3000, half 0xH3000, half 0xH3000, half 0xH3000>
363   ret <8 x half> %3
366 define arm_aapcs_vfpcc <8 x half> @vcvt_i16_4(<8 x i16> %0) {
367 ; CHECK-LABEL: vcvt_i16_4:
368 ; CHECK:       @ %bb.0:
369 ; CHECK-NEXT:    vcvt.f16.s16 q0, q0, #4
370 ; CHECK-NEXT:    bx lr
371   %2 = sitofp <8 x i16> %0 to <8 x half>
372   %3 = fmul ninf <8 x half> %2, <half 0xH2C00, half 0xH2C00, half 0xH2C00, half 0xH2C00, half 0xH2C00, half 0xH2C00, half 0xH2C00, half 0xH2C00>
373   ret <8 x half> %3
376 define arm_aapcs_vfpcc <8 x half> @vcvt_i16_5(<8 x i16> %0) {
377 ; CHECK-LABEL: vcvt_i16_5:
378 ; CHECK:       @ %bb.0:
379 ; CHECK-NEXT:    vcvt.f16.s16 q0, q0, #5
380 ; CHECK-NEXT:    bx lr
381   %2 = sitofp <8 x i16> %0 to <8 x half>
382   %3 = fmul ninf <8 x half> %2, <half 0xH2800, half 0xH2800, half 0xH2800, half 0xH2800, half 0xH2800, half 0xH2800, half 0xH2800, half 0xH2800>
383   ret <8 x half> %3
386 define arm_aapcs_vfpcc <8 x half> @vcvt_i16_6(<8 x i16> %0) {
387 ; CHECK-LABEL: vcvt_i16_6:
388 ; CHECK:       @ %bb.0:
389 ; CHECK-NEXT:    vcvt.f16.s16 q0, q0, #6
390 ; CHECK-NEXT:    bx lr
391   %2 = sitofp <8 x i16> %0 to <8 x half>
392   %3 = fmul ninf <8 x half> %2, <half 0xH2400, half 0xH2400, half 0xH2400, half 0xH2400, half 0xH2400, half 0xH2400, half 0xH2400, half 0xH2400>
393   ret <8 x half> %3
396 define arm_aapcs_vfpcc <8 x half> @vcvt_i16_7(<8 x i16> %0) {
397 ; CHECK-LABEL: vcvt_i16_7:
398 ; CHECK:       @ %bb.0:
399 ; CHECK-NEXT:    vcvt.f16.s16 q0, q0, #7
400 ; CHECK-NEXT:    bx lr
401   %2 = sitofp <8 x i16> %0 to <8 x half>
402   %3 = fmul ninf <8 x half> %2, <half 0xH2000, half 0xH2000, half 0xH2000, half 0xH2000, half 0xH2000, half 0xH2000, half 0xH2000, half 0xH2000>
403   ret <8 x half> %3
406 define arm_aapcs_vfpcc <8 x half> @vcvt_i16_8(<8 x i16> %0) {
407 ; CHECK-LABEL: vcvt_i16_8:
408 ; CHECK:       @ %bb.0:
409 ; CHECK-NEXT:    vcvt.f16.s16 q0, q0, #8
410 ; CHECK-NEXT:    bx lr
411   %2 = sitofp <8 x i16> %0 to <8 x half>
412   %3 = fmul ninf <8 x half> %2, <half 0xH1C00, half 0xH1C00, half 0xH1C00, half 0xH1C00, half 0xH1C00, half 0xH1C00, half 0xH1C00, half 0xH1C00>
413   ret <8 x half> %3
416 define arm_aapcs_vfpcc <8 x half> @vcvt_i16_9(<8 x i16> %0) {
417 ; CHECK-LABEL: vcvt_i16_9:
418 ; CHECK:       @ %bb.0:
419 ; CHECK-NEXT:    vcvt.f16.s16 q0, q0, #9
420 ; CHECK-NEXT:    bx lr
421   %2 = sitofp <8 x i16> %0 to <8 x half>
422   %3 = fmul ninf <8 x half> %2, <half 0xH1800, half 0xH1800, half 0xH1800, half 0xH1800, half 0xH1800, half 0xH1800, half 0xH1800, half 0xH1800>
423   ret <8 x half> %3
426 define arm_aapcs_vfpcc <8 x half> @vcvt_i16_10(<8 x i16> %0) {
427 ; CHECK-LABEL: vcvt_i16_10:
428 ; CHECK:       @ %bb.0:
429 ; CHECK-NEXT:    vcvt.f16.s16 q0, q0, #10
430 ; CHECK-NEXT:    bx lr
431   %2 = sitofp <8 x i16> %0 to <8 x half>
432   %3 = fmul ninf <8 x half> %2, <half 0xH1400, half 0xH1400, half 0xH1400, half 0xH1400, half 0xH1400, half 0xH1400, half 0xH1400, half 0xH1400>
433   ret <8 x half> %3
436 define arm_aapcs_vfpcc <8 x half> @vcvt_i16_11(<8 x i16> %0) {
437 ; CHECK-LABEL: vcvt_i16_11:
438 ; CHECK:       @ %bb.0:
439 ; CHECK-NEXT:    vcvt.f16.s16 q0, q0, #11
440 ; CHECK-NEXT:    bx lr
441   %2 = sitofp <8 x i16> %0 to <8 x half>
442   %3 = fmul ninf <8 x half> %2, <half 0xH1000, half 0xH1000, half 0xH1000, half 0xH1000, half 0xH1000, half 0xH1000, half 0xH1000, half 0xH1000>
443   ret <8 x half> %3
446 define arm_aapcs_vfpcc <8 x half> @vcvt_i16_12(<8 x i16> %0) {
447 ; CHECK-LABEL: vcvt_i16_12:
448 ; CHECK:       @ %bb.0:
449 ; CHECK-NEXT:    vcvt.f16.s16 q0, q0, #12
450 ; CHECK-NEXT:    bx lr
451   %2 = sitofp <8 x i16> %0 to <8 x half>
452   %3 = fmul ninf <8 x half> %2, <half 0xH0C00, half 0xH0C00, half 0xH0C00, half 0xH0C00, half 0xH0C00, half 0xH0C00, half 0xH0C00, half 0xH0C00>
453   ret <8 x half> %3
456 define arm_aapcs_vfpcc <8 x half> @vcvt_i16_13(<8 x i16> %0) {
457 ; CHECK-LABEL: vcvt_i16_13:
458 ; CHECK:       @ %bb.0:
459 ; CHECK-NEXT:    vcvt.f16.s16 q0, q0, #13
460 ; CHECK-NEXT:    bx lr
461   %2 = sitofp <8 x i16> %0 to <8 x half>
462   %3 = fmul ninf <8 x half> %2, <half 0xH0800, half 0xH0800, half 0xH0800, half 0xH0800, half 0xH0800, half 0xH0800, half 0xH0800, half 0xH0800>
463   ret <8 x half> %3
466 define arm_aapcs_vfpcc <8 x half> @vcvt_i16_14(<8 x i16> %0) {
467 ; CHECK-LABEL: vcvt_i16_14:
468 ; CHECK:       @ %bb.0:
469 ; CHECK-NEXT:    vcvt.f16.s16 q0, q0, #14
470 ; CHECK-NEXT:    bx lr
471   %2 = sitofp <8 x i16> %0 to <8 x half>
472   %3 = fmul ninf <8 x half> %2, <half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400>
473   ret <8 x half> %3
476 define arm_aapcs_vfpcc <8 x half> @vcvt_i16_15(<8 x i16> %0) {
477 ; CHECK-LABEL: vcvt_i16_15:
478 ; CHECK:       @ %bb.0:
479 ; CHECK-NEXT:    vmov.i16 q1, #0x200
480 ; CHECK-NEXT:    vcvt.f16.s16 q0, q0
481 ; CHECK-NEXT:    vmul.f16 q0, q0, q1
482 ; CHECK-NEXT:    bx lr
483   %2 = sitofp <8 x i16> %0 to <8 x half>
484   %3 = fmul ninf <8 x half> %2, <half 0xH0200, half 0xH0200, half 0xH0200, half 0xH0200, half 0xH0200, half 0xH0200, half 0xH0200, half 0xH0200>
485   ret <8 x half> %3
488 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_1(<4 x i32> %0) {
489 ; CHECK-LABEL: vcvt_u32_1:
490 ; CHECK:       @ %bb.0:
491 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #1
492 ; CHECK-NEXT:    bx lr
493   %2 = uitofp <4 x i32> %0 to <4 x float>
494   %3 = fmul <4 x float> %2, <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>
495   ret <4 x float> %3
498 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_2(<4 x i32> %0) {
499 ; CHECK-LABEL: vcvt_u32_2:
500 ; CHECK:       @ %bb.0:
501 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #2
502 ; CHECK-NEXT:    bx lr
503   %2 = uitofp <4 x i32> %0 to <4 x float>
504   %3 = fmul <4 x float> %2, <float 2.500000e-01, float 2.500000e-01, float 2.500000e-01, float 2.500000e-01>
505   ret <4 x float> %3
508 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_3(<4 x i32> %0) {
509 ; CHECK-LABEL: vcvt_u32_3:
510 ; CHECK:       @ %bb.0:
511 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #3
512 ; CHECK-NEXT:    bx lr
513   %2 = uitofp <4 x i32> %0 to <4 x float>
514   %3 = fmul <4 x float> %2, <float 1.250000e-01, float 1.250000e-01, float 1.250000e-01, float 1.250000e-01>
515   ret <4 x float> %3
518 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_4(<4 x i32> %0) {
519 ; CHECK-LABEL: vcvt_u32_4:
520 ; CHECK:       @ %bb.0:
521 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #4
522 ; CHECK-NEXT:    bx lr
523   %2 = uitofp <4 x i32> %0 to <4 x float>
524   %3 = fmul <4 x float> %2, <float 6.250000e-02, float 6.250000e-02, float 6.250000e-02, float 6.250000e-02>
525   ret <4 x float> %3
528 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_5(<4 x i32> %0) {
529 ; CHECK-LABEL: vcvt_u32_5:
530 ; CHECK:       @ %bb.0:
531 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #5
532 ; CHECK-NEXT:    bx lr
533   %2 = uitofp <4 x i32> %0 to <4 x float>
534   %3 = fmul <4 x float> %2, <float 3.125000e-02, float 3.125000e-02, float 3.125000e-02, float 3.125000e-02>
535   ret <4 x float> %3
538 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_6(<4 x i32> %0) {
539 ; CHECK-LABEL: vcvt_u32_6:
540 ; CHECK:       @ %bb.0:
541 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #6
542 ; CHECK-NEXT:    bx lr
543   %2 = uitofp <4 x i32> %0 to <4 x float>
544   %3 = fmul <4 x float> %2, <float 1.562500e-02, float 1.562500e-02, float 1.562500e-02, float 1.562500e-02>
545   ret <4 x float> %3
548 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_7(<4 x i32> %0) {
549 ; CHECK-LABEL: vcvt_u32_7:
550 ; CHECK:       @ %bb.0:
551 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #7
552 ; CHECK-NEXT:    bx lr
553   %2 = uitofp <4 x i32> %0 to <4 x float>
554   %3 = fmul <4 x float> %2, <float 7.812500e-03, float 7.812500e-03, float 7.812500e-03, float 7.812500e-03>
555   ret <4 x float> %3
558 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_8(<4 x i32> %0) {
559 ; CHECK-LABEL: vcvt_u32_8:
560 ; CHECK:       @ %bb.0:
561 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #8
562 ; CHECK-NEXT:    bx lr
563   %2 = uitofp <4 x i32> %0 to <4 x float>
564   %3 = fmul <4 x float> %2, <float 3.906250e-03, float 3.906250e-03, float 3.906250e-03, float 3.906250e-03>
565   ret <4 x float> %3
568 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_9(<4 x i32> %0) {
569 ; CHECK-LABEL: vcvt_u32_9:
570 ; CHECK:       @ %bb.0:
571 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #9
572 ; CHECK-NEXT:    bx lr
573   %2 = uitofp <4 x i32> %0 to <4 x float>
574   %3 = fmul <4 x float> %2, <float 0x3F60000000000000, float 0x3F60000000000000, float 0x3F60000000000000, float 0x3F60000000000000>
575   ret <4 x float> %3
578 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_10(<4 x i32> %0) {
579 ; CHECK-LABEL: vcvt_u32_10:
580 ; CHECK:       @ %bb.0:
581 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #10
582 ; CHECK-NEXT:    bx lr
583   %2 = uitofp <4 x i32> %0 to <4 x float>
584   %3 = fmul <4 x float> %2, <float 0x3F50000000000000, float 0x3F50000000000000, float 0x3F50000000000000, float 0x3F50000000000000>
585   ret <4 x float> %3
588 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_11(<4 x i32> %0) {
589 ; CHECK-LABEL: vcvt_u32_11:
590 ; CHECK:       @ %bb.0:
591 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #11
592 ; CHECK-NEXT:    bx lr
593   %2 = uitofp <4 x i32> %0 to <4 x float>
594   %3 = fmul <4 x float> %2, <float 0x3F40000000000000, float 0x3F40000000000000, float 0x3F40000000000000, float 0x3F40000000000000>
595   ret <4 x float> %3
598 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_12(<4 x i32> %0) {
599 ; CHECK-LABEL: vcvt_u32_12:
600 ; CHECK:       @ %bb.0:
601 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #12
602 ; CHECK-NEXT:    bx lr
603   %2 = uitofp <4 x i32> %0 to <4 x float>
604   %3 = fmul <4 x float> %2, <float 0x3F30000000000000, float 0x3F30000000000000, float 0x3F30000000000000, float 0x3F30000000000000>
605   ret <4 x float> %3
608 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_13(<4 x i32> %0) {
609 ; CHECK-LABEL: vcvt_u32_13:
610 ; CHECK:       @ %bb.0:
611 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #13
612 ; CHECK-NEXT:    bx lr
613   %2 = uitofp <4 x i32> %0 to <4 x float>
614   %3 = fmul <4 x float> %2, <float 0x3F20000000000000, float 0x3F20000000000000, float 0x3F20000000000000, float 0x3F20000000000000>
615   ret <4 x float> %3
618 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_14(<4 x i32> %0) {
619 ; CHECK-LABEL: vcvt_u32_14:
620 ; CHECK:       @ %bb.0:
621 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #14
622 ; CHECK-NEXT:    bx lr
623   %2 = uitofp <4 x i32> %0 to <4 x float>
624   %3 = fmul <4 x float> %2, <float 0x3F10000000000000, float 0x3F10000000000000, float 0x3F10000000000000, float 0x3F10000000000000>
625   ret <4 x float> %3
628 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_15(<4 x i32> %0) {
629 ; CHECK-LABEL: vcvt_u32_15:
630 ; CHECK:       @ %bb.0:
631 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #15
632 ; CHECK-NEXT:    bx lr
633   %2 = uitofp <4 x i32> %0 to <4 x float>
634   %3 = fmul <4 x float> %2, <float 0x3F00000000000000, float 0x3F00000000000000, float 0x3F00000000000000, float 0x3F00000000000000>
635   ret <4 x float> %3
638 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_16(<4 x i32> %0) {
639 ; CHECK-LABEL: vcvt_u32_16:
640 ; CHECK:       @ %bb.0:
641 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #16
642 ; CHECK-NEXT:    bx lr
643   %2 = uitofp <4 x i32> %0 to <4 x float>
644   %3 = fmul <4 x float> %2, <float 0x3EF0000000000000, float 0x3EF0000000000000, float 0x3EF0000000000000, float 0x3EF0000000000000>
645   ret <4 x float> %3
648 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_17(<4 x i32> %0) {
649 ; CHECK-LABEL: vcvt_u32_17:
650 ; CHECK:       @ %bb.0:
651 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #17
652 ; CHECK-NEXT:    bx lr
653   %2 = uitofp <4 x i32> %0 to <4 x float>
654   %3 = fmul <4 x float> %2, <float 0x3EE0000000000000, float 0x3EE0000000000000, float 0x3EE0000000000000, float 0x3EE0000000000000>
655   ret <4 x float> %3
658 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_18(<4 x i32> %0) {
659 ; CHECK-LABEL: vcvt_u32_18:
660 ; CHECK:       @ %bb.0:
661 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #18
662 ; CHECK-NEXT:    bx lr
663   %2 = uitofp <4 x i32> %0 to <4 x float>
664   %3 = fmul <4 x float> %2, <float 0x3ED0000000000000, float 0x3ED0000000000000, float 0x3ED0000000000000, float 0x3ED0000000000000>
665   ret <4 x float> %3
668 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_19(<4 x i32> %0) {
669 ; CHECK-LABEL: vcvt_u32_19:
670 ; CHECK:       @ %bb.0:
671 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #19
672 ; CHECK-NEXT:    bx lr
673   %2 = uitofp <4 x i32> %0 to <4 x float>
674   %3 = fmul <4 x float> %2, <float 0x3EC0000000000000, float 0x3EC0000000000000, float 0x3EC0000000000000, float 0x3EC0000000000000>
675   ret <4 x float> %3
678 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_20(<4 x i32> %0) {
679 ; CHECK-LABEL: vcvt_u32_20:
680 ; CHECK:       @ %bb.0:
681 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #20
682 ; CHECK-NEXT:    bx lr
683   %2 = uitofp <4 x i32> %0 to <4 x float>
684   %3 = fmul <4 x float> %2, <float 0x3EB0000000000000, float 0x3EB0000000000000, float 0x3EB0000000000000, float 0x3EB0000000000000>
685   ret <4 x float> %3
688 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_21(<4 x i32> %0) {
689 ; CHECK-LABEL: vcvt_u32_21:
690 ; CHECK:       @ %bb.0:
691 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #21
692 ; CHECK-NEXT:    bx lr
693   %2 = uitofp <4 x i32> %0 to <4 x float>
694   %3 = fmul <4 x float> %2, <float 0x3EA0000000000000, float 0x3EA0000000000000, float 0x3EA0000000000000, float 0x3EA0000000000000>
695   ret <4 x float> %3
698 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_22(<4 x i32> %0) {
699 ; CHECK-LABEL: vcvt_u32_22:
700 ; CHECK:       @ %bb.0:
701 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #22
702 ; CHECK-NEXT:    bx lr
703   %2 = uitofp <4 x i32> %0 to <4 x float>
704   %3 = fmul <4 x float> %2, <float 0x3E90000000000000, float 0x3E90000000000000, float 0x3E90000000000000, float 0x3E90000000000000>
705   ret <4 x float> %3
708 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_23(<4 x i32> %0) {
709 ; CHECK-LABEL: vcvt_u32_23:
710 ; CHECK:       @ %bb.0:
711 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #23
712 ; CHECK-NEXT:    bx lr
713   %2 = uitofp <4 x i32> %0 to <4 x float>
714   %3 = fmul <4 x float> %2, <float 0x3E80000000000000, float 0x3E80000000000000, float 0x3E80000000000000, float 0x3E80000000000000>
715   ret <4 x float> %3
718 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_24(<4 x i32> %0) {
719 ; CHECK-LABEL: vcvt_u32_24:
720 ; CHECK:       @ %bb.0:
721 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #24
722 ; CHECK-NEXT:    bx lr
723   %2 = uitofp <4 x i32> %0 to <4 x float>
724   %3 = fmul <4 x float> %2, <float 0x3E70000000000000, float 0x3E70000000000000, float 0x3E70000000000000, float 0x3E70000000000000>
725   ret <4 x float> %3
728 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_25(<4 x i32> %0) {
729 ; CHECK-LABEL: vcvt_u32_25:
730 ; CHECK:       @ %bb.0:
731 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #25
732 ; CHECK-NEXT:    bx lr
733   %2 = uitofp <4 x i32> %0 to <4 x float>
734   %3 = fmul <4 x float> %2, <float 0x3E60000000000000, float 0x3E60000000000000, float 0x3E60000000000000, float 0x3E60000000000000>
735   ret <4 x float> %3
738 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_26(<4 x i32> %0) {
739 ; CHECK-LABEL: vcvt_u32_26:
740 ; CHECK:       @ %bb.0:
741 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #26
742 ; CHECK-NEXT:    bx lr
743   %2 = uitofp <4 x i32> %0 to <4 x float>
744   %3 = fmul <4 x float> %2, <float 0x3E50000000000000, float 0x3E50000000000000, float 0x3E50000000000000, float 0x3E50000000000000>
745   ret <4 x float> %3
748 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_27(<4 x i32> %0) {
749 ; CHECK-LABEL: vcvt_u32_27:
750 ; CHECK:       @ %bb.0:
751 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #27
752 ; CHECK-NEXT:    bx lr
753   %2 = uitofp <4 x i32> %0 to <4 x float>
754   %3 = fmul <4 x float> %2, <float 0x3E40000000000000, float 0x3E40000000000000, float 0x3E40000000000000, float 0x3E40000000000000>
755   ret <4 x float> %3
758 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_28(<4 x i32> %0) {
759 ; CHECK-LABEL: vcvt_u32_28:
760 ; CHECK:       @ %bb.0:
761 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #28
762 ; CHECK-NEXT:    bx lr
763   %2 = uitofp <4 x i32> %0 to <4 x float>
764   %3 = fmul <4 x float> %2, <float 0x3E30000000000000, float 0x3E30000000000000, float 0x3E30000000000000, float 0x3E30000000000000>
765   ret <4 x float> %3
768 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_29(<4 x i32> %0) {
769 ; CHECK-LABEL: vcvt_u32_29:
770 ; CHECK:       @ %bb.0:
771 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #29
772 ; CHECK-NEXT:    bx lr
773   %2 = uitofp <4 x i32> %0 to <4 x float>
774   %3 = fmul <4 x float> %2, <float 0x3E20000000000000, float 0x3E20000000000000, float 0x3E20000000000000, float 0x3E20000000000000>
775   ret <4 x float> %3
778 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_30(<4 x i32> %0) {
779 ; CHECK-LABEL: vcvt_u32_30:
780 ; CHECK:       @ %bb.0:
781 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #30
782 ; CHECK-NEXT:    bx lr
783   %2 = uitofp <4 x i32> %0 to <4 x float>
784   %3 = fmul <4 x float> %2, <float 0x3E10000000000000, float 0x3E10000000000000, float 0x3E10000000000000, float 0x3E10000000000000>
785   ret <4 x float> %3
788 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_31(<4 x i32> %0) {
789 ; CHECK-LABEL: vcvt_u32_31:
790 ; CHECK:       @ %bb.0:
791 ; CHECK-NEXT:    vmov.i32 q1, #0xb0000000
792 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0
793 ; CHECK-NEXT:    vmul.f32 q0, q0, q1
794 ; CHECK-NEXT:    bx lr
795   %2 = uitofp <4 x i32> %0 to <4 x float>
796   %3 = fmul <4 x float> %2, <float 0xBE00000000000000, float 0xBE00000000000000, float 0xBE00000000000000, float 0xBE00000000000000>
797   ret <4 x float> %3
800 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_32(<4 x i32> %0) {
801 ; CHECK-LABEL: vcvt_u32_32:
802 ; CHECK:       @ %bb.0:
803 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0, #32
804 ; CHECK-NEXT:    bx lr
805   %2 = uitofp <4 x i32> %0 to <4 x float>
806   %3 = fmul <4 x float> %2, <float 0x3DF0000000000000, float 0x3DF0000000000000, float 0x3DF0000000000000, float 0x3DF0000000000000>
807   ret <4 x float> %3
810 define arm_aapcs_vfpcc <4 x float> @vcvt_u32_33(<4 x i32> %0) {
811 ; CHECK-LABEL: vcvt_u32_33:
812 ; CHECK:       @ %bb.0:
813 ; CHECK-NEXT:    vmov.i32 q1, #0x2f000000
814 ; CHECK-NEXT:    vcvt.f32.u32 q0, q0
815 ; CHECK-NEXT:    vmul.f32 q0, q0, q1
816 ; CHECK-NEXT:    bx lr
817   %2 = uitofp <4 x i32> %0 to <4 x float>
818   %3 = fmul <4 x float> %2, <float 0x3DE0000000000000, float 0x3DE0000000000000, float 0x3DE0000000000000, float 0x3DE0000000000000>
819   ret <4 x float> %3
822 define arm_aapcs_vfpcc <8 x half> @vcvt_u16_1(<8 x i16> %0) {
823 ; CHECK-LABEL: vcvt_u16_1:
824 ; CHECK:       @ %bb.0:
825 ; CHECK-NEXT:    vcvt.f16.u16 q0, q0, #1
826 ; CHECK-NEXT:    bx lr
827   %2 = uitofp <8 x i16> %0 to <8 x half>
828   %3 = fmul ninf <8 x half> %2, <half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800>
829   ret <8 x half> %3
832 define arm_aapcs_vfpcc <8 x half> @vcvt_u16_2(<8 x i16> %0) {
833 ; CHECK-LABEL: vcvt_u16_2:
834 ; CHECK:       @ %bb.0:
835 ; CHECK-NEXT:    vcvt.f16.u16 q0, q0, #2
836 ; CHECK-NEXT:    bx lr
837   %2 = uitofp <8 x i16> %0 to <8 x half>
838   %3 = fmul ninf <8 x half> %2, <half 0xH3400, half 0xH3400, half 0xH3400, half 0xH3400, half 0xH3400, half 0xH3400, half 0xH3400, half 0xH3400>
839   ret <8 x half> %3
842 define arm_aapcs_vfpcc <8 x half> @vcvt_u16_3(<8 x i16> %0) {
843 ; CHECK-LABEL: vcvt_u16_3:
844 ; CHECK:       @ %bb.0:
845 ; CHECK-NEXT:    vcvt.f16.u16 q0, q0, #3
846 ; CHECK-NEXT:    bx lr
847   %2 = uitofp <8 x i16> %0 to <8 x half>
848   %3 = fmul ninf <8 x half> %2, <half 0xH3000, half 0xH3000, half 0xH3000, half 0xH3000, half 0xH3000, half 0xH3000, half 0xH3000, half 0xH3000>
849   ret <8 x half> %3
852 define arm_aapcs_vfpcc <8 x half> @vcvt_u16_4(<8 x i16> %0) {
853 ; CHECK-LABEL: vcvt_u16_4:
854 ; CHECK:       @ %bb.0:
855 ; CHECK-NEXT:    vcvt.f16.u16 q0, q0, #4
856 ; CHECK-NEXT:    bx lr
857   %2 = uitofp <8 x i16> %0 to <8 x half>
858   %3 = fmul ninf <8 x half> %2, <half 0xH2C00, half 0xH2C00, half 0xH2C00, half 0xH2C00, half 0xH2C00, half 0xH2C00, half 0xH2C00, half 0xH2C00>
859   ret <8 x half> %3
862 define arm_aapcs_vfpcc <8 x half> @vcvt_u16_5(<8 x i16> %0) {
863 ; CHECK-LABEL: vcvt_u16_5:
864 ; CHECK:       @ %bb.0:
865 ; CHECK-NEXT:    vcvt.f16.u16 q0, q0, #5
866 ; CHECK-NEXT:    bx lr
867   %2 = uitofp <8 x i16> %0 to <8 x half>
868   %3 = fmul ninf <8 x half> %2, <half 0xH2800, half 0xH2800, half 0xH2800, half 0xH2800, half 0xH2800, half 0xH2800, half 0xH2800, half 0xH2800>
869   ret <8 x half> %3
872 define arm_aapcs_vfpcc <8 x half> @vcvt_u16_6(<8 x i16> %0) {
873 ; CHECK-LABEL: vcvt_u16_6:
874 ; CHECK:       @ %bb.0:
875 ; CHECK-NEXT:    vcvt.f16.u16 q0, q0, #6
876 ; CHECK-NEXT:    bx lr
877   %2 = uitofp <8 x i16> %0 to <8 x half>
878   %3 = fmul ninf <8 x half> %2, <half 0xH2400, half 0xH2400, half 0xH2400, half 0xH2400, half 0xH2400, half 0xH2400, half 0xH2400, half 0xH2400>
879   ret <8 x half> %3
882 define arm_aapcs_vfpcc <8 x half> @vcvt_u16_7(<8 x i16> %0) {
883 ; CHECK-LABEL: vcvt_u16_7:
884 ; CHECK:       @ %bb.0:
885 ; CHECK-NEXT:    vcvt.f16.u16 q0, q0, #7
886 ; CHECK-NEXT:    bx lr
887   %2 = uitofp <8 x i16> %0 to <8 x half>
888   %3 = fmul ninf <8 x half> %2, <half 0xH2000, half 0xH2000, half 0xH2000, half 0xH2000, half 0xH2000, half 0xH2000, half 0xH2000, half 0xH2000>
889   ret <8 x half> %3
892 define arm_aapcs_vfpcc <8 x half> @vcvt_u16_8(<8 x i16> %0) {
893 ; CHECK-LABEL: vcvt_u16_8:
894 ; CHECK:       @ %bb.0:
895 ; CHECK-NEXT:    vcvt.f16.u16 q0, q0, #8
896 ; CHECK-NEXT:    bx lr
897   %2 = uitofp <8 x i16> %0 to <8 x half>
898   %3 = fmul ninf <8 x half> %2, <half 0xH1C00, half 0xH1C00, half 0xH1C00, half 0xH1C00, half 0xH1C00, half 0xH1C00, half 0xH1C00, half 0xH1C00>
899   ret <8 x half> %3
902 define arm_aapcs_vfpcc <8 x half> @vcvt_u16_9(<8 x i16> %0) {
903 ; CHECK-LABEL: vcvt_u16_9:
904 ; CHECK:       @ %bb.0:
905 ; CHECK-NEXT:    vcvt.f16.u16 q0, q0, #9
906 ; CHECK-NEXT:    bx lr
907   %2 = uitofp <8 x i16> %0 to <8 x half>
908   %3 = fmul ninf <8 x half> %2, <half 0xH1800, half 0xH1800, half 0xH1800, half 0xH1800, half 0xH1800, half 0xH1800, half 0xH1800, half 0xH1800>
909   ret <8 x half> %3
912 define arm_aapcs_vfpcc <8 x half> @vcvt_u16_10(<8 x i16> %0) {
913 ; CHECK-LABEL: vcvt_u16_10:
914 ; CHECK:       @ %bb.0:
915 ; CHECK-NEXT:    vcvt.f16.u16 q0, q0, #10
916 ; CHECK-NEXT:    bx lr
917   %2 = uitofp <8 x i16> %0 to <8 x half>
918   %3 = fmul ninf <8 x half> %2, <half 0xH1400, half 0xH1400, half 0xH1400, half 0xH1400, half 0xH1400, half 0xH1400, half 0xH1400, half 0xH1400>
919   ret <8 x half> %3
922 define arm_aapcs_vfpcc <8 x half> @vcvt_u16_11(<8 x i16> %0) {
923 ; CHECK-LABEL: vcvt_u16_11:
924 ; CHECK:       @ %bb.0:
925 ; CHECK-NEXT:    vcvt.f16.u16 q0, q0, #11
926 ; CHECK-NEXT:    bx lr
927   %2 = uitofp <8 x i16> %0 to <8 x half>
928   %3 = fmul ninf <8 x half> %2, <half 0xH1000, half 0xH1000, half 0xH1000, half 0xH1000, half 0xH1000, half 0xH1000, half 0xH1000, half 0xH1000>
929   ret <8 x half> %3
932 define arm_aapcs_vfpcc <8 x half> @vcvt_u16_12(<8 x i16> %0) {
933 ; CHECK-LABEL: vcvt_u16_12:
934 ; CHECK:       @ %bb.0:
935 ; CHECK-NEXT:    vcvt.f16.u16 q0, q0, #12
936 ; CHECK-NEXT:    bx lr
937   %2 = uitofp <8 x i16> %0 to <8 x half>
938   %3 = fmul ninf <8 x half> %2, <half 0xH0C00, half 0xH0C00, half 0xH0C00, half 0xH0C00, half 0xH0C00, half 0xH0C00, half 0xH0C00, half 0xH0C00>
939   ret <8 x half> %3
942 define arm_aapcs_vfpcc <8 x half> @vcvt_u16_13(<8 x i16> %0) {
943 ; CHECK-LABEL: vcvt_u16_13:
944 ; CHECK:       @ %bb.0:
945 ; CHECK-NEXT:    vcvt.f16.u16 q0, q0, #13
946 ; CHECK-NEXT:    bx lr
947   %2 = uitofp <8 x i16> %0 to <8 x half>
948   %3 = fmul ninf <8 x half> %2, <half 0xH0800, half 0xH0800, half 0xH0800, half 0xH0800, half 0xH0800, half 0xH0800, half 0xH0800, half 0xH0800>
949   ret <8 x half> %3
952 define arm_aapcs_vfpcc <8 x half> @vcvt_u16_14(<8 x i16> %0) {
953 ; CHECK-LABEL: vcvt_u16_14:
954 ; CHECK:       @ %bb.0:
955 ; CHECK-NEXT:    vcvt.f16.u16 q0, q0, #14
956 ; CHECK-NEXT:    bx lr
957   %2 = uitofp <8 x i16> %0 to <8 x half>
958   %3 = fmul ninf <8 x half> %2, <half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400>
959   ret <8 x half> %3
962 define arm_aapcs_vfpcc <8 x half> @vcvt_u16_15(<8 x i16> %0) {
963 ; CHECK-LABEL: vcvt_u16_15:
964 ; CHECK:       @ %bb.0:
965 ; CHECK-NEXT:    vmov.i16 q1, #0x200
966 ; CHECK-NEXT:    vcvt.f16.u16 q0, q0
967 ; CHECK-NEXT:    vmul.f16 q0, q0, q1
968 ; CHECK-NEXT:    bx lr
969   %2 = uitofp <8 x i16> %0 to <8 x half>
970   %3 = fmul ninf <8 x half> %2, <half 0xH0200, half 0xH0200, half 0xH0200, half 0xH0200, half 0xH0200, half 0xH0200, half 0xH0200, half 0xH0200>
971   ret <8 x half> %3
974 define arm_aapcs_vfpcc <8 x half> @vcvt_u16_inf(<8 x i16> %0) {
975 ; CHECK-LABEL: vcvt_u16_inf:
976 ; CHECK:       @ %bb.0:
977 ; CHECK-NEXT:    vmov.i16 q1, #0x400
978 ; CHECK-NEXT:    vcvt.f16.u16 q0, q0
979 ; CHECK-NEXT:    vmul.f16 q0, q0, q1
980 ; CHECK-NEXT:    bx lr
981   %2 = uitofp <8 x i16> %0 to <8 x half>
982   %3 = fmul <8 x half> %2, <half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400>
983   ret <8 x half> %3
986 define arm_aapcs_vfpcc <8 x half> @vcvt_s16_inf(<8 x i16> %0) {
987 ; CHECK-LABEL: vcvt_s16_inf:
988 ; CHECK:       @ %bb.0:
989 ; CHECK-NEXT:    vcvt.f16.s16 q0, q0, #14
990 ; CHECK-NEXT:    bx lr
991   %2 = sitofp <8 x i16> %0 to <8 x half>
992   %3 = fmul <8 x half> %2, <half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400>
993   ret <8 x half> %3
996 define arm_aapcs_vfpcc <4 x float> @vcvt_bad_imm(<4 x i32> %0) {
997 ; CHECK-LABEL: vcvt_bad_imm:
998 ; CHECK:       @ %bb.0:
999 ; CHECK-NEXT:    movw r0, #2048
1000 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0
1001 ; CHECK-NEXT:    movt r0, #15104
1002 ; CHECK-NEXT:    vmul.f32 q0, q0, r0
1003 ; CHECK-NEXT:    bx lr
1004   %2 = sitofp <4 x i32> %0 to <4 x float>
1005   %3 = fmul <4 x float> %2, <float 0x3F60010000000000, float 0x3F60010000000000, float 0x3F60010000000000, float 0x3F60010000000000>
1006   ret <4 x float> %3
1009 define arm_aapcs_vfpcc <4 x float> @vcvt_negative(<4 x i32> %0) {
1010 ; CHECK-LABEL: vcvt_negative:
1011 ; CHECK:       @ %bb.0:
1012 ; CHECK-NEXT:    vmov.i32 q1, #0xb8000000
1013 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0
1014 ; CHECK-NEXT:    vmul.f32 q0, q0, q1
1015 ; CHECK-NEXT:    bx lr
1016   %2 = sitofp <4 x i32> %0 to <4 x float>
1017   %3 = fmul <4 x float> %2, <float 0xBF00000000000000, float 0xBF00000000000000, float 0xBF00000000000000, float 0xBF00000000000000>
1018   ret <4 x float> %3
1021 define arm_aapcs_vfpcc <4 x float> @vcvt_negative2(<4 x i32> %0) {
1022 ; CHECK-LABEL: vcvt_negative2:
1023 ; CHECK:       @ %bb.0:
1024 ; CHECK-NEXT:    vmov.i32 q1, #0xb0000000
1025 ; CHECK-NEXT:    vcvt.f32.s32 q0, q0
1026 ; CHECK-NEXT:    vmul.f32 q0, q0, q1
1027 ; CHECK-NEXT:    bx lr
1028   %2 = sitofp <4 x i32> %0 to <4 x float>
1029   %3 = fmul <4 x float> %2, <float 0xBE00000000000000, float 0xBE00000000000000, float 0xBE00000000000000, float 0xBE00000000000000>
1030   ret <4 x float> %3