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 i32> @vcvt_i32_1(<4 x float> %0) {
5 ; CHECK-LABEL: vcvt_i32_1:
7 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #1
9 %2 = fmul fast <4 x float> %0, <float 2.000000e+00, float 2.000000e+00, float 2.000000e+00, float 2.000000e+00>
10 %3 = fptosi <4 x float> %2 to <4 x i32>
14 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_2(<4 x float> %0) {
15 ; CHECK-LABEL: vcvt_i32_2:
17 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #2
19 %2 = fmul fast <4 x float> %0, <float 4.000000e+00, float 4.000000e+00, float 4.000000e+00, float 4.000000e+00>
20 %3 = fptosi <4 x float> %2 to <4 x i32>
24 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_3(<4 x float> %0) {
25 ; CHECK-LABEL: vcvt_i32_3:
27 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #3
29 %2 = fmul fast <4 x float> %0, <float 8.000000e+00, float 8.000000e+00, float 8.000000e+00, float 8.000000e+00>
30 %3 = fptosi <4 x float> %2 to <4 x i32>
34 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_4(<4 x float> %0) {
35 ; CHECK-LABEL: vcvt_i32_4:
37 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #4
39 %2 = fmul fast <4 x float> %0, <float 1.600000e+01, float 1.600000e+01, float 1.600000e+01, float 1.600000e+01>
40 %3 = fptosi <4 x float> %2 to <4 x i32>
44 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_5(<4 x float> %0) {
45 ; CHECK-LABEL: vcvt_i32_5:
47 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #5
49 %2 = fmul fast <4 x float> %0, <float 3.200000e+01, float 3.200000e+01, float 3.200000e+01, float 3.200000e+01>
50 %3 = fptosi <4 x float> %2 to <4 x i32>
54 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_6(<4 x float> %0) {
55 ; CHECK-LABEL: vcvt_i32_6:
57 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #6
59 %2 = fmul fast <4 x float> %0, <float 6.400000e+01, float 6.400000e+01, float 6.400000e+01, float 6.400000e+01>
60 %3 = fptosi <4 x float> %2 to <4 x i32>
64 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_7(<4 x float> %0) {
65 ; CHECK-LABEL: vcvt_i32_7:
67 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #7
69 %2 = fmul fast <4 x float> %0, <float 1.280000e+02, float 1.280000e+02, float 1.280000e+02, float 1.280000e+02>
70 %3 = fptosi <4 x float> %2 to <4 x i32>
74 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_8(<4 x float> %0) {
75 ; CHECK-LABEL: vcvt_i32_8:
77 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #8
79 %2 = fmul fast <4 x float> %0, <float 2.560000e+02, float 2.560000e+02, float 2.560000e+02, float 2.560000e+02>
80 %3 = fptosi <4 x float> %2 to <4 x i32>
84 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_9(<4 x float> %0) {
85 ; CHECK-LABEL: vcvt_i32_9:
87 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #9
89 %2 = fmul fast <4 x float> %0, <float 5.120000e+02, float 5.120000e+02, float 5.120000e+02, float 5.120000e+02>
90 %3 = fptosi <4 x float> %2 to <4 x i32>
94 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_10(<4 x float> %0) {
95 ; CHECK-LABEL: vcvt_i32_10:
97 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #10
99 %2 = fmul fast <4 x float> %0, <float 1.024000e+03, float 1.024000e+03, float 1.024000e+03, float 1.024000e+03>
100 %3 = fptosi <4 x float> %2 to <4 x i32>
104 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_11(<4 x float> %0) {
105 ; CHECK-LABEL: vcvt_i32_11:
107 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #11
109 %2 = fmul fast <4 x float> %0, <float 2.048000e+03, float 2.048000e+03, float 2.048000e+03, float 2.048000e+03>
110 %3 = fptosi <4 x float> %2 to <4 x i32>
114 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_12(<4 x float> %0) {
115 ; CHECK-LABEL: vcvt_i32_12:
117 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #12
119 %2 = fmul fast <4 x float> %0, <float 4.096000e+03, float 4.096000e+03, float 4.096000e+03, float 4.096000e+03>
120 %3 = fptosi <4 x float> %2 to <4 x i32>
124 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_13(<4 x float> %0) {
125 ; CHECK-LABEL: vcvt_i32_13:
127 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #13
129 %2 = fmul fast <4 x float> %0, <float 8.192000e+03, float 8.192000e+03, float 8.192000e+03, float 8.192000e+03>
130 %3 = fptosi <4 x float> %2 to <4 x i32>
134 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_14(<4 x float> %0) {
135 ; CHECK-LABEL: vcvt_i32_14:
137 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #14
139 %2 = fmul fast <4 x float> %0, <float 1.638400e+04, float 1.638400e+04, float 1.638400e+04, float 1.638400e+04>
140 %3 = fptosi <4 x float> %2 to <4 x i32>
144 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_15(<4 x float> %0) {
145 ; CHECK-LABEL: vcvt_i32_15:
147 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #15
149 %2 = fmul fast <4 x float> %0, <float 3.276800e+04, float 3.276800e+04, float 3.276800e+04, float 3.276800e+04>
150 %3 = fptosi <4 x float> %2 to <4 x i32>
154 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_16(<4 x float> %0) {
155 ; CHECK-LABEL: vcvt_i32_16:
157 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #16
159 %2 = fmul fast <4 x float> %0, <float 6.553600e+04, float 6.553600e+04, float 6.553600e+04, float 6.553600e+04>
160 %3 = fptosi <4 x float> %2 to <4 x i32>
164 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_17(<4 x float> %0) {
165 ; CHECK-LABEL: vcvt_i32_17:
167 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #17
169 %2 = fmul fast <4 x float> %0, <float 1.310720e+05, float 1.310720e+05, float 1.310720e+05, float 1.310720e+05>
170 %3 = fptosi <4 x float> %2 to <4 x i32>
174 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_18(<4 x float> %0) {
175 ; CHECK-LABEL: vcvt_i32_18:
177 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #18
179 %2 = fmul fast <4 x float> %0, <float 2.621440e+05, float 2.621440e+05, float 2.621440e+05, float 2.621440e+05>
180 %3 = fptosi <4 x float> %2 to <4 x i32>
184 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_19(<4 x float> %0) {
185 ; CHECK-LABEL: vcvt_i32_19:
187 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #19
189 %2 = fmul fast <4 x float> %0, <float 5.242880e+05, float 5.242880e+05, float 5.242880e+05, float 5.242880e+05>
190 %3 = fptosi <4 x float> %2 to <4 x i32>
194 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_20(<4 x float> %0) {
195 ; CHECK-LABEL: vcvt_i32_20:
197 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #20
199 %2 = fmul fast <4 x float> %0, <float 0x4130000000000000, float 0x4130000000000000, float 0x4130000000000000, float 0x4130000000000000>
200 %3 = fptosi <4 x float> %2 to <4 x i32>
204 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_21(<4 x float> %0) {
205 ; CHECK-LABEL: vcvt_i32_21:
207 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #21
209 %2 = fmul fast <4 x float> %0, <float 0x4140000000000000, float 0x4140000000000000, float 0x4140000000000000, float 0x4140000000000000>
210 %3 = fptosi <4 x float> %2 to <4 x i32>
214 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_22(<4 x float> %0) {
215 ; CHECK-LABEL: vcvt_i32_22:
217 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #22
219 %2 = fmul fast <4 x float> %0, <float 0x4150000000000000, float 0x4150000000000000, float 0x4150000000000000, float 0x4150000000000000>
220 %3 = fptosi <4 x float> %2 to <4 x i32>
224 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_23(<4 x float> %0) {
225 ; CHECK-LABEL: vcvt_i32_23:
227 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #23
229 %2 = fmul fast <4 x float> %0, <float 0x4160000000000000, float 0x4160000000000000, float 0x4160000000000000, float 0x4160000000000000>
230 %3 = fptosi <4 x float> %2 to <4 x i32>
234 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_24(<4 x float> %0) {
235 ; CHECK-LABEL: vcvt_i32_24:
237 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #24
239 %2 = fmul fast <4 x float> %0, <float 0x4170000000000000, float 0x4170000000000000, float 0x4170000000000000, float 0x4170000000000000>
240 %3 = fptosi <4 x float> %2 to <4 x i32>
244 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_25(<4 x float> %0) {
245 ; CHECK-LABEL: vcvt_i32_25:
247 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #25
249 %2 = fmul fast <4 x float> %0, <float 0x4180000000000000, float 0x4180000000000000, float 0x4180000000000000, float 0x4180000000000000>
250 %3 = fptosi <4 x float> %2 to <4 x i32>
254 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_26(<4 x float> %0) {
255 ; CHECK-LABEL: vcvt_i32_26:
257 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #26
259 %2 = fmul fast <4 x float> %0, <float 0x4190000000000000, float 0x4190000000000000, float 0x4190000000000000, float 0x4190000000000000>
260 %3 = fptosi <4 x float> %2 to <4 x i32>
264 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_27(<4 x float> %0) {
265 ; CHECK-LABEL: vcvt_i32_27:
267 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #27
269 %2 = fmul fast <4 x float> %0, <float 0x41A0000000000000, float 0x41A0000000000000, float 0x41A0000000000000, float 0x41A0000000000000>
270 %3 = fptosi <4 x float> %2 to <4 x i32>
274 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_28(<4 x float> %0) {
275 ; CHECK-LABEL: vcvt_i32_28:
277 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #28
279 %2 = fmul fast <4 x float> %0, <float 0x41B0000000000000, float 0x41B0000000000000, float 0x41B0000000000000, float 0x41B0000000000000>
280 %3 = fptosi <4 x float> %2 to <4 x i32>
284 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_29(<4 x float> %0) {
285 ; CHECK-LABEL: vcvt_i32_29:
287 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #29
289 %2 = fmul fast <4 x float> %0, <float 0x41C0000000000000, float 0x41C0000000000000, float 0x41C0000000000000, float 0x41C0000000000000>
290 %3 = fptosi <4 x float> %2 to <4 x i32>
294 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_30(<4 x float> %0) {
295 ; CHECK-LABEL: vcvt_i32_30:
297 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #30
299 %2 = fmul fast <4 x float> %0, <float 0x41D0000000000000, float 0x41D0000000000000, float 0x41D0000000000000, float 0x41D0000000000000>
300 %3 = fptosi <4 x float> %2 to <4 x i32>
304 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_31(<4 x float> %0) {
305 ; CHECK-LABEL: vcvt_i32_31:
307 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #31
309 %2 = fmul fast <4 x float> %0, <float 0x41E0000000000000, float 0x41E0000000000000, float 0x41E0000000000000, float 0x41E0000000000000>
310 %3 = fptosi <4 x float> %2 to <4 x i32>
314 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_32(<4 x float> %0) {
315 ; CHECK-LABEL: vcvt_i32_32:
317 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #32
319 %2 = fmul <4 x float> %0, <float 0x41F0000000000000, float 0x41F0000000000000, float 0x41F0000000000000, float 0x41F0000000000000>
320 %3 = fptosi <4 x float> %2 to <4 x i32>
324 define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_33(<4 x float> %0) {
325 ; CHECK-LABEL: vcvt_i32_33:
327 ; CHECK-NEXT: vmov.i32 q1, #0x50000000
328 ; CHECK-NEXT: vmul.f32 q0, q0, q1
329 ; CHECK-NEXT: vcvt.s32.f32 q0, q0
331 %2 = fmul <4 x float> %0, <float 0x4200000000000000, float 0x4200000000000000, float 0x4200000000000000, float 0x4200000000000000>
332 %3 = fptosi <4 x float> %2 to <4 x i32>
336 define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_1(<8 x half> %0) {
337 ; CHECK-LABEL: vcvt_i16_1:
339 ; CHECK-NEXT: vcvt.s16.f16 q0, q0, #1
341 %2 = fmul fast <8 x half> %0, <half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000>
342 %3 = fptosi <8 x half> %2 to <8 x i16>
346 define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_2(<8 x half> %0) {
347 ; CHECK-LABEL: vcvt_i16_2:
349 ; CHECK-NEXT: vcvt.s16.f16 q0, q0, #2
351 %2 = fmul fast <8 x half> %0, <half 0xH4400, half 0xH4400, half 0xH4400, half 0xH4400, half 0xH4400, half 0xH4400, half 0xH4400, half 0xH4400>
352 %3 = fptosi <8 x half> %2 to <8 x i16>
356 define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_3(<8 x half> %0) {
357 ; CHECK-LABEL: vcvt_i16_3:
359 ; CHECK-NEXT: vcvt.s16.f16 q0, q0, #3
361 %2 = fmul fast <8 x half> %0, <half 0xH4800, half 0xH4800, half 0xH4800, half 0xH4800, half 0xH4800, half 0xH4800, half 0xH4800, half 0xH4800>
362 %3 = fptosi <8 x half> %2 to <8 x i16>
366 define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_4(<8 x half> %0) {
367 ; CHECK-LABEL: vcvt_i16_4:
369 ; CHECK-NEXT: vcvt.s16.f16 q0, q0, #4
371 %2 = fmul fast <8 x half> %0, <half 0xH4C00, half 0xH4C00, half 0xH4C00, half 0xH4C00, half 0xH4C00, half 0xH4C00, half 0xH4C00, half 0xH4C00>
372 %3 = fptosi <8 x half> %2 to <8 x i16>
376 define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_5(<8 x half> %0) {
377 ; CHECK-LABEL: vcvt_i16_5:
379 ; CHECK-NEXT: vcvt.s16.f16 q0, q0, #5
381 %2 = fmul fast <8 x half> %0, <half 0xH5000, half 0xH5000, half 0xH5000, half 0xH5000, half 0xH5000, half 0xH5000, half 0xH5000, half 0xH5000>
382 %3 = fptosi <8 x half> %2 to <8 x i16>
386 define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_6(<8 x half> %0) {
387 ; CHECK-LABEL: vcvt_i16_6:
389 ; CHECK-NEXT: vcvt.s16.f16 q0, q0, #6
391 %2 = fmul fast <8 x half> %0, <half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400>
392 %3 = fptosi <8 x half> %2 to <8 x i16>
396 define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_7(<8 x half> %0) {
397 ; CHECK-LABEL: vcvt_i16_7:
399 ; CHECK-NEXT: vcvt.s16.f16 q0, q0, #7
401 %2 = fmul fast <8 x half> %0, <half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800>
402 %3 = fptosi <8 x half> %2 to <8 x i16>
406 define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_8(<8 x half> %0) {
407 ; CHECK-LABEL: vcvt_i16_8:
409 ; CHECK-NEXT: vcvt.s16.f16 q0, q0, #8
411 %2 = fmul fast <8 x half> %0, <half 0xH5C00, half 0xH5C00, half 0xH5C00, half 0xH5C00, half 0xH5C00, half 0xH5C00, half 0xH5C00, half 0xH5C00>
412 %3 = fptosi <8 x half> %2 to <8 x i16>
416 define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_9(<8 x half> %0) {
417 ; CHECK-LABEL: vcvt_i16_9:
419 ; CHECK-NEXT: vcvt.s16.f16 q0, q0, #9
421 %2 = fmul fast <8 x half> %0, <half 0xH6000, half 0xH6000, half 0xH6000, half 0xH6000, half 0xH6000, half 0xH6000, half 0xH6000, half 0xH6000>
422 %3 = fptosi <8 x half> %2 to <8 x i16>
426 define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_10(<8 x half> %0) {
427 ; CHECK-LABEL: vcvt_i16_10:
429 ; CHECK-NEXT: vcvt.s16.f16 q0, q0, #10
431 %2 = fmul fast <8 x half> %0, <half 0xH6400, half 0xH6400, half 0xH6400, half 0xH6400, half 0xH6400, half 0xH6400, half 0xH6400, half 0xH6400>
432 %3 = fptosi <8 x half> %2 to <8 x i16>
436 define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_11(<8 x half> %0) {
437 ; CHECK-LABEL: vcvt_i16_11:
439 ; CHECK-NEXT: vcvt.s16.f16 q0, q0, #11
441 %2 = fmul fast <8 x half> %0, <half 0xH6800, half 0xH6800, half 0xH6800, half 0xH6800, half 0xH6800, half 0xH6800, half 0xH6800, half 0xH6800>
442 %3 = fptosi <8 x half> %2 to <8 x i16>
446 define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_12(<8 x half> %0) {
447 ; CHECK-LABEL: vcvt_i16_12:
449 ; CHECK-NEXT: vcvt.s16.f16 q0, q0, #12
451 %2 = fmul fast <8 x half> %0, <half 0xH6C00, half 0xH6C00, half 0xH6C00, half 0xH6C00, half 0xH6C00, half 0xH6C00, half 0xH6C00, half 0xH6C00>
452 %3 = fptosi <8 x half> %2 to <8 x i16>
456 define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_13(<8 x half> %0) {
457 ; CHECK-LABEL: vcvt_i16_13:
459 ; CHECK-NEXT: vcvt.s16.f16 q0, q0, #13
461 %2 = fmul fast <8 x half> %0, <half 0xH7000, half 0xH7000, half 0xH7000, half 0xH7000, half 0xH7000, half 0xH7000, half 0xH7000, half 0xH7000>
462 %3 = fptosi <8 x half> %2 to <8 x i16>
466 define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_14(<8 x half> %0) {
467 ; CHECK-LABEL: vcvt_i16_14:
469 ; CHECK-NEXT: vcvt.s16.f16 q0, q0, #14
471 %2 = fmul fast <8 x half> %0, <half 0xH7400, half 0xH7400, half 0xH7400, half 0xH7400, half 0xH7400, half 0xH7400, half 0xH7400, half 0xH7400>
472 %3 = fptosi <8 x half> %2 to <8 x i16>
476 define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_15(<8 x half> %0) {
477 ; CHECK-LABEL: vcvt_i16_15:
479 ; CHECK-NEXT: vcvt.s16.f16 q0, q0, #15
481 %2 = fmul fast <8 x half> %0, <half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800>
482 %3 = fptosi <8 x half> %2 to <8 x i16>
486 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_1(<4 x float> %0) {
487 ; CHECK-LABEL: vcvt_u32_1:
489 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #1
491 %2 = fmul fast <4 x float> %0, <float 2.000000e+00, float 2.000000e+00, float 2.000000e+00, float 2.000000e+00>
492 %3 = fptoui <4 x float> %2 to <4 x i32>
496 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_2(<4 x float> %0) {
497 ; CHECK-LABEL: vcvt_u32_2:
499 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #2
501 %2 = fmul fast <4 x float> %0, <float 4.000000e+00, float 4.000000e+00, float 4.000000e+00, float 4.000000e+00>
502 %3 = fptoui <4 x float> %2 to <4 x i32>
506 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_3(<4 x float> %0) {
507 ; CHECK-LABEL: vcvt_u32_3:
509 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #3
511 %2 = fmul fast <4 x float> %0, <float 8.000000e+00, float 8.000000e+00, float 8.000000e+00, float 8.000000e+00>
512 %3 = fptoui <4 x float> %2 to <4 x i32>
516 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_4(<4 x float> %0) {
517 ; CHECK-LABEL: vcvt_u32_4:
519 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #4
521 %2 = fmul fast <4 x float> %0, <float 1.600000e+01, float 1.600000e+01, float 1.600000e+01, float 1.600000e+01>
522 %3 = fptoui <4 x float> %2 to <4 x i32>
526 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_5(<4 x float> %0) {
527 ; CHECK-LABEL: vcvt_u32_5:
529 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #5
531 %2 = fmul fast <4 x float> %0, <float 3.200000e+01, float 3.200000e+01, float 3.200000e+01, float 3.200000e+01>
532 %3 = fptoui <4 x float> %2 to <4 x i32>
536 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_6(<4 x float> %0) {
537 ; CHECK-LABEL: vcvt_u32_6:
539 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #6
541 %2 = fmul fast <4 x float> %0, <float 6.400000e+01, float 6.400000e+01, float 6.400000e+01, float 6.400000e+01>
542 %3 = fptoui <4 x float> %2 to <4 x i32>
546 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_7(<4 x float> %0) {
547 ; CHECK-LABEL: vcvt_u32_7:
549 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #7
551 %2 = fmul fast <4 x float> %0, <float 1.280000e+02, float 1.280000e+02, float 1.280000e+02, float 1.280000e+02>
552 %3 = fptoui <4 x float> %2 to <4 x i32>
556 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_8(<4 x float> %0) {
557 ; CHECK-LABEL: vcvt_u32_8:
559 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #8
561 %2 = fmul fast <4 x float> %0, <float 2.560000e+02, float 2.560000e+02, float 2.560000e+02, float 2.560000e+02>
562 %3 = fptoui <4 x float> %2 to <4 x i32>
566 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_9(<4 x float> %0) {
567 ; CHECK-LABEL: vcvt_u32_9:
569 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #9
571 %2 = fmul fast <4 x float> %0, <float 5.120000e+02, float 5.120000e+02, float 5.120000e+02, float 5.120000e+02>
572 %3 = fptoui <4 x float> %2 to <4 x i32>
576 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_10(<4 x float> %0) {
577 ; CHECK-LABEL: vcvt_u32_10:
579 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #10
581 %2 = fmul fast <4 x float> %0, <float 1.024000e+03, float 1.024000e+03, float 1.024000e+03, float 1.024000e+03>
582 %3 = fptoui <4 x float> %2 to <4 x i32>
586 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_11(<4 x float> %0) {
587 ; CHECK-LABEL: vcvt_u32_11:
589 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #11
591 %2 = fmul fast <4 x float> %0, <float 2.048000e+03, float 2.048000e+03, float 2.048000e+03, float 2.048000e+03>
592 %3 = fptoui <4 x float> %2 to <4 x i32>
596 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_12(<4 x float> %0) {
597 ; CHECK-LABEL: vcvt_u32_12:
599 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #12
601 %2 = fmul fast <4 x float> %0, <float 4.096000e+03, float 4.096000e+03, float 4.096000e+03, float 4.096000e+03>
602 %3 = fptoui <4 x float> %2 to <4 x i32>
606 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_13(<4 x float> %0) {
607 ; CHECK-LABEL: vcvt_u32_13:
609 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #13
611 %2 = fmul fast <4 x float> %0, <float 8.192000e+03, float 8.192000e+03, float 8.192000e+03, float 8.192000e+03>
612 %3 = fptoui <4 x float> %2 to <4 x i32>
616 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_14(<4 x float> %0) {
617 ; CHECK-LABEL: vcvt_u32_14:
619 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #14
621 %2 = fmul fast <4 x float> %0, <float 1.638400e+04, float 1.638400e+04, float 1.638400e+04, float 1.638400e+04>
622 %3 = fptoui <4 x float> %2 to <4 x i32>
626 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_15(<4 x float> %0) {
627 ; CHECK-LABEL: vcvt_u32_15:
629 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #15
631 %2 = fmul fast <4 x float> %0, <float 3.276800e+04, float 3.276800e+04, float 3.276800e+04, float 3.276800e+04>
632 %3 = fptoui <4 x float> %2 to <4 x i32>
636 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_16(<4 x float> %0) {
637 ; CHECK-LABEL: vcvt_u32_16:
639 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #16
641 %2 = fmul fast <4 x float> %0, <float 6.553600e+04, float 6.553600e+04, float 6.553600e+04, float 6.553600e+04>
642 %3 = fptoui <4 x float> %2 to <4 x i32>
646 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_17(<4 x float> %0) {
647 ; CHECK-LABEL: vcvt_u32_17:
649 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #17
651 %2 = fmul fast <4 x float> %0, <float 1.310720e+05, float 1.310720e+05, float 1.310720e+05, float 1.310720e+05>
652 %3 = fptoui <4 x float> %2 to <4 x i32>
656 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_18(<4 x float> %0) {
657 ; CHECK-LABEL: vcvt_u32_18:
659 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #18
661 %2 = fmul fast <4 x float> %0, <float 2.621440e+05, float 2.621440e+05, float 2.621440e+05, float 2.621440e+05>
662 %3 = fptoui <4 x float> %2 to <4 x i32>
666 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_19(<4 x float> %0) {
667 ; CHECK-LABEL: vcvt_u32_19:
669 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #19
671 %2 = fmul fast <4 x float> %0, <float 5.242880e+05, float 5.242880e+05, float 5.242880e+05, float 5.242880e+05>
672 %3 = fptoui <4 x float> %2 to <4 x i32>
676 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_20(<4 x float> %0) {
677 ; CHECK-LABEL: vcvt_u32_20:
679 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #20
681 %2 = fmul fast <4 x float> %0, <float 0x4130000000000000, float 0x4130000000000000, float 0x4130000000000000, float 0x4130000000000000>
682 %3 = fptoui <4 x float> %2 to <4 x i32>
686 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_21(<4 x float> %0) {
687 ; CHECK-LABEL: vcvt_u32_21:
689 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #21
691 %2 = fmul fast <4 x float> %0, <float 0x4140000000000000, float 0x4140000000000000, float 0x4140000000000000, float 0x4140000000000000>
692 %3 = fptoui <4 x float> %2 to <4 x i32>
696 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_22(<4 x float> %0) {
697 ; CHECK-LABEL: vcvt_u32_22:
699 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #22
701 %2 = fmul fast <4 x float> %0, <float 0x4150000000000000, float 0x4150000000000000, float 0x4150000000000000, float 0x4150000000000000>
702 %3 = fptoui <4 x float> %2 to <4 x i32>
706 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_23(<4 x float> %0) {
707 ; CHECK-LABEL: vcvt_u32_23:
709 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #23
711 %2 = fmul fast <4 x float> %0, <float 0x4160000000000000, float 0x4160000000000000, float 0x4160000000000000, float 0x4160000000000000>
712 %3 = fptoui <4 x float> %2 to <4 x i32>
716 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_24(<4 x float> %0) {
717 ; CHECK-LABEL: vcvt_u32_24:
719 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #24
721 %2 = fmul fast <4 x float> %0, <float 0x4170000000000000, float 0x4170000000000000, float 0x4170000000000000, float 0x4170000000000000>
722 %3 = fptoui <4 x float> %2 to <4 x i32>
726 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_25(<4 x float> %0) {
727 ; CHECK-LABEL: vcvt_u32_25:
729 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #25
731 %2 = fmul fast <4 x float> %0, <float 0x4180000000000000, float 0x4180000000000000, float 0x4180000000000000, float 0x4180000000000000>
732 %3 = fptoui <4 x float> %2 to <4 x i32>
736 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_26(<4 x float> %0) {
737 ; CHECK-LABEL: vcvt_u32_26:
739 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #26
741 %2 = fmul fast <4 x float> %0, <float 0x4190000000000000, float 0x4190000000000000, float 0x4190000000000000, float 0x4190000000000000>
742 %3 = fptoui <4 x float> %2 to <4 x i32>
746 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_27(<4 x float> %0) {
747 ; CHECK-LABEL: vcvt_u32_27:
749 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #27
751 %2 = fmul fast <4 x float> %0, <float 0x41A0000000000000, float 0x41A0000000000000, float 0x41A0000000000000, float 0x41A0000000000000>
752 %3 = fptoui <4 x float> %2 to <4 x i32>
756 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_28(<4 x float> %0) {
757 ; CHECK-LABEL: vcvt_u32_28:
759 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #28
761 %2 = fmul fast <4 x float> %0, <float 0x41B0000000000000, float 0x41B0000000000000, float 0x41B0000000000000, float 0x41B0000000000000>
762 %3 = fptoui <4 x float> %2 to <4 x i32>
766 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_29(<4 x float> %0) {
767 ; CHECK-LABEL: vcvt_u32_29:
769 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #29
771 %2 = fmul fast <4 x float> %0, <float 0x41C0000000000000, float 0x41C0000000000000, float 0x41C0000000000000, float 0x41C0000000000000>
772 %3 = fptoui <4 x float> %2 to <4 x i32>
776 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_30(<4 x float> %0) {
777 ; CHECK-LABEL: vcvt_u32_30:
779 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #30
781 %2 = fmul fast <4 x float> %0, <float 0x41D0000000000000, float 0x41D0000000000000, float 0x41D0000000000000, float 0x41D0000000000000>
782 %3 = fptoui <4 x float> %2 to <4 x i32>
786 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_31(<4 x float> %0) {
787 ; CHECK-LABEL: vcvt_u32_31:
789 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #31
791 %2 = fmul fast <4 x float> %0, <float 0x41E0000000000000, float 0x41E0000000000000, float 0x41E0000000000000, float 0x41E0000000000000>
792 %3 = fptoui <4 x float> %2 to <4 x i32>
796 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_32(<4 x float> %0) {
797 ; CHECK-LABEL: vcvt_u32_32:
799 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #32
801 %2 = fmul <4 x float> %0, <float 0x41F0000000000000, float 0x41F0000000000000, float 0x41F0000000000000, float 0x41F0000000000000>
802 %3 = fptoui <4 x float> %2 to <4 x i32>
806 define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_33(<4 x float> %0) {
807 ; CHECK-LABEL: vcvt_u32_33:
809 ; CHECK-NEXT: vmov.i32 q1, #0x50000000
810 ; CHECK-NEXT: vmul.f32 q0, q0, q1
811 ; CHECK-NEXT: vcvt.u32.f32 q0, q0
813 %2 = fmul <4 x float> %0, <float 0x4200000000000000, float 0x4200000000000000, float 0x4200000000000000, float 0x4200000000000000>
814 %3 = fptoui <4 x float> %2 to <4 x i32>
818 define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_1(<8 x half> %0) {
819 ; CHECK-LABEL: vcvt_u16_1:
821 ; CHECK-NEXT: vcvt.u16.f16 q0, q0, #1
823 %2 = fmul fast <8 x half> %0, <half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000>
824 %3 = fptoui <8 x half> %2 to <8 x i16>
828 define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_2(<8 x half> %0) {
829 ; CHECK-LABEL: vcvt_u16_2:
831 ; CHECK-NEXT: vcvt.u16.f16 q0, q0, #2
833 %2 = fmul fast <8 x half> %0, <half 0xH4400, half 0xH4400, half 0xH4400, half 0xH4400, half 0xH4400, half 0xH4400, half 0xH4400, half 0xH4400>
834 %3 = fptoui <8 x half> %2 to <8 x i16>
838 define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_3(<8 x half> %0) {
839 ; CHECK-LABEL: vcvt_u16_3:
841 ; CHECK-NEXT: vcvt.u16.f16 q0, q0, #3
843 %2 = fmul fast <8 x half> %0, <half 0xH4800, half 0xH4800, half 0xH4800, half 0xH4800, half 0xH4800, half 0xH4800, half 0xH4800, half 0xH4800>
844 %3 = fptoui <8 x half> %2 to <8 x i16>
848 define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_4(<8 x half> %0) {
849 ; CHECK-LABEL: vcvt_u16_4:
851 ; CHECK-NEXT: vcvt.u16.f16 q0, q0, #4
853 %2 = fmul fast <8 x half> %0, <half 0xH4C00, half 0xH4C00, half 0xH4C00, half 0xH4C00, half 0xH4C00, half 0xH4C00, half 0xH4C00, half 0xH4C00>
854 %3 = fptoui <8 x half> %2 to <8 x i16>
858 define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_5(<8 x half> %0) {
859 ; CHECK-LABEL: vcvt_u16_5:
861 ; CHECK-NEXT: vcvt.u16.f16 q0, q0, #5
863 %2 = fmul fast <8 x half> %0, <half 0xH5000, half 0xH5000, half 0xH5000, half 0xH5000, half 0xH5000, half 0xH5000, half 0xH5000, half 0xH5000>
864 %3 = fptoui <8 x half> %2 to <8 x i16>
868 define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_6(<8 x half> %0) {
869 ; CHECK-LABEL: vcvt_u16_6:
871 ; CHECK-NEXT: vcvt.u16.f16 q0, q0, #6
873 %2 = fmul fast <8 x half> %0, <half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400>
874 %3 = fptoui <8 x half> %2 to <8 x i16>
878 define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_7(<8 x half> %0) {
879 ; CHECK-LABEL: vcvt_u16_7:
881 ; CHECK-NEXT: vcvt.u16.f16 q0, q0, #7
883 %2 = fmul fast <8 x half> %0, <half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800>
884 %3 = fptoui <8 x half> %2 to <8 x i16>
888 define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_8(<8 x half> %0) {
889 ; CHECK-LABEL: vcvt_u16_8:
891 ; CHECK-NEXT: vcvt.u16.f16 q0, q0, #8
893 %2 = fmul fast <8 x half> %0, <half 0xH5C00, half 0xH5C00, half 0xH5C00, half 0xH5C00, half 0xH5C00, half 0xH5C00, half 0xH5C00, half 0xH5C00>
894 %3 = fptoui <8 x half> %2 to <8 x i16>
898 define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_9(<8 x half> %0) {
899 ; CHECK-LABEL: vcvt_u16_9:
901 ; CHECK-NEXT: vcvt.u16.f16 q0, q0, #9
903 %2 = fmul fast <8 x half> %0, <half 0xH6000, half 0xH6000, half 0xH6000, half 0xH6000, half 0xH6000, half 0xH6000, half 0xH6000, half 0xH6000>
904 %3 = fptoui <8 x half> %2 to <8 x i16>
908 define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_10(<8 x half> %0) {
909 ; CHECK-LABEL: vcvt_u16_10:
911 ; CHECK-NEXT: vcvt.u16.f16 q0, q0, #10
913 %2 = fmul fast <8 x half> %0, <half 0xH6400, half 0xH6400, half 0xH6400, half 0xH6400, half 0xH6400, half 0xH6400, half 0xH6400, half 0xH6400>
914 %3 = fptoui <8 x half> %2 to <8 x i16>
918 define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_11(<8 x half> %0) {
919 ; CHECK-LABEL: vcvt_u16_11:
921 ; CHECK-NEXT: vcvt.u16.f16 q0, q0, #11
923 %2 = fmul fast <8 x half> %0, <half 0xH6800, half 0xH6800, half 0xH6800, half 0xH6800, half 0xH6800, half 0xH6800, half 0xH6800, half 0xH6800>
924 %3 = fptoui <8 x half> %2 to <8 x i16>
928 define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_12(<8 x half> %0) {
929 ; CHECK-LABEL: vcvt_u16_12:
931 ; CHECK-NEXT: vcvt.u16.f16 q0, q0, #12
933 %2 = fmul fast <8 x half> %0, <half 0xH6C00, half 0xH6C00, half 0xH6C00, half 0xH6C00, half 0xH6C00, half 0xH6C00, half 0xH6C00, half 0xH6C00>
934 %3 = fptoui <8 x half> %2 to <8 x i16>
938 define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_13(<8 x half> %0) {
939 ; CHECK-LABEL: vcvt_u16_13:
941 ; CHECK-NEXT: vcvt.u16.f16 q0, q0, #13
943 %2 = fmul fast <8 x half> %0, <half 0xH7000, half 0xH7000, half 0xH7000, half 0xH7000, half 0xH7000, half 0xH7000, half 0xH7000, half 0xH7000>
944 %3 = fptoui <8 x half> %2 to <8 x i16>
948 define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_14(<8 x half> %0) {
949 ; CHECK-LABEL: vcvt_u16_14:
951 ; CHECK-NEXT: vcvt.u16.f16 q0, q0, #14
953 %2 = fmul fast <8 x half> %0, <half 0xH7400, half 0xH7400, half 0xH7400, half 0xH7400, half 0xH7400, half 0xH7400, half 0xH7400, half 0xH7400>
954 %3 = fptoui <8 x half> %2 to <8 x i16>
958 define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_15(<8 x half> %0) {
959 ; CHECK-LABEL: vcvt_u16_15:
961 ; CHECK-NEXT: vcvt.u16.f16 q0, q0, #15
963 %2 = fmul fast <8 x half> %0, <half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800>
964 %3 = fptoui <8 x half> %2 to <8 x i16>
968 define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_inf(<8 x half> %0) {
969 ; CHECK-LABEL: vcvt_u16_inf:
971 ; CHECK-NEXT: vmov.i16 q1, #0x7800
972 ; CHECK-NEXT: vmul.f16 q0, q0, q1
973 ; CHECK-NEXT: vcvt.u16.f16 q0, q0
975 %2 = fmul <8 x half> %0, <half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800>
976 %3 = fptoui <8 x half> %2 to <8 x i16>
980 define arm_aapcs_vfpcc <8 x i16> @vcvt_s16_inf(<8 x half> %0) {
981 ; CHECK-LABEL: vcvt_s16_inf:
983 ; CHECK-NEXT: vcvt.s16.f16 q0, q0, #15
985 %2 = fmul <8 x half> %0, <half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800>
986 %3 = fptosi <8 x half> %2 to <8 x i16>
991 define arm_aapcs_vfpcc <4 x i32> @vcvt_bad_imm(<4 x float> %0) {
992 ; CHECK-LABEL: vcvt_bad_imm:
994 ; CHECK-NEXT: movw r0, #2048
995 ; CHECK-NEXT: movt r0, #15104
996 ; CHECK-NEXT: vmul.f32 q0, q0, r0
997 ; CHECK-NEXT: vcvt.s32.f32 q0, q0
999 %2 = fmul <4 x float> %0, <float 0x3F60010000000000, float 0x3F60010000000000, float 0x3F60010000000000, float 0x3F60010000000000>
1000 %3 = fptosi <4 x float> %2 to <4 x i32>
1004 define arm_aapcs_vfpcc <4 x i32> @vcvt_negative(<4 x float> %0) {
1005 ; CHECK-LABEL: vcvt_negative:
1007 ; CHECK-NEXT: vmov.i32 q1, #0xb8000000
1008 ; CHECK-NEXT: vmul.f32 q0, q0, q1
1009 ; CHECK-NEXT: vcvt.s32.f32 q0, q0
1011 %2 = fmul <4 x float> %0, <float 0xBF00000000000000, float 0xBF00000000000000, float 0xBF00000000000000, float 0xBF00000000000000>
1012 %3 = fptosi <4 x float> %2 to <4 x i32>
1016 define arm_aapcs_vfpcc <4 x i32> @vcvt_negative2(<4 x float> %0) {
1017 ; CHECK-LABEL: vcvt_negative2:
1019 ; CHECK-NEXT: vmov.i32 q1, #0xb0000000
1020 ; CHECK-NEXT: vmul.f32 q0, q0, q1
1021 ; CHECK-NEXT: vcvt.s32.f32 q0, q0
1023 %2 = fmul <4 x float> %0, <float 0xBE00000000000000, float 0xBE00000000000000, float 0xBE00000000000000, float 0xBE00000000000000>
1024 %3 = fptosi <4 x float> %2 to <4 x i32>
1030 define arm_aapcs_vfpcc <8 x i16> @vcvt_sat_s16_1(<8 x half> %0) {
1031 ; CHECK-LABEL: vcvt_sat_s16_1:
1033 ; CHECK-NEXT: vcvt.s16.f16 q0, q0, #1
1035 %2 = fmul fast <8 x half> %0, <half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000>
1036 %3 = call <8 x i16> @llvm.fptosi.sat.v8i16.v8f16(<8 x half> %2)
1040 define arm_aapcs_vfpcc <8 x i16> @vcvt_sat_u16_1(<8 x half> %0) {
1041 ; CHECK-LABEL: vcvt_sat_u16_1:
1043 ; CHECK-NEXT: vcvt.u16.f16 q0, q0, #1
1045 %2 = fmul fast <8 x half> %0, <half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000>
1046 %3 = call <8 x i16> @llvm.fptoui.sat.v8i16.v8f16(<8 x half> %2)
1050 define arm_aapcs_vfpcc <8 x i16> @vcvt_sat_s16_6(<8 x half> %0) {
1051 ; CHECK-LABEL: vcvt_sat_s16_6:
1053 ; CHECK-NEXT: vcvt.s16.f16 q0, q0, #6
1055 %2 = fmul fast <8 x half> %0, <half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400>
1056 %3 = call <8 x i16> @llvm.fptosi.sat.v8i16.v8f16(<8 x half> %2)
1060 define arm_aapcs_vfpcc <8 x i16> @vcvt_sat_u16_7(<8 x half> %0) {
1061 ; CHECK-LABEL: vcvt_sat_u16_7:
1063 ; CHECK-NEXT: vcvt.u16.f16 q0, q0, #7
1065 %2 = fmul fast <8 x half> %0, <half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800>
1066 %3 = call <8 x i16> @llvm.fptoui.sat.v8i16.v8f16(<8 x half> %2)
1071 define arm_aapcs_vfpcc <4 x i32> @vcvt_sat_s32_1(<4 x float> %0) {
1072 ; CHECK-LABEL: vcvt_sat_s32_1:
1074 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #1
1076 %2 = fmul fast <4 x float> %0, <float 2.000000e+00, float 2.000000e+00, float 2.000000e+00, float 2.000000e+00>
1077 %3 = call <4 x i32> @llvm.fptosi.sat.v4i32.v4f32(<4 x float> %2)
1081 define arm_aapcs_vfpcc <4 x i32> @vcvt_sat_u32_1(<4 x float> %0) {
1082 ; CHECK-LABEL: vcvt_sat_u32_1:
1084 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #1
1086 %2 = fmul fast <4 x float> %0, <float 2.000000e+00, float 2.000000e+00, float 2.000000e+00, float 2.000000e+00>
1087 %3 = call <4 x i32> @llvm.fptoui.sat.v4i32.v4f32(<4 x float> %2)
1091 define arm_aapcs_vfpcc <4 x i32> @vcvt_sat_u32_11(<4 x float> %0) {
1092 ; CHECK-LABEL: vcvt_sat_u32_11:
1094 ; CHECK-NEXT: vcvt.s32.f32 q0, q0, #11
1096 %2 = fmul fast <4 x float> %0, <float 2.048000e+03, float 2.048000e+03, float 2.048000e+03, float 2.048000e+03>
1097 %3 = call <4 x i32> @llvm.fptosi.sat.v4i32.v4f32(<4 x float> %2)
1101 define arm_aapcs_vfpcc <4 x i32> @vcvt_sat_u32_7(<4 x float> %0) {
1102 ; CHECK-LABEL: vcvt_sat_u32_7:
1104 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #23
1106 %2 = fmul fast <4 x float> %0, <float 0x4160000000000000, float 0x4160000000000000, float 0x4160000000000000, float 0x4160000000000000>
1107 %3 = call <4 x i32> @llvm.fptoui.sat.v4i32.v4f32(<4 x float> %2)
1111 define arm_aapcs_vfpcc <4 x i32> @vcvt_sat_u32_7_24(<4 x float> %0) {
1112 ; CHECK-LABEL: vcvt_sat_u32_7_24:
1114 ; CHECK-NEXT: vmov.i32 q1, #0xffffff
1115 ; CHECK-NEXT: vcvt.u32.f32 q0, q0, #23
1116 ; CHECK-NEXT: vmin.u32 q0, q0, q1
1118 %2 = fmul fast <4 x float> %0, <float 0x4160000000000000, float 0x4160000000000000, float 0x4160000000000000, float 0x4160000000000000>
1119 %3 = call <4 x i24> @llvm.fptoui.sat.v4i24.v4f32(<4 x float> %2)
1120 %4 = zext <4 x i24> %3 to <4 x i32>
1124 declare <4 x i32> @llvm.fptosi.sat.v4i32.v4f32(<4 x float>)
1125 declare <4 x i32> @llvm.fptoui.sat.v4i32.v4f32(<4 x float>)
1126 declare <4 x i24> @llvm.fptoui.sat.v4i24.v4f32(<4 x float>)
1127 declare <8 x i16> @llvm.fptosi.sat.v8i16.v8f16(<8 x half>)
1128 declare <8 x i16> @llvm.fptoui.sat.v8i16.v8f16(<8 x half>)