xref: /llvm-project/clang/test/CodeGen/arm-mve-intrinsics/vector-shift-imm.c (revision 38fffa630ee80163dc65e759392ad29798905679)
1 // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
2 // RUN: %clang_cc1 -triple thumbv8.1m.main-none-none-eabi -target-feature +mve.fp -mfloat-abi hard -O0 -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s
3 // RUN: %clang_cc1 -triple thumbv8.1m.main-none-none-eabi -target-feature +mve.fp -mfloat-abi hard -O0 -disable-O0-optnone -DPOLYMORPHIC -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s
4 
5 // REQUIRES: aarch64-registered-target || arm-registered-target
6 
7 #include <arm_mve.h>
8 
9 // CHECK-LABEL: @test_vshlq_n_s8(
10 // CHECK-NEXT:  entry:
11 // CHECK-NEXT:    [[TMP0:%.*]] = shl <16 x i8> [[A:%.*]], splat (i8 5)
12 // CHECK-NEXT:    ret <16 x i8> [[TMP0]]
13 //
14 int8x16_t test_vshlq_n_s8(int8x16_t a)
15 {
16 #ifdef POLYMORPHIC
17     return vshlq_n(a, 5);
18 #else /* POLYMORPHIC */
19     return vshlq_n_s8(a, 5);
20 #endif /* POLYMORPHIC */
21 }
22 
23 // CHECK-LABEL: @test_vshlq_n_s16(
24 // CHECK-NEXT:  entry:
25 // CHECK-NEXT:    [[TMP0:%.*]] = shl <8 x i16> [[A:%.*]], splat (i16 5)
26 // CHECK-NEXT:    ret <8 x i16> [[TMP0]]
27 //
28 int16x8_t test_vshlq_n_s16(int16x8_t a)
29 {
30 #ifdef POLYMORPHIC
31     return vshlq_n(a, 5);
32 #else /* POLYMORPHIC */
33     return vshlq_n_s16(a, 5);
34 #endif /* POLYMORPHIC */
35 }
36 
37 // CHECK-LABEL: @test_vshlq_n_s32(
38 // CHECK-NEXT:  entry:
39 // CHECK-NEXT:    [[TMP0:%.*]] = shl <4 x i32> [[A:%.*]], splat (i32 18)
40 // CHECK-NEXT:    ret <4 x i32> [[TMP0]]
41 //
42 int32x4_t test_vshlq_n_s32(int32x4_t a)
43 {
44 #ifdef POLYMORPHIC
45     return vshlq_n(a, 18);
46 #else /* POLYMORPHIC */
47     return vshlq_n_s32(a, 18);
48 #endif /* POLYMORPHIC */
49 }
50 
51 // CHECK-LABEL: @test_vshlq_n_s8_trivial(
52 // CHECK-NEXT:  entry:
53 // CHECK-NEXT:    [[TMP0:%.*]] = shl <16 x i8> [[A:%.*]], zeroinitializer
54 // CHECK-NEXT:    ret <16 x i8> [[TMP0]]
55 //
56 int8x16_t test_vshlq_n_s8_trivial(int8x16_t a)
57 {
58 #ifdef POLYMORPHIC
59     return vshlq_n(a, 0);
60 #else /* POLYMORPHIC */
61     return vshlq_n_s8(a, 0);
62 #endif /* POLYMORPHIC */
63 }
64 
65 // CHECK-LABEL: @test_vshlq_n_s16_trivial(
66 // CHECK-NEXT:  entry:
67 // CHECK-NEXT:    [[TMP0:%.*]] = shl <8 x i16> [[A:%.*]], zeroinitializer
68 // CHECK-NEXT:    ret <8 x i16> [[TMP0]]
69 //
70 int16x8_t test_vshlq_n_s16_trivial(int16x8_t a)
71 {
72 #ifdef POLYMORPHIC
73     return vshlq_n(a, 0);
74 #else /* POLYMORPHIC */
75     return vshlq_n_s16(a, 0);
76 #endif /* POLYMORPHIC */
77 }
78 
79 // CHECK-LABEL: @test_vshlq_n_s32_trivial(
80 // CHECK-NEXT:  entry:
81 // CHECK-NEXT:    [[TMP0:%.*]] = shl <4 x i32> [[A:%.*]], zeroinitializer
82 // CHECK-NEXT:    ret <4 x i32> [[TMP0]]
83 //
84 int32x4_t test_vshlq_n_s32_trivial(int32x4_t a)
85 {
86 #ifdef POLYMORPHIC
87     return vshlq_n(a, 0);
88 #else /* POLYMORPHIC */
89     return vshlq_n_s32(a, 0);
90 #endif /* POLYMORPHIC */
91 }
92 
93 // CHECK-LABEL: @test_vshlq_n_u8(
94 // CHECK-NEXT:  entry:
95 // CHECK-NEXT:    [[TMP0:%.*]] = shl <16 x i8> [[A:%.*]], splat (i8 3)
96 // CHECK-NEXT:    ret <16 x i8> [[TMP0]]
97 //
98 uint8x16_t test_vshlq_n_u8(uint8x16_t a)
99 {
100 #ifdef POLYMORPHIC
101     return vshlq_n(a, 3);
102 #else /* POLYMORPHIC */
103     return vshlq_n_u8(a, 3);
104 #endif /* POLYMORPHIC */
105 }
106 
107 // CHECK-LABEL: @test_vshlq_n_u16(
108 // CHECK-NEXT:  entry:
109 // CHECK-NEXT:    [[TMP0:%.*]] = shl <8 x i16> [[A:%.*]], splat (i16 11)
110 // CHECK-NEXT:    ret <8 x i16> [[TMP0]]
111 //
112 uint16x8_t test_vshlq_n_u16(uint16x8_t a)
113 {
114 #ifdef POLYMORPHIC
115     return vshlq_n(a, 11);
116 #else /* POLYMORPHIC */
117     return vshlq_n_u16(a, 11);
118 #endif /* POLYMORPHIC */
119 }
120 
121 // CHECK-LABEL: @test_vshlq_n_u32(
122 // CHECK-NEXT:  entry:
123 // CHECK-NEXT:    [[TMP0:%.*]] = shl <4 x i32> [[A:%.*]], splat (i32 7)
124 // CHECK-NEXT:    ret <4 x i32> [[TMP0]]
125 //
126 uint32x4_t test_vshlq_n_u32(uint32x4_t a)
127 {
128 #ifdef POLYMORPHIC
129     return vshlq_n(a, 7);
130 #else /* POLYMORPHIC */
131     return vshlq_n_u32(a, 7);
132 #endif /* POLYMORPHIC */
133 }
134 
135 // CHECK-LABEL: @test_vshlq_n_u8_trivial(
136 // CHECK-NEXT:  entry:
137 // CHECK-NEXT:    [[TMP0:%.*]] = shl <16 x i8> [[A:%.*]], zeroinitializer
138 // CHECK-NEXT:    ret <16 x i8> [[TMP0]]
139 //
140 uint8x16_t test_vshlq_n_u8_trivial(uint8x16_t a)
141 {
142 #ifdef POLYMORPHIC
143     return vshlq_n(a, 0);
144 #else /* POLYMORPHIC */
145     return vshlq_n_u8(a, 0);
146 #endif /* POLYMORPHIC */
147 }
148 
149 // CHECK-LABEL: @test_vshlq_n_u16_trivial(
150 // CHECK-NEXT:  entry:
151 // CHECK-NEXT:    [[TMP0:%.*]] = shl <8 x i16> [[A:%.*]], zeroinitializer
152 // CHECK-NEXT:    ret <8 x i16> [[TMP0]]
153 //
154 uint16x8_t test_vshlq_n_u16_trivial(uint16x8_t a)
155 {
156 #ifdef POLYMORPHIC
157     return vshlq_n(a, 0);
158 #else /* POLYMORPHIC */
159     return vshlq_n_u16(a, 0);
160 #endif /* POLYMORPHIC */
161 }
162 
163 // CHECK-LABEL: @test_vshlq_n_u32_trivial(
164 // CHECK-NEXT:  entry:
165 // CHECK-NEXT:    [[TMP0:%.*]] = shl <4 x i32> [[A:%.*]], zeroinitializer
166 // CHECK-NEXT:    ret <4 x i32> [[TMP0]]
167 //
168 uint32x4_t test_vshlq_n_u32_trivial(uint32x4_t a)
169 {
170 #ifdef POLYMORPHIC
171     return vshlq_n(a, 0);
172 #else /* POLYMORPHIC */
173     return vshlq_n_u32(a, 0);
174 #endif /* POLYMORPHIC */
175 }
176 
177 // CHECK-LABEL: @test_vshrq_n_s8(
178 // CHECK-NEXT:  entry:
179 // CHECK-NEXT:    [[TMP0:%.*]] = ashr <16 x i8> [[A:%.*]], splat (i8 4)
180 // CHECK-NEXT:    ret <16 x i8> [[TMP0]]
181 //
182 int8x16_t test_vshrq_n_s8(int8x16_t a)
183 {
184 #ifdef POLYMORPHIC
185     return vshrq(a, 4);
186 #else /* POLYMORPHIC */
187     return vshrq_n_s8(a, 4);
188 #endif /* POLYMORPHIC */
189 }
190 
191 // CHECK-LABEL: @test_vshrq_n_s16(
192 // CHECK-NEXT:  entry:
193 // CHECK-NEXT:    [[TMP0:%.*]] = ashr <8 x i16> [[A:%.*]], splat (i16 10)
194 // CHECK-NEXT:    ret <8 x i16> [[TMP0]]
195 //
196 int16x8_t test_vshrq_n_s16(int16x8_t a)
197 {
198 #ifdef POLYMORPHIC
199     return vshrq(a, 10);
200 #else /* POLYMORPHIC */
201     return vshrq_n_s16(a, 10);
202 #endif /* POLYMORPHIC */
203 }
204 
205 // CHECK-LABEL: @test_vshrq_n_s32(
206 // CHECK-NEXT:  entry:
207 // CHECK-NEXT:    [[TMP0:%.*]] = ashr <4 x i32> [[A:%.*]], splat (i32 19)
208 // CHECK-NEXT:    ret <4 x i32> [[TMP0]]
209 //
210 int32x4_t test_vshrq_n_s32(int32x4_t a)
211 {
212 #ifdef POLYMORPHIC
213     return vshrq(a, 19);
214 #else /* POLYMORPHIC */
215     return vshrq_n_s32(a, 19);
216 #endif /* POLYMORPHIC */
217 }
218 
219 // CHECK-LABEL: @test_vshrq_n_s8_trivial(
220 // CHECK-NEXT:  entry:
221 // CHECK-NEXT:    [[TMP0:%.*]] = ashr <16 x i8> [[A:%.*]], splat (i8 7)
222 // CHECK-NEXT:    ret <16 x i8> [[TMP0]]
223 //
224 int8x16_t test_vshrq_n_s8_trivial(int8x16_t a)
225 {
226 #ifdef POLYMORPHIC
227     return vshrq(a, 8);
228 #else /* POLYMORPHIC */
229     return vshrq_n_s8(a, 8);
230 #endif /* POLYMORPHIC */
231 }
232 
233 // CHECK-LABEL: @test_vshrq_n_s16_trivial(
234 // CHECK-NEXT:  entry:
235 // CHECK-NEXT:    [[TMP0:%.*]] = ashr <8 x i16> [[A:%.*]], splat (i16 15)
236 // CHECK-NEXT:    ret <8 x i16> [[TMP0]]
237 //
238 int16x8_t test_vshrq_n_s16_trivial(int16x8_t a)
239 {
240 #ifdef POLYMORPHIC
241     return vshrq(a, 16);
242 #else /* POLYMORPHIC */
243     return vshrq_n_s16(a, 16);
244 #endif /* POLYMORPHIC */
245 }
246 
247 // CHECK-LABEL: @test_vshrq_n_s32_trivial(
248 // CHECK-NEXT:  entry:
249 // CHECK-NEXT:    [[TMP0:%.*]] = ashr <4 x i32> [[A:%.*]], splat (i32 31)
250 // CHECK-NEXT:    ret <4 x i32> [[TMP0]]
251 //
252 int32x4_t test_vshrq_n_s32_trivial(int32x4_t a)
253 {
254 #ifdef POLYMORPHIC
255     return vshrq(a, 32);
256 #else /* POLYMORPHIC */
257     return vshrq_n_s32(a, 32);
258 #endif /* POLYMORPHIC */
259 }
260 
261 // CHECK-LABEL: @test_vshrq_n_u8(
262 // CHECK-NEXT:  entry:
263 // CHECK-NEXT:    [[TMP0:%.*]] = lshr <16 x i8> [[A:%.*]], splat (i8 1)
264 // CHECK-NEXT:    ret <16 x i8> [[TMP0]]
265 //
266 uint8x16_t test_vshrq_n_u8(uint8x16_t a)
267 {
268 #ifdef POLYMORPHIC
269     return vshrq(a, 1);
270 #else /* POLYMORPHIC */
271     return vshrq_n_u8(a, 1);
272 #endif /* POLYMORPHIC */
273 }
274 
275 // CHECK-LABEL: @test_vshrq_n_u16(
276 // CHECK-NEXT:  entry:
277 // CHECK-NEXT:    [[TMP0:%.*]] = lshr <8 x i16> [[A:%.*]], splat (i16 10)
278 // CHECK-NEXT:    ret <8 x i16> [[TMP0]]
279 //
280 uint16x8_t test_vshrq_n_u16(uint16x8_t a)
281 {
282 #ifdef POLYMORPHIC
283     return vshrq(a, 10);
284 #else /* POLYMORPHIC */
285     return vshrq_n_u16(a, 10);
286 #endif /* POLYMORPHIC */
287 }
288 
289 // CHECK-LABEL: @test_vshrq_n_u32(
290 // CHECK-NEXT:  entry:
291 // CHECK-NEXT:    [[TMP0:%.*]] = lshr <4 x i32> [[A:%.*]], splat (i32 10)
292 // CHECK-NEXT:    ret <4 x i32> [[TMP0]]
293 //
294 uint32x4_t test_vshrq_n_u32(uint32x4_t a)
295 {
296 #ifdef POLYMORPHIC
297     return vshrq(a, 10);
298 #else /* POLYMORPHIC */
299     return vshrq_n_u32(a, 10);
300 #endif /* POLYMORPHIC */
301 }
302 
303 // CHECK-LABEL: @test_vshrq_n_u8_trivial(
304 // CHECK-NEXT:  entry:
305 // CHECK-NEXT:    ret <16 x i8> zeroinitializer
306 //
307 uint8x16_t test_vshrq_n_u8_trivial(uint8x16_t a)
308 {
309 #ifdef POLYMORPHIC
310     return vshrq(a, 8);
311 #else /* POLYMORPHIC */
312     return vshrq_n_u8(a, 8);
313 #endif /* POLYMORPHIC */
314 }
315 
316 // CHECK-LABEL: @test_vshrq_n_u16_trivial(
317 // CHECK-NEXT:  entry:
318 // CHECK-NEXT:    ret <8 x i16> zeroinitializer
319 //
320 uint16x8_t test_vshrq_n_u16_trivial(uint16x8_t a)
321 {
322 #ifdef POLYMORPHIC
323     return vshrq(a, 16);
324 #else /* POLYMORPHIC */
325     return vshrq_n_u16(a, 16);
326 #endif /* POLYMORPHIC */
327 }
328 
329 // CHECK-LABEL: @test_vshrq_n_u32_trivial(
330 // CHECK-NEXT:  entry:
331 // CHECK-NEXT:    ret <4 x i32> zeroinitializer
332 //
333 uint32x4_t test_vshrq_n_u32_trivial(uint32x4_t a)
334 {
335 #ifdef POLYMORPHIC
336     return vshrq(a, 32);
337 #else /* POLYMORPHIC */
338     return vshrq_n_u32(a, 32);
339 #endif /* POLYMORPHIC */
340 }
341 
342 // CHECK-LABEL: @test_vshlq_m_n_s8(
343 // CHECK-NEXT:  entry:
344 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
345 // CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
346 // CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.shl.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 6, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])
347 // CHECK-NEXT:    ret <16 x i8> [[TMP2]]
348 //
349 int8x16_t test_vshlq_m_n_s8(int8x16_t inactive, int8x16_t a, mve_pred16_t p)
350 {
351 #ifdef POLYMORPHIC
352     return vshlq_m_n(inactive, a, 6, p);
353 #else /* POLYMORPHIC */
354     return vshlq_m_n_s8(inactive, a, 6, p);
355 #endif /* POLYMORPHIC */
356 }
357 
358 // CHECK-LABEL: @test_vshlq_m_n_s16(
359 // CHECK-NEXT:  entry:
360 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
361 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
362 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.shl.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 13, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])
363 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
364 //
365 int16x8_t test_vshlq_m_n_s16(int16x8_t inactive, int16x8_t a, mve_pred16_t p)
366 {
367 #ifdef POLYMORPHIC
368     return vshlq_m_n(inactive, a, 13, p);
369 #else /* POLYMORPHIC */
370     return vshlq_m_n_s16(inactive, a, 13, p);
371 #endif /* POLYMORPHIC */
372 }
373 
374 // CHECK-LABEL: @test_vshlq_m_n_s32(
375 // CHECK-NEXT:  entry:
376 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
377 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
378 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.shl.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 0, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])
379 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
380 //
381 int32x4_t test_vshlq_m_n_s32(int32x4_t inactive, int32x4_t a, mve_pred16_t p)
382 {
383 #ifdef POLYMORPHIC
384     return vshlq_m_n(inactive, a, 0, p);
385 #else /* POLYMORPHIC */
386     return vshlq_m_n_s32(inactive, a, 0, p);
387 #endif /* POLYMORPHIC */
388 }
389 
390 // CHECK-LABEL: @test_vshlq_m_n_u8(
391 // CHECK-NEXT:  entry:
392 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
393 // CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
394 // CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.shl.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 3, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])
395 // CHECK-NEXT:    ret <16 x i8> [[TMP2]]
396 //
397 uint8x16_t test_vshlq_m_n_u8(uint8x16_t inactive, uint8x16_t a, mve_pred16_t p)
398 {
399 #ifdef POLYMORPHIC
400     return vshlq_m_n(inactive, a, 3, p);
401 #else /* POLYMORPHIC */
402     return vshlq_m_n_u8(inactive, a, 3, p);
403 #endif /* POLYMORPHIC */
404 }
405 
406 // CHECK-LABEL: @test_vshlq_m_n_u16(
407 // CHECK-NEXT:  entry:
408 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
409 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
410 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.shl.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 1, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])
411 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
412 //
413 uint16x8_t test_vshlq_m_n_u16(uint16x8_t inactive, uint16x8_t a, mve_pred16_t p)
414 {
415 #ifdef POLYMORPHIC
416     return vshlq_m_n(inactive, a, 1, p);
417 #else /* POLYMORPHIC */
418     return vshlq_m_n_u16(inactive, a, 1, p);
419 #endif /* POLYMORPHIC */
420 }
421 
422 // CHECK-LABEL: @test_vshlq_m_n_u32(
423 // CHECK-NEXT:  entry:
424 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
425 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
426 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.shl.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 24, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])
427 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
428 //
429 uint32x4_t test_vshlq_m_n_u32(uint32x4_t inactive, uint32x4_t a, mve_pred16_t p)
430 {
431 #ifdef POLYMORPHIC
432     return vshlq_m_n(inactive, a, 24, p);
433 #else /* POLYMORPHIC */
434     return vshlq_m_n_u32(inactive, a, 24, p);
435 #endif /* POLYMORPHIC */
436 }
437 
438 // CHECK-LABEL: @test_vshrq_m_n_s8(
439 // CHECK-NEXT:  entry:
440 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
441 // CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
442 // CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.shr.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 2, i32 0, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])
443 // CHECK-NEXT:    ret <16 x i8> [[TMP2]]
444 //
445 int8x16_t test_vshrq_m_n_s8(int8x16_t inactive, int8x16_t a, mve_pred16_t p)
446 {
447 #ifdef POLYMORPHIC
448     return vshrq_m(inactive, a, 2, p);
449 #else /* POLYMORPHIC */
450     return vshrq_m_n_s8(inactive, a, 2, p);
451 #endif /* POLYMORPHIC */
452 }
453 
454 // CHECK-LABEL: @test_vshrq_m_n_s16(
455 // CHECK-NEXT:  entry:
456 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
457 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
458 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.shr.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 3, i32 0, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])
459 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
460 //
461 int16x8_t test_vshrq_m_n_s16(int16x8_t inactive, int16x8_t a, mve_pred16_t p)
462 {
463 #ifdef POLYMORPHIC
464     return vshrq_m(inactive, a, 3, p);
465 #else /* POLYMORPHIC */
466     return vshrq_m_n_s16(inactive, a, 3, p);
467 #endif /* POLYMORPHIC */
468 }
469 
470 // CHECK-LABEL: @test_vshrq_m_n_s32(
471 // CHECK-NEXT:  entry:
472 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
473 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
474 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.shr.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 13, i32 0, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])
475 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
476 //
477 int32x4_t test_vshrq_m_n_s32(int32x4_t inactive, int32x4_t a, mve_pred16_t p)
478 {
479 #ifdef POLYMORPHIC
480     return vshrq_m(inactive, a, 13, p);
481 #else /* POLYMORPHIC */
482     return vshrq_m_n_s32(inactive, a, 13, p);
483 #endif /* POLYMORPHIC */
484 }
485 
486 // CHECK-LABEL: @test_vshrq_m_n_u8(
487 // CHECK-NEXT:  entry:
488 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
489 // CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
490 // CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.shr.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 4, i32 1, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])
491 // CHECK-NEXT:    ret <16 x i8> [[TMP2]]
492 //
493 uint8x16_t test_vshrq_m_n_u8(uint8x16_t inactive, uint8x16_t a, mve_pred16_t p)
494 {
495 #ifdef POLYMORPHIC
496     return vshrq_m(inactive, a, 4, p);
497 #else /* POLYMORPHIC */
498     return vshrq_m_n_u8(inactive, a, 4, p);
499 #endif /* POLYMORPHIC */
500 }
501 
502 // CHECK-LABEL: @test_vshrq_m_n_u16(
503 // CHECK-NEXT:  entry:
504 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
505 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
506 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.shr.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 14, i32 1, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])
507 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
508 //
509 uint16x8_t test_vshrq_m_n_u16(uint16x8_t inactive, uint16x8_t a, mve_pred16_t p)
510 {
511 #ifdef POLYMORPHIC
512     return vshrq_m(inactive, a, 14, p);
513 #else /* POLYMORPHIC */
514     return vshrq_m_n_u16(inactive, a, 14, p);
515 #endif /* POLYMORPHIC */
516 }
517 
518 // CHECK-LABEL: @test_vshrq_m_n_u32(
519 // CHECK-NEXT:  entry:
520 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
521 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
522 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.shr.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 21, i32 1, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])
523 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
524 //
525 uint32x4_t test_vshrq_m_n_u32(uint32x4_t inactive, uint32x4_t a, mve_pred16_t p)
526 {
527 #ifdef POLYMORPHIC
528     return vshrq_m(inactive, a, 21, p);
529 #else /* POLYMORPHIC */
530     return vshrq_m_n_u32(inactive, a, 21, p);
531 #endif /* POLYMORPHIC */
532 }
533 
534 // CHECK-LABEL: @test_vshlq_x_n_s8(
535 // CHECK-NEXT:  entry:
536 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
537 // CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
538 // CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.shl.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 1, <16 x i1> [[TMP1]], <16 x i8> undef)
539 // CHECK-NEXT:    ret <16 x i8> [[TMP2]]
540 //
541 int8x16_t test_vshlq_x_n_s8(int8x16_t a, mve_pred16_t p)
542 {
543 #ifdef POLYMORPHIC
544     return vshlq_x_n(a, 1, p);
545 #else /* POLYMORPHIC */
546     return vshlq_x_n_s8(a, 1, p);
547 #endif /* POLYMORPHIC */
548 }
549 
550 // CHECK-LABEL: @test_vshlq_x_n_s16(
551 // CHECK-NEXT:  entry:
552 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
553 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
554 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.shl.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 15, <8 x i1> [[TMP1]], <8 x i16> undef)
555 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
556 //
557 int16x8_t test_vshlq_x_n_s16(int16x8_t a, mve_pred16_t p)
558 {
559 #ifdef POLYMORPHIC
560     return vshlq_x_n(a, 15, p);
561 #else /* POLYMORPHIC */
562     return vshlq_x_n_s16(a, 15, p);
563 #endif /* POLYMORPHIC */
564 }
565 
566 // CHECK-LABEL: @test_vshlq_x_n_s32(
567 // CHECK-NEXT:  entry:
568 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
569 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
570 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.shl.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 13, <4 x i1> [[TMP1]], <4 x i32> undef)
571 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
572 //
573 int32x4_t test_vshlq_x_n_s32(int32x4_t a, mve_pred16_t p)
574 {
575 #ifdef POLYMORPHIC
576     return vshlq_x_n(a, 13, p);
577 #else /* POLYMORPHIC */
578     return vshlq_x_n_s32(a, 13, p);
579 #endif /* POLYMORPHIC */
580 }
581 
582 // CHECK-LABEL: @test_vshlq_x_n_u8(
583 // CHECK-NEXT:  entry:
584 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
585 // CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
586 // CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.shl.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 4, <16 x i1> [[TMP1]], <16 x i8> undef)
587 // CHECK-NEXT:    ret <16 x i8> [[TMP2]]
588 //
589 uint8x16_t test_vshlq_x_n_u8(uint8x16_t a, mve_pred16_t p)
590 {
591 #ifdef POLYMORPHIC
592     return vshlq_x_n(a, 4, p);
593 #else /* POLYMORPHIC */
594     return vshlq_x_n_u8(a, 4, p);
595 #endif /* POLYMORPHIC */
596 }
597 
598 // CHECK-LABEL: @test_vshlq_x_n_u16(
599 // CHECK-NEXT:  entry:
600 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
601 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
602 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.shl.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 10, <8 x i1> [[TMP1]], <8 x i16> undef)
603 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
604 //
605 uint16x8_t test_vshlq_x_n_u16(uint16x8_t a, mve_pred16_t p)
606 {
607 #ifdef POLYMORPHIC
608     return vshlq_x_n(a, 10, p);
609 #else /* POLYMORPHIC */
610     return vshlq_x_n_u16(a, 10, p);
611 #endif /* POLYMORPHIC */
612 }
613 
614 // CHECK-LABEL: @test_vshlq_x_n_u32(
615 // CHECK-NEXT:  entry:
616 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
617 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
618 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.shl.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 30, <4 x i1> [[TMP1]], <4 x i32> undef)
619 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
620 //
621 uint32x4_t test_vshlq_x_n_u32(uint32x4_t a, mve_pred16_t p)
622 {
623 #ifdef POLYMORPHIC
624     return vshlq_x_n(a, 30, p);
625 #else /* POLYMORPHIC */
626     return vshlq_x_n_u32(a, 30, p);
627 #endif /* POLYMORPHIC */
628 }
629 
630 // CHECK-LABEL: @test_vshrq_x_n_s8(
631 // CHECK-NEXT:  entry:
632 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
633 // CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
634 // CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.shr.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 4, i32 0, <16 x i1> [[TMP1]], <16 x i8> undef)
635 // CHECK-NEXT:    ret <16 x i8> [[TMP2]]
636 //
637 int8x16_t test_vshrq_x_n_s8(int8x16_t a, mve_pred16_t p)
638 {
639 #ifdef POLYMORPHIC
640     return vshrq_x(a, 4, p);
641 #else /* POLYMORPHIC */
642     return vshrq_x_n_s8(a, 4, p);
643 #endif /* POLYMORPHIC */
644 }
645 
646 // CHECK-LABEL: @test_vshrq_x_n_s16(
647 // CHECK-NEXT:  entry:
648 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
649 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
650 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.shr.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 10, i32 0, <8 x i1> [[TMP1]], <8 x i16> undef)
651 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
652 //
653 int16x8_t test_vshrq_x_n_s16(int16x8_t a, mve_pred16_t p)
654 {
655 #ifdef POLYMORPHIC
656     return vshrq_x(a, 10, p);
657 #else /* POLYMORPHIC */
658     return vshrq_x_n_s16(a, 10, p);
659 #endif /* POLYMORPHIC */
660 }
661 
662 // CHECK-LABEL: @test_vshrq_x_n_s32(
663 // CHECK-NEXT:  entry:
664 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
665 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
666 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.shr.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 7, i32 0, <4 x i1> [[TMP1]], <4 x i32> undef)
667 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
668 //
669 int32x4_t test_vshrq_x_n_s32(int32x4_t a, mve_pred16_t p)
670 {
671 #ifdef POLYMORPHIC
672     return vshrq_x(a, 7, p);
673 #else /* POLYMORPHIC */
674     return vshrq_x_n_s32(a, 7, p);
675 #endif /* POLYMORPHIC */
676 }
677 
678 // CHECK-LABEL: @test_vshrq_x_n_u8(
679 // CHECK-NEXT:  entry:
680 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
681 // CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
682 // CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.shr.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 7, i32 1, <16 x i1> [[TMP1]], <16 x i8> undef)
683 // CHECK-NEXT:    ret <16 x i8> [[TMP2]]
684 //
685 uint8x16_t test_vshrq_x_n_u8(uint8x16_t a, mve_pred16_t p)
686 {
687 #ifdef POLYMORPHIC
688     return vshrq_x(a, 7, p);
689 #else /* POLYMORPHIC */
690     return vshrq_x_n_u8(a, 7, p);
691 #endif /* POLYMORPHIC */
692 }
693 
694 // CHECK-LABEL: @test_vshrq_x_n_u16(
695 // CHECK-NEXT:  entry:
696 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
697 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
698 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.shr.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 7, i32 1, <8 x i1> [[TMP1]], <8 x i16> undef)
699 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
700 //
701 uint16x8_t test_vshrq_x_n_u16(uint16x8_t a, mve_pred16_t p)
702 {
703 #ifdef POLYMORPHIC
704     return vshrq_x(a, 7, p);
705 #else /* POLYMORPHIC */
706     return vshrq_x_n_u16(a, 7, p);
707 #endif /* POLYMORPHIC */
708 }
709 
710 // CHECK-LABEL: @test_vshrq_x_n_u32(
711 // CHECK-NEXT:  entry:
712 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
713 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
714 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.shr.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 6, i32 1, <4 x i1> [[TMP1]], <4 x i32> undef)
715 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
716 //
717 uint32x4_t test_vshrq_x_n_u32(uint32x4_t a, mve_pred16_t p)
718 {
719 #ifdef POLYMORPHIC
720     return vshrq_x(a, 6, p);
721 #else /* POLYMORPHIC */
722     return vshrq_x_n_u32(a, 6, p);
723 #endif /* POLYMORPHIC */
724 }
725 
726 // CHECK-LABEL: @test_vqshlq_n_s8(
727 // CHECK-NEXT:  entry:
728 // CHECK-NEXT:    [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vqshl.imm.v16i8(<16 x i8> [[A:%.*]], i32 3, i32 0)
729 // CHECK-NEXT:    ret <16 x i8> [[TMP0]]
730 //
731 int8x16_t test_vqshlq_n_s8(int8x16_t a)
732 {
733 #ifdef POLYMORPHIC
734     return vqshlq_n(a, 3);
735 #else /* POLYMORPHIC */
736     return vqshlq_n_s8(a, 3);
737 #endif /* POLYMORPHIC */
738 }
739 
740 // CHECK-LABEL: @test_vqshlq_n_s16(
741 // CHECK-NEXT:  entry:
742 // CHECK-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vqshl.imm.v8i16(<8 x i16> [[A:%.*]], i32 4, i32 0)
743 // CHECK-NEXT:    ret <8 x i16> [[TMP0]]
744 //
745 int16x8_t test_vqshlq_n_s16(int16x8_t a)
746 {
747 #ifdef POLYMORPHIC
748     return vqshlq_n(a, 4);
749 #else /* POLYMORPHIC */
750     return vqshlq_n_s16(a, 4);
751 #endif /* POLYMORPHIC */
752 }
753 
754 // CHECK-LABEL: @test_vqshlq_n_s32(
755 // CHECK-NEXT:  entry:
756 // CHECK-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vqshl.imm.v4i32(<4 x i32> [[A:%.*]], i32 4, i32 0)
757 // CHECK-NEXT:    ret <4 x i32> [[TMP0]]
758 //
759 int32x4_t test_vqshlq_n_s32(int32x4_t a)
760 {
761 #ifdef POLYMORPHIC
762     return vqshlq_n(a, 4);
763 #else /* POLYMORPHIC */
764     return vqshlq_n_s32(a, 4);
765 #endif /* POLYMORPHIC */
766 }
767 
768 // CHECK-LABEL: @test_vqshlq_n_u8(
769 // CHECK-NEXT:  entry:
770 // CHECK-NEXT:    [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vqshl.imm.v16i8(<16 x i8> [[A:%.*]], i32 0, i32 1)
771 // CHECK-NEXT:    ret <16 x i8> [[TMP0]]
772 //
773 uint8x16_t test_vqshlq_n_u8(uint8x16_t a)
774 {
775 #ifdef POLYMORPHIC
776     return vqshlq_n(a, 0);
777 #else /* POLYMORPHIC */
778     return vqshlq_n_u8(a, 0);
779 #endif /* POLYMORPHIC */
780 }
781 
782 // CHECK-LABEL: @test_vqshlq_n_u16(
783 // CHECK-NEXT:  entry:
784 // CHECK-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vqshl.imm.v8i16(<8 x i16> [[A:%.*]], i32 13, i32 1)
785 // CHECK-NEXT:    ret <8 x i16> [[TMP0]]
786 //
787 uint16x8_t test_vqshlq_n_u16(uint16x8_t a)
788 {
789 #ifdef POLYMORPHIC
790     return vqshlq_n(a, 13);
791 #else /* POLYMORPHIC */
792     return vqshlq_n_u16(a, 13);
793 #endif /* POLYMORPHIC */
794 }
795 
796 // CHECK-LABEL: @test_vqshlq_n_u32(
797 // CHECK-NEXT:  entry:
798 // CHECK-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vqshl.imm.v4i32(<4 x i32> [[A:%.*]], i32 6, i32 1)
799 // CHECK-NEXT:    ret <4 x i32> [[TMP0]]
800 //
801 uint32x4_t test_vqshlq_n_u32(uint32x4_t a)
802 {
803 #ifdef POLYMORPHIC
804     return vqshlq_n(a, 6);
805 #else /* POLYMORPHIC */
806     return vqshlq_n_u32(a, 6);
807 #endif /* POLYMORPHIC */
808 }
809 
810 // CHECK-LABEL: @test_vqshluq_n_s8(
811 // CHECK-NEXT:  entry:
812 // CHECK-NEXT:    [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vqshlu.imm.v16i8(<16 x i8> [[A:%.*]], i32 5)
813 // CHECK-NEXT:    ret <16 x i8> [[TMP0]]
814 //
815 uint8x16_t test_vqshluq_n_s8(int8x16_t a)
816 {
817 #ifdef POLYMORPHIC
818     return vqshluq(a, 5);
819 #else /* POLYMORPHIC */
820     return vqshluq_n_s8(a, 5);
821 #endif /* POLYMORPHIC */
822 }
823 
824 // CHECK-LABEL: @test_vqshluq_n_s16(
825 // CHECK-NEXT:  entry:
826 // CHECK-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vqshlu.imm.v8i16(<8 x i16> [[A:%.*]], i32 5)
827 // CHECK-NEXT:    ret <8 x i16> [[TMP0]]
828 //
829 uint16x8_t test_vqshluq_n_s16(int16x8_t a)
830 {
831 #ifdef POLYMORPHIC
832     return vqshluq(a, 5);
833 #else /* POLYMORPHIC */
834     return vqshluq_n_s16(a, 5);
835 #endif /* POLYMORPHIC */
836 }
837 
838 // CHECK-LABEL: @test_vqshluq_n_s32(
839 // CHECK-NEXT:  entry:
840 // CHECK-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vqshlu.imm.v4i32(<4 x i32> [[A:%.*]], i32 4)
841 // CHECK-NEXT:    ret <4 x i32> [[TMP0]]
842 //
843 uint32x4_t test_vqshluq_n_s32(int32x4_t a)
844 {
845 #ifdef POLYMORPHIC
846     return vqshluq(a, 4);
847 #else /* POLYMORPHIC */
848     return vqshluq_n_s32(a, 4);
849 #endif /* POLYMORPHIC */
850 }
851 
852 // CHECK-LABEL: @test_vrshrq_n_s8(
853 // CHECK-NEXT:  entry:
854 // CHECK-NEXT:    [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vrshr.imm.v16i8(<16 x i8> [[A:%.*]], i32 4, i32 0)
855 // CHECK-NEXT:    ret <16 x i8> [[TMP0]]
856 //
857 int8x16_t test_vrshrq_n_s8(int8x16_t a)
858 {
859 #ifdef POLYMORPHIC
860     return vrshrq(a, 4);
861 #else /* POLYMORPHIC */
862     return vrshrq_n_s8(a, 4);
863 #endif /* POLYMORPHIC */
864 }
865 
866 // CHECK-LABEL: @test_vrshrq_n_s16(
867 // CHECK-NEXT:  entry:
868 // CHECK-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vrshr.imm.v8i16(<8 x i16> [[A:%.*]], i32 12, i32 0)
869 // CHECK-NEXT:    ret <8 x i16> [[TMP0]]
870 //
871 int16x8_t test_vrshrq_n_s16(int16x8_t a)
872 {
873 #ifdef POLYMORPHIC
874     return vrshrq(a, 12);
875 #else /* POLYMORPHIC */
876     return vrshrq_n_s16(a, 12);
877 #endif /* POLYMORPHIC */
878 }
879 
880 // CHECK-LABEL: @test_vrshrq_n_s32(
881 // CHECK-NEXT:  entry:
882 // CHECK-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vrshr.imm.v4i32(<4 x i32> [[A:%.*]], i32 30, i32 0)
883 // CHECK-NEXT:    ret <4 x i32> [[TMP0]]
884 //
885 int32x4_t test_vrshrq_n_s32(int32x4_t a)
886 {
887 #ifdef POLYMORPHIC
888     return vrshrq(a, 30);
889 #else /* POLYMORPHIC */
890     return vrshrq_n_s32(a, 30);
891 #endif /* POLYMORPHIC */
892 }
893 
894 // CHECK-LABEL: @test_vrshrq_n_u8(
895 // CHECK-NEXT:  entry:
896 // CHECK-NEXT:    [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vrshr.imm.v16i8(<16 x i8> [[A:%.*]], i32 1, i32 1)
897 // CHECK-NEXT:    ret <16 x i8> [[TMP0]]
898 //
899 uint8x16_t test_vrshrq_n_u8(uint8x16_t a)
900 {
901 #ifdef POLYMORPHIC
902     return vrshrq(a, 1);
903 #else /* POLYMORPHIC */
904     return vrshrq_n_u8(a, 1);
905 #endif /* POLYMORPHIC */
906 }
907 
908 // CHECK-LABEL: @test_vrshrq_n_u16(
909 // CHECK-NEXT:  entry:
910 // CHECK-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vrshr.imm.v8i16(<8 x i16> [[A:%.*]], i32 15, i32 1)
911 // CHECK-NEXT:    ret <8 x i16> [[TMP0]]
912 //
913 uint16x8_t test_vrshrq_n_u16(uint16x8_t a)
914 {
915 #ifdef POLYMORPHIC
916     return vrshrq(a, 15);
917 #else /* POLYMORPHIC */
918     return vrshrq_n_u16(a, 15);
919 #endif /* POLYMORPHIC */
920 }
921 
922 // CHECK-LABEL: @test_vrshrq_n_u32(
923 // CHECK-NEXT:  entry:
924 // CHECK-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vrshr.imm.v4i32(<4 x i32> [[A:%.*]], i32 20, i32 1)
925 // CHECK-NEXT:    ret <4 x i32> [[TMP0]]
926 //
927 uint32x4_t test_vrshrq_n_u32(uint32x4_t a)
928 {
929 #ifdef POLYMORPHIC
930     return vrshrq(a, 20);
931 #else /* POLYMORPHIC */
932     return vrshrq_n_u32(a, 20);
933 #endif /* POLYMORPHIC */
934 }
935 
936 // CHECK-LABEL: @test_vqshlq_m_n_s8(
937 // CHECK-NEXT:  entry:
938 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
939 // CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
940 // CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vqshl.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 6, i32 0, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])
941 // CHECK-NEXT:    ret <16 x i8> [[TMP2]]
942 //
943 int8x16_t test_vqshlq_m_n_s8(int8x16_t inactive, int8x16_t a, mve_pred16_t p)
944 {
945 #ifdef POLYMORPHIC
946     return vqshlq_m_n(inactive, a, 6, p);
947 #else /* POLYMORPHIC */
948     return vqshlq_m_n_s8(inactive, a, 6, p);
949 #endif /* POLYMORPHIC */
950 }
951 
952 // CHECK-LABEL: @test_vqshlq_m_n_s16(
953 // CHECK-NEXT:  entry:
954 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
955 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
956 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vqshl.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 13, i32 0, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])
957 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
958 //
959 int16x8_t test_vqshlq_m_n_s16(int16x8_t inactive, int16x8_t a, mve_pred16_t p)
960 {
961 #ifdef POLYMORPHIC
962     return vqshlq_m_n(inactive, a, 13, p);
963 #else /* POLYMORPHIC */
964     return vqshlq_m_n_s16(inactive, a, 13, p);
965 #endif /* POLYMORPHIC */
966 }
967 
968 // CHECK-LABEL: @test_vqshlq_m_n_s32(
969 // CHECK-NEXT:  entry:
970 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
971 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
972 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vqshl.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 14, i32 0, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])
973 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
974 //
975 int32x4_t test_vqshlq_m_n_s32(int32x4_t inactive, int32x4_t a, mve_pred16_t p)
976 {
977 #ifdef POLYMORPHIC
978     return vqshlq_m_n(inactive, a, 14, p);
979 #else /* POLYMORPHIC */
980     return vqshlq_m_n_s32(inactive, a, 14, p);
981 #endif /* POLYMORPHIC */
982 }
983 
984 // CHECK-LABEL: @test_vqshlq_m_n_u8(
985 // CHECK-NEXT:  entry:
986 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
987 // CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
988 // CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vqshl.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 4, i32 1, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])
989 // CHECK-NEXT:    ret <16 x i8> [[TMP2]]
990 //
991 uint8x16_t test_vqshlq_m_n_u8(uint8x16_t inactive, uint8x16_t a, mve_pred16_t p)
992 {
993 #ifdef POLYMORPHIC
994     return vqshlq_m_n(inactive, a, 4, p);
995 #else /* POLYMORPHIC */
996     return vqshlq_m_n_u8(inactive, a, 4, p);
997 #endif /* POLYMORPHIC */
998 }
999 
1000 // CHECK-LABEL: @test_vqshlq_m_n_u16(
1001 // CHECK-NEXT:  entry:
1002 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1003 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
1004 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vqshl.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 9, i32 1, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])
1005 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
1006 //
1007 uint16x8_t test_vqshlq_m_n_u16(uint16x8_t inactive, uint16x8_t a, mve_pred16_t p)
1008 {
1009 #ifdef POLYMORPHIC
1010     return vqshlq_m_n(inactive, a, 9, p);
1011 #else /* POLYMORPHIC */
1012     return vqshlq_m_n_u16(inactive, a, 9, p);
1013 #endif /* POLYMORPHIC */
1014 }
1015 
1016 // CHECK-LABEL: @test_vqshlq_m_n_u32(
1017 // CHECK-NEXT:  entry:
1018 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1019 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
1020 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vqshl.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 25, i32 1, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])
1021 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
1022 //
1023 uint32x4_t test_vqshlq_m_n_u32(uint32x4_t inactive, uint32x4_t a, mve_pred16_t p)
1024 {
1025 #ifdef POLYMORPHIC
1026     return vqshlq_m_n(inactive, a, 25, p);
1027 #else /* POLYMORPHIC */
1028     return vqshlq_m_n_u32(inactive, a, 25, p);
1029 #endif /* POLYMORPHIC */
1030 }
1031 
1032 // CHECK-LABEL: @test_vqshluq_m_n_s8(
1033 // CHECK-NEXT:  entry:
1034 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1035 // CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
1036 // CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vqshlu.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 2, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])
1037 // CHECK-NEXT:    ret <16 x i8> [[TMP2]]
1038 //
1039 uint8x16_t test_vqshluq_m_n_s8(uint8x16_t inactive, int8x16_t a, mve_pred16_t p)
1040 {
1041 #ifdef POLYMORPHIC
1042     return vqshluq_m(inactive, a, 2, p);
1043 #else /* POLYMORPHIC */
1044     return vqshluq_m_n_s8(inactive, a, 2, p);
1045 #endif /* POLYMORPHIC */
1046 }
1047 
1048 // CHECK-LABEL: @test_vqshluq_m_n_s16(
1049 // CHECK-NEXT:  entry:
1050 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1051 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
1052 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vqshlu.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 12, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])
1053 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
1054 //
1055 uint16x8_t test_vqshluq_m_n_s16(uint16x8_t inactive, int16x8_t a, mve_pred16_t p)
1056 {
1057 #ifdef POLYMORPHIC
1058     return vqshluq_m(inactive, a, 12, p);
1059 #else /* POLYMORPHIC */
1060     return vqshluq_m_n_s16(inactive, a, 12, p);
1061 #endif /* POLYMORPHIC */
1062 }
1063 
1064 // CHECK-LABEL: @test_vqshluq_m_n_s32(
1065 // CHECK-NEXT:  entry:
1066 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1067 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
1068 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vqshlu.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 24, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])
1069 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
1070 //
1071 uint32x4_t test_vqshluq_m_n_s32(uint32x4_t inactive, int32x4_t a, mve_pred16_t p)
1072 {
1073 #ifdef POLYMORPHIC
1074     return vqshluq_m(inactive, a, 24, p);
1075 #else /* POLYMORPHIC */
1076     return vqshluq_m_n_s32(inactive, a, 24, p);
1077 #endif /* POLYMORPHIC */
1078 }
1079 
1080 // CHECK-LABEL: @test_vrshrq_m_n_s8(
1081 // CHECK-NEXT:  entry:
1082 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1083 // CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
1084 // CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vrshr.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 2, i32 0, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])
1085 // CHECK-NEXT:    ret <16 x i8> [[TMP2]]
1086 //
1087 int8x16_t test_vrshrq_m_n_s8(int8x16_t inactive, int8x16_t a, mve_pred16_t p)
1088 {
1089 #ifdef POLYMORPHIC
1090     return vrshrq_m(inactive, a, 2, p);
1091 #else /* POLYMORPHIC */
1092     return vrshrq_m_n_s8(inactive, a, 2, p);
1093 #endif /* POLYMORPHIC */
1094 }
1095 
1096 // CHECK-LABEL: @test_vrshrq_m_n_s16(
1097 // CHECK-NEXT:  entry:
1098 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1099 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
1100 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vrshr.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 11, i32 0, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])
1101 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
1102 //
1103 int16x8_t test_vrshrq_m_n_s16(int16x8_t inactive, int16x8_t a, mve_pred16_t p)
1104 {
1105 #ifdef POLYMORPHIC
1106     return vrshrq_m(inactive, a, 11, p);
1107 #else /* POLYMORPHIC */
1108     return vrshrq_m_n_s16(inactive, a, 11, p);
1109 #endif /* POLYMORPHIC */
1110 }
1111 
1112 // CHECK-LABEL: @test_vrshrq_m_n_s32(
1113 // CHECK-NEXT:  entry:
1114 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1115 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
1116 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vrshr.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 24, i32 0, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])
1117 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
1118 //
1119 int32x4_t test_vrshrq_m_n_s32(int32x4_t inactive, int32x4_t a, mve_pred16_t p)
1120 {
1121 #ifdef POLYMORPHIC
1122     return vrshrq_m(inactive, a, 24, p);
1123 #else /* POLYMORPHIC */
1124     return vrshrq_m_n_s32(inactive, a, 24, p);
1125 #endif /* POLYMORPHIC */
1126 }
1127 
1128 // CHECK-LABEL: @test_vrshrq_m_n_u8(
1129 // CHECK-NEXT:  entry:
1130 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1131 // CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
1132 // CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vrshr.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 7, i32 1, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])
1133 // CHECK-NEXT:    ret <16 x i8> [[TMP2]]
1134 //
1135 uint8x16_t test_vrshrq_m_n_u8(uint8x16_t inactive, uint8x16_t a, mve_pred16_t p)
1136 {
1137 #ifdef POLYMORPHIC
1138     return vrshrq_m(inactive, a, 7, p);
1139 #else /* POLYMORPHIC */
1140     return vrshrq_m_n_u8(inactive, a, 7, p);
1141 #endif /* POLYMORPHIC */
1142 }
1143 
1144 // CHECK-LABEL: @test_vrshrq_m_n_u16(
1145 // CHECK-NEXT:  entry:
1146 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1147 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
1148 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vrshr.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 4, i32 1, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])
1149 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
1150 //
1151 uint16x8_t test_vrshrq_m_n_u16(uint16x8_t inactive, uint16x8_t a, mve_pred16_t p)
1152 {
1153 #ifdef POLYMORPHIC
1154     return vrshrq_m(inactive, a, 4, p);
1155 #else /* POLYMORPHIC */
1156     return vrshrq_m_n_u16(inactive, a, 4, p);
1157 #endif /* POLYMORPHIC */
1158 }
1159 
1160 // CHECK-LABEL: @test_vrshrq_m_n_u32(
1161 // CHECK-NEXT:  entry:
1162 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1163 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
1164 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vrshr.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 27, i32 1, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])
1165 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
1166 //
1167 uint32x4_t test_vrshrq_m_n_u32(uint32x4_t inactive, uint32x4_t a, mve_pred16_t p)
1168 {
1169 #ifdef POLYMORPHIC
1170     return vrshrq_m(inactive, a, 27, p);
1171 #else /* POLYMORPHIC */
1172     return vrshrq_m_n_u32(inactive, a, 27, p);
1173 #endif /* POLYMORPHIC */
1174 }
1175 
1176 // CHECK-LABEL: @test_vrshrq_x_n_s8(
1177 // CHECK-NEXT:  entry:
1178 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1179 // CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
1180 // CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vrshr.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 3, i32 0, <16 x i1> [[TMP1]], <16 x i8> undef)
1181 // CHECK-NEXT:    ret <16 x i8> [[TMP2]]
1182 //
1183 int8x16_t test_vrshrq_x_n_s8(int8x16_t a, mve_pred16_t p)
1184 {
1185 #ifdef POLYMORPHIC
1186     return vrshrq_x(a, 3, p);
1187 #else /* POLYMORPHIC */
1188     return vrshrq_x_n_s8(a, 3, p);
1189 #endif /* POLYMORPHIC */
1190 }
1191 
1192 // CHECK-LABEL: @test_vrshrq_x_n_s16(
1193 // CHECK-NEXT:  entry:
1194 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1195 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
1196 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vrshr.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 12, i32 0, <8 x i1> [[TMP1]], <8 x i16> undef)
1197 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
1198 //
1199 int16x8_t test_vrshrq_x_n_s16(int16x8_t a, mve_pred16_t p)
1200 {
1201 #ifdef POLYMORPHIC
1202     return vrshrq_x(a, 12, p);
1203 #else /* POLYMORPHIC */
1204     return vrshrq_x_n_s16(a, 12, p);
1205 #endif /* POLYMORPHIC */
1206 }
1207 
1208 // CHECK-LABEL: @test_vrshrq_x_n_s32(
1209 // CHECK-NEXT:  entry:
1210 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1211 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
1212 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vrshr.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 20, i32 0, <4 x i1> [[TMP1]], <4 x i32> undef)
1213 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
1214 //
1215 int32x4_t test_vrshrq_x_n_s32(int32x4_t a, mve_pred16_t p)
1216 {
1217 #ifdef POLYMORPHIC
1218     return vrshrq_x(a, 20, p);
1219 #else /* POLYMORPHIC */
1220     return vrshrq_x_n_s32(a, 20, p);
1221 #endif /* POLYMORPHIC */
1222 }
1223 
1224 // CHECK-LABEL: @test_vrshrq_x_n_u8(
1225 // CHECK-NEXT:  entry:
1226 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1227 // CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
1228 // CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vrshr.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 1, i32 1, <16 x i1> [[TMP1]], <16 x i8> undef)
1229 // CHECK-NEXT:    ret <16 x i8> [[TMP2]]
1230 //
1231 uint8x16_t test_vrshrq_x_n_u8(uint8x16_t a, mve_pred16_t p)
1232 {
1233 #ifdef POLYMORPHIC
1234     return vrshrq_x(a, 1, p);
1235 #else /* POLYMORPHIC */
1236     return vrshrq_x_n_u8(a, 1, p);
1237 #endif /* POLYMORPHIC */
1238 }
1239 
1240 // CHECK-LABEL: @test_vrshrq_x_n_u16(
1241 // CHECK-NEXT:  entry:
1242 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1243 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
1244 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vrshr.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 13, i32 1, <8 x i1> [[TMP1]], <8 x i16> undef)
1245 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
1246 //
1247 uint16x8_t test_vrshrq_x_n_u16(uint16x8_t a, mve_pred16_t p)
1248 {
1249 #ifdef POLYMORPHIC
1250     return vrshrq_x(a, 13, p);
1251 #else /* POLYMORPHIC */
1252     return vrshrq_x_n_u16(a, 13, p);
1253 #endif /* POLYMORPHIC */
1254 }
1255 
1256 // CHECK-LABEL: @test_vrshrq_x_n_u32(
1257 // CHECK-NEXT:  entry:
1258 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1259 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
1260 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vrshr.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 6, i32 1, <4 x i1> [[TMP1]], <4 x i32> undef)
1261 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
1262 //
1263 uint32x4_t test_vrshrq_x_n_u32(uint32x4_t a, mve_pred16_t p)
1264 {
1265 #ifdef POLYMORPHIC
1266     return vrshrq_x(a, 6, p);
1267 #else /* POLYMORPHIC */
1268     return vrshrq_x_n_u32(a, 6, p);
1269 #endif /* POLYMORPHIC */
1270 }
1271 
1272 // CHECK-LABEL: @test_vshllbq_n_s8(
1273 // CHECK-NEXT:  entry:
1274 // CHECK-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.v8i16.v16i8(<16 x i8> [[A:%.*]], i32 2, i32 0, i32 0)
1275 // CHECK-NEXT:    ret <8 x i16> [[TMP0]]
1276 //
1277 int16x8_t test_vshllbq_n_s8(int8x16_t a)
1278 {
1279 #ifdef POLYMORPHIC
1280     return vshllbq(a, 2);
1281 #else /* POLYMORPHIC */
1282     return vshllbq_n_s8(a, 2);
1283 #endif /* POLYMORPHIC */
1284 }
1285 
1286 // CHECK-LABEL: @test_vshllbq_n_s16(
1287 // CHECK-NEXT:  entry:
1288 // CHECK-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.v4i32.v8i16(<8 x i16> [[A:%.*]], i32 13, i32 0, i32 0)
1289 // CHECK-NEXT:    ret <4 x i32> [[TMP0]]
1290 //
1291 int32x4_t test_vshllbq_n_s16(int16x8_t a)
1292 {
1293 #ifdef POLYMORPHIC
1294     return vshllbq(a, 13);
1295 #else /* POLYMORPHIC */
1296     return vshllbq_n_s16(a, 13);
1297 #endif /* POLYMORPHIC */
1298 }
1299 
1300 // CHECK-LABEL: @test_vshllbq_n_u8(
1301 // CHECK-NEXT:  entry:
1302 // CHECK-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.v8i16.v16i8(<16 x i8> [[A:%.*]], i32 5, i32 1, i32 0)
1303 // CHECK-NEXT:    ret <8 x i16> [[TMP0]]
1304 //
1305 uint16x8_t test_vshllbq_n_u8(uint8x16_t a)
1306 {
1307 #ifdef POLYMORPHIC
1308     return vshllbq(a, 5);
1309 #else /* POLYMORPHIC */
1310     return vshllbq_n_u8(a, 5);
1311 #endif /* POLYMORPHIC */
1312 }
1313 
1314 // CHECK-LABEL: @test_vshllbq_n_u16(
1315 // CHECK-NEXT:  entry:
1316 // CHECK-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.v4i32.v8i16(<8 x i16> [[A:%.*]], i32 6, i32 1, i32 0)
1317 // CHECK-NEXT:    ret <4 x i32> [[TMP0]]
1318 //
1319 uint32x4_t test_vshllbq_n_u16(uint16x8_t a)
1320 {
1321 #ifdef POLYMORPHIC
1322     return vshllbq(a, 6);
1323 #else /* POLYMORPHIC */
1324     return vshllbq_n_u16(a, 6);
1325 #endif /* POLYMORPHIC */
1326 }
1327 
1328 // CHECK-LABEL: @test_vshlltq_n_s8(
1329 // CHECK-NEXT:  entry:
1330 // CHECK-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.v8i16.v16i8(<16 x i8> [[A:%.*]], i32 7, i32 0, i32 1)
1331 // CHECK-NEXT:    ret <8 x i16> [[TMP0]]
1332 //
1333 int16x8_t test_vshlltq_n_s8(int8x16_t a)
1334 {
1335 #ifdef POLYMORPHIC
1336     return vshlltq(a, 7);
1337 #else /* POLYMORPHIC */
1338     return vshlltq_n_s8(a, 7);
1339 #endif /* POLYMORPHIC */
1340 }
1341 
1342 // CHECK-LABEL: @test_vshlltq_n_s16(
1343 // CHECK-NEXT:  entry:
1344 // CHECK-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.v4i32.v8i16(<8 x i16> [[A:%.*]], i32 2, i32 0, i32 1)
1345 // CHECK-NEXT:    ret <4 x i32> [[TMP0]]
1346 //
1347 int32x4_t test_vshlltq_n_s16(int16x8_t a)
1348 {
1349 #ifdef POLYMORPHIC
1350     return vshlltq(a, 2);
1351 #else /* POLYMORPHIC */
1352     return vshlltq_n_s16(a, 2);
1353 #endif /* POLYMORPHIC */
1354 }
1355 
1356 // CHECK-LABEL: @test_vshlltq_n_u8(
1357 // CHECK-NEXT:  entry:
1358 // CHECK-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.v8i16.v16i8(<16 x i8> [[A:%.*]], i32 7, i32 1, i32 1)
1359 // CHECK-NEXT:    ret <8 x i16> [[TMP0]]
1360 //
1361 uint16x8_t test_vshlltq_n_u8(uint8x16_t a)
1362 {
1363 #ifdef POLYMORPHIC
1364     return vshlltq(a, 7);
1365 #else /* POLYMORPHIC */
1366     return vshlltq_n_u8(a, 7);
1367 #endif /* POLYMORPHIC */
1368 }
1369 
1370 // CHECK-LABEL: @test_vshlltq_n_u16(
1371 // CHECK-NEXT:  entry:
1372 // CHECK-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.v4i32.v8i16(<8 x i16> [[A:%.*]], i32 14, i32 1, i32 1)
1373 // CHECK-NEXT:    ret <4 x i32> [[TMP0]]
1374 //
1375 uint32x4_t test_vshlltq_n_u16(uint16x8_t a)
1376 {
1377 #ifdef POLYMORPHIC
1378     return vshlltq(a, 14);
1379 #else /* POLYMORPHIC */
1380     return vshlltq_n_u16(a, 14);
1381 #endif /* POLYMORPHIC */
1382 }
1383 
1384 // CHECK-LABEL: @test_vshllbq_m_n_s8(
1385 // CHECK-NEXT:  entry:
1386 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1387 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
1388 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.predicated.v8i16.v16i8.v8i1(<16 x i8> [[A:%.*]], i32 6, i32 0, i32 0, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])
1389 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
1390 //
1391 int16x8_t test_vshllbq_m_n_s8(int16x8_t inactive, int8x16_t a, mve_pred16_t p)
1392 {
1393 #ifdef POLYMORPHIC
1394     return vshllbq_m(inactive, a, 6, p);
1395 #else /* POLYMORPHIC */
1396     return vshllbq_m_n_s8(inactive, a, 6, p);
1397 #endif /* POLYMORPHIC */
1398 }
1399 
1400 // CHECK-LABEL: @test_vshllbq_m_n_s16(
1401 // CHECK-NEXT:  entry:
1402 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1403 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
1404 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.predicated.v4i32.v8i16.v4i1(<8 x i16> [[A:%.*]], i32 10, i32 0, i32 0, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])
1405 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
1406 //
1407 int32x4_t test_vshllbq_m_n_s16(int32x4_t inactive, int16x8_t a, mve_pred16_t p)
1408 {
1409 #ifdef POLYMORPHIC
1410     return vshllbq_m(inactive, a, 10, p);
1411 #else /* POLYMORPHIC */
1412     return vshllbq_m_n_s16(inactive, a, 10, p);
1413 #endif /* POLYMORPHIC */
1414 }
1415 
1416 // CHECK-LABEL: @test_vshllbq_m_n_u8(
1417 // CHECK-NEXT:  entry:
1418 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1419 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
1420 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.predicated.v8i16.v16i8.v8i1(<16 x i8> [[A:%.*]], i32 3, i32 1, i32 0, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])
1421 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
1422 //
1423 uint16x8_t test_vshllbq_m_n_u8(uint16x8_t inactive, uint8x16_t a, mve_pred16_t p)
1424 {
1425 #ifdef POLYMORPHIC
1426     return vshllbq_m(inactive, a, 3, p);
1427 #else /* POLYMORPHIC */
1428     return vshllbq_m_n_u8(inactive, a, 3, p);
1429 #endif /* POLYMORPHIC */
1430 }
1431 
1432 // CHECK-LABEL: @test_vshllbq_m_n_u16(
1433 // CHECK-NEXT:  entry:
1434 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1435 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
1436 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.predicated.v4i32.v8i16.v4i1(<8 x i16> [[A:%.*]], i32 14, i32 1, i32 0, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])
1437 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
1438 //
1439 uint32x4_t test_vshllbq_m_n_u16(uint32x4_t inactive, uint16x8_t a, mve_pred16_t p)
1440 {
1441 #ifdef POLYMORPHIC
1442     return vshllbq_m(inactive, a, 14, p);
1443 #else /* POLYMORPHIC */
1444     return vshllbq_m_n_u16(inactive, a, 14, p);
1445 #endif /* POLYMORPHIC */
1446 }
1447 
1448 // CHECK-LABEL: @test_vshlltq_m_n_s8(
1449 // CHECK-NEXT:  entry:
1450 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1451 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
1452 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.predicated.v8i16.v16i8.v8i1(<16 x i8> [[A:%.*]], i32 4, i32 0, i32 1, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])
1453 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
1454 //
1455 int16x8_t test_vshlltq_m_n_s8(int16x8_t inactive, int8x16_t a, mve_pred16_t p)
1456 {
1457 #ifdef POLYMORPHIC
1458     return vshlltq_m(inactive, a, 4, p);
1459 #else /* POLYMORPHIC */
1460     return vshlltq_m_n_s8(inactive, a, 4, p);
1461 #endif /* POLYMORPHIC */
1462 }
1463 
1464 // CHECK-LABEL: @test_vshlltq_m_n_s16(
1465 // CHECK-NEXT:  entry:
1466 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1467 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
1468 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.predicated.v4i32.v8i16.v4i1(<8 x i16> [[A:%.*]], i32 12, i32 0, i32 1, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])
1469 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
1470 //
1471 int32x4_t test_vshlltq_m_n_s16(int32x4_t inactive, int16x8_t a, mve_pred16_t p)
1472 {
1473 #ifdef POLYMORPHIC
1474     return vshlltq_m(inactive, a, 12, p);
1475 #else /* POLYMORPHIC */
1476     return vshlltq_m_n_s16(inactive, a, 12, p);
1477 #endif /* POLYMORPHIC */
1478 }
1479 
1480 // CHECK-LABEL: @test_vshlltq_m_n_u8(
1481 // CHECK-NEXT:  entry:
1482 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1483 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
1484 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.predicated.v8i16.v16i8.v8i1(<16 x i8> [[A:%.*]], i32 2, i32 1, i32 1, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])
1485 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
1486 //
1487 uint16x8_t test_vshlltq_m_n_u8(uint16x8_t inactive, uint8x16_t a, mve_pred16_t p)
1488 {
1489 #ifdef POLYMORPHIC
1490     return vshlltq_m(inactive, a, 2, p);
1491 #else /* POLYMORPHIC */
1492     return vshlltq_m_n_u8(inactive, a, 2, p);
1493 #endif /* POLYMORPHIC */
1494 }
1495 
1496 // CHECK-LABEL: @test_vshlltq_m_n_u16(
1497 // CHECK-NEXT:  entry:
1498 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1499 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
1500 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.predicated.v4i32.v8i16.v4i1(<8 x i16> [[A:%.*]], i32 9, i32 1, i32 1, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])
1501 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
1502 //
1503 uint32x4_t test_vshlltq_m_n_u16(uint32x4_t inactive, uint16x8_t a, mve_pred16_t p)
1504 {
1505 #ifdef POLYMORPHIC
1506     return vshlltq_m(inactive, a, 9, p);
1507 #else /* POLYMORPHIC */
1508     return vshlltq_m_n_u16(inactive, a, 9, p);
1509 #endif /* POLYMORPHIC */
1510 }
1511 
1512 // CHECK-LABEL: @test_vshllbq_x_n_s8(
1513 // CHECK-NEXT:  entry:
1514 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1515 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
1516 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.predicated.v8i16.v16i8.v8i1(<16 x i8> [[A:%.*]], i32 1, i32 0, i32 0, <8 x i1> [[TMP1]], <8 x i16> undef)
1517 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
1518 //
1519 int16x8_t test_vshllbq_x_n_s8(int8x16_t a, mve_pred16_t p)
1520 {
1521 #ifdef POLYMORPHIC
1522     return vshllbq_x(a, 1, p);
1523 #else /* POLYMORPHIC */
1524     return vshllbq_x_n_s8(a, 1, p);
1525 #endif /* POLYMORPHIC */
1526 }
1527 
1528 // CHECK-LABEL: @test_vshllbq_x_n_s16(
1529 // CHECK-NEXT:  entry:
1530 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1531 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
1532 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.predicated.v4i32.v8i16.v4i1(<8 x i16> [[A:%.*]], i32 10, i32 0, i32 0, <4 x i1> [[TMP1]], <4 x i32> undef)
1533 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
1534 //
1535 int32x4_t test_vshllbq_x_n_s16(int16x8_t a, mve_pred16_t p)
1536 {
1537 #ifdef POLYMORPHIC
1538     return vshllbq_x(a, 10, p);
1539 #else /* POLYMORPHIC */
1540     return vshllbq_x_n_s16(a, 10, p);
1541 #endif /* POLYMORPHIC */
1542 }
1543 
1544 // CHECK-LABEL: @test_vshllbq_x_n_u8(
1545 // CHECK-NEXT:  entry:
1546 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1547 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
1548 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.predicated.v8i16.v16i8.v8i1(<16 x i8> [[A:%.*]], i32 6, i32 1, i32 0, <8 x i1> [[TMP1]], <8 x i16> undef)
1549 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
1550 //
1551 uint16x8_t test_vshllbq_x_n_u8(uint8x16_t a, mve_pred16_t p)
1552 {
1553 #ifdef POLYMORPHIC
1554     return vshllbq_x(a, 6, p);
1555 #else /* POLYMORPHIC */
1556     return vshllbq_x_n_u8(a, 6, p);
1557 #endif /* POLYMORPHIC */
1558 }
1559 
1560 // CHECK-LABEL: @test_vshllbq_x_n_u16(
1561 // CHECK-NEXT:  entry:
1562 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1563 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
1564 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.predicated.v4i32.v8i16.v4i1(<8 x i16> [[A:%.*]], i32 10, i32 1, i32 0, <4 x i1> [[TMP1]], <4 x i32> undef)
1565 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
1566 //
1567 uint32x4_t test_vshllbq_x_n_u16(uint16x8_t a, mve_pred16_t p)
1568 {
1569 #ifdef POLYMORPHIC
1570     return vshllbq_x(a, 10, p);
1571 #else /* POLYMORPHIC */
1572     return vshllbq_x_n_u16(a, 10, p);
1573 #endif /* POLYMORPHIC */
1574 }
1575 
1576 // CHECK-LABEL: @test_vshlltq_x_n_s8(
1577 // CHECK-NEXT:  entry:
1578 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1579 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
1580 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.predicated.v8i16.v16i8.v8i1(<16 x i8> [[A:%.*]], i32 2, i32 0, i32 1, <8 x i1> [[TMP1]], <8 x i16> undef)
1581 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
1582 //
1583 int16x8_t test_vshlltq_x_n_s8(int8x16_t a, mve_pred16_t p)
1584 {
1585 #ifdef POLYMORPHIC
1586     return vshlltq_x(a, 2, p);
1587 #else /* POLYMORPHIC */
1588     return vshlltq_x_n_s8(a, 2, p);
1589 #endif /* POLYMORPHIC */
1590 }
1591 
1592 // CHECK-LABEL: @test_vshlltq_x_n_s16(
1593 // CHECK-NEXT:  entry:
1594 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1595 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
1596 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.predicated.v4i32.v8i16.v4i1(<8 x i16> [[A:%.*]], i32 6, i32 0, i32 1, <4 x i1> [[TMP1]], <4 x i32> undef)
1597 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
1598 //
1599 int32x4_t test_vshlltq_x_n_s16(int16x8_t a, mve_pred16_t p)
1600 {
1601 #ifdef POLYMORPHIC
1602     return vshlltq_x(a, 6, p);
1603 #else /* POLYMORPHIC */
1604     return vshlltq_x_n_s16(a, 6, p);
1605 #endif /* POLYMORPHIC */
1606 }
1607 
1608 // CHECK-LABEL: @test_vshlltq_x_n_u8(
1609 // CHECK-NEXT:  entry:
1610 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1611 // CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
1612 // CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.predicated.v8i16.v16i8.v8i1(<16 x i8> [[A:%.*]], i32 5, i32 1, i32 1, <8 x i1> [[TMP1]], <8 x i16> undef)
1613 // CHECK-NEXT:    ret <8 x i16> [[TMP2]]
1614 //
1615 uint16x8_t test_vshlltq_x_n_u8(uint8x16_t a, mve_pred16_t p)
1616 {
1617 #ifdef POLYMORPHIC
1618     return vshlltq_x(a, 5, p);
1619 #else /* POLYMORPHIC */
1620     return vshlltq_x_n_u8(a, 5, p);
1621 #endif /* POLYMORPHIC */
1622 }
1623 
1624 // CHECK-LABEL: @test_vshlltq_x_n_u16(
1625 // CHECK-NEXT:  entry:
1626 // CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
1627 // CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
1628 // CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.predicated.v4i32.v8i16.v4i1(<8 x i16> [[A:%.*]], i32 3, i32 1, i32 1, <4 x i1> [[TMP1]], <4 x i32> undef)
1629 // CHECK-NEXT:    ret <4 x i32> [[TMP2]]
1630 //
1631 uint32x4_t test_vshlltq_x_n_u16(uint16x8_t a, mve_pred16_t p)
1632 {
1633 #ifdef POLYMORPHIC
1634     return vshlltq_x(a, 3, p);
1635 #else /* POLYMORPHIC */
1636     return vshlltq_x_n_u16(a, 3, p);
1637 #endif /* POLYMORPHIC */
1638 }
1639 
1640