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 half> @test_vld1q_f16(ptr %base) {
5 ; CHECK-LABEL: test_vld1q_f16:
6 ; CHECK: @ %bb.0: @ %entry
7 ; CHECK-NEXT: vldrh.u16 q0, [r0]
10 %0 = load <8 x half>, ptr %base, align 2
14 define arm_aapcs_vfpcc <4 x float> @test_vld1q_f32(ptr %base) {
15 ; CHECK-LABEL: test_vld1q_f32:
16 ; CHECK: @ %bb.0: @ %entry
17 ; CHECK-NEXT: vldrw.u32 q0, [r0]
20 %0 = load <4 x float>, ptr %base, align 4
24 define arm_aapcs_vfpcc <16 x i8> @test_vld1q_s8(ptr %base) {
25 ; CHECK-LABEL: test_vld1q_s8:
26 ; CHECK: @ %bb.0: @ %entry
27 ; CHECK-NEXT: vldrb.u8 q0, [r0]
30 %0 = load <16 x i8>, ptr %base, align 1
34 define arm_aapcs_vfpcc <8 x i16> @test_vld1q_s16(ptr %base) {
35 ; CHECK-LABEL: test_vld1q_s16:
36 ; CHECK: @ %bb.0: @ %entry
37 ; CHECK-NEXT: vldrh.u16 q0, [r0]
40 %0 = load <8 x i16>, ptr %base, align 2
44 define arm_aapcs_vfpcc <4 x i32> @test_vld1q_s32(ptr %base) {
45 ; CHECK-LABEL: test_vld1q_s32:
46 ; CHECK: @ %bb.0: @ %entry
47 ; CHECK-NEXT: vldrw.u32 q0, [r0]
50 %0 = load <4 x i32>, ptr %base, align 4
54 define arm_aapcs_vfpcc <16 x i8> @test_vld1q_u8(ptr %base) {
55 ; CHECK-LABEL: test_vld1q_u8:
56 ; CHECK: @ %bb.0: @ %entry
57 ; CHECK-NEXT: vldrb.u8 q0, [r0]
60 %0 = load <16 x i8>, ptr %base, align 1
64 define arm_aapcs_vfpcc <8 x i16> @test_vld1q_u16(ptr %base) {
65 ; CHECK-LABEL: test_vld1q_u16:
66 ; CHECK: @ %bb.0: @ %entry
67 ; CHECK-NEXT: vldrh.u16 q0, [r0]
70 %0 = load <8 x i16>, ptr %base, align 2
74 define arm_aapcs_vfpcc <4 x i32> @test_vld1q_u32(ptr %base) {
75 ; CHECK-LABEL: test_vld1q_u32:
76 ; CHECK: @ %bb.0: @ %entry
77 ; CHECK-NEXT: vldrw.u32 q0, [r0]
80 %0 = load <4 x i32>, ptr %base, align 4
84 define arm_aapcs_vfpcc <8 x half> @test_vld1q_z_f16(ptr %base, i16 zeroext %p) {
85 ; CHECK-LABEL: test_vld1q_z_f16:
86 ; CHECK: @ %bb.0: @ %entry
87 ; CHECK-NEXT: vmsr p0, r1
89 ; CHECK-NEXT: vldrht.u16 q0, [r0]
92 %0 = zext i16 %p to i32
93 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
94 %2 = call <8 x half> @llvm.masked.load.v8f16.p0(ptr %base, i32 2, <8 x i1> %1, <8 x half> zeroinitializer)
98 declare <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32)
100 declare <8 x half> @llvm.masked.load.v8f16.p0(ptr, i32 immarg, <8 x i1>, <8 x half>)
102 define arm_aapcs_vfpcc <4 x float> @test_vld1q_z_f32(ptr %base, i16 zeroext %p) {
103 ; CHECK-LABEL: test_vld1q_z_f32:
104 ; CHECK: @ %bb.0: @ %entry
105 ; CHECK-NEXT: vmsr p0, r1
107 ; CHECK-NEXT: vldrwt.u32 q0, [r0]
110 %0 = zext i16 %p to i32
111 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
112 %2 = call <4 x float> @llvm.masked.load.v4f32.p0(ptr %base, i32 4, <4 x i1> %1, <4 x float> zeroinitializer)
116 declare <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32)
118 declare <4 x float> @llvm.masked.load.v4f32.p0(ptr, i32 immarg, <4 x i1>, <4 x float>)
120 define arm_aapcs_vfpcc <16 x i8> @test_vld1q_z_s8(ptr %base, i16 zeroext %p) {
121 ; CHECK-LABEL: test_vld1q_z_s8:
122 ; CHECK: @ %bb.0: @ %entry
123 ; CHECK-NEXT: vmsr p0, r1
125 ; CHECK-NEXT: vldrbt.u8 q0, [r0]
128 %0 = zext i16 %p to i32
129 %1 = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
130 %2 = call <16 x i8> @llvm.masked.load.v16i8.p0(ptr %base, i32 1, <16 x i1> %1, <16 x i8> zeroinitializer)
134 declare <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32)
136 declare <16 x i8> @llvm.masked.load.v16i8.p0(ptr, i32 immarg, <16 x i1>, <16 x i8>)
138 define arm_aapcs_vfpcc <8 x i16> @test_vld1q_z_s16(ptr %base, i16 zeroext %p) {
139 ; CHECK-LABEL: test_vld1q_z_s16:
140 ; CHECK: @ %bb.0: @ %entry
141 ; CHECK-NEXT: vmsr p0, r1
143 ; CHECK-NEXT: vldrht.u16 q0, [r0]
146 %0 = zext i16 %p to i32
147 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
148 %2 = call <8 x i16> @llvm.masked.load.v8i16.p0(ptr %base, i32 2, <8 x i1> %1, <8 x i16> zeroinitializer)
152 declare <8 x i16> @llvm.masked.load.v8i16.p0(ptr, i32 immarg, <8 x i1>, <8 x i16>)
154 define arm_aapcs_vfpcc <4 x i32> @test_vld1q_z_s32(ptr %base, i16 zeroext %p) {
155 ; CHECK-LABEL: test_vld1q_z_s32:
156 ; CHECK: @ %bb.0: @ %entry
157 ; CHECK-NEXT: vmsr p0, r1
159 ; CHECK-NEXT: vldrwt.u32 q0, [r0]
162 %0 = zext i16 %p to i32
163 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
164 %2 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %base, i32 4, <4 x i1> %1, <4 x i32> zeroinitializer)
168 declare <4 x i32> @llvm.masked.load.v4i32.p0(ptr, i32 immarg, <4 x i1>, <4 x i32>)
170 define arm_aapcs_vfpcc <16 x i8> @test_vld1q_z_u8(ptr %base, i16 zeroext %p) {
171 ; CHECK-LABEL: test_vld1q_z_u8:
172 ; CHECK: @ %bb.0: @ %entry
173 ; CHECK-NEXT: vmsr p0, r1
175 ; CHECK-NEXT: vldrbt.u8 q0, [r0]
178 %0 = zext i16 %p to i32
179 %1 = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
180 %2 = call <16 x i8> @llvm.masked.load.v16i8.p0(ptr %base, i32 1, <16 x i1> %1, <16 x i8> zeroinitializer)
184 define arm_aapcs_vfpcc <8 x i16> @test_vld1q_z_u16(ptr %base, i16 zeroext %p) {
185 ; CHECK-LABEL: test_vld1q_z_u16:
186 ; CHECK: @ %bb.0: @ %entry
187 ; CHECK-NEXT: vmsr p0, r1
189 ; CHECK-NEXT: vldrht.u16 q0, [r0]
192 %0 = zext i16 %p to i32
193 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
194 %2 = call <8 x i16> @llvm.masked.load.v8i16.p0(ptr %base, i32 2, <8 x i1> %1, <8 x i16> zeroinitializer)
198 define arm_aapcs_vfpcc <4 x i32> @test_vld1q_z_u32(ptr %base, i16 zeroext %p) {
199 ; CHECK-LABEL: test_vld1q_z_u32:
200 ; CHECK: @ %bb.0: @ %entry
201 ; CHECK-NEXT: vmsr p0, r1
203 ; CHECK-NEXT: vldrwt.u32 q0, [r0]
206 %0 = zext i16 %p to i32
207 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
208 %2 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %base, i32 4, <4 x i1> %1, <4 x i32> zeroinitializer)
212 define arm_aapcs_vfpcc <16 x i8> @test_vldrbq_s8(ptr %base) {
213 ; CHECK-LABEL: test_vldrbq_s8:
214 ; CHECK: @ %bb.0: @ %entry
215 ; CHECK-NEXT: vldrb.u8 q0, [r0]
218 %0 = load <16 x i8>, ptr %base, align 1
222 define arm_aapcs_vfpcc <8 x i16> @test_vldrbq_s16(ptr %base) {
223 ; CHECK-LABEL: test_vldrbq_s16:
224 ; CHECK: @ %bb.0: @ %entry
225 ; CHECK-NEXT: vldrb.s16 q0, [r0]
228 %0 = load <8 x i8>, ptr %base, align 1
229 %1 = sext <8 x i8> %0 to <8 x i16>
233 define arm_aapcs_vfpcc <4 x i32> @test_vldrbq_s32(ptr %base) {
234 ; CHECK-LABEL: test_vldrbq_s32:
235 ; CHECK: @ %bb.0: @ %entry
236 ; CHECK-NEXT: vldrb.s32 q0, [r0]
239 %0 = load <4 x i8>, ptr %base, align 1
240 %1 = sext <4 x i8> %0 to <4 x i32>
244 define arm_aapcs_vfpcc <16 x i8> @test_vldrbq_u8(ptr %base) {
245 ; CHECK-LABEL: test_vldrbq_u8:
246 ; CHECK: @ %bb.0: @ %entry
247 ; CHECK-NEXT: vldrb.u8 q0, [r0]
250 %0 = load <16 x i8>, ptr %base, align 1
254 define arm_aapcs_vfpcc <8 x i16> @test_vldrbq_u16(ptr %base) {
255 ; CHECK-LABEL: test_vldrbq_u16:
256 ; CHECK: @ %bb.0: @ %entry
257 ; CHECK-NEXT: vldrb.u16 q0, [r0]
260 %0 = load <8 x i8>, ptr %base, align 1
261 %1 = zext <8 x i8> %0 to <8 x i16>
265 define arm_aapcs_vfpcc <4 x i32> @test_vldrbq_u32(ptr %base) {
266 ; CHECK-LABEL: test_vldrbq_u32:
267 ; CHECK: @ %bb.0: @ %entry
268 ; CHECK-NEXT: vldrb.u32 q0, [r0]
271 %0 = load <4 x i8>, ptr %base, align 1
272 %1 = zext <4 x i8> %0 to <4 x i32>
276 define arm_aapcs_vfpcc <16 x i8> @test_vldrbq_z_s8(ptr %base, i16 zeroext %p) {
277 ; CHECK-LABEL: test_vldrbq_z_s8:
278 ; CHECK: @ %bb.0: @ %entry
279 ; CHECK-NEXT: vmsr p0, r1
281 ; CHECK-NEXT: vldrbt.u8 q0, [r0]
284 %0 = zext i16 %p to i32
285 %1 = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
286 %2 = call <16 x i8> @llvm.masked.load.v16i8.p0(ptr %base, i32 1, <16 x i1> %1, <16 x i8> zeroinitializer)
290 define arm_aapcs_vfpcc <8 x i16> @test_vldrbq_z_s16(ptr %base, i16 zeroext %p) {
291 ; CHECK-LABEL: test_vldrbq_z_s16:
292 ; CHECK: @ %bb.0: @ %entry
293 ; CHECK-NEXT: vmsr p0, r1
295 ; CHECK-NEXT: vldrbt.s16 q0, [r0]
298 %0 = zext i16 %p to i32
299 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
300 %2 = call <8 x i8> @llvm.masked.load.v8i8.p0(ptr %base, i32 1, <8 x i1> %1, <8 x i8> zeroinitializer)
301 %3 = sext <8 x i8> %2 to <8 x i16>
305 declare <8 x i8> @llvm.masked.load.v8i8.p0(ptr, i32 immarg, <8 x i1>, <8 x i8>)
307 define arm_aapcs_vfpcc <4 x i32> @test_vldrbq_z_s32(ptr %base, i16 zeroext %p) {
308 ; CHECK-LABEL: test_vldrbq_z_s32:
309 ; CHECK: @ %bb.0: @ %entry
310 ; CHECK-NEXT: vmsr p0, r1
312 ; CHECK-NEXT: vldrbt.s32 q0, [r0]
315 %0 = zext i16 %p to i32
316 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
317 %2 = call <4 x i8> @llvm.masked.load.v4i8.p0(ptr %base, i32 1, <4 x i1> %1, <4 x i8> zeroinitializer)
318 %3 = sext <4 x i8> %2 to <4 x i32>
322 declare <4 x i8> @llvm.masked.load.v4i8.p0(ptr, i32 immarg, <4 x i1>, <4 x i8>)
324 define arm_aapcs_vfpcc <16 x i8> @test_vldrbq_z_u8(ptr %base, i16 zeroext %p) {
325 ; CHECK-LABEL: test_vldrbq_z_u8:
326 ; CHECK: @ %bb.0: @ %entry
327 ; CHECK-NEXT: vmsr p0, r1
329 ; CHECK-NEXT: vldrbt.u8 q0, [r0]
332 %0 = zext i16 %p to i32
333 %1 = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
334 %2 = call <16 x i8> @llvm.masked.load.v16i8.p0(ptr %base, i32 1, <16 x i1> %1, <16 x i8> zeroinitializer)
338 define arm_aapcs_vfpcc <8 x i16> @test_vldrbq_z_u16(ptr %base, i16 zeroext %p) {
339 ; CHECK-LABEL: test_vldrbq_z_u16:
340 ; CHECK: @ %bb.0: @ %entry
341 ; CHECK-NEXT: vmsr p0, r1
343 ; CHECK-NEXT: vldrbt.u16 q0, [r0]
346 %0 = zext i16 %p to i32
347 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
348 %2 = call <8 x i8> @llvm.masked.load.v8i8.p0(ptr %base, i32 1, <8 x i1> %1, <8 x i8> zeroinitializer)
349 %3 = zext <8 x i8> %2 to <8 x i16>
353 define arm_aapcs_vfpcc <4 x i32> @test_vldrbq_z_u32(ptr %base, i16 zeroext %p) {
354 ; CHECK-LABEL: test_vldrbq_z_u32:
355 ; CHECK: @ %bb.0: @ %entry
356 ; CHECK-NEXT: vmsr p0, r1
358 ; CHECK-NEXT: vldrbt.u32 q0, [r0]
361 %0 = zext i16 %p to i32
362 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
363 %2 = call <4 x i8> @llvm.masked.load.v4i8.p0(ptr %base, i32 1, <4 x i1> %1, <4 x i8> zeroinitializer)
364 %3 = zext <4 x i8> %2 to <4 x i32>
368 define arm_aapcs_vfpcc <8 x half> @test_vldrhq_f16(ptr %base) {
369 ; CHECK-LABEL: test_vldrhq_f16:
370 ; CHECK: @ %bb.0: @ %entry
371 ; CHECK-NEXT: vldrh.u16 q0, [r0]
374 %0 = load <8 x half>, ptr %base, align 2
378 define arm_aapcs_vfpcc <8 x i16> @test_vldrhq_s16(ptr %base) {
379 ; CHECK-LABEL: test_vldrhq_s16:
380 ; CHECK: @ %bb.0: @ %entry
381 ; CHECK-NEXT: vldrh.u16 q0, [r0]
384 %0 = load <8 x i16>, ptr %base, align 2
388 define arm_aapcs_vfpcc <4 x i32> @test_vldrhq_s32(ptr %base) {
389 ; CHECK-LABEL: test_vldrhq_s32:
390 ; CHECK: @ %bb.0: @ %entry
391 ; CHECK-NEXT: vldrh.s32 q0, [r0]
394 %0 = load <4 x i16>, ptr %base, align 2
395 %1 = sext <4 x i16> %0 to <4 x i32>
399 define arm_aapcs_vfpcc <8 x i16> @test_vldrhq_u16(ptr %base) {
400 ; CHECK-LABEL: test_vldrhq_u16:
401 ; CHECK: @ %bb.0: @ %entry
402 ; CHECK-NEXT: vldrh.u16 q0, [r0]
405 %0 = load <8 x i16>, ptr %base, align 2
409 define arm_aapcs_vfpcc <4 x i32> @test_vldrhq_u32(ptr %base) {
410 ; CHECK-LABEL: test_vldrhq_u32:
411 ; CHECK: @ %bb.0: @ %entry
412 ; CHECK-NEXT: vldrh.u32 q0, [r0]
415 %0 = load <4 x i16>, ptr %base, align 2
416 %1 = zext <4 x i16> %0 to <4 x i32>
420 define arm_aapcs_vfpcc <8 x half> @test_vldrhq_z_f16(ptr %base, i16 zeroext %p) {
421 ; CHECK-LABEL: test_vldrhq_z_f16:
422 ; CHECK: @ %bb.0: @ %entry
423 ; CHECK-NEXT: vmsr p0, r1
425 ; CHECK-NEXT: vldrht.u16 q0, [r0]
428 %0 = zext i16 %p to i32
429 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
430 %2 = call <8 x half> @llvm.masked.load.v8f16.p0(ptr %base, i32 2, <8 x i1> %1, <8 x half> zeroinitializer)
434 define arm_aapcs_vfpcc <8 x i16> @test_vldrhq_z_s16(ptr %base, i16 zeroext %p) {
435 ; CHECK-LABEL: test_vldrhq_z_s16:
436 ; CHECK: @ %bb.0: @ %entry
437 ; CHECK-NEXT: vmsr p0, r1
439 ; CHECK-NEXT: vldrht.u16 q0, [r0]
442 %0 = zext i16 %p to i32
443 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
444 %2 = call <8 x i16> @llvm.masked.load.v8i16.p0(ptr %base, i32 2, <8 x i1> %1, <8 x i16> zeroinitializer)
448 define arm_aapcs_vfpcc <4 x i32> @test_vldrhq_z_s32(ptr %base, i16 zeroext %p) {
449 ; CHECK-LABEL: test_vldrhq_z_s32:
450 ; CHECK: @ %bb.0: @ %entry
451 ; CHECK-NEXT: vmsr p0, r1
453 ; CHECK-NEXT: vldrht.s32 q0, [r0]
456 %0 = zext i16 %p to i32
457 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
458 %2 = call <4 x i16> @llvm.masked.load.v4i16.p0(ptr %base, i32 2, <4 x i1> %1, <4 x i16> zeroinitializer)
459 %3 = sext <4 x i16> %2 to <4 x i32>
463 declare <4 x i16> @llvm.masked.load.v4i16.p0(ptr, i32 immarg, <4 x i1>, <4 x i16>)
465 define arm_aapcs_vfpcc <8 x i16> @test_vldrhq_z_u16(ptr %base, i16 zeroext %p) {
466 ; CHECK-LABEL: test_vldrhq_z_u16:
467 ; CHECK: @ %bb.0: @ %entry
468 ; CHECK-NEXT: vmsr p0, r1
470 ; CHECK-NEXT: vldrht.u16 q0, [r0]
473 %0 = zext i16 %p to i32
474 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
475 %2 = call <8 x i16> @llvm.masked.load.v8i16.p0(ptr %base, i32 2, <8 x i1> %1, <8 x i16> zeroinitializer)
479 define arm_aapcs_vfpcc <4 x i32> @test_vldrhq_z_u32(ptr %base, i16 zeroext %p) {
480 ; CHECK-LABEL: test_vldrhq_z_u32:
481 ; CHECK: @ %bb.0: @ %entry
482 ; CHECK-NEXT: vmsr p0, r1
484 ; CHECK-NEXT: vldrht.u32 q0, [r0]
487 %0 = zext i16 %p to i32
488 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
489 %2 = call <4 x i16> @llvm.masked.load.v4i16.p0(ptr %base, i32 2, <4 x i1> %1, <4 x i16> zeroinitializer)
490 %3 = zext <4 x i16> %2 to <4 x i32>
494 define arm_aapcs_vfpcc <4 x float> @test_vldrwq_f32(ptr %base) {
495 ; CHECK-LABEL: test_vldrwq_f32:
496 ; CHECK: @ %bb.0: @ %entry
497 ; CHECK-NEXT: vldrw.u32 q0, [r0]
500 %0 = load <4 x float>, ptr %base, align 4
504 define arm_aapcs_vfpcc <4 x i32> @test_vldrwq_s32(ptr %base) {
505 ; CHECK-LABEL: test_vldrwq_s32:
506 ; CHECK: @ %bb.0: @ %entry
507 ; CHECK-NEXT: vldrw.u32 q0, [r0]
510 %0 = load <4 x i32>, ptr %base, align 4
514 define arm_aapcs_vfpcc <4 x i32> @test_vldrwq_u32(ptr %base) {
515 ; CHECK-LABEL: test_vldrwq_u32:
516 ; CHECK: @ %bb.0: @ %entry
517 ; CHECK-NEXT: vldrw.u32 q0, [r0]
520 %0 = load <4 x i32>, ptr %base, align 4
524 define arm_aapcs_vfpcc <4 x float> @test_vldrwq_z_f32(ptr %base, i16 zeroext %p) {
525 ; CHECK-LABEL: test_vldrwq_z_f32:
526 ; CHECK: @ %bb.0: @ %entry
527 ; CHECK-NEXT: vmsr p0, r1
529 ; CHECK-NEXT: vldrwt.u32 q0, [r0]
532 %0 = zext i16 %p to i32
533 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
534 %2 = call <4 x float> @llvm.masked.load.v4f32.p0(ptr %base, i32 4, <4 x i1> %1, <4 x float> zeroinitializer)
538 define arm_aapcs_vfpcc <4 x i32> @test_vldrwq_z_s32(ptr %base, i16 zeroext %p) {
539 ; CHECK-LABEL: test_vldrwq_z_s32:
540 ; CHECK: @ %bb.0: @ %entry
541 ; CHECK-NEXT: vmsr p0, r1
543 ; CHECK-NEXT: vldrwt.u32 q0, [r0]
546 %0 = zext i16 %p to i32
547 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
548 %2 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %base, i32 4, <4 x i1> %1, <4 x i32> zeroinitializer)
552 define arm_aapcs_vfpcc <4 x i32> @test_vldrwq_z_u32(ptr %base, i16 zeroext %p) {
553 ; CHECK-LABEL: test_vldrwq_z_u32:
554 ; CHECK: @ %bb.0: @ %entry
555 ; CHECK-NEXT: vmsr p0, r1
557 ; CHECK-NEXT: vldrwt.u32 q0, [r0]
560 %0 = zext i16 %p to i32
561 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
562 %2 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %base, i32 4, <4 x i1> %1, <4 x i32> zeroinitializer)
566 define arm_aapcs_vfpcc void @test_vst1q_f16(ptr %base, <8 x half> %value) {
567 ; CHECK-LABEL: test_vst1q_f16:
568 ; CHECK: @ %bb.0: @ %entry
569 ; CHECK-NEXT: vstrh.16 q0, [r0]
572 store <8 x half> %value, ptr %base, align 2
576 define arm_aapcs_vfpcc void @test_vst1q_f32(ptr %base, <4 x float> %value) {
577 ; CHECK-LABEL: test_vst1q_f32:
578 ; CHECK: @ %bb.0: @ %entry
579 ; CHECK-NEXT: vstrw.32 q0, [r0]
582 store <4 x float> %value, ptr %base, align 4
586 define arm_aapcs_vfpcc void @test_vst1q_s8(ptr %base, <16 x i8> %value) {
587 ; CHECK-LABEL: test_vst1q_s8:
588 ; CHECK: @ %bb.0: @ %entry
589 ; CHECK-NEXT: vstrb.8 q0, [r0]
592 store <16 x i8> %value, ptr %base, align 1
596 define arm_aapcs_vfpcc void @test_vst1q_s16(ptr %base, <8 x i16> %value) {
597 ; CHECK-LABEL: test_vst1q_s16:
598 ; CHECK: @ %bb.0: @ %entry
599 ; CHECK-NEXT: vstrh.16 q0, [r0]
602 store <8 x i16> %value, ptr %base, align 2
606 define arm_aapcs_vfpcc void @test_vst1q_s32(ptr %base, <4 x i32> %value) {
607 ; CHECK-LABEL: test_vst1q_s32:
608 ; CHECK: @ %bb.0: @ %entry
609 ; CHECK-NEXT: vstrw.32 q0, [r0]
612 store <4 x i32> %value, ptr %base, align 4
616 define arm_aapcs_vfpcc void @test_vst1q_u8(ptr %base, <16 x i8> %value) {
617 ; CHECK-LABEL: test_vst1q_u8:
618 ; CHECK: @ %bb.0: @ %entry
619 ; CHECK-NEXT: vstrb.8 q0, [r0]
622 store <16 x i8> %value, ptr %base, align 1
626 define arm_aapcs_vfpcc void @test_vst1q_u16(ptr %base, <8 x i16> %value) {
627 ; CHECK-LABEL: test_vst1q_u16:
628 ; CHECK: @ %bb.0: @ %entry
629 ; CHECK-NEXT: vstrh.16 q0, [r0]
632 store <8 x i16> %value, ptr %base, align 2
636 define arm_aapcs_vfpcc void @test_vst1q_u32(ptr %base, <4 x i32> %value) {
637 ; CHECK-LABEL: test_vst1q_u32:
638 ; CHECK: @ %bb.0: @ %entry
639 ; CHECK-NEXT: vstrw.32 q0, [r0]
642 store <4 x i32> %value, ptr %base, align 4
646 define arm_aapcs_vfpcc void @test_vst1q_p_f16(ptr %base, <8 x half> %value, i16 zeroext %p) {
647 ; CHECK-LABEL: test_vst1q_p_f16:
648 ; CHECK: @ %bb.0: @ %entry
649 ; CHECK-NEXT: vmsr p0, r1
651 ; CHECK-NEXT: vstrht.16 q0, [r0]
654 %0 = zext i16 %p to i32
655 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
656 call void @llvm.masked.store.v8f16.p0(<8 x half> %value, ptr %base, i32 2, <8 x i1> %1)
660 declare void @llvm.masked.store.v8f16.p0(<8 x half>, ptr, i32 immarg, <8 x i1>)
662 define arm_aapcs_vfpcc void @test_vst1q_p_f32(ptr %base, <4 x float> %value, i16 zeroext %p) {
663 ; CHECK-LABEL: test_vst1q_p_f32:
664 ; CHECK: @ %bb.0: @ %entry
665 ; CHECK-NEXT: vmsr p0, r1
667 ; CHECK-NEXT: vstrwt.32 q0, [r0]
670 %0 = zext i16 %p to i32
671 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
672 call void @llvm.masked.store.v4f32.p0(<4 x float> %value, ptr %base, i32 4, <4 x i1> %1)
676 declare void @llvm.masked.store.v4f32.p0(<4 x float>, ptr, i32 immarg, <4 x i1>)
678 define arm_aapcs_vfpcc void @test_vst1q_p_s8(ptr %base, <16 x i8> %value, i16 zeroext %p) {
679 ; CHECK-LABEL: test_vst1q_p_s8:
680 ; CHECK: @ %bb.0: @ %entry
681 ; CHECK-NEXT: vmsr p0, r1
683 ; CHECK-NEXT: vstrbt.8 q0, [r0]
686 %0 = zext i16 %p to i32
687 %1 = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
688 call void @llvm.masked.store.v16i8.p0(<16 x i8> %value, ptr %base, i32 1, <16 x i1> %1)
692 declare void @llvm.masked.store.v16i8.p0(<16 x i8>, ptr, i32 immarg, <16 x i1>)
694 define arm_aapcs_vfpcc void @test_vst1q_p_s16(ptr %base, <8 x i16> %value, i16 zeroext %p) {
695 ; CHECK-LABEL: test_vst1q_p_s16:
696 ; CHECK: @ %bb.0: @ %entry
697 ; CHECK-NEXT: vmsr p0, r1
699 ; CHECK-NEXT: vstrht.16 q0, [r0]
702 %0 = zext i16 %p to i32
703 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
704 call void @llvm.masked.store.v8i16.p0(<8 x i16> %value, ptr %base, i32 2, <8 x i1> %1)
708 declare void @llvm.masked.store.v8i16.p0(<8 x i16>, ptr, i32 immarg, <8 x i1>)
710 define arm_aapcs_vfpcc void @test_vst1q_p_s32(ptr %base, <4 x i32> %value, i16 zeroext %p) {
711 ; CHECK-LABEL: test_vst1q_p_s32:
712 ; CHECK: @ %bb.0: @ %entry
713 ; CHECK-NEXT: vmsr p0, r1
715 ; CHECK-NEXT: vstrwt.32 q0, [r0]
718 %0 = zext i16 %p to i32
719 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
720 call void @llvm.masked.store.v4i32.p0(<4 x i32> %value, ptr %base, i32 4, <4 x i1> %1)
724 declare void @llvm.masked.store.v4i32.p0(<4 x i32>, ptr, i32 immarg, <4 x i1>)
726 define arm_aapcs_vfpcc void @test_vst1q_p_u8(ptr %base, <16 x i8> %value, i16 zeroext %p) {
727 ; CHECK-LABEL: test_vst1q_p_u8:
728 ; CHECK: @ %bb.0: @ %entry
729 ; CHECK-NEXT: vmsr p0, r1
731 ; CHECK-NEXT: vstrbt.8 q0, [r0]
734 %0 = zext i16 %p to i32
735 %1 = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
736 call void @llvm.masked.store.v16i8.p0(<16 x i8> %value, ptr %base, i32 1, <16 x i1> %1)
740 define arm_aapcs_vfpcc void @test_vst1q_p_u16(ptr %base, <8 x i16> %value, i16 zeroext %p) {
741 ; CHECK-LABEL: test_vst1q_p_u16:
742 ; CHECK: @ %bb.0: @ %entry
743 ; CHECK-NEXT: vmsr p0, r1
745 ; CHECK-NEXT: vstrht.16 q0, [r0]
748 %0 = zext i16 %p to i32
749 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
750 call void @llvm.masked.store.v8i16.p0(<8 x i16> %value, ptr %base, i32 2, <8 x i1> %1)
754 define arm_aapcs_vfpcc void @test_vst1q_p_u32(ptr %base, <4 x i32> %value, i16 zeroext %p) {
755 ; CHECK-LABEL: test_vst1q_p_u32:
756 ; CHECK: @ %bb.0: @ %entry
757 ; CHECK-NEXT: vmsr p0, r1
759 ; CHECK-NEXT: vstrwt.32 q0, [r0]
762 %0 = zext i16 %p to i32
763 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
764 call void @llvm.masked.store.v4i32.p0(<4 x i32> %value, ptr %base, i32 4, <4 x i1> %1)
768 define arm_aapcs_vfpcc void @test_vstrbq_s8(ptr %base, <16 x i8> %value) {
769 ; CHECK-LABEL: test_vstrbq_s8:
770 ; CHECK: @ %bb.0: @ %entry
771 ; CHECK-NEXT: vstrb.8 q0, [r0]
774 store <16 x i8> %value, ptr %base, align 1
778 define arm_aapcs_vfpcc void @test_vstrbq_s16(ptr %base, <8 x i16> %value) {
779 ; CHECK-LABEL: test_vstrbq_s16:
780 ; CHECK: @ %bb.0: @ %entry
781 ; CHECK-NEXT: vstrb.16 q0, [r0]
784 %0 = trunc <8 x i16> %value to <8 x i8>
785 store <8 x i8> %0, ptr %base, align 1
789 define arm_aapcs_vfpcc void @test_vstrbq_s32(ptr %base, <4 x i32> %value) {
790 ; CHECK-LABEL: test_vstrbq_s32:
791 ; CHECK: @ %bb.0: @ %entry
792 ; CHECK-NEXT: vstrb.32 q0, [r0]
795 %0 = trunc <4 x i32> %value to <4 x i8>
796 store <4 x i8> %0, ptr %base, align 1
800 define arm_aapcs_vfpcc void @test_vstrbq_u8(ptr %base, <16 x i8> %value) {
801 ; CHECK-LABEL: test_vstrbq_u8:
802 ; CHECK: @ %bb.0: @ %entry
803 ; CHECK-NEXT: vstrb.8 q0, [r0]
806 store <16 x i8> %value, ptr %base, align 1
810 define arm_aapcs_vfpcc void @test_vstrbq_u16(ptr %base, <8 x i16> %value) {
811 ; CHECK-LABEL: test_vstrbq_u16:
812 ; CHECK: @ %bb.0: @ %entry
813 ; CHECK-NEXT: vstrb.16 q0, [r0]
816 %0 = trunc <8 x i16> %value to <8 x i8>
817 store <8 x i8> %0, ptr %base, align 1
821 define arm_aapcs_vfpcc void @test_vstrbq_u32(ptr %base, <4 x i32> %value) {
822 ; CHECK-LABEL: test_vstrbq_u32:
823 ; CHECK: @ %bb.0: @ %entry
824 ; CHECK-NEXT: vstrb.32 q0, [r0]
827 %0 = trunc <4 x i32> %value to <4 x i8>
828 store <4 x i8> %0, ptr %base, align 1
832 define arm_aapcs_vfpcc void @test_vstrbq_p_s8(ptr %base, <16 x i8> %value, i16 zeroext %p) {
833 ; CHECK-LABEL: test_vstrbq_p_s8:
834 ; CHECK: @ %bb.0: @ %entry
835 ; CHECK-NEXT: vmsr p0, r1
837 ; CHECK-NEXT: vstrbt.8 q0, [r0]
840 %0 = zext i16 %p to i32
841 %1 = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
842 call void @llvm.masked.store.v16i8.p0(<16 x i8> %value, ptr %base, i32 1, <16 x i1> %1)
846 define arm_aapcs_vfpcc void @test_vstrbq_p_s16(ptr %base, <8 x i16> %value, i16 zeroext %p) {
847 ; CHECK-LABEL: test_vstrbq_p_s16:
848 ; CHECK: @ %bb.0: @ %entry
849 ; CHECK-NEXT: vmsr p0, r1
851 ; CHECK-NEXT: vstrbt.16 q0, [r0]
854 %0 = trunc <8 x i16> %value to <8 x i8>
855 %1 = zext i16 %p to i32
856 %2 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %1)
857 call void @llvm.masked.store.v8i8.p0(<8 x i8> %0, ptr %base, i32 1, <8 x i1> %2)
861 declare void @llvm.masked.store.v8i8.p0(<8 x i8>, ptr, i32 immarg, <8 x i1>)
863 define arm_aapcs_vfpcc void @test_vstrbq_p_s32(ptr %base, <4 x i32> %value, i16 zeroext %p) {
864 ; CHECK-LABEL: test_vstrbq_p_s32:
865 ; CHECK: @ %bb.0: @ %entry
866 ; CHECK-NEXT: vmsr p0, r1
868 ; CHECK-NEXT: vstrbt.32 q0, [r0]
871 %0 = trunc <4 x i32> %value to <4 x i8>
872 %1 = zext i16 %p to i32
873 %2 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %1)
874 call void @llvm.masked.store.v4i8.p0(<4 x i8> %0, ptr %base, i32 1, <4 x i1> %2)
878 declare void @llvm.masked.store.v4i8.p0(<4 x i8>, ptr, i32 immarg, <4 x i1>)
880 define arm_aapcs_vfpcc void @test_vstrbq_p_u8(ptr %base, <16 x i8> %value, i16 zeroext %p) {
881 ; CHECK-LABEL: test_vstrbq_p_u8:
882 ; CHECK: @ %bb.0: @ %entry
883 ; CHECK-NEXT: vmsr p0, r1
885 ; CHECK-NEXT: vstrbt.8 q0, [r0]
888 %0 = zext i16 %p to i32
889 %1 = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
890 call void @llvm.masked.store.v16i8.p0(<16 x i8> %value, ptr %base, i32 1, <16 x i1> %1)
894 define arm_aapcs_vfpcc void @test_vstrbq_p_u16(ptr %base, <8 x i16> %value, i16 zeroext %p) {
895 ; CHECK-LABEL: test_vstrbq_p_u16:
896 ; CHECK: @ %bb.0: @ %entry
897 ; CHECK-NEXT: vmsr p0, r1
899 ; CHECK-NEXT: vstrbt.16 q0, [r0]
902 %0 = trunc <8 x i16> %value to <8 x i8>
903 %1 = zext i16 %p to i32
904 %2 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %1)
905 call void @llvm.masked.store.v8i8.p0(<8 x i8> %0, ptr %base, i32 1, <8 x i1> %2)
909 define arm_aapcs_vfpcc void @test_vstrbq_p_u32(ptr %base, <4 x i32> %value, i16 zeroext %p) {
910 ; CHECK-LABEL: test_vstrbq_p_u32:
911 ; CHECK: @ %bb.0: @ %entry
912 ; CHECK-NEXT: vmsr p0, r1
914 ; CHECK-NEXT: vstrbt.32 q0, [r0]
917 %0 = trunc <4 x i32> %value to <4 x i8>
918 %1 = zext i16 %p to i32
919 %2 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %1)
920 call void @llvm.masked.store.v4i8.p0(<4 x i8> %0, ptr %base, i32 1, <4 x i1> %2)
924 define arm_aapcs_vfpcc void @test_vstrhq_f16(ptr %base, <8 x half> %value) {
925 ; CHECK-LABEL: test_vstrhq_f16:
926 ; CHECK: @ %bb.0: @ %entry
927 ; CHECK-NEXT: vstrh.16 q0, [r0]
930 store <8 x half> %value, ptr %base, align 2
934 define arm_aapcs_vfpcc void @test_vstrhq_s16(ptr %base, <8 x i16> %value) {
935 ; CHECK-LABEL: test_vstrhq_s16:
936 ; CHECK: @ %bb.0: @ %entry
937 ; CHECK-NEXT: vstrh.16 q0, [r0]
940 store <8 x i16> %value, ptr %base, align 2
944 define arm_aapcs_vfpcc void @test_vstrhq_s32(ptr %base, <4 x i32> %value) {
945 ; CHECK-LABEL: test_vstrhq_s32:
946 ; CHECK: @ %bb.0: @ %entry
947 ; CHECK-NEXT: vstrh.32 q0, [r0]
950 %0 = trunc <4 x i32> %value to <4 x i16>
951 store <4 x i16> %0, ptr %base, align 2
955 define arm_aapcs_vfpcc void @test_vstrhq_u16(ptr %base, <8 x i16> %value) {
956 ; CHECK-LABEL: test_vstrhq_u16:
957 ; CHECK: @ %bb.0: @ %entry
958 ; CHECK-NEXT: vstrh.16 q0, [r0]
961 store <8 x i16> %value, ptr %base, align 2
965 define arm_aapcs_vfpcc void @test_vstrhq_u32(ptr %base, <4 x i32> %value) {
966 ; CHECK-LABEL: test_vstrhq_u32:
967 ; CHECK: @ %bb.0: @ %entry
968 ; CHECK-NEXT: vstrh.32 q0, [r0]
971 %0 = trunc <4 x i32> %value to <4 x i16>
972 store <4 x i16> %0, ptr %base, align 2
976 define arm_aapcs_vfpcc void @test_vstrhq_p_f16(ptr %base, <8 x half> %value, i16 zeroext %p) {
977 ; CHECK-LABEL: test_vstrhq_p_f16:
978 ; CHECK: @ %bb.0: @ %entry
979 ; CHECK-NEXT: vmsr p0, r1
981 ; CHECK-NEXT: vstrht.16 q0, [r0]
984 %0 = zext i16 %p to i32
985 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
986 call void @llvm.masked.store.v8f16.p0(<8 x half> %value, ptr %base, i32 2, <8 x i1> %1)
990 define arm_aapcs_vfpcc void @test_vstrhq_p_s16(ptr %base, <8 x i16> %value, i16 zeroext %p) {
991 ; CHECK-LABEL: test_vstrhq_p_s16:
992 ; CHECK: @ %bb.0: @ %entry
993 ; CHECK-NEXT: vmsr p0, r1
995 ; CHECK-NEXT: vstrht.16 q0, [r0]
998 %0 = zext i16 %p to i32
999 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
1000 call void @llvm.masked.store.v8i16.p0(<8 x i16> %value, ptr %base, i32 2, <8 x i1> %1)
1004 define arm_aapcs_vfpcc void @test_vstrhq_p_s32(ptr %base, <4 x i32> %value, i16 zeroext %p) {
1005 ; CHECK-LABEL: test_vstrhq_p_s32:
1006 ; CHECK: @ %bb.0: @ %entry
1007 ; CHECK-NEXT: vmsr p0, r1
1009 ; CHECK-NEXT: vstrht.32 q0, [r0]
1012 %0 = trunc <4 x i32> %value to <4 x i16>
1013 %1 = zext i16 %p to i32
1014 %2 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %1)
1015 call void @llvm.masked.store.v4i16.p0(<4 x i16> %0, ptr %base, i32 2, <4 x i1> %2)
1019 declare void @llvm.masked.store.v4i16.p0(<4 x i16>, ptr, i32 immarg, <4 x i1>)
1021 define arm_aapcs_vfpcc void @test_vstrhq_p_u16(ptr %base, <8 x i16> %value, i16 zeroext %p) {
1022 ; CHECK-LABEL: test_vstrhq_p_u16:
1023 ; CHECK: @ %bb.0: @ %entry
1024 ; CHECK-NEXT: vmsr p0, r1
1026 ; CHECK-NEXT: vstrht.16 q0, [r0]
1029 %0 = zext i16 %p to i32
1030 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
1031 call void @llvm.masked.store.v8i16.p0(<8 x i16> %value, ptr %base, i32 2, <8 x i1> %1)
1035 define arm_aapcs_vfpcc void @test_vstrhq_p_u32(ptr %base, <4 x i32> %value, i16 zeroext %p) {
1036 ; CHECK-LABEL: test_vstrhq_p_u32:
1037 ; CHECK: @ %bb.0: @ %entry
1038 ; CHECK-NEXT: vmsr p0, r1
1040 ; CHECK-NEXT: vstrht.32 q0, [r0]
1043 %0 = trunc <4 x i32> %value to <4 x i16>
1044 %1 = zext i16 %p to i32
1045 %2 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %1)
1046 call void @llvm.masked.store.v4i16.p0(<4 x i16> %0, ptr %base, i32 2, <4 x i1> %2)
1050 define arm_aapcs_vfpcc void @test_vstrwq_f32(ptr %base, <4 x float> %value) {
1051 ; CHECK-LABEL: test_vstrwq_f32:
1052 ; CHECK: @ %bb.0: @ %entry
1053 ; CHECK-NEXT: vstrw.32 q0, [r0]
1056 store <4 x float> %value, ptr %base, align 4
1060 define arm_aapcs_vfpcc void @test_vstrwq_s32(ptr %base, <4 x i32> %value) {
1061 ; CHECK-LABEL: test_vstrwq_s32:
1062 ; CHECK: @ %bb.0: @ %entry
1063 ; CHECK-NEXT: vstrw.32 q0, [r0]
1066 store <4 x i32> %value, ptr %base, align 4
1070 define arm_aapcs_vfpcc void @test_vstrwq_u32(ptr %base, <4 x i32> %value) {
1071 ; CHECK-LABEL: test_vstrwq_u32:
1072 ; CHECK: @ %bb.0: @ %entry
1073 ; CHECK-NEXT: vstrw.32 q0, [r0]
1076 store <4 x i32> %value, ptr %base, align 4
1080 define arm_aapcs_vfpcc void @test_vstrwq_p_f32(ptr %base, <4 x float> %value, i16 zeroext %p) {
1081 ; CHECK-LABEL: test_vstrwq_p_f32:
1082 ; CHECK: @ %bb.0: @ %entry
1083 ; CHECK-NEXT: vmsr p0, r1
1085 ; CHECK-NEXT: vstrwt.32 q0, [r0]
1088 %0 = zext i16 %p to i32
1089 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
1090 call void @llvm.masked.store.v4f32.p0(<4 x float> %value, ptr %base, i32 4, <4 x i1> %1)
1094 define arm_aapcs_vfpcc void @test_vstrwq_p_s32(ptr %base, <4 x i32> %value, i16 zeroext %p) {
1095 ; CHECK-LABEL: test_vstrwq_p_s32:
1096 ; CHECK: @ %bb.0: @ %entry
1097 ; CHECK-NEXT: vmsr p0, r1
1099 ; CHECK-NEXT: vstrwt.32 q0, [r0]
1102 %0 = zext i16 %p to i32
1103 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
1104 call void @llvm.masked.store.v4i32.p0(<4 x i32> %value, ptr %base, i32 4, <4 x i1> %1)
1108 define arm_aapcs_vfpcc void @test_vstrwq_p_u32(ptr %base, <4 x i32> %value, i16 zeroext %p) {
1109 ; CHECK-LABEL: test_vstrwq_p_u32:
1110 ; CHECK: @ %bb.0: @ %entry
1111 ; CHECK-NEXT: vmsr p0, r1
1113 ; CHECK-NEXT: vstrwt.32 q0, [r0]
1116 %0 = zext i16 %p to i32
1117 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
1118 call void @llvm.masked.store.v4i32.p0(<4 x i32> %value, ptr %base, i32 4, <4 x i1> %1)