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 <16 x i8> @test_vshrnbq_n_s16(<16 x i8> %a, <8 x i16> %b) {
5 ; CHECK-LABEL: test_vshrnbq_n_s16:
6 ; CHECK: @ %bb.0: @ %entry
7 ; CHECK-NEXT: vshrnb.i16 q0, q1, #3
10 %0 = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> %a, <8 x i16> %b, i32 3, i32 0, i32 0, i32 0, i32 0, i32 0)
14 define arm_aapcs_vfpcc <8 x i16> @test_vshrnbq_n_s32(<8 x i16> %a, <4 x i32> %b) {
15 ; CHECK-LABEL: test_vshrnbq_n_s32:
16 ; CHECK: @ %bb.0: @ %entry
17 ; CHECK-NEXT: vshrnb.i32 q0, q1, #9
20 %0 = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> %a, <4 x i32> %b, i32 9, i32 0, i32 0, i32 0, i32 0, i32 0)
24 define arm_aapcs_vfpcc <16 x i8> @test_vshrnbq_n_u16(<16 x i8> %a, <8 x i16> %b) {
25 ; CHECK-LABEL: test_vshrnbq_n_u16:
26 ; CHECK: @ %bb.0: @ %entry
27 ; CHECK-NEXT: vshrnb.i16 q0, q1, #1
30 %0 = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> %a, <8 x i16> %b, i32 1, i32 0, i32 0, i32 1, i32 1, i32 0)
34 define arm_aapcs_vfpcc <8 x i16> @test_vshrnbq_n_u32(<8 x i16> %a, <4 x i32> %b) {
35 ; CHECK-LABEL: test_vshrnbq_n_u32:
36 ; CHECK: @ %bb.0: @ %entry
37 ; CHECK-NEXT: vshrnb.i32 q0, q1, #3
40 %0 = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> %a, <4 x i32> %b, i32 3, i32 0, i32 0, i32 1, i32 1, i32 0)
44 define arm_aapcs_vfpcc <16 x i8> @test_vshrntq_n_s16(<16 x i8> %a, <8 x i16> %b) {
45 ; CHECK-LABEL: test_vshrntq_n_s16:
46 ; CHECK: @ %bb.0: @ %entry
47 ; CHECK-NEXT: vshrnt.i16 q0, q1, #1
50 %0 = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> %a, <8 x i16> %b, i32 1, i32 0, i32 0, i32 0, i32 0, i32 1)
54 define arm_aapcs_vfpcc <8 x i16> @test_vshrntq_n_s32(<8 x i16> %a, <4 x i32> %b) {
55 ; CHECK-LABEL: test_vshrntq_n_s32:
56 ; CHECK: @ %bb.0: @ %entry
57 ; CHECK-NEXT: vshrnt.i32 q0, q1, #10
60 %0 = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> %a, <4 x i32> %b, i32 10, i32 0, i32 0, i32 0, i32 0, i32 1)
64 define arm_aapcs_vfpcc <16 x i8> @test_vshrntq_n_u16(<16 x i8> %a, <8 x i16> %b) {
65 ; CHECK-LABEL: test_vshrntq_n_u16:
66 ; CHECK: @ %bb.0: @ %entry
67 ; CHECK-NEXT: vshrnt.i16 q0, q1, #6
70 %0 = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> %a, <8 x i16> %b, i32 6, i32 0, i32 0, i32 1, i32 1, i32 1)
74 define arm_aapcs_vfpcc <8 x i16> @test_vshrntq_n_u32(<8 x i16> %a, <4 x i32> %b) {
75 ; CHECK-LABEL: test_vshrntq_n_u32:
76 ; CHECK: @ %bb.0: @ %entry
77 ; CHECK-NEXT: vshrnt.i32 q0, q1, #10
80 %0 = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> %a, <4 x i32> %b, i32 10, i32 0, i32 0, i32 1, i32 1, i32 1)
84 define arm_aapcs_vfpcc <16 x i8> @test_vshrnbq_m_n_s16(<16 x i8> %a, <8 x i16> %b, i16 zeroext %p) {
85 ; CHECK-LABEL: test_vshrnbq_m_n_s16:
86 ; CHECK: @ %bb.0: @ %entry
87 ; CHECK-NEXT: vmsr p0, r0
89 ; CHECK-NEXT: vshrnbt.i16 q0, q1, #4
92 %0 = zext i16 %p to i32
93 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
94 %2 = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> %a, <8 x i16> %b, i32 4, i32 0, i32 0, i32 0, i32 0, i32 0, <8 x i1> %1)
98 define arm_aapcs_vfpcc <8 x i16> @test_vshrnbq_m_n_s32(<8 x i16> %a, <4 x i32> %b, i16 zeroext %p) {
99 ; CHECK-LABEL: test_vshrnbq_m_n_s32:
100 ; CHECK: @ %bb.0: @ %entry
101 ; CHECK-NEXT: vmsr p0, r0
103 ; CHECK-NEXT: vshrnbt.i32 q0, q1, #13
106 %0 = zext i16 %p to i32
107 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
108 %2 = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> %a, <4 x i32> %b, i32 13, i32 0, i32 0, i32 0, i32 0, i32 0, <4 x i1> %1)
112 define arm_aapcs_vfpcc <16 x i8> @test_vshrnbq_m_n_u16(<16 x i8> %a, <8 x i16> %b, i16 zeroext %p) {
113 ; CHECK-LABEL: test_vshrnbq_m_n_u16:
114 ; CHECK: @ %bb.0: @ %entry
115 ; CHECK-NEXT: vmsr p0, r0
117 ; CHECK-NEXT: vshrnbt.i16 q0, q1, #7
120 %0 = zext i16 %p to i32
121 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
122 %2 = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> %a, <8 x i16> %b, i32 7, i32 0, i32 0, i32 1, i32 1, i32 0, <8 x i1> %1)
126 define arm_aapcs_vfpcc <8 x i16> @test_vshrnbq_m_n_u32(<8 x i16> %a, <4 x i32> %b, i16 zeroext %p) {
127 ; CHECK-LABEL: test_vshrnbq_m_n_u32:
128 ; CHECK: @ %bb.0: @ %entry
129 ; CHECK-NEXT: vmsr p0, r0
131 ; CHECK-NEXT: vshrnbt.i32 q0, q1, #15
134 %0 = zext i16 %p to i32
135 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
136 %2 = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> %a, <4 x i32> %b, i32 15, i32 0, i32 0, i32 1, i32 1, i32 0, <4 x i1> %1)
140 define arm_aapcs_vfpcc <16 x i8> @test_vshrntq_m_n_s16(<16 x i8> %a, <8 x i16> %b, i16 zeroext %p) {
141 ; CHECK-LABEL: test_vshrntq_m_n_s16:
142 ; CHECK: @ %bb.0: @ %entry
143 ; CHECK-NEXT: vmsr p0, r0
145 ; CHECK-NEXT: vshrntt.i16 q0, q1, #6
148 %0 = zext i16 %p to i32
149 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
150 %2 = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> %a, <8 x i16> %b, i32 6, i32 0, i32 0, i32 0, i32 0, i32 1, <8 x i1> %1)
154 define arm_aapcs_vfpcc <8 x i16> @test_vshrntq_m_n_s32(<8 x i16> %a, <4 x i32> %b, i16 zeroext %p) {
155 ; CHECK-LABEL: test_vshrntq_m_n_s32:
156 ; CHECK: @ %bb.0: @ %entry
157 ; CHECK-NEXT: vmsr p0, r0
159 ; CHECK-NEXT: vshrntt.i32 q0, q1, #13
162 %0 = zext i16 %p to i32
163 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
164 %2 = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> %a, <4 x i32> %b, i32 13, i32 0, i32 0, i32 0, i32 0, i32 1, <4 x i1> %1)
168 define arm_aapcs_vfpcc <16 x i8> @test_vshrntq_m_n_u16(<16 x i8> %a, <8 x i16> %b, i16 zeroext %p) {
169 ; CHECK-LABEL: test_vshrntq_m_n_u16:
170 ; CHECK: @ %bb.0: @ %entry
171 ; CHECK-NEXT: vmsr p0, r0
173 ; CHECK-NEXT: vshrntt.i16 q0, q1, #1
176 %0 = zext i16 %p to i32
177 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
178 %2 = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> %a, <8 x i16> %b, i32 1, i32 0, i32 0, i32 1, i32 1, i32 1, <8 x i1> %1)
182 define arm_aapcs_vfpcc <8 x i16> @test_vshrntq_m_n_u32(<8 x i16> %a, <4 x i32> %b, i16 zeroext %p) {
183 ; CHECK-LABEL: test_vshrntq_m_n_u32:
184 ; CHECK: @ %bb.0: @ %entry
185 ; CHECK-NEXT: vmsr p0, r0
187 ; CHECK-NEXT: vshrntt.i32 q0, q1, #10
190 %0 = zext i16 %p to i32
191 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
192 %2 = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> %a, <4 x i32> %b, i32 10, i32 0, i32 0, i32 1, i32 1, i32 1, <4 x i1> %1)
196 define arm_aapcs_vfpcc <16 x i8> @test_vrshrnbq_n_s16(<16 x i8> %a, <8 x i16> %b) {
197 ; CHECK-LABEL: test_vrshrnbq_n_s16:
198 ; CHECK: @ %bb.0: @ %entry
199 ; CHECK-NEXT: vrshrnb.i16 q0, q1, #5
202 %0 = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> %a, <8 x i16> %b, i32 5, i32 0, i32 1, i32 0, i32 0, i32 0)
206 define arm_aapcs_vfpcc <8 x i16> @test_vrshrnbq_n_s32(<8 x i16> %a, <4 x i32> %b) {
207 ; CHECK-LABEL: test_vrshrnbq_n_s32:
208 ; CHECK: @ %bb.0: @ %entry
209 ; CHECK-NEXT: vrshrnb.i32 q0, q1, #10
212 %0 = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> %a, <4 x i32> %b, i32 10, i32 0, i32 1, i32 0, i32 0, i32 0)
216 define arm_aapcs_vfpcc <16 x i8> @test_vrshrnbq_n_u16(<16 x i8> %a, <8 x i16> %b) {
217 ; CHECK-LABEL: test_vrshrnbq_n_u16:
218 ; CHECK: @ %bb.0: @ %entry
219 ; CHECK-NEXT: vrshrnb.i16 q0, q1, #2
222 %0 = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> %a, <8 x i16> %b, i32 2, i32 0, i32 1, i32 1, i32 1, i32 0)
226 define arm_aapcs_vfpcc <8 x i16> @test_vrshrnbq_n_u32(<8 x i16> %a, <4 x i32> %b) {
227 ; CHECK-LABEL: test_vrshrnbq_n_u32:
228 ; CHECK: @ %bb.0: @ %entry
229 ; CHECK-NEXT: vrshrnb.i32 q0, q1, #12
232 %0 = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> %a, <4 x i32> %b, i32 12, i32 0, i32 1, i32 1, i32 1, i32 0)
236 define arm_aapcs_vfpcc <16 x i8> @test_vrshrntq_n_s16(<16 x i8> %a, <8 x i16> %b) {
237 ; CHECK-LABEL: test_vrshrntq_n_s16:
238 ; CHECK: @ %bb.0: @ %entry
239 ; CHECK-NEXT: vrshrnt.i16 q0, q1, #4
242 %0 = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> %a, <8 x i16> %b, i32 4, i32 0, i32 1, i32 0, i32 0, i32 1)
246 define arm_aapcs_vfpcc <8 x i16> @test_vrshrntq_n_s32(<8 x i16> %a, <4 x i32> %b) {
247 ; CHECK-LABEL: test_vrshrntq_n_s32:
248 ; CHECK: @ %bb.0: @ %entry
249 ; CHECK-NEXT: vrshrnt.i32 q0, q1, #11
252 %0 = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> %a, <4 x i32> %b, i32 11, i32 0, i32 1, i32 0, i32 0, i32 1)
256 define arm_aapcs_vfpcc <16 x i8> @test_vrshrntq_n_u16(<16 x i8> %a, <8 x i16> %b) {
257 ; CHECK-LABEL: test_vrshrntq_n_u16:
258 ; CHECK: @ %bb.0: @ %entry
259 ; CHECK-NEXT: vrshrnt.i16 q0, q1, #1
262 %0 = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> %a, <8 x i16> %b, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1)
266 define arm_aapcs_vfpcc <8 x i16> @test_vrshrntq_n_u32(<8 x i16> %a, <4 x i32> %b) {
267 ; CHECK-LABEL: test_vrshrntq_n_u32:
268 ; CHECK: @ %bb.0: @ %entry
269 ; CHECK-NEXT: vrshrnt.i32 q0, q1, #6
272 %0 = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> %a, <4 x i32> %b, i32 6, i32 0, i32 1, i32 1, i32 1, i32 1)
276 define arm_aapcs_vfpcc <16 x i8> @test_vrshrnbq_m_n_s16(<16 x i8> %a, <8 x i16> %b, i16 zeroext %p) {
277 ; CHECK-LABEL: test_vrshrnbq_m_n_s16:
278 ; CHECK: @ %bb.0: @ %entry
279 ; CHECK-NEXT: vmsr p0, r0
281 ; CHECK-NEXT: vrshrnbt.i16 q0, q1, #1
284 %0 = zext i16 %p to i32
285 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
286 %2 = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> %a, <8 x i16> %b, i32 1, i32 0, i32 1, i32 0, i32 0, i32 0, <8 x i1> %1)
290 define arm_aapcs_vfpcc <8 x i16> @test_vrshrnbq_m_n_s32(<8 x i16> %a, <4 x i32> %b, i16 zeroext %p) {
291 ; CHECK-LABEL: test_vrshrnbq_m_n_s32:
292 ; CHECK: @ %bb.0: @ %entry
293 ; CHECK-NEXT: vmsr p0, r0
295 ; CHECK-NEXT: vrshrnbt.i32 q0, q1, #14
298 %0 = zext i16 %p to i32
299 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
300 %2 = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> %a, <4 x i32> %b, i32 14, i32 0, i32 1, i32 0, i32 0, i32 0, <4 x i1> %1)
304 define arm_aapcs_vfpcc <16 x i8> @test_vrshrnbq_m_n_u16(<16 x i8> %a, <8 x i16> %b, i16 zeroext %p) {
305 ; CHECK-LABEL: test_vrshrnbq_m_n_u16:
306 ; CHECK: @ %bb.0: @ %entry
307 ; CHECK-NEXT: vmsr p0, r0
309 ; CHECK-NEXT: vrshrnbt.i16 q0, q1, #2
312 %0 = zext i16 %p to i32
313 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
314 %2 = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> %a, <8 x i16> %b, i32 2, i32 0, i32 1, i32 1, i32 1, i32 0, <8 x i1> %1)
318 define arm_aapcs_vfpcc <8 x i16> @test_vrshrnbq_m_n_u32(<8 x i16> %a, <4 x i32> %b, i16 zeroext %p) {
319 ; CHECK-LABEL: test_vrshrnbq_m_n_u32:
320 ; CHECK: @ %bb.0: @ %entry
321 ; CHECK-NEXT: vmsr p0, r0
323 ; CHECK-NEXT: vrshrnbt.i32 q0, q1, #12
326 %0 = zext i16 %p to i32
327 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
328 %2 = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> %a, <4 x i32> %b, i32 12, i32 0, i32 1, i32 1, i32 1, i32 0, <4 x i1> %1)
332 define arm_aapcs_vfpcc <16 x i8> @test_vrshrntq_m_n_s16(<16 x i8> %a, <8 x i16> %b, i16 zeroext %p) {
333 ; CHECK-LABEL: test_vrshrntq_m_n_s16:
334 ; CHECK: @ %bb.0: @ %entry
335 ; CHECK-NEXT: vmsr p0, r0
337 ; CHECK-NEXT: vrshrntt.i16 q0, q1, #4
340 %0 = zext i16 %p to i32
341 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
342 %2 = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> %a, <8 x i16> %b, i32 4, i32 0, i32 1, i32 0, i32 0, i32 1, <8 x i1> %1)
346 define arm_aapcs_vfpcc <8 x i16> @test_vrshrntq_m_n_s32(<8 x i16> %a, <4 x i32> %b, i16 zeroext %p) {
347 ; CHECK-LABEL: test_vrshrntq_m_n_s32:
348 ; CHECK: @ %bb.0: @ %entry
349 ; CHECK-NEXT: vmsr p0, r0
351 ; CHECK-NEXT: vrshrntt.i32 q0, q1, #6
354 %0 = zext i16 %p to i32
355 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
356 %2 = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> %a, <4 x i32> %b, i32 6, i32 0, i32 1, i32 0, i32 0, i32 1, <4 x i1> %1)
360 define arm_aapcs_vfpcc <16 x i8> @test_vrshrntq_m_n_u16(<16 x i8> %a, <8 x i16> %b, i16 zeroext %p) {
361 ; CHECK-LABEL: test_vrshrntq_m_n_u16:
362 ; CHECK: @ %bb.0: @ %entry
363 ; CHECK-NEXT: vmsr p0, r0
365 ; CHECK-NEXT: vrshrntt.i16 q0, q1, #6
368 %0 = zext i16 %p to i32
369 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
370 %2 = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> %a, <8 x i16> %b, i32 6, i32 0, i32 1, i32 1, i32 1, i32 1, <8 x i1> %1)
374 define arm_aapcs_vfpcc <8 x i16> @test_vrshrntq_m_n_u32(<8 x i16> %a, <4 x i32> %b, i16 zeroext %p) {
375 ; CHECK-LABEL: test_vrshrntq_m_n_u32:
376 ; CHECK: @ %bb.0: @ %entry
377 ; CHECK-NEXT: vmsr p0, r0
379 ; CHECK-NEXT: vrshrntt.i32 q0, q1, #10
382 %0 = zext i16 %p to i32
383 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
384 %2 = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> %a, <4 x i32> %b, i32 10, i32 0, i32 1, i32 1, i32 1, i32 1, <4 x i1> %1)
388 define arm_aapcs_vfpcc <16 x i8> @test_vqshrnbq_n_s16(<16 x i8> %a, <8 x i16> %b) {
389 ; CHECK-LABEL: test_vqshrnbq_n_s16:
390 ; CHECK: @ %bb.0: @ %entry
391 ; CHECK-NEXT: vqshrnb.s16 q0, q1, #7
394 %0 = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> %a, <8 x i16> %b, i32 7, i32 1, i32 0, i32 0, i32 0, i32 0)
398 define arm_aapcs_vfpcc <8 x i16> @test_vqshrnbq_n_s32(<8 x i16> %a, <4 x i32> %b) {
399 ; CHECK-LABEL: test_vqshrnbq_n_s32:
400 ; CHECK: @ %bb.0: @ %entry
401 ; CHECK-NEXT: vqshrnb.s32 q0, q1, #15
404 %0 = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> %a, <4 x i32> %b, i32 15, i32 1, i32 0, i32 0, i32 0, i32 0)
408 define arm_aapcs_vfpcc <16 x i8> @test_vqshrnbq_n_u16(<16 x i8> %a, <8 x i16> %b) {
409 ; CHECK-LABEL: test_vqshrnbq_n_u16:
410 ; CHECK: @ %bb.0: @ %entry
411 ; CHECK-NEXT: vqshrnb.u16 q0, q1, #3
414 %0 = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> %a, <8 x i16> %b, i32 3, i32 1, i32 0, i32 1, i32 1, i32 0)
418 define arm_aapcs_vfpcc <8 x i16> @test_vqshrnbq_n_u32(<8 x i16> %a, <4 x i32> %b) {
419 ; CHECK-LABEL: test_vqshrnbq_n_u32:
420 ; CHECK: @ %bb.0: @ %entry
421 ; CHECK-NEXT: vqshrnb.u32 q0, q1, #3
424 %0 = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> %a, <4 x i32> %b, i32 3, i32 1, i32 0, i32 1, i32 1, i32 0)
428 define arm_aapcs_vfpcc <16 x i8> @test_vqshrntq_n_s16(<16 x i8> %a, <8 x i16> %b) {
429 ; CHECK-LABEL: test_vqshrntq_n_s16:
430 ; CHECK: @ %bb.0: @ %entry
431 ; CHECK-NEXT: vqshrnt.s16 q0, q1, #5
434 %0 = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> %a, <8 x i16> %b, i32 5, i32 1, i32 0, i32 0, i32 0, i32 1)
438 define arm_aapcs_vfpcc <8 x i16> @test_vqshrntq_n_s32(<8 x i16> %a, <4 x i32> %b) {
439 ; CHECK-LABEL: test_vqshrntq_n_s32:
440 ; CHECK: @ %bb.0: @ %entry
441 ; CHECK-NEXT: vqshrnt.s32 q0, q1, #6
444 %0 = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> %a, <4 x i32> %b, i32 6, i32 1, i32 0, i32 0, i32 0, i32 1)
448 define arm_aapcs_vfpcc <16 x i8> @test_vqshrntq_n_u16(<16 x i8> %a, <8 x i16> %b) {
449 ; CHECK-LABEL: test_vqshrntq_n_u16:
450 ; CHECK: @ %bb.0: @ %entry
451 ; CHECK-NEXT: vqshrnt.u16 q0, q1, #1
454 %0 = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> %a, <8 x i16> %b, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1)
458 define arm_aapcs_vfpcc <8 x i16> @test_vqshrntq_n_u32(<8 x i16> %a, <4 x i32> %b) {
459 ; CHECK-LABEL: test_vqshrntq_n_u32:
460 ; CHECK: @ %bb.0: @ %entry
461 ; CHECK-NEXT: vqshrnt.u32 q0, q1, #15
464 %0 = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> %a, <4 x i32> %b, i32 15, i32 1, i32 0, i32 1, i32 1, i32 1)
468 define arm_aapcs_vfpcc <16 x i8> @test_vqshrnbq_m_n_s16(<16 x i8> %a, <8 x i16> %b, i16 zeroext %p) {
469 ; CHECK-LABEL: test_vqshrnbq_m_n_s16:
470 ; CHECK: @ %bb.0: @ %entry
471 ; CHECK-NEXT: vmsr p0, r0
473 ; CHECK-NEXT: vqshrnbt.s16 q0, q1, #7
476 %0 = zext i16 %p to i32
477 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
478 %2 = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> %a, <8 x i16> %b, i32 7, i32 1, i32 0, i32 0, i32 0, i32 0, <8 x i1> %1)
482 define arm_aapcs_vfpcc <8 x i16> @test_vqshrnbq_m_n_s32(<8 x i16> %a, <4 x i32> %b, i16 zeroext %p) {
483 ; CHECK-LABEL: test_vqshrnbq_m_n_s32:
484 ; CHECK: @ %bb.0: @ %entry
485 ; CHECK-NEXT: vmsr p0, r0
487 ; CHECK-NEXT: vqshrnbt.s32 q0, q1, #1
490 %0 = zext i16 %p to i32
491 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
492 %2 = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> %a, <4 x i32> %b, i32 1, i32 1, i32 0, i32 0, i32 0, i32 0, <4 x i1> %1)
496 define arm_aapcs_vfpcc <16 x i8> @test_vqshrnbq_m_n_u16(<16 x i8> %a, <8 x i16> %b, i16 zeroext %p) {
497 ; CHECK-LABEL: test_vqshrnbq_m_n_u16:
498 ; CHECK: @ %bb.0: @ %entry
499 ; CHECK-NEXT: vmsr p0, r0
501 ; CHECK-NEXT: vqshrnbt.u16 q0, q1, #1
504 %0 = zext i16 %p to i32
505 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
506 %2 = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> %a, <8 x i16> %b, i32 1, i32 1, i32 0, i32 1, i32 1, i32 0, <8 x i1> %1)
510 define arm_aapcs_vfpcc <8 x i16> @test_vqshrnbq_m_n_u32(<8 x i16> %a, <4 x i32> %b, i16 zeroext %p) {
511 ; CHECK-LABEL: test_vqshrnbq_m_n_u32:
512 ; CHECK: @ %bb.0: @ %entry
513 ; CHECK-NEXT: vmsr p0, r0
515 ; CHECK-NEXT: vqshrnbt.u32 q0, q1, #8
518 %0 = zext i16 %p to i32
519 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
520 %2 = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> %a, <4 x i32> %b, i32 8, i32 1, i32 0, i32 1, i32 1, i32 0, <4 x i1> %1)
524 define arm_aapcs_vfpcc <16 x i8> @test_vqshrntq_m_n_s16(<16 x i8> %a, <8 x i16> %b, i16 zeroext %p) {
525 ; CHECK-LABEL: test_vqshrntq_m_n_s16:
526 ; CHECK: @ %bb.0: @ %entry
527 ; CHECK-NEXT: vmsr p0, r0
529 ; CHECK-NEXT: vqshrntt.s16 q0, q1, #1
532 %0 = zext i16 %p to i32
533 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
534 %2 = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> %a, <8 x i16> %b, i32 1, i32 1, i32 0, i32 0, i32 0, i32 1, <8 x i1> %1)
538 define arm_aapcs_vfpcc <8 x i16> @test_vqshrntq_m_n_s32(<8 x i16> %a, <4 x i32> %b, i16 zeroext %p) {
539 ; CHECK-LABEL: test_vqshrntq_m_n_s32:
540 ; CHECK: @ %bb.0: @ %entry
541 ; CHECK-NEXT: vmsr p0, r0
543 ; CHECK-NEXT: vqshrntt.s32 q0, q1, #11
546 %0 = zext i16 %p to i32
547 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
548 %2 = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> %a, <4 x i32> %b, i32 11, i32 1, i32 0, i32 0, i32 0, i32 1, <4 x i1> %1)
552 define arm_aapcs_vfpcc <16 x i8> @test_vqshrntq_m_n_u16(<16 x i8> %a, <8 x i16> %b, i16 zeroext %p) {
553 ; CHECK-LABEL: test_vqshrntq_m_n_u16:
554 ; CHECK: @ %bb.0: @ %entry
555 ; CHECK-NEXT: vmsr p0, r0
557 ; CHECK-NEXT: vqshrntt.u16 q0, q1, #3
560 %0 = zext i16 %p to i32
561 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
562 %2 = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> %a, <8 x i16> %b, i32 3, i32 1, i32 0, i32 1, i32 1, i32 1, <8 x i1> %1)
566 define arm_aapcs_vfpcc <8 x i16> @test_vqshrntq_m_n_u32(<8 x i16> %a, <4 x i32> %b, i16 zeroext %p) {
567 ; CHECK-LABEL: test_vqshrntq_m_n_u32:
568 ; CHECK: @ %bb.0: @ %entry
569 ; CHECK-NEXT: vmsr p0, r0
571 ; CHECK-NEXT: vqshrntt.u32 q0, q1, #1
574 %0 = zext i16 %p to i32
575 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
576 %2 = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> %a, <4 x i32> %b, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, <4 x i1> %1)
580 define arm_aapcs_vfpcc <16 x i8> @test_vqshrunbq_n_s16(<16 x i8> %a, <8 x i16> %b) {
581 ; CHECK-LABEL: test_vqshrunbq_n_s16:
582 ; CHECK: @ %bb.0: @ %entry
583 ; CHECK-NEXT: vqshrunb.s16 q0, q1, #5
586 %0 = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> %a, <8 x i16> %b, i32 5, i32 1, i32 0, i32 1, i32 0, i32 0)
590 define arm_aapcs_vfpcc <8 x i16> @test_vqshrunbq_n_s32(<8 x i16> %a, <4 x i32> %b) {
591 ; CHECK-LABEL: test_vqshrunbq_n_s32:
592 ; CHECK: @ %bb.0: @ %entry
593 ; CHECK-NEXT: vqshrunb.s32 q0, q1, #13
596 %0 = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> %a, <4 x i32> %b, i32 13, i32 1, i32 0, i32 1, i32 0, i32 0)
600 define arm_aapcs_vfpcc <16 x i8> @test_vqshruntq_n_s16(<16 x i8> %a, <8 x i16> %b) {
601 ; CHECK-LABEL: test_vqshruntq_n_s16:
602 ; CHECK: @ %bb.0: @ %entry
603 ; CHECK-NEXT: vqshrunt.s16 q0, q1, #2
606 %0 = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> %a, <8 x i16> %b, i32 2, i32 1, i32 0, i32 1, i32 0, i32 1)
610 define arm_aapcs_vfpcc <8 x i16> @test_vqshruntq_n_s32(<8 x i16> %a, <4 x i32> %b) {
611 ; CHECK-LABEL: test_vqshruntq_n_s32:
612 ; CHECK: @ %bb.0: @ %entry
613 ; CHECK-NEXT: vqshrunt.s32 q0, q1, #7
616 %0 = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> %a, <4 x i32> %b, i32 7, i32 1, i32 0, i32 1, i32 0, i32 1)
620 define arm_aapcs_vfpcc <16 x i8> @test_vqshrunbq_m_n_s16(<16 x i8> %a, <8 x i16> %b, i16 zeroext %p) {
621 ; CHECK-LABEL: test_vqshrunbq_m_n_s16:
622 ; CHECK: @ %bb.0: @ %entry
623 ; CHECK-NEXT: vmsr p0, r0
625 ; CHECK-NEXT: vqshrunbt.s16 q0, q1, #7
628 %0 = zext i16 %p to i32
629 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
630 %2 = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> %a, <8 x i16> %b, i32 7, i32 1, i32 0, i32 1, i32 0, i32 0, <8 x i1> %1)
634 define arm_aapcs_vfpcc <8 x i16> @test_vqshrunbq_m_n_s32(<8 x i16> %a, <4 x i32> %b, i16 zeroext %p) {
635 ; CHECK-LABEL: test_vqshrunbq_m_n_s32:
636 ; CHECK: @ %bb.0: @ %entry
637 ; CHECK-NEXT: vmsr p0, r0
639 ; CHECK-NEXT: vqshrunbt.s32 q0, q1, #7
642 %0 = zext i16 %p to i32
643 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
644 %2 = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> %a, <4 x i32> %b, i32 7, i32 1, i32 0, i32 1, i32 0, i32 0, <4 x i1> %1)
648 define arm_aapcs_vfpcc <16 x i8> @test_vqshruntq_m_n_s16(<16 x i8> %a, <8 x i16> %b, i16 zeroext %p) {
649 ; CHECK-LABEL: test_vqshruntq_m_n_s16:
650 ; CHECK: @ %bb.0: @ %entry
651 ; CHECK-NEXT: vmsr p0, r0
653 ; CHECK-NEXT: vqshruntt.s16 q0, q1, #7
656 %0 = zext i16 %p to i32
657 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
658 %2 = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> %a, <8 x i16> %b, i32 7, i32 1, i32 0, i32 1, i32 0, i32 1, <8 x i1> %1)
662 define arm_aapcs_vfpcc <8 x i16> @test_vqshruntq_m_n_s32(<8 x i16> %a, <4 x i32> %b, i16 zeroext %p) {
663 ; CHECK-LABEL: test_vqshruntq_m_n_s32:
664 ; CHECK: @ %bb.0: @ %entry
665 ; CHECK-NEXT: vmsr p0, r0
667 ; CHECK-NEXT: vqshruntt.s32 q0, q1, #7
670 %0 = zext i16 %p to i32
671 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
672 %2 = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> %a, <4 x i32> %b, i32 7, i32 1, i32 0, i32 1, i32 0, i32 1, <4 x i1> %1)
676 define arm_aapcs_vfpcc <16 x i8> @test_vqrshrnbq_n_s16(<16 x i8> %a, <8 x i16> %b) {
677 ; CHECK-LABEL: test_vqrshrnbq_n_s16:
678 ; CHECK: @ %bb.0: @ %entry
679 ; CHECK-NEXT: vqrshrnb.s16 q0, q1, #5
682 %0 = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> %a, <8 x i16> %b, i32 5, i32 1, i32 1, i32 0, i32 0, i32 0)
686 define arm_aapcs_vfpcc <8 x i16> @test_vqrshrnbq_n_s32(<8 x i16> %a, <4 x i32> %b) {
687 ; CHECK-LABEL: test_vqrshrnbq_n_s32:
688 ; CHECK: @ %bb.0: @ %entry
689 ; CHECK-NEXT: vqrshrnb.s32 q0, q1, #13
692 %0 = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> %a, <4 x i32> %b, i32 13, i32 1, i32 1, i32 0, i32 0, i32 0)
696 define arm_aapcs_vfpcc <16 x i8> @test_vqrshrnbq_n_u16(<16 x i8> %a, <8 x i16> %b) {
697 ; CHECK-LABEL: test_vqrshrnbq_n_u16:
698 ; CHECK: @ %bb.0: @ %entry
699 ; CHECK-NEXT: vqrshrnb.u16 q0, q1, #7
702 %0 = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> %a, <8 x i16> %b, i32 7, i32 1, i32 1, i32 1, i32 1, i32 0)
706 define arm_aapcs_vfpcc <8 x i16> @test_vqrshrnbq_n_u32(<8 x i16> %a, <4 x i32> %b) {
707 ; CHECK-LABEL: test_vqrshrnbq_n_u32:
708 ; CHECK: @ %bb.0: @ %entry
709 ; CHECK-NEXT: vqrshrnb.u32 q0, q1, #8
712 %0 = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> %a, <4 x i32> %b, i32 8, i32 1, i32 1, i32 1, i32 1, i32 0)
716 define arm_aapcs_vfpcc <16 x i8> @test_vqrshrntq_n_s16(<16 x i8> %a, <8 x i16> %b) {
717 ; CHECK-LABEL: test_vqrshrntq_n_s16:
718 ; CHECK: @ %bb.0: @ %entry
719 ; CHECK-NEXT: vqrshrnt.s16 q0, q1, #7
722 %0 = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> %a, <8 x i16> %b, i32 7, i32 1, i32 1, i32 0, i32 0, i32 1)
726 define arm_aapcs_vfpcc <8 x i16> @test_vqrshrntq_n_s32(<8 x i16> %a, <4 x i32> %b) {
727 ; CHECK-LABEL: test_vqrshrntq_n_s32:
728 ; CHECK: @ %bb.0: @ %entry
729 ; CHECK-NEXT: vqrshrnt.s32 q0, q1, #2
732 %0 = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> %a, <4 x i32> %b, i32 2, i32 1, i32 1, i32 0, i32 0, i32 1)
736 define arm_aapcs_vfpcc <16 x i8> @test_vqrshrntq_n_u16(<16 x i8> %a, <8 x i16> %b) {
737 ; CHECK-LABEL: test_vqrshrntq_n_u16:
738 ; CHECK: @ %bb.0: @ %entry
739 ; CHECK-NEXT: vqrshrnt.u16 q0, q1, #1
742 %0 = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> %a, <8 x i16> %b, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1)
746 define arm_aapcs_vfpcc <8 x i16> @test_vqrshrntq_n_u32(<8 x i16> %a, <4 x i32> %b) {
747 ; CHECK-LABEL: test_vqrshrntq_n_u32:
748 ; CHECK: @ %bb.0: @ %entry
749 ; CHECK-NEXT: vqrshrnt.u32 q0, q1, #11
752 %0 = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> %a, <4 x i32> %b, i32 11, i32 1, i32 1, i32 1, i32 1, i32 1)
756 define arm_aapcs_vfpcc <16 x i8> @test_vqrshrnbq_m_n_s16(<16 x i8> %a, <8 x i16> %b, i16 zeroext %p) {
757 ; CHECK-LABEL: test_vqrshrnbq_m_n_s16:
758 ; CHECK: @ %bb.0: @ %entry
759 ; CHECK-NEXT: vmsr p0, r0
761 ; CHECK-NEXT: vqrshrnbt.s16 q0, q1, #2
764 %0 = zext i16 %p to i32
765 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
766 %2 = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> %a, <8 x i16> %b, i32 2, i32 1, i32 1, i32 0, i32 0, i32 0, <8 x i1> %1)
770 define arm_aapcs_vfpcc <8 x i16> @test_vqrshrnbq_m_n_s32(<8 x i16> %a, <4 x i32> %b, i16 zeroext %p) {
771 ; CHECK-LABEL: test_vqrshrnbq_m_n_s32:
772 ; CHECK: @ %bb.0: @ %entry
773 ; CHECK-NEXT: vmsr p0, r0
775 ; CHECK-NEXT: vqrshrnbt.s32 q0, q1, #12
778 %0 = zext i16 %p to i32
779 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
780 %2 = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> %a, <4 x i32> %b, i32 12, i32 1, i32 1, i32 0, i32 0, i32 0, <4 x i1> %1)
784 define arm_aapcs_vfpcc <16 x i8> @test_vqrshrnbq_m_n_u16(<16 x i8> %a, <8 x i16> %b, i16 zeroext %p) {
785 ; CHECK-LABEL: test_vqrshrnbq_m_n_u16:
786 ; CHECK: @ %bb.0: @ %entry
787 ; CHECK-NEXT: vmsr p0, r0
789 ; CHECK-NEXT: vqrshrnbt.u16 q0, q1, #5
792 %0 = zext i16 %p to i32
793 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
794 %2 = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> %a, <8 x i16> %b, i32 5, i32 1, i32 1, i32 1, i32 1, i32 0, <8 x i1> %1)
798 define arm_aapcs_vfpcc <8 x i16> @test_vqrshrnbq_m_n_u32(<8 x i16> %a, <4 x i32> %b, i16 zeroext %p) {
799 ; CHECK-LABEL: test_vqrshrnbq_m_n_u32:
800 ; CHECK: @ %bb.0: @ %entry
801 ; CHECK-NEXT: vmsr p0, r0
803 ; CHECK-NEXT: vqrshrnbt.u32 q0, q1, #11
806 %0 = zext i16 %p to i32
807 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
808 %2 = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> %a, <4 x i32> %b, i32 11, i32 1, i32 1, i32 1, i32 1, i32 0, <4 x i1> %1)
812 define arm_aapcs_vfpcc <16 x i8> @test_vqrshrntq_m_n_s16(<16 x i8> %a, <8 x i16> %b, i16 zeroext %p) {
813 ; CHECK-LABEL: test_vqrshrntq_m_n_s16:
814 ; CHECK: @ %bb.0: @ %entry
815 ; CHECK-NEXT: vmsr p0, r0
817 ; CHECK-NEXT: vqrshrntt.s16 q0, q1, #4
820 %0 = zext i16 %p to i32
821 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
822 %2 = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> %a, <8 x i16> %b, i32 4, i32 1, i32 1, i32 0, i32 0, i32 1, <8 x i1> %1)
826 define arm_aapcs_vfpcc <8 x i16> @test_vqrshrntq_m_n_s32(<8 x i16> %a, <4 x i32> %b, i16 zeroext %p) {
827 ; CHECK-LABEL: test_vqrshrntq_m_n_s32:
828 ; CHECK: @ %bb.0: @ %entry
829 ; CHECK-NEXT: vmsr p0, r0
831 ; CHECK-NEXT: vqrshrntt.s32 q0, q1, #6
834 %0 = zext i16 %p to i32
835 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
836 %2 = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> %a, <4 x i32> %b, i32 6, i32 1, i32 1, i32 0, i32 0, i32 1, <4 x i1> %1)
840 define arm_aapcs_vfpcc <16 x i8> @test_vqrshrntq_m_n_u16(<16 x i8> %a, <8 x i16> %b, i16 zeroext %p) {
841 ; CHECK-LABEL: test_vqrshrntq_m_n_u16:
842 ; CHECK: @ %bb.0: @ %entry
843 ; CHECK-NEXT: vmsr p0, r0
845 ; CHECK-NEXT: vqrshrntt.u16 q0, q1, #7
848 %0 = zext i16 %p to i32
849 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
850 %2 = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> %a, <8 x i16> %b, i32 7, i32 1, i32 1, i32 1, i32 1, i32 1, <8 x i1> %1)
854 define arm_aapcs_vfpcc <8 x i16> @test_vqrshrntq_m_n_u32(<8 x i16> %a, <4 x i32> %b, i16 zeroext %p) {
855 ; CHECK-LABEL: test_vqrshrntq_m_n_u32:
856 ; CHECK: @ %bb.0: @ %entry
857 ; CHECK-NEXT: vmsr p0, r0
859 ; CHECK-NEXT: vqrshrntt.u32 q0, q1, #15
862 %0 = zext i16 %p to i32
863 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
864 %2 = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> %a, <4 x i32> %b, i32 15, i32 1, i32 1, i32 1, i32 1, i32 1, <4 x i1> %1)
868 define arm_aapcs_vfpcc <16 x i8> @test_vqrshrunbq_n_s16(<16 x i8> %a, <8 x i16> %b) {
869 ; CHECK-LABEL: test_vqrshrunbq_n_s16:
870 ; CHECK: @ %bb.0: @ %entry
871 ; CHECK-NEXT: vqshrunb.s16 q0, q1, #7
874 %0 = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> %a, <8 x i16> %b, i32 7, i32 1, i32 0, i32 1, i32 0, i32 0)
878 define arm_aapcs_vfpcc <8 x i16> @test_vqrshrunbq_n_s32(<8 x i16> %a, <4 x i32> %b) {
879 ; CHECK-LABEL: test_vqrshrunbq_n_s32:
880 ; CHECK: @ %bb.0: @ %entry
881 ; CHECK-NEXT: vqshrunb.s32 q0, q1, #1
884 %0 = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> %a, <4 x i32> %b, i32 1, i32 1, i32 0, i32 1, i32 0, i32 0)
888 define arm_aapcs_vfpcc <16 x i8> @test_vqrshruntq_n_s16(<16 x i8> %a, <8 x i16> %b) {
889 ; CHECK-LABEL: test_vqrshruntq_n_s16:
890 ; CHECK: @ %bb.0: @ %entry
891 ; CHECK-NEXT: vqshrunt.s16 q0, q1, #1
894 %0 = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> %a, <8 x i16> %b, i32 1, i32 1, i32 0, i32 1, i32 0, i32 1)
898 define arm_aapcs_vfpcc <8 x i16> @test_vqrshruntq_n_s32(<8 x i16> %a, <4 x i32> %b) {
899 ; CHECK-LABEL: test_vqrshruntq_n_s32:
900 ; CHECK: @ %bb.0: @ %entry
901 ; CHECK-NEXT: vqshrunt.s32 q0, q1, #3
904 %0 = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> %a, <4 x i32> %b, i32 3, i32 1, i32 0, i32 1, i32 0, i32 1)
908 define arm_aapcs_vfpcc <16 x i8> @test_vqrshrunbq_m_n_s16(<16 x i8> %a, <8 x i16> %b, i16 zeroext %p) {
909 ; CHECK-LABEL: test_vqrshrunbq_m_n_s16:
910 ; CHECK: @ %bb.0: @ %entry
911 ; CHECK-NEXT: vmsr p0, r0
913 ; CHECK-NEXT: vqshrunbt.s16 q0, q1, #4
916 %0 = zext i16 %p to i32
917 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
918 %2 = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> %a, <8 x i16> %b, i32 4, i32 1, i32 0, i32 1, i32 0, i32 0, <8 x i1> %1)
922 define arm_aapcs_vfpcc <8 x i16> @test_vqrshrunbq_m_n_s32(<8 x i16> %a, <4 x i32> %b, i16 zeroext %p) {
923 ; CHECK-LABEL: test_vqrshrunbq_m_n_s32:
924 ; CHECK: @ %bb.0: @ %entry
925 ; CHECK-NEXT: vmsr p0, r0
927 ; CHECK-NEXT: vqshrunbt.s32 q0, q1, #10
930 %0 = zext i16 %p to i32
931 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
932 %2 = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> %a, <4 x i32> %b, i32 10, i32 1, i32 0, i32 1, i32 0, i32 0, <4 x i1> %1)
936 define arm_aapcs_vfpcc <16 x i8> @test_vqrshruntq_m_n_s16(<16 x i8> %a, <8 x i16> %b, i16 zeroext %p) {
937 ; CHECK-LABEL: test_vqrshruntq_m_n_s16:
938 ; CHECK: @ %bb.0: @ %entry
939 ; CHECK-NEXT: vmsr p0, r0
941 ; CHECK-NEXT: vqshruntt.s16 q0, q1, #3
944 %0 = zext i16 %p to i32
945 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
946 %2 = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> %a, <8 x i16> %b, i32 3, i32 1, i32 0, i32 1, i32 0, i32 1, <8 x i1> %1)
950 define arm_aapcs_vfpcc <8 x i16> @test_vqrshruntq_m_n_s32(<8 x i16> %a, <4 x i32> %b, i16 zeroext %p) {
951 ; CHECK-LABEL: test_vqrshruntq_m_n_s32:
952 ; CHECK: @ %bb.0: @ %entry
953 ; CHECK-NEXT: vmsr p0, r0
955 ; CHECK-NEXT: vqshruntt.s32 q0, q1, #13
958 %0 = zext i16 %p to i32
959 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
960 %2 = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> %a, <4 x i32> %b, i32 13, i32 1, i32 0, i32 1, i32 0, i32 1, <4 x i1> %1)
964 define arm_aapcs_vfpcc <16 x i8> @test_vsliq_n_s8(<16 x i8> %a, <16 x i8> %b) {
965 ; CHECK-LABEL: test_vsliq_n_s8:
966 ; CHECK: @ %bb.0: @ %entry
967 ; CHECK-NEXT: vsli.8 q0, q1, #2
970 %0 = call <16 x i8> @llvm.arm.mve.vsli.v16i8(<16 x i8> %a, <16 x i8> %b, i32 2)
974 define arm_aapcs_vfpcc <8 x i16> @test_vsliq_n_s16(<8 x i16> %a, <8 x i16> %b) {
975 ; CHECK-LABEL: test_vsliq_n_s16:
976 ; CHECK: @ %bb.0: @ %entry
977 ; CHECK-NEXT: vsli.16 q0, q1, #10
980 %0 = call <8 x i16> @llvm.arm.mve.vsli.v8i16(<8 x i16> %a, <8 x i16> %b, i32 10)
984 define arm_aapcs_vfpcc <4 x i32> @test_vsliq_n_s32(<4 x i32> %a, <4 x i32> %b) {
985 ; CHECK-LABEL: test_vsliq_n_s32:
986 ; CHECK: @ %bb.0: @ %entry
987 ; CHECK-NEXT: vsli.32 q0, q1, #1
990 %0 = call <4 x i32> @llvm.arm.mve.vsli.v4i32(<4 x i32> %a, <4 x i32> %b, i32 1)
994 define arm_aapcs_vfpcc <16 x i8> @test_vsliq_n_u8(<16 x i8> %a, <16 x i8> %b) {
995 ; CHECK-LABEL: test_vsliq_n_u8:
996 ; CHECK: @ %bb.0: @ %entry
997 ; CHECK-NEXT: vsli.8 q0, q1, #1
1000 %0 = call <16 x i8> @llvm.arm.mve.vsli.v16i8(<16 x i8> %a, <16 x i8> %b, i32 1)
1004 define arm_aapcs_vfpcc <8 x i16> @test_vsliq_n_u16(<8 x i16> %a, <8 x i16> %b) {
1005 ; CHECK-LABEL: test_vsliq_n_u16:
1006 ; CHECK: @ %bb.0: @ %entry
1007 ; CHECK-NEXT: vsli.16 q0, q1, #1
1010 %0 = call <8 x i16> @llvm.arm.mve.vsli.v8i16(<8 x i16> %a, <8 x i16> %b, i32 1)
1014 define arm_aapcs_vfpcc <4 x i32> @test_vsliq_n_u32(<4 x i32> %a, <4 x i32> %b) {
1015 ; CHECK-LABEL: test_vsliq_n_u32:
1016 ; CHECK: @ %bb.0: @ %entry
1017 ; CHECK-NEXT: vsli.32 q0, q1, #28
1020 %0 = call <4 x i32> @llvm.arm.mve.vsli.v4i32(<4 x i32> %a, <4 x i32> %b, i32 28)
1024 define arm_aapcs_vfpcc <16 x i8> @test_vsliq_m_n_s8(<16 x i8> %a, <16 x i8> %b, i16 zeroext %p) {
1025 ; CHECK-LABEL: test_vsliq_m_n_s8:
1026 ; CHECK: @ %bb.0: @ %entry
1027 ; CHECK-NEXT: vmsr p0, r0
1029 ; CHECK-NEXT: vslit.8 q0, q1, #4
1032 %0 = zext i16 %p to i32
1033 %1 = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
1034 %2 = call <16 x i8> @llvm.arm.mve.vsli.predicated.v16i8.v16i1(<16 x i8> %a, <16 x i8> %b, i32 4, <16 x i1> %1)
1038 define arm_aapcs_vfpcc <8 x i16> @test_vsliq_m_n_s16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {
1039 ; CHECK-LABEL: test_vsliq_m_n_s16:
1040 ; CHECK: @ %bb.0: @ %entry
1041 ; CHECK-NEXT: vmsr p0, r0
1043 ; CHECK-NEXT: vslit.16 q0, q1, #1
1046 %0 = zext i16 %p to i32
1047 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
1048 %2 = call <8 x i16> @llvm.arm.mve.vsli.predicated.v8i16.v8i1(<8 x i16> %a, <8 x i16> %b, i32 1, <8 x i1> %1)
1052 define arm_aapcs_vfpcc <4 x i32> @test_vsliq_m_n_s32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
1053 ; CHECK-LABEL: test_vsliq_m_n_s32:
1054 ; CHECK: @ %bb.0: @ %entry
1055 ; CHECK-NEXT: vmsr p0, r0
1057 ; CHECK-NEXT: vslit.32 q0, q1, #1
1060 %0 = zext i16 %p to i32
1061 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
1062 %2 = call <4 x i32> @llvm.arm.mve.vsli.predicated.v4i32.v4i1(<4 x i32> %a, <4 x i32> %b, i32 1, <4 x i1> %1)
1066 define arm_aapcs_vfpcc <16 x i8> @test_vsliq_m_n_u8(<16 x i8> %a, <16 x i8> %b, i16 zeroext %p) {
1067 ; CHECK-LABEL: test_vsliq_m_n_u8:
1068 ; CHECK: @ %bb.0: @ %entry
1069 ; CHECK-NEXT: vmsr p0, r0
1071 ; CHECK-NEXT: vslit.8 q0, q1, #5
1074 %0 = zext i16 %p to i32
1075 %1 = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
1076 %2 = call <16 x i8> @llvm.arm.mve.vsli.predicated.v16i8.v16i1(<16 x i8> %a, <16 x i8> %b, i32 5, <16 x i1> %1)
1080 define arm_aapcs_vfpcc <8 x i16> @test_vsliq_m_n_u16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {
1081 ; CHECK-LABEL: test_vsliq_m_n_u16:
1082 ; CHECK: @ %bb.0: @ %entry
1083 ; CHECK-NEXT: vmsr p0, r0
1085 ; CHECK-NEXT: vslit.16 q0, q1, #3
1088 %0 = zext i16 %p to i32
1089 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
1090 %2 = call <8 x i16> @llvm.arm.mve.vsli.predicated.v8i16.v8i1(<8 x i16> %a, <8 x i16> %b, i32 3, <8 x i1> %1)
1094 define arm_aapcs_vfpcc <4 x i32> @test_vsliq_m_n_u32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
1095 ; CHECK-LABEL: test_vsliq_m_n_u32:
1096 ; CHECK: @ %bb.0: @ %entry
1097 ; CHECK-NEXT: vmsr p0, r0
1099 ; CHECK-NEXT: vslit.32 q0, q1, #9
1102 %0 = zext i16 %p to i32
1103 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
1104 %2 = call <4 x i32> @llvm.arm.mve.vsli.predicated.v4i32.v4i1(<4 x i32> %a, <4 x i32> %b, i32 9, <4 x i1> %1)
1108 define arm_aapcs_vfpcc <16 x i8> @test_vsriq_n_s8(<16 x i8> %a, <16 x i8> %b) {
1109 ; CHECK-LABEL: test_vsriq_n_s8:
1110 ; CHECK: @ %bb.0: @ %entry
1111 ; CHECK-NEXT: vsri.8 q0, q1, #3
1114 %0 = call <16 x i8> @llvm.arm.mve.vsri.v16i8(<16 x i8> %a, <16 x i8> %b, i32 3)
1118 define arm_aapcs_vfpcc <8 x i16> @test_vsriq_n_s16(<8 x i16> %a, <8 x i16> %b) {
1119 ; CHECK-LABEL: test_vsriq_n_s16:
1120 ; CHECK: @ %bb.0: @ %entry
1121 ; CHECK-NEXT: vsri.16 q0, q1, #2
1124 %0 = call <8 x i16> @llvm.arm.mve.vsri.v8i16(<8 x i16> %a, <8 x i16> %b, i32 2)
1128 define arm_aapcs_vfpcc <4 x i32> @test_vsriq_n_s32(<4 x i32> %a, <4 x i32> %b) {
1129 ; CHECK-LABEL: test_vsriq_n_s32:
1130 ; CHECK: @ %bb.0: @ %entry
1131 ; CHECK-NEXT: vsri.32 q0, q1, #28
1134 %0 = call <4 x i32> @llvm.arm.mve.vsri.v4i32(<4 x i32> %a, <4 x i32> %b, i32 28)
1138 define arm_aapcs_vfpcc <16 x i8> @test_vsriq_n_u8(<16 x i8> %a, <16 x i8> %b) {
1139 ; CHECK-LABEL: test_vsriq_n_u8:
1140 ; CHECK: @ %bb.0: @ %entry
1141 ; CHECK-NEXT: vsri.8 q0, q1, #3
1144 %0 = call <16 x i8> @llvm.arm.mve.vsri.v16i8(<16 x i8> %a, <16 x i8> %b, i32 3)
1148 define arm_aapcs_vfpcc <8 x i16> @test_vsriq_n_u16(<8 x i16> %a, <8 x i16> %b) {
1149 ; CHECK-LABEL: test_vsriq_n_u16:
1150 ; CHECK: @ %bb.0: @ %entry
1151 ; CHECK-NEXT: vsri.16 q0, q1, #3
1154 %0 = call <8 x i16> @llvm.arm.mve.vsri.v8i16(<8 x i16> %a, <8 x i16> %b, i32 3)
1158 define arm_aapcs_vfpcc <4 x i32> @test_vsriq_n_u32(<4 x i32> %a, <4 x i32> %b) {
1159 ; CHECK-LABEL: test_vsriq_n_u32:
1160 ; CHECK: @ %bb.0: @ %entry
1161 ; CHECK-NEXT: vsri.32 q0, q1, #26
1164 %0 = call <4 x i32> @llvm.arm.mve.vsri.v4i32(<4 x i32> %a, <4 x i32> %b, i32 26)
1168 define arm_aapcs_vfpcc <16 x i8> @test_vsriq_m_n_s8(<16 x i8> %a, <16 x i8> %b, i16 zeroext %p) {
1169 ; CHECK-LABEL: test_vsriq_m_n_s8:
1170 ; CHECK: @ %bb.0: @ %entry
1171 ; CHECK-NEXT: vmsr p0, r0
1173 ; CHECK-NEXT: vsrit.8 q0, q1, #4
1176 %0 = zext i16 %p to i32
1177 %1 = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
1178 %2 = call <16 x i8> @llvm.arm.mve.vsri.predicated.v16i8.v16i1(<16 x i8> %a, <16 x i8> %b, i32 4, <16 x i1> %1)
1182 define arm_aapcs_vfpcc <8 x i16> @test_vsriq_m_n_s16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {
1183 ; CHECK-LABEL: test_vsriq_m_n_s16:
1184 ; CHECK: @ %bb.0: @ %entry
1185 ; CHECK-NEXT: vmsr p0, r0
1187 ; CHECK-NEXT: vsrit.16 q0, q1, #1
1190 %0 = zext i16 %p to i32
1191 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
1192 %2 = call <8 x i16> @llvm.arm.mve.vsri.predicated.v8i16.v8i1(<8 x i16> %a, <8 x i16> %b, i32 1, <8 x i1> %1)
1196 define arm_aapcs_vfpcc <4 x i32> @test_vsriq_m_n_s32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
1197 ; CHECK-LABEL: test_vsriq_m_n_s32:
1198 ; CHECK: @ %bb.0: @ %entry
1199 ; CHECK-NEXT: vmsr p0, r0
1201 ; CHECK-NEXT: vsrit.32 q0, q1, #27
1204 %0 = zext i16 %p to i32
1205 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
1206 %2 = call <4 x i32> @llvm.arm.mve.vsri.predicated.v4i32.v4i1(<4 x i32> %a, <4 x i32> %b, i32 27, <4 x i1> %1)
1210 define arm_aapcs_vfpcc <16 x i8> @test_vsriq_m_n_u8(<16 x i8> %a, <16 x i8> %b, i16 zeroext %p) {
1211 ; CHECK-LABEL: test_vsriq_m_n_u8:
1212 ; CHECK: @ %bb.0: @ %entry
1213 ; CHECK-NEXT: vmsr p0, r0
1215 ; CHECK-NEXT: vsrit.8 q0, q1, #7
1218 %0 = zext i16 %p to i32
1219 %1 = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
1220 %2 = call <16 x i8> @llvm.arm.mve.vsri.predicated.v16i8.v16i1(<16 x i8> %a, <16 x i8> %b, i32 7, <16 x i1> %1)
1224 define arm_aapcs_vfpcc <8 x i16> @test_vsriq_m_n_u16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {
1225 ; CHECK-LABEL: test_vsriq_m_n_u16:
1226 ; CHECK: @ %bb.0: @ %entry
1227 ; CHECK-NEXT: vmsr p0, r0
1229 ; CHECK-NEXT: vsrit.16 q0, q1, #9
1232 %0 = zext i16 %p to i32
1233 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
1234 %2 = call <8 x i16> @llvm.arm.mve.vsri.predicated.v8i16.v8i1(<8 x i16> %a, <8 x i16> %b, i32 9, <8 x i1> %1)
1238 define arm_aapcs_vfpcc <4 x i32> @test_vsriq_m_n_u32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
1239 ; CHECK-LABEL: test_vsriq_m_n_u32:
1240 ; CHECK: @ %bb.0: @ %entry
1241 ; CHECK-NEXT: vmsr p0, r0
1243 ; CHECK-NEXT: vsrit.32 q0, q1, #13
1246 %0 = zext i16 %p to i32
1247 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
1248 %2 = call <4 x i32> @llvm.arm.mve.vsri.predicated.v4i32.v4i1(<4 x i32> %a, <4 x i32> %b, i32 13, <4 x i1> %1)
1252 declare <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8>, <8 x i16>, i32, i32, i32, i32, i32, i32)
1253 declare <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16>, <4 x i32>, i32, i32, i32, i32, i32, i32)
1254 declare <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32)
1255 declare <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8>, <8 x i16>, i32, i32, i32, i32, i32, i32, <8 x i1>)
1256 declare <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32)
1257 declare <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16>, <4 x i32>, i32, i32, i32, i32, i32, i32, <4 x i1>)
1258 declare <16 x i8> @llvm.arm.mve.vsli.v16i8(<16 x i8>, <16 x i8>, i32)
1259 declare <8 x i16> @llvm.arm.mve.vsli.v8i16(<8 x i16>, <8 x i16>, i32)
1260 declare <4 x i32> @llvm.arm.mve.vsli.v4i32(<4 x i32>, <4 x i32>, i32)
1261 declare <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32)
1262 declare <16 x i8> @llvm.arm.mve.vsli.predicated.v16i8.v16i1(<16 x i8>, <16 x i8>, i32, <16 x i1>)
1263 declare <8 x i16> @llvm.arm.mve.vsli.predicated.v8i16.v8i1(<8 x i16>, <8 x i16>, i32, <8 x i1>)
1264 declare <4 x i32> @llvm.arm.mve.vsli.predicated.v4i32.v4i1(<4 x i32>, <4 x i32>, i32, <4 x i1>)
1265 declare <16 x i8> @llvm.arm.mve.vsri.v16i8(<16 x i8>, <16 x i8>, i32)
1266 declare <8 x i16> @llvm.arm.mve.vsri.v8i16(<8 x i16>, <8 x i16>, i32)
1267 declare <4 x i32> @llvm.arm.mve.vsri.v4i32(<4 x i32>, <4 x i32>, i32)
1268 declare <16 x i8> @llvm.arm.mve.vsri.predicated.v16i8.v16i1(<16 x i8>, <16 x i8>, i32, <16 x i1>)
1269 declare <8 x i16> @llvm.arm.mve.vsri.predicated.v8i16.v8i1(<8 x i16>, <8 x i16>, i32, <8 x i1>)
1270 declare <4 x i32> @llvm.arm.mve.vsri.predicated.v4i32.v4i1(<4 x i32>, <4 x i32>, i32, <4 x i1>)