Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / Thumb2 / mve-intrinsics / vcvt_anpm.ll
blobab0b11716c3ce53c359c3a5aff27ab664d106030
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=thumbv8.1m.main -mattr=+mve.fp -verify-machineinstrs -o - %s | FileCheck %s
4 define arm_aapcs_vfpcc <8 x i16> @test_vcvtaq_s16_f16(<8 x half> %a) {
5 ; CHECK-LABEL: test_vcvtaq_s16_f16:
6 ; CHECK:       @ %bb.0: @ %entry
7 ; CHECK-NEXT:    vcvta.s16.f16 q0, q0
8 ; CHECK-NEXT:    bx lr
9 entry:
10   %0 = tail call <8 x i16> @llvm.arm.mve.vcvta.v8i16.v8f16(i32 0, <8 x half> %a)
11   ret <8 x i16> %0
14 define arm_aapcs_vfpcc <4 x i32> @test_vcvtaq_s32_f32(<4 x float> %a) {
15 ; CHECK-LABEL: test_vcvtaq_s32_f32:
16 ; CHECK:       @ %bb.0: @ %entry
17 ; CHECK-NEXT:    vcvta.s32.f32 q0, q0
18 ; CHECK-NEXT:    bx lr
19 entry:
20   %0 = tail call <4 x i32> @llvm.arm.mve.vcvta.v4i32.v4f32(i32 0, <4 x float> %a)
21   ret <4 x i32> %0
24 define arm_aapcs_vfpcc <8 x i16> @test_vcvtaq_u16_f16(<8 x half> %a) {
25 ; CHECK-LABEL: test_vcvtaq_u16_f16:
26 ; CHECK:       @ %bb.0: @ %entry
27 ; CHECK-NEXT:    vcvta.u16.f16 q0, q0
28 ; CHECK-NEXT:    bx lr
29 entry:
30   %0 = tail call <8 x i16> @llvm.arm.mve.vcvta.v8i16.v8f16(i32 1, <8 x half> %a)
31   ret <8 x i16> %0
34 define arm_aapcs_vfpcc <4 x i32> @test_vcvtaq_u32_f32(<4 x float> %a) {
35 ; CHECK-LABEL: test_vcvtaq_u32_f32:
36 ; CHECK:       @ %bb.0: @ %entry
37 ; CHECK-NEXT:    vcvta.u32.f32 q0, q0
38 ; CHECK-NEXT:    bx lr
39 entry:
40   %0 = tail call <4 x i32> @llvm.arm.mve.vcvta.v4i32.v4f32(i32 1, <4 x float> %a)
41   ret <4 x i32> %0
44 define arm_aapcs_vfpcc <8 x i16> @test_vcvtmq_s16_f16(<8 x half> %a) {
45 ; CHECK-LABEL: test_vcvtmq_s16_f16:
46 ; CHECK:       @ %bb.0: @ %entry
47 ; CHECK-NEXT:    vcvtm.s16.f16 q0, q0
48 ; CHECK-NEXT:    bx lr
49 entry:
50   %0 = tail call <8 x i16> @llvm.arm.mve.vcvtm.v8i16.v8f16(i32 0, <8 x half> %a)
51   ret <8 x i16> %0
54 define arm_aapcs_vfpcc <4 x i32> @test_vcvtmq_s32_f32(<4 x float> %a) {
55 ; CHECK-LABEL: test_vcvtmq_s32_f32:
56 ; CHECK:       @ %bb.0: @ %entry
57 ; CHECK-NEXT:    vcvtm.s32.f32 q0, q0
58 ; CHECK-NEXT:    bx lr
59 entry:
60   %0 = tail call <4 x i32> @llvm.arm.mve.vcvtm.v4i32.v4f32(i32 0, <4 x float> %a)
61   ret <4 x i32> %0
64 define arm_aapcs_vfpcc <8 x i16> @test_vcvtmq_u16_f16(<8 x half> %a) {
65 ; CHECK-LABEL: test_vcvtmq_u16_f16:
66 ; CHECK:       @ %bb.0: @ %entry
67 ; CHECK-NEXT:    vcvtm.u16.f16 q0, q0
68 ; CHECK-NEXT:    bx lr
69 entry:
70   %0 = tail call <8 x i16> @llvm.arm.mve.vcvtm.v8i16.v8f16(i32 1, <8 x half> %a)
71   ret <8 x i16> %0
74 define arm_aapcs_vfpcc <4 x i32> @test_vcvtmq_u32_f32(<4 x float> %a) {
75 ; CHECK-LABEL: test_vcvtmq_u32_f32:
76 ; CHECK:       @ %bb.0: @ %entry
77 ; CHECK-NEXT:    vcvtm.u32.f32 q0, q0
78 ; CHECK-NEXT:    bx lr
79 entry:
80   %0 = tail call <4 x i32> @llvm.arm.mve.vcvtm.v4i32.v4f32(i32 1, <4 x float> %a)
81   ret <4 x i32> %0
84 define arm_aapcs_vfpcc <8 x i16> @test_vcvtnq_s16_f16(<8 x half> %a) {
85 ; CHECK-LABEL: test_vcvtnq_s16_f16:
86 ; CHECK:       @ %bb.0: @ %entry
87 ; CHECK-NEXT:    vcvtn.s16.f16 q0, q0
88 ; CHECK-NEXT:    bx lr
89 entry:
90   %0 = tail call <8 x i16> @llvm.arm.mve.vcvtn.v8i16.v8f16(i32 0, <8 x half> %a)
91   ret <8 x i16> %0
94 define arm_aapcs_vfpcc <4 x i32> @test_vcvtnq_s32_f32(<4 x float> %a) {
95 ; CHECK-LABEL: test_vcvtnq_s32_f32:
96 ; CHECK:       @ %bb.0: @ %entry
97 ; CHECK-NEXT:    vcvtn.s32.f32 q0, q0
98 ; CHECK-NEXT:    bx lr
99 entry:
100   %0 = tail call <4 x i32> @llvm.arm.mve.vcvtn.v4i32.v4f32(i32 0, <4 x float> %a)
101   ret <4 x i32> %0
104 define arm_aapcs_vfpcc <8 x i16> @test_vcvtnq_u16_f16(<8 x half> %a) {
105 ; CHECK-LABEL: test_vcvtnq_u16_f16:
106 ; CHECK:       @ %bb.0: @ %entry
107 ; CHECK-NEXT:    vcvtn.u16.f16 q0, q0
108 ; CHECK-NEXT:    bx lr
109 entry:
110   %0 = tail call <8 x i16> @llvm.arm.mve.vcvtn.v8i16.v8f16(i32 1, <8 x half> %a)
111   ret <8 x i16> %0
114 define arm_aapcs_vfpcc <4 x i32> @test_vcvtnq_u32_f32(<4 x float> %a) {
115 ; CHECK-LABEL: test_vcvtnq_u32_f32:
116 ; CHECK:       @ %bb.0: @ %entry
117 ; CHECK-NEXT:    vcvtn.u32.f32 q0, q0
118 ; CHECK-NEXT:    bx lr
119 entry:
120   %0 = tail call <4 x i32> @llvm.arm.mve.vcvtn.v4i32.v4f32(i32 1, <4 x float> %a)
121   ret <4 x i32> %0
124 define arm_aapcs_vfpcc <8 x i16> @test_vcvtpq_s16_f16(<8 x half> %a) {
125 ; CHECK-LABEL: test_vcvtpq_s16_f16:
126 ; CHECK:       @ %bb.0: @ %entry
127 ; CHECK-NEXT:    vcvtp.s16.f16 q0, q0
128 ; CHECK-NEXT:    bx lr
129 entry:
130   %0 = tail call <8 x i16> @llvm.arm.mve.vcvtp.v8i16.v8f16(i32 0, <8 x half> %a)
131   ret <8 x i16> %0
134 define arm_aapcs_vfpcc <4 x i32> @test_vcvtpq_s32_f32(<4 x float> %a) {
135 ; CHECK-LABEL: test_vcvtpq_s32_f32:
136 ; CHECK:       @ %bb.0: @ %entry
137 ; CHECK-NEXT:    vcvtp.s32.f32 q0, q0
138 ; CHECK-NEXT:    bx lr
139 entry:
140   %0 = tail call <4 x i32> @llvm.arm.mve.vcvtp.v4i32.v4f32(i32 0, <4 x float> %a)
141   ret <4 x i32> %0
144 define arm_aapcs_vfpcc <8 x i16> @test_vcvtpq_u16_f16(<8 x half> %a) {
145 ; CHECK-LABEL: test_vcvtpq_u16_f16:
146 ; CHECK:       @ %bb.0: @ %entry
147 ; CHECK-NEXT:    vcvtp.u16.f16 q0, q0
148 ; CHECK-NEXT:    bx lr
149 entry:
150   %0 = tail call <8 x i16> @llvm.arm.mve.vcvtp.v8i16.v8f16(i32 1, <8 x half> %a)
151   ret <8 x i16> %0
154 define arm_aapcs_vfpcc <4 x i32> @test_vcvtpq_u32_f32(<4 x float> %a) {
155 ; CHECK-LABEL: test_vcvtpq_u32_f32:
156 ; CHECK:       @ %bb.0: @ %entry
157 ; CHECK-NEXT:    vcvtp.u32.f32 q0, q0
158 ; CHECK-NEXT:    bx lr
159 entry:
160   %0 = tail call <4 x i32> @llvm.arm.mve.vcvtp.v4i32.v4f32(i32 1, <4 x float> %a)
161   ret <4 x i32> %0
164 define arm_aapcs_vfpcc <8 x i16> @test_vcvtaq_m_s16_f16(<8 x i16> %inactive, <8 x half> %a, i16 zeroext %p) {
165 ; CHECK-LABEL: test_vcvtaq_m_s16_f16:
166 ; CHECK:       @ %bb.0: @ %entry
167 ; CHECK-NEXT:    vmsr p0, r0
168 ; CHECK-NEXT:    vpst
169 ; CHECK-NEXT:    vcvtat.s16.f16 q0, q1
170 ; CHECK-NEXT:    bx lr
171 entry:
172   %0 = zext i16 %p to i32
173   %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
174   %2 = tail call <8 x i16> @llvm.arm.mve.vcvta.predicated.v8i16.v8f16.v8i1(i32 0, <8 x i16> %inactive, <8 x half> %a, <8 x i1> %1)
175   ret <8 x i16> %2
178 define arm_aapcs_vfpcc <4 x i32> @test_vcvtaq_m_s32_f32(<4 x i32> %inactive, <4 x float> %a, i16 zeroext %p) {
179 ; CHECK-LABEL: test_vcvtaq_m_s32_f32:
180 ; CHECK:       @ %bb.0: @ %entry
181 ; CHECK-NEXT:    vmsr p0, r0
182 ; CHECK-NEXT:    vpst
183 ; CHECK-NEXT:    vcvtat.s32.f32 q0, q1
184 ; CHECK-NEXT:    bx lr
185 entry:
186   %0 = zext i16 %p to i32
187   %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
188   %2 = tail call <4 x i32> @llvm.arm.mve.vcvta.predicated.v4i32.v4f32.v4i1(i32 0, <4 x i32> %inactive, <4 x float> %a, <4 x i1> %1)
189   ret <4 x i32> %2
192 define arm_aapcs_vfpcc <8 x i16> @test_vcvtaq_m_u16_f16(<8 x i16> %inactive, <8 x half> %a, i16 zeroext %p) {
193 ; CHECK-LABEL: test_vcvtaq_m_u16_f16:
194 ; CHECK:       @ %bb.0: @ %entry
195 ; CHECK-NEXT:    vmsr p0, r0
196 ; CHECK-NEXT:    vpst
197 ; CHECK-NEXT:    vcvtat.u16.f16 q0, q1
198 ; CHECK-NEXT:    bx lr
199 entry:
200   %0 = zext i16 %p to i32
201   %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
202   %2 = tail call <8 x i16> @llvm.arm.mve.vcvta.predicated.v8i16.v8f16.v8i1(i32 1, <8 x i16> %inactive, <8 x half> %a, <8 x i1> %1)
203   ret <8 x i16> %2
206 define arm_aapcs_vfpcc <4 x i32> @test_vcvtaq_m_u32_f32(<4 x i32> %inactive, <4 x float> %a, i16 zeroext %p) {
207 ; CHECK-LABEL: test_vcvtaq_m_u32_f32:
208 ; CHECK:       @ %bb.0: @ %entry
209 ; CHECK-NEXT:    vmsr p0, r0
210 ; CHECK-NEXT:    vpst
211 ; CHECK-NEXT:    vcvtat.u32.f32 q0, q1
212 ; CHECK-NEXT:    bx lr
213 entry:
214   %0 = zext i16 %p to i32
215   %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
216   %2 = tail call <4 x i32> @llvm.arm.mve.vcvta.predicated.v4i32.v4f32.v4i1(i32 1, <4 x i32> %inactive, <4 x float> %a, <4 x i1> %1)
217   ret <4 x i32> %2
220 define arm_aapcs_vfpcc <8 x i16> @test_vcvtmq_m_s16_f16(<8 x i16> %inactive, <8 x half> %a, i16 zeroext %p) {
221 ; CHECK-LABEL: test_vcvtmq_m_s16_f16:
222 ; CHECK:       @ %bb.0: @ %entry
223 ; CHECK-NEXT:    vmsr p0, r0
224 ; CHECK-NEXT:    vpst
225 ; CHECK-NEXT:    vcvtmt.s16.f16 q0, q1
226 ; CHECK-NEXT:    bx lr
227 entry:
228   %0 = zext i16 %p to i32
229   %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
230   %2 = tail call <8 x i16> @llvm.arm.mve.vcvtm.predicated.v8i16.v8f16.v8i1(i32 0, <8 x i16> %inactive, <8 x half> %a, <8 x i1> %1)
231   ret <8 x i16> %2
234 define arm_aapcs_vfpcc <4 x i32> @test_vcvtmq_m_s32_f32(<4 x i32> %inactive, <4 x float> %a, i16 zeroext %p) {
235 ; CHECK-LABEL: test_vcvtmq_m_s32_f32:
236 ; CHECK:       @ %bb.0: @ %entry
237 ; CHECK-NEXT:    vmsr p0, r0
238 ; CHECK-NEXT:    vpst
239 ; CHECK-NEXT:    vcvtmt.s32.f32 q0, q1
240 ; CHECK-NEXT:    bx lr
241 entry:
242   %0 = zext i16 %p to i32
243   %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
244   %2 = tail call <4 x i32> @llvm.arm.mve.vcvtm.predicated.v4i32.v4f32.v4i1(i32 0, <4 x i32> %inactive, <4 x float> %a, <4 x i1> %1)
245   ret <4 x i32> %2
248 define arm_aapcs_vfpcc <8 x i16> @test_vcvtmq_m_u16_f16(<8 x i16> %inactive, <8 x half> %a, i16 zeroext %p) {
249 ; CHECK-LABEL: test_vcvtmq_m_u16_f16:
250 ; CHECK:       @ %bb.0: @ %entry
251 ; CHECK-NEXT:    vmsr p0, r0
252 ; CHECK-NEXT:    vpst
253 ; CHECK-NEXT:    vcvtmt.u16.f16 q0, q1
254 ; CHECK-NEXT:    bx lr
255 entry:
256   %0 = zext i16 %p to i32
257   %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
258   %2 = tail call <8 x i16> @llvm.arm.mve.vcvtm.predicated.v8i16.v8f16.v8i1(i32 1, <8 x i16> %inactive, <8 x half> %a, <8 x i1> %1)
259   ret <8 x i16> %2
262 define arm_aapcs_vfpcc <4 x i32> @test_vcvtmq_m_u32_f32(<4 x i32> %inactive, <4 x float> %a, i16 zeroext %p) {
263 ; CHECK-LABEL: test_vcvtmq_m_u32_f32:
264 ; CHECK:       @ %bb.0: @ %entry
265 ; CHECK-NEXT:    vmsr p0, r0
266 ; CHECK-NEXT:    vpst
267 ; CHECK-NEXT:    vcvtmt.u32.f32 q0, q1
268 ; CHECK-NEXT:    bx lr
269 entry:
270   %0 = zext i16 %p to i32
271   %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
272   %2 = tail call <4 x i32> @llvm.arm.mve.vcvtm.predicated.v4i32.v4f32.v4i1(i32 1, <4 x i32> %inactive, <4 x float> %a, <4 x i1> %1)
273   ret <4 x i32> %2
276 define arm_aapcs_vfpcc <8 x i16> @test_vcvtnq_m_s16_f16(<8 x i16> %inactive, <8 x half> %a, i16 zeroext %p) {
277 ; CHECK-LABEL: test_vcvtnq_m_s16_f16:
278 ; CHECK:       @ %bb.0: @ %entry
279 ; CHECK-NEXT:    vmsr p0, r0
280 ; CHECK-NEXT:    vpst
281 ; CHECK-NEXT:    vcvtnt.s16.f16 q0, q1
282 ; CHECK-NEXT:    bx lr
283 entry:
284   %0 = zext i16 %p to i32
285   %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
286   %2 = tail call <8 x i16> @llvm.arm.mve.vcvtn.predicated.v8i16.v8f16.v8i1(i32 0, <8 x i16> %inactive, <8 x half> %a, <8 x i1> %1)
287   ret <8 x i16> %2
290 define arm_aapcs_vfpcc <4 x i32> @test_vcvtnq_m_s32_f32(<4 x i32> %inactive, <4 x float> %a, i16 zeroext %p) {
291 ; CHECK-LABEL: test_vcvtnq_m_s32_f32:
292 ; CHECK:       @ %bb.0: @ %entry
293 ; CHECK-NEXT:    vmsr p0, r0
294 ; CHECK-NEXT:    vpst
295 ; CHECK-NEXT:    vcvtnt.s32.f32 q0, q1
296 ; CHECK-NEXT:    bx lr
297 entry:
298   %0 = zext i16 %p to i32
299   %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
300   %2 = tail call <4 x i32> @llvm.arm.mve.vcvtn.predicated.v4i32.v4f32.v4i1(i32 0, <4 x i32> %inactive, <4 x float> %a, <4 x i1> %1)
301   ret <4 x i32> %2
304 define arm_aapcs_vfpcc <8 x i16> @test_vcvtnq_m_u16_f16(<8 x i16> %inactive, <8 x half> %a, i16 zeroext %p) {
305 ; CHECK-LABEL: test_vcvtnq_m_u16_f16:
306 ; CHECK:       @ %bb.0: @ %entry
307 ; CHECK-NEXT:    vmsr p0, r0
308 ; CHECK-NEXT:    vpst
309 ; CHECK-NEXT:    vcvtnt.u16.f16 q0, q1
310 ; CHECK-NEXT:    bx lr
311 entry:
312   %0 = zext i16 %p to i32
313   %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
314   %2 = tail call <8 x i16> @llvm.arm.mve.vcvtn.predicated.v8i16.v8f16.v8i1(i32 1, <8 x i16> %inactive, <8 x half> %a, <8 x i1> %1)
315   ret <8 x i16> %2
318 define arm_aapcs_vfpcc <4 x i32> @test_vcvtnq_m_u32_f32(<4 x i32> %inactive, <4 x float> %a, i16 zeroext %p) {
319 ; CHECK-LABEL: test_vcvtnq_m_u32_f32:
320 ; CHECK:       @ %bb.0: @ %entry
321 ; CHECK-NEXT:    vmsr p0, r0
322 ; CHECK-NEXT:    vpst
323 ; CHECK-NEXT:    vcvtnt.u32.f32 q0, q1
324 ; CHECK-NEXT:    bx lr
325 entry:
326   %0 = zext i16 %p to i32
327   %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
328   %2 = tail call <4 x i32> @llvm.arm.mve.vcvtn.predicated.v4i32.v4f32.v4i1(i32 1, <4 x i32> %inactive, <4 x float> %a, <4 x i1> %1)
329   ret <4 x i32> %2
332 define arm_aapcs_vfpcc <8 x i16> @test_vcvtpq_m_s16_f16(<8 x i16> %inactive, <8 x half> %a, i16 zeroext %p) {
333 ; CHECK-LABEL: test_vcvtpq_m_s16_f16:
334 ; CHECK:       @ %bb.0: @ %entry
335 ; CHECK-NEXT:    vmsr p0, r0
336 ; CHECK-NEXT:    vpst
337 ; CHECK-NEXT:    vcvtpt.s16.f16 q0, q1
338 ; CHECK-NEXT:    bx lr
339 entry:
340   %0 = zext i16 %p to i32
341   %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
342   %2 = tail call <8 x i16> @llvm.arm.mve.vcvtp.predicated.v8i16.v8f16.v8i1(i32 0, <8 x i16> %inactive, <8 x half> %a, <8 x i1> %1)
343   ret <8 x i16> %2
346 define arm_aapcs_vfpcc <4 x i32> @test_vcvtpq_m_s32_f32(<4 x i32> %inactive, <4 x float> %a, i16 zeroext %p) {
347 ; CHECK-LABEL: test_vcvtpq_m_s32_f32:
348 ; CHECK:       @ %bb.0: @ %entry
349 ; CHECK-NEXT:    vmsr p0, r0
350 ; CHECK-NEXT:    vpst
351 ; CHECK-NEXT:    vcvtpt.s32.f32 q0, q1
352 ; CHECK-NEXT:    bx lr
353 entry:
354   %0 = zext i16 %p to i32
355   %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
356   %2 = tail call <4 x i32> @llvm.arm.mve.vcvtp.predicated.v4i32.v4f32.v4i1(i32 0, <4 x i32> %inactive, <4 x float> %a, <4 x i1> %1)
357   ret <4 x i32> %2
360 define arm_aapcs_vfpcc <8 x i16> @test_vcvtpq_m_u16_f16(<8 x i16> %inactive, <8 x half> %a, i16 zeroext %p) {
361 ; CHECK-LABEL: test_vcvtpq_m_u16_f16:
362 ; CHECK:       @ %bb.0: @ %entry
363 ; CHECK-NEXT:    vmsr p0, r0
364 ; CHECK-NEXT:    vpst
365 ; CHECK-NEXT:    vcvtpt.u16.f16 q0, q1
366 ; CHECK-NEXT:    bx lr
367 entry:
368   %0 = zext i16 %p to i32
369   %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
370   %2 = tail call <8 x i16> @llvm.arm.mve.vcvtp.predicated.v8i16.v8f16.v8i1(i32 1, <8 x i16> %inactive, <8 x half> %a, <8 x i1> %1)
371   ret <8 x i16> %2
374 define arm_aapcs_vfpcc <4 x i32> @test_vcvtpq_m_u32_f32(<4 x i32> %inactive, <4 x float> %a, i16 zeroext %p) {
375 ; CHECK-LABEL: test_vcvtpq_m_u32_f32:
376 ; CHECK:       @ %bb.0: @ %entry
377 ; CHECK-NEXT:    vmsr p0, r0
378 ; CHECK-NEXT:    vpst
379 ; CHECK-NEXT:    vcvtpt.u32.f32 q0, q1
380 ; CHECK-NEXT:    bx lr
381 entry:
382   %0 = zext i16 %p to i32
383   %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
384   %2 = tail call <4 x i32> @llvm.arm.mve.vcvtp.predicated.v4i32.v4f32.v4i1(i32 1, <4 x i32> %inactive, <4 x float> %a, <4 x i1> %1)
385   ret <4 x i32> %2
388 define arm_aapcs_vfpcc <8 x i16> @test_vcvtaq_x_s16_f16(<8 x half> %a, i16 zeroext %p) {
389 ; CHECK-LABEL: test_vcvtaq_x_s16_f16:
390 ; CHECK:       @ %bb.0: @ %entry
391 ; CHECK-NEXT:    vmsr p0, r0
392 ; CHECK-NEXT:    vpst
393 ; CHECK-NEXT:    vcvtat.s16.f16 q0, q0
394 ; CHECK-NEXT:    bx lr
395 entry:
396   %0 = zext i16 %p to i32
397   %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
398   %2 = tail call <8 x i16> @llvm.arm.mve.vcvta.predicated.v8i16.v8f16.v8i1(i32 0, <8 x i16> undef, <8 x half> %a, <8 x i1> %1)
399   ret <8 x i16> %2
402 define arm_aapcs_vfpcc <4 x i32> @test_vcvtaq_x_s32_f32(<4 x float> %a, i16 zeroext %p) {
403 ; CHECK-LABEL: test_vcvtaq_x_s32_f32:
404 ; CHECK:       @ %bb.0: @ %entry
405 ; CHECK-NEXT:    vmsr p0, r0
406 ; CHECK-NEXT:    vpst
407 ; CHECK-NEXT:    vcvtat.s32.f32 q0, q0
408 ; CHECK-NEXT:    bx lr
409 entry:
410   %0 = zext i16 %p to i32
411   %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
412   %2 = tail call <4 x i32> @llvm.arm.mve.vcvta.predicated.v4i32.v4f32.v4i1(i32 0, <4 x i32> undef, <4 x float> %a, <4 x i1> %1)
413   ret <4 x i32> %2
416 define arm_aapcs_vfpcc <8 x i16> @test_vcvtaq_x_u16_f16(<8 x half> %a, i16 zeroext %p) {
417 ; CHECK-LABEL: test_vcvtaq_x_u16_f16:
418 ; CHECK:       @ %bb.0: @ %entry
419 ; CHECK-NEXT:    vmsr p0, r0
420 ; CHECK-NEXT:    vpst
421 ; CHECK-NEXT:    vcvtat.u16.f16 q0, q0
422 ; CHECK-NEXT:    bx lr
423 entry:
424   %0 = zext i16 %p to i32
425   %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
426   %2 = tail call <8 x i16> @llvm.arm.mve.vcvta.predicated.v8i16.v8f16.v8i1(i32 1, <8 x i16> undef, <8 x half> %a, <8 x i1> %1)
427   ret <8 x i16> %2
430 define arm_aapcs_vfpcc <4 x i32> @test_vcvtaq_x_u32_f32(<4 x float> %a, i16 zeroext %p) {
431 ; CHECK-LABEL: test_vcvtaq_x_u32_f32:
432 ; CHECK:       @ %bb.0: @ %entry
433 ; CHECK-NEXT:    vmsr p0, r0
434 ; CHECK-NEXT:    vpst
435 ; CHECK-NEXT:    vcvtat.u32.f32 q0, q0
436 ; CHECK-NEXT:    bx lr
437 entry:
438   %0 = zext i16 %p to i32
439   %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
440   %2 = tail call <4 x i32> @llvm.arm.mve.vcvta.predicated.v4i32.v4f32.v4i1(i32 1, <4 x i32> undef, <4 x float> %a, <4 x i1> %1)
441   ret <4 x i32> %2
444 define arm_aapcs_vfpcc <8 x i16> @test_vcvtmq_x_s16_f16(<8 x half> %a, i16 zeroext %p) {
445 ; CHECK-LABEL: test_vcvtmq_x_s16_f16:
446 ; CHECK:       @ %bb.0: @ %entry
447 ; CHECK-NEXT:    vmsr p0, r0
448 ; CHECK-NEXT:    vpst
449 ; CHECK-NEXT:    vcvtmt.s16.f16 q0, q0
450 ; CHECK-NEXT:    bx lr
451 entry:
452   %0 = zext i16 %p to i32
453   %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
454   %2 = tail call <8 x i16> @llvm.arm.mve.vcvtm.predicated.v8i16.v8f16.v8i1(i32 0, <8 x i16> undef, <8 x half> %a, <8 x i1> %1)
455   ret <8 x i16> %2
458 define arm_aapcs_vfpcc <4 x i32> @test_vcvtmq_x_s32_f32(<4 x float> %a, i16 zeroext %p) {
459 ; CHECK-LABEL: test_vcvtmq_x_s32_f32:
460 ; CHECK:       @ %bb.0: @ %entry
461 ; CHECK-NEXT:    vmsr p0, r0
462 ; CHECK-NEXT:    vpst
463 ; CHECK-NEXT:    vcvtmt.s32.f32 q0, q0
464 ; CHECK-NEXT:    bx lr
465 entry:
466   %0 = zext i16 %p to i32
467   %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
468   %2 = tail call <4 x i32> @llvm.arm.mve.vcvtm.predicated.v4i32.v4f32.v4i1(i32 0, <4 x i32> undef, <4 x float> %a, <4 x i1> %1)
469   ret <4 x i32> %2
472 define arm_aapcs_vfpcc <8 x i16> @test_vcvtmq_x_u16_f16(<8 x half> %a, i16 zeroext %p) {
473 ; CHECK-LABEL: test_vcvtmq_x_u16_f16:
474 ; CHECK:       @ %bb.0: @ %entry
475 ; CHECK-NEXT:    vmsr p0, r0
476 ; CHECK-NEXT:    vpst
477 ; CHECK-NEXT:    vcvtmt.u16.f16 q0, q0
478 ; CHECK-NEXT:    bx lr
479 entry:
480   %0 = zext i16 %p to i32
481   %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
482   %2 = tail call <8 x i16> @llvm.arm.mve.vcvtm.predicated.v8i16.v8f16.v8i1(i32 1, <8 x i16> undef, <8 x half> %a, <8 x i1> %1)
483   ret <8 x i16> %2
486 define arm_aapcs_vfpcc <4 x i32> @test_vcvtmq_x_u32_f32(<4 x float> %a, i16 zeroext %p) {
487 ; CHECK-LABEL: test_vcvtmq_x_u32_f32:
488 ; CHECK:       @ %bb.0: @ %entry
489 ; CHECK-NEXT:    vmsr p0, r0
490 ; CHECK-NEXT:    vpst
491 ; CHECK-NEXT:    vcvtmt.u32.f32 q0, q0
492 ; CHECK-NEXT:    bx lr
493 entry:
494   %0 = zext i16 %p to i32
495   %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
496   %2 = tail call <4 x i32> @llvm.arm.mve.vcvtm.predicated.v4i32.v4f32.v4i1(i32 1, <4 x i32> undef, <4 x float> %a, <4 x i1> %1)
497   ret <4 x i32> %2
500 define arm_aapcs_vfpcc <8 x i16> @test_vcvtnq_x_s16_f16(<8 x half> %a, i16 zeroext %p) {
501 ; CHECK-LABEL: test_vcvtnq_x_s16_f16:
502 ; CHECK:       @ %bb.0: @ %entry
503 ; CHECK-NEXT:    vmsr p0, r0
504 ; CHECK-NEXT:    vpst
505 ; CHECK-NEXT:    vcvtnt.s16.f16 q0, q0
506 ; CHECK-NEXT:    bx lr
507 entry:
508   %0 = zext i16 %p to i32
509   %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
510   %2 = tail call <8 x i16> @llvm.arm.mve.vcvtn.predicated.v8i16.v8f16.v8i1(i32 0, <8 x i16> undef, <8 x half> %a, <8 x i1> %1)
511   ret <8 x i16> %2
514 define arm_aapcs_vfpcc <4 x i32> @test_vcvtnq_x_s32_f32(<4 x float> %a, i16 zeroext %p) {
515 ; CHECK-LABEL: test_vcvtnq_x_s32_f32:
516 ; CHECK:       @ %bb.0: @ %entry
517 ; CHECK-NEXT:    vmsr p0, r0
518 ; CHECK-NEXT:    vpst
519 ; CHECK-NEXT:    vcvtnt.s32.f32 q0, q0
520 ; CHECK-NEXT:    bx lr
521 entry:
522   %0 = zext i16 %p to i32
523   %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
524   %2 = tail call <4 x i32> @llvm.arm.mve.vcvtn.predicated.v4i32.v4f32.v4i1(i32 0, <4 x i32> undef, <4 x float> %a, <4 x i1> %1)
525   ret <4 x i32> %2
528 define arm_aapcs_vfpcc <8 x i16> @test_vcvtnq_x_u16_f16(<8 x half> %a, i16 zeroext %p) {
529 ; CHECK-LABEL: test_vcvtnq_x_u16_f16:
530 ; CHECK:       @ %bb.0: @ %entry
531 ; CHECK-NEXT:    vmsr p0, r0
532 ; CHECK-NEXT:    vpst
533 ; CHECK-NEXT:    vcvtnt.u16.f16 q0, q0
534 ; CHECK-NEXT:    bx lr
535 entry:
536   %0 = zext i16 %p to i32
537   %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
538   %2 = tail call <8 x i16> @llvm.arm.mve.vcvtn.predicated.v8i16.v8f16.v8i1(i32 1, <8 x i16> undef, <8 x half> %a, <8 x i1> %1)
539   ret <8 x i16> %2
542 define arm_aapcs_vfpcc <4 x i32> @test_vcvtnq_x_u32_f32(<4 x float> %a, i16 zeroext %p) {
543 ; CHECK-LABEL: test_vcvtnq_x_u32_f32:
544 ; CHECK:       @ %bb.0: @ %entry
545 ; CHECK-NEXT:    vmsr p0, r0
546 ; CHECK-NEXT:    vpst
547 ; CHECK-NEXT:    vcvtnt.u32.f32 q0, q0
548 ; CHECK-NEXT:    bx lr
549 entry:
550   %0 = zext i16 %p to i32
551   %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
552   %2 = tail call <4 x i32> @llvm.arm.mve.vcvtn.predicated.v4i32.v4f32.v4i1(i32 1, <4 x i32> undef, <4 x float> %a, <4 x i1> %1)
553   ret <4 x i32> %2
556 define arm_aapcs_vfpcc <8 x i16> @test_vcvtpq_x_s16_f16(<8 x half> %a, i16 zeroext %p) {
557 ; CHECK-LABEL: test_vcvtpq_x_s16_f16:
558 ; CHECK:       @ %bb.0: @ %entry
559 ; CHECK-NEXT:    vmsr p0, r0
560 ; CHECK-NEXT:    vpst
561 ; CHECK-NEXT:    vcvtpt.s16.f16 q0, q0
562 ; CHECK-NEXT:    bx lr
563 entry:
564   %0 = zext i16 %p to i32
565   %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
566   %2 = tail call <8 x i16> @llvm.arm.mve.vcvtp.predicated.v8i16.v8f16.v8i1(i32 0, <8 x i16> undef, <8 x half> %a, <8 x i1> %1)
567   ret <8 x i16> %2
570 define arm_aapcs_vfpcc <4 x i32> @test_vcvtpq_x_s32_f32(<4 x float> %a, i16 zeroext %p) {
571 ; CHECK-LABEL: test_vcvtpq_x_s32_f32:
572 ; CHECK:       @ %bb.0: @ %entry
573 ; CHECK-NEXT:    vmsr p0, r0
574 ; CHECK-NEXT:    vpst
575 ; CHECK-NEXT:    vcvtpt.s32.f32 q0, q0
576 ; CHECK-NEXT:    bx lr
577 entry:
578   %0 = zext i16 %p to i32
579   %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
580   %2 = tail call <4 x i32> @llvm.arm.mve.vcvtp.predicated.v4i32.v4f32.v4i1(i32 0, <4 x i32> undef, <4 x float> %a, <4 x i1> %1)
581   ret <4 x i32> %2
584 define arm_aapcs_vfpcc <8 x i16> @test_vcvtpq_x_u16_f16(<8 x half> %a, i16 zeroext %p) {
585 ; CHECK-LABEL: test_vcvtpq_x_u16_f16:
586 ; CHECK:       @ %bb.0: @ %entry
587 ; CHECK-NEXT:    vmsr p0, r0
588 ; CHECK-NEXT:    vpst
589 ; CHECK-NEXT:    vcvtpt.u16.f16 q0, q0
590 ; CHECK-NEXT:    bx lr
591 entry:
592   %0 = zext i16 %p to i32
593   %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
594   %2 = tail call <8 x i16> @llvm.arm.mve.vcvtp.predicated.v8i16.v8f16.v8i1(i32 1, <8 x i16> undef, <8 x half> %a, <8 x i1> %1)
595   ret <8 x i16> %2
598 define arm_aapcs_vfpcc <4 x i32> @test_vcvtpq_x_u32_f32(<4 x float> %a, i16 zeroext %p) {
599 ; CHECK-LABEL: test_vcvtpq_x_u32_f32:
600 ; CHECK:       @ %bb.0: @ %entry
601 ; CHECK-NEXT:    vmsr p0, r0
602 ; CHECK-NEXT:    vpst
603 ; CHECK-NEXT:    vcvtpt.u32.f32 q0, q0
604 ; CHECK-NEXT:    bx lr
605 entry:
606   %0 = zext i16 %p to i32
607   %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
608   %2 = tail call <4 x i32> @llvm.arm.mve.vcvtp.predicated.v4i32.v4f32.v4i1(i32 1, <4 x i32> undef, <4 x float> %a, <4 x i1> %1)
609   ret <4 x i32> %2
612 declare <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32)
613 declare <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32)
615 declare <8 x i16> @llvm.arm.mve.vcvta.v8i16.v8f16(i32, <8 x half>)
616 declare <4 x i32> @llvm.arm.mve.vcvta.v4i32.v4f32(i32, <4 x float>)
617 declare <8 x i16> @llvm.arm.mve.vcvtm.v8i16.v8f16(i32, <8 x half>)
618 declare <4 x i32> @llvm.arm.mve.vcvtm.v4i32.v4f32(i32, <4 x float>)
619 declare <8 x i16> @llvm.arm.mve.vcvtn.v8i16.v8f16(i32, <8 x half>)
620 declare <4 x i32> @llvm.arm.mve.vcvtn.v4i32.v4f32(i32, <4 x float>)
621 declare <8 x i16> @llvm.arm.mve.vcvtp.v8i16.v8f16(i32, <8 x half>)
622 declare <4 x i32> @llvm.arm.mve.vcvtp.v4i32.v4f32(i32, <4 x float>)
624 declare <8 x i16> @llvm.arm.mve.vcvta.predicated.v8i16.v8f16.v8i1(i32, <8 x i16>, <8 x half>, <8 x i1>)
625 declare <4 x i32> @llvm.arm.mve.vcvta.predicated.v4i32.v4f32.v4i1(i32, <4 x i32>, <4 x float>, <4 x i1>)
626 declare <8 x i16> @llvm.arm.mve.vcvtm.predicated.v8i16.v8f16.v8i1(i32, <8 x i16>, <8 x half>, <8 x i1>)
627 declare <4 x i32> @llvm.arm.mve.vcvtm.predicated.v4i32.v4f32.v4i1(i32, <4 x i32>, <4 x float>, <4 x i1>)
628 declare <8 x i16> @llvm.arm.mve.vcvtn.predicated.v8i16.v8f16.v8i1(i32, <8 x i16>, <8 x half>, <8 x i1>)
629 declare <4 x i32> @llvm.arm.mve.vcvtn.predicated.v4i32.v4f32.v4i1(i32, <4 x i32>, <4 x float>, <4 x i1>)
630 declare <8 x i16> @llvm.arm.mve.vcvtp.predicated.v8i16.v8f16.v8i1(i32, <8 x i16>, <8 x half>, <8 x i1>)
631 declare <4 x i32> @llvm.arm.mve.vcvtp.predicated.v4i32.v4f32.v4i1(i32, <4 x i32>, <4 x float>, <4 x i1>)