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
10 %0 = tail call <8 x i16> @llvm.arm.mve.vcvta.v8i16.v8f16(i32 0, <8 x half> %a)
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
20 %0 = tail call <4 x i32> @llvm.arm.mve.vcvta.v4i32.v4f32(i32 0, <4 x float> %a)
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
30 %0 = tail call <8 x i16> @llvm.arm.mve.vcvta.v8i16.v8f16(i32 1, <8 x half> %a)
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
40 %0 = tail call <4 x i32> @llvm.arm.mve.vcvta.v4i32.v4f32(i32 1, <4 x float> %a)
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
50 %0 = tail call <8 x i16> @llvm.arm.mve.vcvtm.v8i16.v8f16(i32 0, <8 x half> %a)
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
60 %0 = tail call <4 x i32> @llvm.arm.mve.vcvtm.v4i32.v4f32(i32 0, <4 x float> %a)
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
70 %0 = tail call <8 x i16> @llvm.arm.mve.vcvtm.v8i16.v8f16(i32 1, <8 x half> %a)
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
80 %0 = tail call <4 x i32> @llvm.arm.mve.vcvtm.v4i32.v4f32(i32 1, <4 x float> %a)
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
90 %0 = tail call <8 x i16> @llvm.arm.mve.vcvtn.v8i16.v8f16(i32 0, <8 x half> %a)
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
100 %0 = tail call <4 x i32> @llvm.arm.mve.vcvtn.v4i32.v4f32(i32 0, <4 x float> %a)
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
110 %0 = tail call <8 x i16> @llvm.arm.mve.vcvtn.v8i16.v8f16(i32 1, <8 x half> %a)
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
120 %0 = tail call <4 x i32> @llvm.arm.mve.vcvtn.v4i32.v4f32(i32 1, <4 x float> %a)
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
130 %0 = tail call <8 x i16> @llvm.arm.mve.vcvtp.v8i16.v8f16(i32 0, <8 x half> %a)
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
140 %0 = tail call <4 x i32> @llvm.arm.mve.vcvtp.v4i32.v4f32(i32 0, <4 x float> %a)
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
150 %0 = tail call <8 x i16> @llvm.arm.mve.vcvtp.v8i16.v8f16(i32 1, <8 x half> %a)
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
160 %0 = tail call <4 x i32> @llvm.arm.mve.vcvtp.v4i32.v4f32(i32 1, <4 x float> %a)
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
169 ; CHECK-NEXT: vcvtat.s16.f16 q0, q1
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)
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
183 ; CHECK-NEXT: vcvtat.s32.f32 q0, q1
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)
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
197 ; CHECK-NEXT: vcvtat.u16.f16 q0, q1
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)
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
211 ; CHECK-NEXT: vcvtat.u32.f32 q0, q1
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)
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
225 ; CHECK-NEXT: vcvtmt.s16.f16 q0, q1
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)
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
239 ; CHECK-NEXT: vcvtmt.s32.f32 q0, q1
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)
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
253 ; CHECK-NEXT: vcvtmt.u16.f16 q0, q1
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)
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
267 ; CHECK-NEXT: vcvtmt.u32.f32 q0, q1
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)
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
281 ; CHECK-NEXT: vcvtnt.s16.f16 q0, q1
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)
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
295 ; CHECK-NEXT: vcvtnt.s32.f32 q0, q1
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)
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
309 ; CHECK-NEXT: vcvtnt.u16.f16 q0, q1
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)
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
323 ; CHECK-NEXT: vcvtnt.u32.f32 q0, q1
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)
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
337 ; CHECK-NEXT: vcvtpt.s16.f16 q0, q1
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)
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
351 ; CHECK-NEXT: vcvtpt.s32.f32 q0, q1
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)
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
365 ; CHECK-NEXT: vcvtpt.u16.f16 q0, q1
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)
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
379 ; CHECK-NEXT: vcvtpt.u32.f32 q0, q1
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)
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
393 ; CHECK-NEXT: vcvtat.s16.f16 q0, q0
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)
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
407 ; CHECK-NEXT: vcvtat.s32.f32 q0, q0
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)
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
421 ; CHECK-NEXT: vcvtat.u16.f16 q0, q0
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)
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
435 ; CHECK-NEXT: vcvtat.u32.f32 q0, q0
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)
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
449 ; CHECK-NEXT: vcvtmt.s16.f16 q0, q0
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)
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
463 ; CHECK-NEXT: vcvtmt.s32.f32 q0, q0
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)
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
477 ; CHECK-NEXT: vcvtmt.u16.f16 q0, q0
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)
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
491 ; CHECK-NEXT: vcvtmt.u32.f32 q0, q0
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)
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
505 ; CHECK-NEXT: vcvtnt.s16.f16 q0, q0
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)
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
519 ; CHECK-NEXT: vcvtnt.s32.f32 q0, q0
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)
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
533 ; CHECK-NEXT: vcvtnt.u16.f16 q0, q0
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)
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
547 ; CHECK-NEXT: vcvtnt.u32.f32 q0, q0
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)
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
561 ; CHECK-NEXT: vcvtpt.s16.f16 q0, q0
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)
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
575 ; CHECK-NEXT: vcvtpt.s32.f32 q0, q0
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)
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
589 ; CHECK-NEXT: vcvtpt.u16.f16 q0, q0
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)
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
603 ; CHECK-NEXT: vcvtpt.u32.f32 q0, q0
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)
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>)