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 -fallow-half-arguments-and-returns -O0 -disable-O0-optnone -S -emit-llvm -o - %s | opt -S -mem2reg -sroa -early-cse | FileCheck %s --check-prefix=BOTH --check-prefix=LE
3 // RUN: %clang_cc1 -triple thumbv8.1m.main-none-none-eabi -target-feature +mve.fp -mfloat-abi hard -fallow-half-arguments-and-returns -O0 -disable-O0-optnone -DPOLYMORPHIC -S -emit-llvm -o - %s | opt -S -mem2reg -sroa -early-cse | FileCheck %s --check-prefix=BOTH --check-prefix=LE
4 // RUN: %clang_cc1 -triple thumbebv8.1m.main-arm-none-eabi -target-feature +mve.fp -mfloat-abi hard -fallow-half-arguments-and-returns -O0 -disable-O0-optnone -S -emit-llvm -o - %s | opt -S -mem2reg -sroa -early-cse | FileCheck %s --check-prefix=BOTH --check-prefix=BE
5 // RUN: %clang_cc1 -triple thumbebv8.1m.main-arm-none-eabi -target-feature +mve.fp -mfloat-abi hard -fallow-half-arguments-and-returns -O0 -disable-O0-optnone -DPOLYMORPHIC -S -emit-llvm -o - %s | opt -S -mem2reg -sroa -early-cse | FileCheck %s --check-prefix=BOTH --check-prefix=BE
6 
7 #include <arm_mve.h>
8 
9 // LE-LABEL: @test_vreinterpretq_f16_f32(
10 // LE-NEXT:  entry:
11 // LE-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <8 x half>
12 // LE-NEXT:    ret <8 x half> [[TMP0]]
13 //
14 // BE-LABEL: @test_vreinterpretq_f16_f32(
15 // BE-NEXT:  entry:
16 // BE-NEXT:    [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v4f32(<4 x float> [[A:%.*]])
17 // BE-NEXT:    ret <8 x half> [[TMP0]]
18 //
test_vreinterpretq_f16_f32(float32x4_t a)19 float16x8_t test_vreinterpretq_f16_f32(float32x4_t a)
20 {
21 #ifdef POLYMORPHIC
22     return vreinterpretq_f16(a);
23 #else /* POLYMORPHIC */
24     return vreinterpretq_f16_f32(a);
25 #endif /* POLYMORPHIC */
26 }
27 
28 // BOTH-LABEL: @test_vreinterpretq_f16_s16(
29 // BOTH-NEXT:  entry:
30 // BOTH-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <8 x half>
31 // BOTH-NEXT:    ret <8 x half> [[TMP0]]
32 //
test_vreinterpretq_f16_s16(int16x8_t a)33 float16x8_t test_vreinterpretq_f16_s16(int16x8_t a)
34 {
35 #ifdef POLYMORPHIC
36     return vreinterpretq_f16(a);
37 #else /* POLYMORPHIC */
38     return vreinterpretq_f16_s16(a);
39 #endif /* POLYMORPHIC */
40 }
41 
42 // LE-LABEL: @test_vreinterpretq_f16_s32(
43 // LE-NEXT:  entry:
44 // LE-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x half>
45 // LE-NEXT:    ret <8 x half> [[TMP0]]
46 //
47 // BE-LABEL: @test_vreinterpretq_f16_s32(
48 // BE-NEXT:  entry:
49 // BE-NEXT:    [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v4i32(<4 x i32> [[A:%.*]])
50 // BE-NEXT:    ret <8 x half> [[TMP0]]
51 //
test_vreinterpretq_f16_s32(int32x4_t a)52 float16x8_t test_vreinterpretq_f16_s32(int32x4_t a)
53 {
54 #ifdef POLYMORPHIC
55     return vreinterpretq_f16(a);
56 #else /* POLYMORPHIC */
57     return vreinterpretq_f16_s32(a);
58 #endif /* POLYMORPHIC */
59 }
60 
61 // LE-LABEL: @test_vreinterpretq_f16_s64(
62 // LE-NEXT:  entry:
63 // LE-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <8 x half>
64 // LE-NEXT:    ret <8 x half> [[TMP0]]
65 //
66 // BE-LABEL: @test_vreinterpretq_f16_s64(
67 // BE-NEXT:  entry:
68 // BE-NEXT:    [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v2i64(<2 x i64> [[A:%.*]])
69 // BE-NEXT:    ret <8 x half> [[TMP0]]
70 //
test_vreinterpretq_f16_s64(int64x2_t a)71 float16x8_t test_vreinterpretq_f16_s64(int64x2_t a)
72 {
73 #ifdef POLYMORPHIC
74     return vreinterpretq_f16(a);
75 #else /* POLYMORPHIC */
76     return vreinterpretq_f16_s64(a);
77 #endif /* POLYMORPHIC */
78 }
79 
80 // LE-LABEL: @test_vreinterpretq_f16_s8(
81 // LE-NEXT:  entry:
82 // LE-NEXT:    [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <8 x half>
83 // LE-NEXT:    ret <8 x half> [[TMP0]]
84 //
85 // BE-LABEL: @test_vreinterpretq_f16_s8(
86 // BE-NEXT:  entry:
87 // BE-NEXT:    [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v16i8(<16 x i8> [[A:%.*]])
88 // BE-NEXT:    ret <8 x half> [[TMP0]]
89 //
test_vreinterpretq_f16_s8(int8x16_t a)90 float16x8_t test_vreinterpretq_f16_s8(int8x16_t a)
91 {
92 #ifdef POLYMORPHIC
93     return vreinterpretq_f16(a);
94 #else /* POLYMORPHIC */
95     return vreinterpretq_f16_s8(a);
96 #endif /* POLYMORPHIC */
97 }
98 
99 // BOTH-LABEL: @test_vreinterpretq_f16_u16(
100 // BOTH-NEXT:  entry:
101 // BOTH-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <8 x half>
102 // BOTH-NEXT:    ret <8 x half> [[TMP0]]
103 //
test_vreinterpretq_f16_u16(uint16x8_t a)104 float16x8_t test_vreinterpretq_f16_u16(uint16x8_t a)
105 {
106 #ifdef POLYMORPHIC
107     return vreinterpretq_f16(a);
108 #else /* POLYMORPHIC */
109     return vreinterpretq_f16_u16(a);
110 #endif /* POLYMORPHIC */
111 }
112 
113 // LE-LABEL: @test_vreinterpretq_f16_u32(
114 // LE-NEXT:  entry:
115 // LE-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x half>
116 // LE-NEXT:    ret <8 x half> [[TMP0]]
117 //
118 // BE-LABEL: @test_vreinterpretq_f16_u32(
119 // BE-NEXT:  entry:
120 // BE-NEXT:    [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v4i32(<4 x i32> [[A:%.*]])
121 // BE-NEXT:    ret <8 x half> [[TMP0]]
122 //
test_vreinterpretq_f16_u32(uint32x4_t a)123 float16x8_t test_vreinterpretq_f16_u32(uint32x4_t a)
124 {
125 #ifdef POLYMORPHIC
126     return vreinterpretq_f16(a);
127 #else /* POLYMORPHIC */
128     return vreinterpretq_f16_u32(a);
129 #endif /* POLYMORPHIC */
130 }
131 
132 // LE-LABEL: @test_vreinterpretq_f16_u64(
133 // LE-NEXT:  entry:
134 // LE-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <8 x half>
135 // LE-NEXT:    ret <8 x half> [[TMP0]]
136 //
137 // BE-LABEL: @test_vreinterpretq_f16_u64(
138 // BE-NEXT:  entry:
139 // BE-NEXT:    [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v2i64(<2 x i64> [[A:%.*]])
140 // BE-NEXT:    ret <8 x half> [[TMP0]]
141 //
test_vreinterpretq_f16_u64(uint64x2_t a)142 float16x8_t test_vreinterpretq_f16_u64(uint64x2_t a)
143 {
144 #ifdef POLYMORPHIC
145     return vreinterpretq_f16(a);
146 #else /* POLYMORPHIC */
147     return vreinterpretq_f16_u64(a);
148 #endif /* POLYMORPHIC */
149 }
150 
151 // LE-LABEL: @test_vreinterpretq_f16_u8(
152 // LE-NEXT:  entry:
153 // LE-NEXT:    [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <8 x half>
154 // LE-NEXT:    ret <8 x half> [[TMP0]]
155 //
156 // BE-LABEL: @test_vreinterpretq_f16_u8(
157 // BE-NEXT:  entry:
158 // BE-NEXT:    [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v16i8(<16 x i8> [[A:%.*]])
159 // BE-NEXT:    ret <8 x half> [[TMP0]]
160 //
test_vreinterpretq_f16_u8(uint8x16_t a)161 float16x8_t test_vreinterpretq_f16_u8(uint8x16_t a)
162 {
163 #ifdef POLYMORPHIC
164     return vreinterpretq_f16(a);
165 #else /* POLYMORPHIC */
166     return vreinterpretq_f16_u8(a);
167 #endif /* POLYMORPHIC */
168 }
169 
170 // LE-LABEL: @test_vreinterpretq_f32_f16(
171 // LE-NEXT:  entry:
172 // LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <4 x float>
173 // LE-NEXT:    ret <4 x float> [[TMP0]]
174 //
175 // BE-LABEL: @test_vreinterpretq_f32_f16(
176 // BE-NEXT:  entry:
177 // BE-NEXT:    [[TMP0:%.*]] = call <4 x float> @llvm.arm.mve.vreinterpretq.v4f32.v8f16(<8 x half> [[A:%.*]])
178 // BE-NEXT:    ret <4 x float> [[TMP0]]
179 //
test_vreinterpretq_f32_f16(float16x8_t a)180 float32x4_t test_vreinterpretq_f32_f16(float16x8_t a)
181 {
182 #ifdef POLYMORPHIC
183     return vreinterpretq_f32(a);
184 #else /* POLYMORPHIC */
185     return vreinterpretq_f32_f16(a);
186 #endif /* POLYMORPHIC */
187 }
188 
189 // LE-LABEL: @test_vreinterpretq_f32_s16(
190 // LE-NEXT:  entry:
191 // LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <4 x float>
192 // LE-NEXT:    ret <4 x float> [[TMP0]]
193 //
194 // BE-LABEL: @test_vreinterpretq_f32_s16(
195 // BE-NEXT:  entry:
196 // BE-NEXT:    [[TMP0:%.*]] = call <4 x float> @llvm.arm.mve.vreinterpretq.v4f32.v8i16(<8 x i16> [[A:%.*]])
197 // BE-NEXT:    ret <4 x float> [[TMP0]]
198 //
test_vreinterpretq_f32_s16(int16x8_t a)199 float32x4_t test_vreinterpretq_f32_s16(int16x8_t a)
200 {
201 #ifdef POLYMORPHIC
202     return vreinterpretq_f32(a);
203 #else /* POLYMORPHIC */
204     return vreinterpretq_f32_s16(a);
205 #endif /* POLYMORPHIC */
206 }
207 
208 // BOTH-LABEL: @test_vreinterpretq_f32_s32(
209 // BOTH-NEXT:  entry:
210 // BOTH-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <4 x float>
211 // BOTH-NEXT:    ret <4 x float> [[TMP0]]
212 //
test_vreinterpretq_f32_s32(int32x4_t a)213 float32x4_t test_vreinterpretq_f32_s32(int32x4_t a)
214 {
215 #ifdef POLYMORPHIC
216     return vreinterpretq_f32(a);
217 #else /* POLYMORPHIC */
218     return vreinterpretq_f32_s32(a);
219 #endif /* POLYMORPHIC */
220 }
221 
222 // LE-LABEL: @test_vreinterpretq_f32_s64(
223 // LE-NEXT:  entry:
224 // LE-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <4 x float>
225 // LE-NEXT:    ret <4 x float> [[TMP0]]
226 //
227 // BE-LABEL: @test_vreinterpretq_f32_s64(
228 // BE-NEXT:  entry:
229 // BE-NEXT:    [[TMP0:%.*]] = call <4 x float> @llvm.arm.mve.vreinterpretq.v4f32.v2i64(<2 x i64> [[A:%.*]])
230 // BE-NEXT:    ret <4 x float> [[TMP0]]
231 //
test_vreinterpretq_f32_s64(int64x2_t a)232 float32x4_t test_vreinterpretq_f32_s64(int64x2_t a)
233 {
234 #ifdef POLYMORPHIC
235     return vreinterpretq_f32(a);
236 #else /* POLYMORPHIC */
237     return vreinterpretq_f32_s64(a);
238 #endif /* POLYMORPHIC */
239 }
240 
241 // LE-LABEL: @test_vreinterpretq_f32_s8(
242 // LE-NEXT:  entry:
243 // LE-NEXT:    [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <4 x float>
244 // LE-NEXT:    ret <4 x float> [[TMP0]]
245 //
246 // BE-LABEL: @test_vreinterpretq_f32_s8(
247 // BE-NEXT:  entry:
248 // BE-NEXT:    [[TMP0:%.*]] = call <4 x float> @llvm.arm.mve.vreinterpretq.v4f32.v16i8(<16 x i8> [[A:%.*]])
249 // BE-NEXT:    ret <4 x float> [[TMP0]]
250 //
test_vreinterpretq_f32_s8(int8x16_t a)251 float32x4_t test_vreinterpretq_f32_s8(int8x16_t a)
252 {
253 #ifdef POLYMORPHIC
254     return vreinterpretq_f32(a);
255 #else /* POLYMORPHIC */
256     return vreinterpretq_f32_s8(a);
257 #endif /* POLYMORPHIC */
258 }
259 
260 // LE-LABEL: @test_vreinterpretq_f32_u16(
261 // LE-NEXT:  entry:
262 // LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <4 x float>
263 // LE-NEXT:    ret <4 x float> [[TMP0]]
264 //
265 // BE-LABEL: @test_vreinterpretq_f32_u16(
266 // BE-NEXT:  entry:
267 // BE-NEXT:    [[TMP0:%.*]] = call <4 x float> @llvm.arm.mve.vreinterpretq.v4f32.v8i16(<8 x i16> [[A:%.*]])
268 // BE-NEXT:    ret <4 x float> [[TMP0]]
269 //
test_vreinterpretq_f32_u16(uint16x8_t a)270 float32x4_t test_vreinterpretq_f32_u16(uint16x8_t a)
271 {
272 #ifdef POLYMORPHIC
273     return vreinterpretq_f32(a);
274 #else /* POLYMORPHIC */
275     return vreinterpretq_f32_u16(a);
276 #endif /* POLYMORPHIC */
277 }
278 
279 // BOTH-LABEL: @test_vreinterpretq_f32_u32(
280 // BOTH-NEXT:  entry:
281 // BOTH-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <4 x float>
282 // BOTH-NEXT:    ret <4 x float> [[TMP0]]
283 //
test_vreinterpretq_f32_u32(uint32x4_t a)284 float32x4_t test_vreinterpretq_f32_u32(uint32x4_t a)
285 {
286 #ifdef POLYMORPHIC
287     return vreinterpretq_f32(a);
288 #else /* POLYMORPHIC */
289     return vreinterpretq_f32_u32(a);
290 #endif /* POLYMORPHIC */
291 }
292 
293 // LE-LABEL: @test_vreinterpretq_f32_u64(
294 // LE-NEXT:  entry:
295 // LE-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <4 x float>
296 // LE-NEXT:    ret <4 x float> [[TMP0]]
297 //
298 // BE-LABEL: @test_vreinterpretq_f32_u64(
299 // BE-NEXT:  entry:
300 // BE-NEXT:    [[TMP0:%.*]] = call <4 x float> @llvm.arm.mve.vreinterpretq.v4f32.v2i64(<2 x i64> [[A:%.*]])
301 // BE-NEXT:    ret <4 x float> [[TMP0]]
302 //
test_vreinterpretq_f32_u64(uint64x2_t a)303 float32x4_t test_vreinterpretq_f32_u64(uint64x2_t a)
304 {
305 #ifdef POLYMORPHIC
306     return vreinterpretq_f32(a);
307 #else /* POLYMORPHIC */
308     return vreinterpretq_f32_u64(a);
309 #endif /* POLYMORPHIC */
310 }
311 
312 // LE-LABEL: @test_vreinterpretq_f32_u8(
313 // LE-NEXT:  entry:
314 // LE-NEXT:    [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <4 x float>
315 // LE-NEXT:    ret <4 x float> [[TMP0]]
316 //
317 // BE-LABEL: @test_vreinterpretq_f32_u8(
318 // BE-NEXT:  entry:
319 // BE-NEXT:    [[TMP0:%.*]] = call <4 x float> @llvm.arm.mve.vreinterpretq.v4f32.v16i8(<16 x i8> [[A:%.*]])
320 // BE-NEXT:    ret <4 x float> [[TMP0]]
321 //
test_vreinterpretq_f32_u8(uint8x16_t a)322 float32x4_t test_vreinterpretq_f32_u8(uint8x16_t a)
323 {
324 #ifdef POLYMORPHIC
325     return vreinterpretq_f32(a);
326 #else /* POLYMORPHIC */
327     return vreinterpretq_f32_u8(a);
328 #endif /* POLYMORPHIC */
329 }
330 
331 // BOTH-LABEL: @test_vreinterpretq_s16_f16(
332 // BOTH-NEXT:  entry:
333 // BOTH-NEXT:    [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <8 x i16>
334 // BOTH-NEXT:    ret <8 x i16> [[TMP0]]
335 //
test_vreinterpretq_s16_f16(float16x8_t a)336 int16x8_t test_vreinterpretq_s16_f16(float16x8_t a)
337 {
338 #ifdef POLYMORPHIC
339     return vreinterpretq_s16(a);
340 #else /* POLYMORPHIC */
341     return vreinterpretq_s16_f16(a);
342 #endif /* POLYMORPHIC */
343 }
344 
345 // LE-LABEL: @test_vreinterpretq_s16_f32(
346 // LE-NEXT:  entry:
347 // LE-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <8 x i16>
348 // LE-NEXT:    ret <8 x i16> [[TMP0]]
349 //
350 // BE-LABEL: @test_vreinterpretq_s16_f32(
351 // BE-NEXT:  entry:
352 // BE-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v4f32(<4 x float> [[A:%.*]])
353 // BE-NEXT:    ret <8 x i16> [[TMP0]]
354 //
test_vreinterpretq_s16_f32(float32x4_t a)355 int16x8_t test_vreinterpretq_s16_f32(float32x4_t a)
356 {
357 #ifdef POLYMORPHIC
358     return vreinterpretq_s16(a);
359 #else /* POLYMORPHIC */
360     return vreinterpretq_s16_f32(a);
361 #endif /* POLYMORPHIC */
362 }
363 
364 // LE-LABEL: @test_vreinterpretq_s16_s32(
365 // LE-NEXT:  entry:
366 // LE-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x i16>
367 // LE-NEXT:    ret <8 x i16> [[TMP0]]
368 //
369 // BE-LABEL: @test_vreinterpretq_s16_s32(
370 // BE-NEXT:  entry:
371 // BE-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v4i32(<4 x i32> [[A:%.*]])
372 // BE-NEXT:    ret <8 x i16> [[TMP0]]
373 //
test_vreinterpretq_s16_s32(int32x4_t a)374 int16x8_t test_vreinterpretq_s16_s32(int32x4_t a)
375 {
376 #ifdef POLYMORPHIC
377     return vreinterpretq_s16(a);
378 #else /* POLYMORPHIC */
379     return vreinterpretq_s16_s32(a);
380 #endif /* POLYMORPHIC */
381 }
382 
383 // LE-LABEL: @test_vreinterpretq_s16_s64(
384 // LE-NEXT:  entry:
385 // LE-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <8 x i16>
386 // LE-NEXT:    ret <8 x i16> [[TMP0]]
387 //
388 // BE-LABEL: @test_vreinterpretq_s16_s64(
389 // BE-NEXT:  entry:
390 // BE-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v2i64(<2 x i64> [[A:%.*]])
391 // BE-NEXT:    ret <8 x i16> [[TMP0]]
392 //
test_vreinterpretq_s16_s64(int64x2_t a)393 int16x8_t test_vreinterpretq_s16_s64(int64x2_t a)
394 {
395 #ifdef POLYMORPHIC
396     return vreinterpretq_s16(a);
397 #else /* POLYMORPHIC */
398     return vreinterpretq_s16_s64(a);
399 #endif /* POLYMORPHIC */
400 }
401 
402 // LE-LABEL: @test_vreinterpretq_s16_s8(
403 // LE-NEXT:  entry:
404 // LE-NEXT:    [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <8 x i16>
405 // LE-NEXT:    ret <8 x i16> [[TMP0]]
406 //
407 // BE-LABEL: @test_vreinterpretq_s16_s8(
408 // BE-NEXT:  entry:
409 // BE-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v16i8(<16 x i8> [[A:%.*]])
410 // BE-NEXT:    ret <8 x i16> [[TMP0]]
411 //
test_vreinterpretq_s16_s8(int8x16_t a)412 int16x8_t test_vreinterpretq_s16_s8(int8x16_t a)
413 {
414 #ifdef POLYMORPHIC
415     return vreinterpretq_s16(a);
416 #else /* POLYMORPHIC */
417     return vreinterpretq_s16_s8(a);
418 #endif /* POLYMORPHIC */
419 }
420 
421 // BOTH-LABEL: @test_vreinterpretq_s16_u16(
422 // BOTH-NEXT:  entry:
423 // BOTH-NEXT:    ret <8 x i16> [[A:%.*]]
424 //
test_vreinterpretq_s16_u16(uint16x8_t a)425 int16x8_t test_vreinterpretq_s16_u16(uint16x8_t a)
426 {
427 #ifdef POLYMORPHIC
428     return vreinterpretq_s16(a);
429 #else /* POLYMORPHIC */
430     return vreinterpretq_s16_u16(a);
431 #endif /* POLYMORPHIC */
432 }
433 
434 // LE-LABEL: @test_vreinterpretq_s16_u32(
435 // LE-NEXT:  entry:
436 // LE-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x i16>
437 // LE-NEXT:    ret <8 x i16> [[TMP0]]
438 //
439 // BE-LABEL: @test_vreinterpretq_s16_u32(
440 // BE-NEXT:  entry:
441 // BE-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v4i32(<4 x i32> [[A:%.*]])
442 // BE-NEXT:    ret <8 x i16> [[TMP0]]
443 //
test_vreinterpretq_s16_u32(uint32x4_t a)444 int16x8_t test_vreinterpretq_s16_u32(uint32x4_t a)
445 {
446 #ifdef POLYMORPHIC
447     return vreinterpretq_s16(a);
448 #else /* POLYMORPHIC */
449     return vreinterpretq_s16_u32(a);
450 #endif /* POLYMORPHIC */
451 }
452 
453 // LE-LABEL: @test_vreinterpretq_s16_u64(
454 // LE-NEXT:  entry:
455 // LE-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <8 x i16>
456 // LE-NEXT:    ret <8 x i16> [[TMP0]]
457 //
458 // BE-LABEL: @test_vreinterpretq_s16_u64(
459 // BE-NEXT:  entry:
460 // BE-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v2i64(<2 x i64> [[A:%.*]])
461 // BE-NEXT:    ret <8 x i16> [[TMP0]]
462 //
test_vreinterpretq_s16_u64(uint64x2_t a)463 int16x8_t test_vreinterpretq_s16_u64(uint64x2_t a)
464 {
465 #ifdef POLYMORPHIC
466     return vreinterpretq_s16(a);
467 #else /* POLYMORPHIC */
468     return vreinterpretq_s16_u64(a);
469 #endif /* POLYMORPHIC */
470 }
471 
472 // LE-LABEL: @test_vreinterpretq_s16_u8(
473 // LE-NEXT:  entry:
474 // LE-NEXT:    [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <8 x i16>
475 // LE-NEXT:    ret <8 x i16> [[TMP0]]
476 //
477 // BE-LABEL: @test_vreinterpretq_s16_u8(
478 // BE-NEXT:  entry:
479 // BE-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v16i8(<16 x i8> [[A:%.*]])
480 // BE-NEXT:    ret <8 x i16> [[TMP0]]
481 //
test_vreinterpretq_s16_u8(uint8x16_t a)482 int16x8_t test_vreinterpretq_s16_u8(uint8x16_t a)
483 {
484 #ifdef POLYMORPHIC
485     return vreinterpretq_s16(a);
486 #else /* POLYMORPHIC */
487     return vreinterpretq_s16_u8(a);
488 #endif /* POLYMORPHIC */
489 }
490 
491 // LE-LABEL: @test_vreinterpretq_s32_f16(
492 // LE-NEXT:  entry:
493 // LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <4 x i32>
494 // LE-NEXT:    ret <4 x i32> [[TMP0]]
495 //
496 // BE-LABEL: @test_vreinterpretq_s32_f16(
497 // BE-NEXT:  entry:
498 // BE-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v8f16(<8 x half> [[A:%.*]])
499 // BE-NEXT:    ret <4 x i32> [[TMP0]]
500 //
test_vreinterpretq_s32_f16(float16x8_t a)501 int32x4_t test_vreinterpretq_s32_f16(float16x8_t a)
502 {
503 #ifdef POLYMORPHIC
504     return vreinterpretq_s32(a);
505 #else /* POLYMORPHIC */
506     return vreinterpretq_s32_f16(a);
507 #endif /* POLYMORPHIC */
508 }
509 
510 // BOTH-LABEL: @test_vreinterpretq_s32_f32(
511 // BOTH-NEXT:  entry:
512 // BOTH-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <4 x i32>
513 // BOTH-NEXT:    ret <4 x i32> [[TMP0]]
514 //
test_vreinterpretq_s32_f32(float32x4_t a)515 int32x4_t test_vreinterpretq_s32_f32(float32x4_t a)
516 {
517 #ifdef POLYMORPHIC
518     return vreinterpretq_s32(a);
519 #else /* POLYMORPHIC */
520     return vreinterpretq_s32_f32(a);
521 #endif /* POLYMORPHIC */
522 }
523 
524 // LE-LABEL: @test_vreinterpretq_s32_s16(
525 // LE-NEXT:  entry:
526 // LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <4 x i32>
527 // LE-NEXT:    ret <4 x i32> [[TMP0]]
528 //
529 // BE-LABEL: @test_vreinterpretq_s32_s16(
530 // BE-NEXT:  entry:
531 // BE-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v8i16(<8 x i16> [[A:%.*]])
532 // BE-NEXT:    ret <4 x i32> [[TMP0]]
533 //
test_vreinterpretq_s32_s16(int16x8_t a)534 int32x4_t test_vreinterpretq_s32_s16(int16x8_t a)
535 {
536 #ifdef POLYMORPHIC
537     return vreinterpretq_s32(a);
538 #else /* POLYMORPHIC */
539     return vreinterpretq_s32_s16(a);
540 #endif /* POLYMORPHIC */
541 }
542 
543 // LE-LABEL: @test_vreinterpretq_s32_s64(
544 // LE-NEXT:  entry:
545 // LE-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <4 x i32>
546 // LE-NEXT:    ret <4 x i32> [[TMP0]]
547 //
548 // BE-LABEL: @test_vreinterpretq_s32_s64(
549 // BE-NEXT:  entry:
550 // BE-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v2i64(<2 x i64> [[A:%.*]])
551 // BE-NEXT:    ret <4 x i32> [[TMP0]]
552 //
test_vreinterpretq_s32_s64(int64x2_t a)553 int32x4_t test_vreinterpretq_s32_s64(int64x2_t a)
554 {
555 #ifdef POLYMORPHIC
556     return vreinterpretq_s32(a);
557 #else /* POLYMORPHIC */
558     return vreinterpretq_s32_s64(a);
559 #endif /* POLYMORPHIC */
560 }
561 
562 // LE-LABEL: @test_vreinterpretq_s32_s8(
563 // LE-NEXT:  entry:
564 // LE-NEXT:    [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <4 x i32>
565 // LE-NEXT:    ret <4 x i32> [[TMP0]]
566 //
567 // BE-LABEL: @test_vreinterpretq_s32_s8(
568 // BE-NEXT:  entry:
569 // BE-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v16i8(<16 x i8> [[A:%.*]])
570 // BE-NEXT:    ret <4 x i32> [[TMP0]]
571 //
test_vreinterpretq_s32_s8(int8x16_t a)572 int32x4_t test_vreinterpretq_s32_s8(int8x16_t a)
573 {
574 #ifdef POLYMORPHIC
575     return vreinterpretq_s32(a);
576 #else /* POLYMORPHIC */
577     return vreinterpretq_s32_s8(a);
578 #endif /* POLYMORPHIC */
579 }
580 
581 // LE-LABEL: @test_vreinterpretq_s32_u16(
582 // LE-NEXT:  entry:
583 // LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <4 x i32>
584 // LE-NEXT:    ret <4 x i32> [[TMP0]]
585 //
586 // BE-LABEL: @test_vreinterpretq_s32_u16(
587 // BE-NEXT:  entry:
588 // BE-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v8i16(<8 x i16> [[A:%.*]])
589 // BE-NEXT:    ret <4 x i32> [[TMP0]]
590 //
test_vreinterpretq_s32_u16(uint16x8_t a)591 int32x4_t test_vreinterpretq_s32_u16(uint16x8_t a)
592 {
593 #ifdef POLYMORPHIC
594     return vreinterpretq_s32(a);
595 #else /* POLYMORPHIC */
596     return vreinterpretq_s32_u16(a);
597 #endif /* POLYMORPHIC */
598 }
599 
600 // BOTH-LABEL: @test_vreinterpretq_s32_u32(
601 // BOTH-NEXT:  entry:
602 // BOTH-NEXT:    ret <4 x i32> [[A:%.*]]
603 //
test_vreinterpretq_s32_u32(uint32x4_t a)604 int32x4_t test_vreinterpretq_s32_u32(uint32x4_t a)
605 {
606 #ifdef POLYMORPHIC
607     return vreinterpretq_s32(a);
608 #else /* POLYMORPHIC */
609     return vreinterpretq_s32_u32(a);
610 #endif /* POLYMORPHIC */
611 }
612 
613 // LE-LABEL: @test_vreinterpretq_s32_u64(
614 // LE-NEXT:  entry:
615 // LE-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <4 x i32>
616 // LE-NEXT:    ret <4 x i32> [[TMP0]]
617 //
618 // BE-LABEL: @test_vreinterpretq_s32_u64(
619 // BE-NEXT:  entry:
620 // BE-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v2i64(<2 x i64> [[A:%.*]])
621 // BE-NEXT:    ret <4 x i32> [[TMP0]]
622 //
test_vreinterpretq_s32_u64(uint64x2_t a)623 int32x4_t test_vreinterpretq_s32_u64(uint64x2_t a)
624 {
625 #ifdef POLYMORPHIC
626     return vreinterpretq_s32(a);
627 #else /* POLYMORPHIC */
628     return vreinterpretq_s32_u64(a);
629 #endif /* POLYMORPHIC */
630 }
631 
632 // LE-LABEL: @test_vreinterpretq_s32_u8(
633 // LE-NEXT:  entry:
634 // LE-NEXT:    [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <4 x i32>
635 // LE-NEXT:    ret <4 x i32> [[TMP0]]
636 //
637 // BE-LABEL: @test_vreinterpretq_s32_u8(
638 // BE-NEXT:  entry:
639 // BE-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v16i8(<16 x i8> [[A:%.*]])
640 // BE-NEXT:    ret <4 x i32> [[TMP0]]
641 //
test_vreinterpretq_s32_u8(uint8x16_t a)642 int32x4_t test_vreinterpretq_s32_u8(uint8x16_t a)
643 {
644 #ifdef POLYMORPHIC
645     return vreinterpretq_s32(a);
646 #else /* POLYMORPHIC */
647     return vreinterpretq_s32_u8(a);
648 #endif /* POLYMORPHIC */
649 }
650 
651 // LE-LABEL: @test_vreinterpretq_s64_f16(
652 // LE-NEXT:  entry:
653 // LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <2 x i64>
654 // LE-NEXT:    ret <2 x i64> [[TMP0]]
655 //
656 // BE-LABEL: @test_vreinterpretq_s64_f16(
657 // BE-NEXT:  entry:
658 // BE-NEXT:    [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v8f16(<8 x half> [[A:%.*]])
659 // BE-NEXT:    ret <2 x i64> [[TMP0]]
660 //
test_vreinterpretq_s64_f16(float16x8_t a)661 int64x2_t test_vreinterpretq_s64_f16(float16x8_t a)
662 {
663 #ifdef POLYMORPHIC
664     return vreinterpretq_s64(a);
665 #else /* POLYMORPHIC */
666     return vreinterpretq_s64_f16(a);
667 #endif /* POLYMORPHIC */
668 }
669 
670 // LE-LABEL: @test_vreinterpretq_s64_f32(
671 // LE-NEXT:  entry:
672 // LE-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <2 x i64>
673 // LE-NEXT:    ret <2 x i64> [[TMP0]]
674 //
675 // BE-LABEL: @test_vreinterpretq_s64_f32(
676 // BE-NEXT:  entry:
677 // BE-NEXT:    [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v4f32(<4 x float> [[A:%.*]])
678 // BE-NEXT:    ret <2 x i64> [[TMP0]]
679 //
test_vreinterpretq_s64_f32(float32x4_t a)680 int64x2_t test_vreinterpretq_s64_f32(float32x4_t a)
681 {
682 #ifdef POLYMORPHIC
683     return vreinterpretq_s64(a);
684 #else /* POLYMORPHIC */
685     return vreinterpretq_s64_f32(a);
686 #endif /* POLYMORPHIC */
687 }
688 
689 // LE-LABEL: @test_vreinterpretq_s64_s16(
690 // LE-NEXT:  entry:
691 // LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <2 x i64>
692 // LE-NEXT:    ret <2 x i64> [[TMP0]]
693 //
694 // BE-LABEL: @test_vreinterpretq_s64_s16(
695 // BE-NEXT:  entry:
696 // BE-NEXT:    [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v8i16(<8 x i16> [[A:%.*]])
697 // BE-NEXT:    ret <2 x i64> [[TMP0]]
698 //
test_vreinterpretq_s64_s16(int16x8_t a)699 int64x2_t test_vreinterpretq_s64_s16(int16x8_t a)
700 {
701 #ifdef POLYMORPHIC
702     return vreinterpretq_s64(a);
703 #else /* POLYMORPHIC */
704     return vreinterpretq_s64_s16(a);
705 #endif /* POLYMORPHIC */
706 }
707 
708 // LE-LABEL: @test_vreinterpretq_s64_s32(
709 // LE-NEXT:  entry:
710 // LE-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <2 x i64>
711 // LE-NEXT:    ret <2 x i64> [[TMP0]]
712 //
713 // BE-LABEL: @test_vreinterpretq_s64_s32(
714 // BE-NEXT:  entry:
715 // BE-NEXT:    [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v4i32(<4 x i32> [[A:%.*]])
716 // BE-NEXT:    ret <2 x i64> [[TMP0]]
717 //
test_vreinterpretq_s64_s32(int32x4_t a)718 int64x2_t test_vreinterpretq_s64_s32(int32x4_t a)
719 {
720 #ifdef POLYMORPHIC
721     return vreinterpretq_s64(a);
722 #else /* POLYMORPHIC */
723     return vreinterpretq_s64_s32(a);
724 #endif /* POLYMORPHIC */
725 }
726 
727 // LE-LABEL: @test_vreinterpretq_s64_s8(
728 // LE-NEXT:  entry:
729 // LE-NEXT:    [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <2 x i64>
730 // LE-NEXT:    ret <2 x i64> [[TMP0]]
731 //
732 // BE-LABEL: @test_vreinterpretq_s64_s8(
733 // BE-NEXT:  entry:
734 // BE-NEXT:    [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v16i8(<16 x i8> [[A:%.*]])
735 // BE-NEXT:    ret <2 x i64> [[TMP0]]
736 //
test_vreinterpretq_s64_s8(int8x16_t a)737 int64x2_t test_vreinterpretq_s64_s8(int8x16_t a)
738 {
739 #ifdef POLYMORPHIC
740     return vreinterpretq_s64(a);
741 #else /* POLYMORPHIC */
742     return vreinterpretq_s64_s8(a);
743 #endif /* POLYMORPHIC */
744 }
745 
746 // LE-LABEL: @test_vreinterpretq_s64_u16(
747 // LE-NEXT:  entry:
748 // LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <2 x i64>
749 // LE-NEXT:    ret <2 x i64> [[TMP0]]
750 //
751 // BE-LABEL: @test_vreinterpretq_s64_u16(
752 // BE-NEXT:  entry:
753 // BE-NEXT:    [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v8i16(<8 x i16> [[A:%.*]])
754 // BE-NEXT:    ret <2 x i64> [[TMP0]]
755 //
test_vreinterpretq_s64_u16(uint16x8_t a)756 int64x2_t test_vreinterpretq_s64_u16(uint16x8_t a)
757 {
758 #ifdef POLYMORPHIC
759     return vreinterpretq_s64(a);
760 #else /* POLYMORPHIC */
761     return vreinterpretq_s64_u16(a);
762 #endif /* POLYMORPHIC */
763 }
764 
765 // LE-LABEL: @test_vreinterpretq_s64_u32(
766 // LE-NEXT:  entry:
767 // LE-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <2 x i64>
768 // LE-NEXT:    ret <2 x i64> [[TMP0]]
769 //
770 // BE-LABEL: @test_vreinterpretq_s64_u32(
771 // BE-NEXT:  entry:
772 // BE-NEXT:    [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v4i32(<4 x i32> [[A:%.*]])
773 // BE-NEXT:    ret <2 x i64> [[TMP0]]
774 //
test_vreinterpretq_s64_u32(uint32x4_t a)775 int64x2_t test_vreinterpretq_s64_u32(uint32x4_t a)
776 {
777 #ifdef POLYMORPHIC
778     return vreinterpretq_s64(a);
779 #else /* POLYMORPHIC */
780     return vreinterpretq_s64_u32(a);
781 #endif /* POLYMORPHIC */
782 }
783 
784 // BOTH-LABEL: @test_vreinterpretq_s64_u64(
785 // BOTH-NEXT:  entry:
786 // BOTH-NEXT:    ret <2 x i64> [[A:%.*]]
787 //
test_vreinterpretq_s64_u64(uint64x2_t a)788 int64x2_t test_vreinterpretq_s64_u64(uint64x2_t a)
789 {
790 #ifdef POLYMORPHIC
791     return vreinterpretq_s64(a);
792 #else /* POLYMORPHIC */
793     return vreinterpretq_s64_u64(a);
794 #endif /* POLYMORPHIC */
795 }
796 
797 // LE-LABEL: @test_vreinterpretq_s64_u8(
798 // LE-NEXT:  entry:
799 // LE-NEXT:    [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <2 x i64>
800 // LE-NEXT:    ret <2 x i64> [[TMP0]]
801 //
802 // BE-LABEL: @test_vreinterpretq_s64_u8(
803 // BE-NEXT:  entry:
804 // BE-NEXT:    [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v16i8(<16 x i8> [[A:%.*]])
805 // BE-NEXT:    ret <2 x i64> [[TMP0]]
806 //
test_vreinterpretq_s64_u8(uint8x16_t a)807 int64x2_t test_vreinterpretq_s64_u8(uint8x16_t a)
808 {
809 #ifdef POLYMORPHIC
810     return vreinterpretq_s64(a);
811 #else /* POLYMORPHIC */
812     return vreinterpretq_s64_u8(a);
813 #endif /* POLYMORPHIC */
814 }
815 
816 // LE-LABEL: @test_vreinterpretq_s8_f16(
817 // LE-NEXT:  entry:
818 // LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <16 x i8>
819 // LE-NEXT:    ret <16 x i8> [[TMP0]]
820 //
821 // BE-LABEL: @test_vreinterpretq_s8_f16(
822 // BE-NEXT:  entry:
823 // BE-NEXT:    [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v8f16(<8 x half> [[A:%.*]])
824 // BE-NEXT:    ret <16 x i8> [[TMP0]]
825 //
test_vreinterpretq_s8_f16(float16x8_t a)826 int8x16_t test_vreinterpretq_s8_f16(float16x8_t a)
827 {
828 #ifdef POLYMORPHIC
829     return vreinterpretq_s8(a);
830 #else /* POLYMORPHIC */
831     return vreinterpretq_s8_f16(a);
832 #endif /* POLYMORPHIC */
833 }
834 
835 // LE-LABEL: @test_vreinterpretq_s8_f32(
836 // LE-NEXT:  entry:
837 // LE-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <16 x i8>
838 // LE-NEXT:    ret <16 x i8> [[TMP0]]
839 //
840 // BE-LABEL: @test_vreinterpretq_s8_f32(
841 // BE-NEXT:  entry:
842 // BE-NEXT:    [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v4f32(<4 x float> [[A:%.*]])
843 // BE-NEXT:    ret <16 x i8> [[TMP0]]
844 //
test_vreinterpretq_s8_f32(float32x4_t a)845 int8x16_t test_vreinterpretq_s8_f32(float32x4_t a)
846 {
847 #ifdef POLYMORPHIC
848     return vreinterpretq_s8(a);
849 #else /* POLYMORPHIC */
850     return vreinterpretq_s8_f32(a);
851 #endif /* POLYMORPHIC */
852 }
853 
854 // LE-LABEL: @test_vreinterpretq_s8_s16(
855 // LE-NEXT:  entry:
856 // LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <16 x i8>
857 // LE-NEXT:    ret <16 x i8> [[TMP0]]
858 //
859 // BE-LABEL: @test_vreinterpretq_s8_s16(
860 // BE-NEXT:  entry:
861 // BE-NEXT:    [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v8i16(<8 x i16> [[A:%.*]])
862 // BE-NEXT:    ret <16 x i8> [[TMP0]]
863 //
test_vreinterpretq_s8_s16(int16x8_t a)864 int8x16_t test_vreinterpretq_s8_s16(int16x8_t a)
865 {
866 #ifdef POLYMORPHIC
867     return vreinterpretq_s8(a);
868 #else /* POLYMORPHIC */
869     return vreinterpretq_s8_s16(a);
870 #endif /* POLYMORPHIC */
871 }
872 
873 // LE-LABEL: @test_vreinterpretq_s8_s32(
874 // LE-NEXT:  entry:
875 // LE-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <16 x i8>
876 // LE-NEXT:    ret <16 x i8> [[TMP0]]
877 //
878 // BE-LABEL: @test_vreinterpretq_s8_s32(
879 // BE-NEXT:  entry:
880 // BE-NEXT:    [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v4i32(<4 x i32> [[A:%.*]])
881 // BE-NEXT:    ret <16 x i8> [[TMP0]]
882 //
test_vreinterpretq_s8_s32(int32x4_t a)883 int8x16_t test_vreinterpretq_s8_s32(int32x4_t a)
884 {
885 #ifdef POLYMORPHIC
886     return vreinterpretq_s8(a);
887 #else /* POLYMORPHIC */
888     return vreinterpretq_s8_s32(a);
889 #endif /* POLYMORPHIC */
890 }
891 
892 // LE-LABEL: @test_vreinterpretq_s8_s64(
893 // LE-NEXT:  entry:
894 // LE-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <16 x i8>
895 // LE-NEXT:    ret <16 x i8> [[TMP0]]
896 //
897 // BE-LABEL: @test_vreinterpretq_s8_s64(
898 // BE-NEXT:  entry:
899 // BE-NEXT:    [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v2i64(<2 x i64> [[A:%.*]])
900 // BE-NEXT:    ret <16 x i8> [[TMP0]]
901 //
test_vreinterpretq_s8_s64(int64x2_t a)902 int8x16_t test_vreinterpretq_s8_s64(int64x2_t a)
903 {
904 #ifdef POLYMORPHIC
905     return vreinterpretq_s8(a);
906 #else /* POLYMORPHIC */
907     return vreinterpretq_s8_s64(a);
908 #endif /* POLYMORPHIC */
909 }
910 
911 // LE-LABEL: @test_vreinterpretq_s8_u16(
912 // LE-NEXT:  entry:
913 // LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <16 x i8>
914 // LE-NEXT:    ret <16 x i8> [[TMP0]]
915 //
916 // BE-LABEL: @test_vreinterpretq_s8_u16(
917 // BE-NEXT:  entry:
918 // BE-NEXT:    [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v8i16(<8 x i16> [[A:%.*]])
919 // BE-NEXT:    ret <16 x i8> [[TMP0]]
920 //
test_vreinterpretq_s8_u16(uint16x8_t a)921 int8x16_t test_vreinterpretq_s8_u16(uint16x8_t a)
922 {
923 #ifdef POLYMORPHIC
924     return vreinterpretq_s8(a);
925 #else /* POLYMORPHIC */
926     return vreinterpretq_s8_u16(a);
927 #endif /* POLYMORPHIC */
928 }
929 
930 // LE-LABEL: @test_vreinterpretq_s8_u32(
931 // LE-NEXT:  entry:
932 // LE-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <16 x i8>
933 // LE-NEXT:    ret <16 x i8> [[TMP0]]
934 //
935 // BE-LABEL: @test_vreinterpretq_s8_u32(
936 // BE-NEXT:  entry:
937 // BE-NEXT:    [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v4i32(<4 x i32> [[A:%.*]])
938 // BE-NEXT:    ret <16 x i8> [[TMP0]]
939 //
test_vreinterpretq_s8_u32(uint32x4_t a)940 int8x16_t test_vreinterpretq_s8_u32(uint32x4_t a)
941 {
942 #ifdef POLYMORPHIC
943     return vreinterpretq_s8(a);
944 #else /* POLYMORPHIC */
945     return vreinterpretq_s8_u32(a);
946 #endif /* POLYMORPHIC */
947 }
948 
949 // LE-LABEL: @test_vreinterpretq_s8_u64(
950 // LE-NEXT:  entry:
951 // LE-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <16 x i8>
952 // LE-NEXT:    ret <16 x i8> [[TMP0]]
953 //
954 // BE-LABEL: @test_vreinterpretq_s8_u64(
955 // BE-NEXT:  entry:
956 // BE-NEXT:    [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v2i64(<2 x i64> [[A:%.*]])
957 // BE-NEXT:    ret <16 x i8> [[TMP0]]
958 //
test_vreinterpretq_s8_u64(uint64x2_t a)959 int8x16_t test_vreinterpretq_s8_u64(uint64x2_t a)
960 {
961 #ifdef POLYMORPHIC
962     return vreinterpretq_s8(a);
963 #else /* POLYMORPHIC */
964     return vreinterpretq_s8_u64(a);
965 #endif /* POLYMORPHIC */
966 }
967 
968 // BOTH-LABEL: @test_vreinterpretq_s8_u8(
969 // BOTH-NEXT:  entry:
970 // BOTH-NEXT:    ret <16 x i8> [[A:%.*]]
971 //
test_vreinterpretq_s8_u8(uint8x16_t a)972 int8x16_t test_vreinterpretq_s8_u8(uint8x16_t a)
973 {
974 #ifdef POLYMORPHIC
975     return vreinterpretq_s8(a);
976 #else /* POLYMORPHIC */
977     return vreinterpretq_s8_u8(a);
978 #endif /* POLYMORPHIC */
979 }
980 
981 // BOTH-LABEL: @test_vreinterpretq_u16_f16(
982 // BOTH-NEXT:  entry:
983 // BOTH-NEXT:    [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <8 x i16>
984 // BOTH-NEXT:    ret <8 x i16> [[TMP0]]
985 //
test_vreinterpretq_u16_f16(float16x8_t a)986 uint16x8_t test_vreinterpretq_u16_f16(float16x8_t a)
987 {
988 #ifdef POLYMORPHIC
989     return vreinterpretq_u16(a);
990 #else /* POLYMORPHIC */
991     return vreinterpretq_u16_f16(a);
992 #endif /* POLYMORPHIC */
993 }
994 
995 // LE-LABEL: @test_vreinterpretq_u16_f32(
996 // LE-NEXT:  entry:
997 // LE-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <8 x i16>
998 // LE-NEXT:    ret <8 x i16> [[TMP0]]
999 //
1000 // BE-LABEL: @test_vreinterpretq_u16_f32(
1001 // BE-NEXT:  entry:
1002 // BE-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v4f32(<4 x float> [[A:%.*]])
1003 // BE-NEXT:    ret <8 x i16> [[TMP0]]
1004 //
test_vreinterpretq_u16_f32(float32x4_t a)1005 uint16x8_t test_vreinterpretq_u16_f32(float32x4_t a)
1006 {
1007 #ifdef POLYMORPHIC
1008     return vreinterpretq_u16(a);
1009 #else /* POLYMORPHIC */
1010     return vreinterpretq_u16_f32(a);
1011 #endif /* POLYMORPHIC */
1012 }
1013 
1014 // BOTH-LABEL: @test_vreinterpretq_u16_s16(
1015 // BOTH-NEXT:  entry:
1016 // BOTH-NEXT:    ret <8 x i16> [[A:%.*]]
1017 //
test_vreinterpretq_u16_s16(int16x8_t a)1018 uint16x8_t test_vreinterpretq_u16_s16(int16x8_t a)
1019 {
1020 #ifdef POLYMORPHIC
1021     return vreinterpretq_u16(a);
1022 #else /* POLYMORPHIC */
1023     return vreinterpretq_u16_s16(a);
1024 #endif /* POLYMORPHIC */
1025 }
1026 
1027 // LE-LABEL: @test_vreinterpretq_u16_s32(
1028 // LE-NEXT:  entry:
1029 // LE-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x i16>
1030 // LE-NEXT:    ret <8 x i16> [[TMP0]]
1031 //
1032 // BE-LABEL: @test_vreinterpretq_u16_s32(
1033 // BE-NEXT:  entry:
1034 // BE-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v4i32(<4 x i32> [[A:%.*]])
1035 // BE-NEXT:    ret <8 x i16> [[TMP0]]
1036 //
test_vreinterpretq_u16_s32(int32x4_t a)1037 uint16x8_t test_vreinterpretq_u16_s32(int32x4_t a)
1038 {
1039 #ifdef POLYMORPHIC
1040     return vreinterpretq_u16(a);
1041 #else /* POLYMORPHIC */
1042     return vreinterpretq_u16_s32(a);
1043 #endif /* POLYMORPHIC */
1044 }
1045 
1046 // LE-LABEL: @test_vreinterpretq_u16_s64(
1047 // LE-NEXT:  entry:
1048 // LE-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <8 x i16>
1049 // LE-NEXT:    ret <8 x i16> [[TMP0]]
1050 //
1051 // BE-LABEL: @test_vreinterpretq_u16_s64(
1052 // BE-NEXT:  entry:
1053 // BE-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v2i64(<2 x i64> [[A:%.*]])
1054 // BE-NEXT:    ret <8 x i16> [[TMP0]]
1055 //
test_vreinterpretq_u16_s64(int64x2_t a)1056 uint16x8_t test_vreinterpretq_u16_s64(int64x2_t a)
1057 {
1058 #ifdef POLYMORPHIC
1059     return vreinterpretq_u16(a);
1060 #else /* POLYMORPHIC */
1061     return vreinterpretq_u16_s64(a);
1062 #endif /* POLYMORPHIC */
1063 }
1064 
1065 // LE-LABEL: @test_vreinterpretq_u16_s8(
1066 // LE-NEXT:  entry:
1067 // LE-NEXT:    [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <8 x i16>
1068 // LE-NEXT:    ret <8 x i16> [[TMP0]]
1069 //
1070 // BE-LABEL: @test_vreinterpretq_u16_s8(
1071 // BE-NEXT:  entry:
1072 // BE-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v16i8(<16 x i8> [[A:%.*]])
1073 // BE-NEXT:    ret <8 x i16> [[TMP0]]
1074 //
test_vreinterpretq_u16_s8(int8x16_t a)1075 uint16x8_t test_vreinterpretq_u16_s8(int8x16_t a)
1076 {
1077 #ifdef POLYMORPHIC
1078     return vreinterpretq_u16(a);
1079 #else /* POLYMORPHIC */
1080     return vreinterpretq_u16_s8(a);
1081 #endif /* POLYMORPHIC */
1082 }
1083 
1084 // LE-LABEL: @test_vreinterpretq_u16_u32(
1085 // LE-NEXT:  entry:
1086 // LE-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x i16>
1087 // LE-NEXT:    ret <8 x i16> [[TMP0]]
1088 //
1089 // BE-LABEL: @test_vreinterpretq_u16_u32(
1090 // BE-NEXT:  entry:
1091 // BE-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v4i32(<4 x i32> [[A:%.*]])
1092 // BE-NEXT:    ret <8 x i16> [[TMP0]]
1093 //
test_vreinterpretq_u16_u32(uint32x4_t a)1094 uint16x8_t test_vreinterpretq_u16_u32(uint32x4_t a)
1095 {
1096 #ifdef POLYMORPHIC
1097     return vreinterpretq_u16(a);
1098 #else /* POLYMORPHIC */
1099     return vreinterpretq_u16_u32(a);
1100 #endif /* POLYMORPHIC */
1101 }
1102 
1103 // LE-LABEL: @test_vreinterpretq_u16_u64(
1104 // LE-NEXT:  entry:
1105 // LE-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <8 x i16>
1106 // LE-NEXT:    ret <8 x i16> [[TMP0]]
1107 //
1108 // BE-LABEL: @test_vreinterpretq_u16_u64(
1109 // BE-NEXT:  entry:
1110 // BE-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v2i64(<2 x i64> [[A:%.*]])
1111 // BE-NEXT:    ret <8 x i16> [[TMP0]]
1112 //
test_vreinterpretq_u16_u64(uint64x2_t a)1113 uint16x8_t test_vreinterpretq_u16_u64(uint64x2_t a)
1114 {
1115 #ifdef POLYMORPHIC
1116     return vreinterpretq_u16(a);
1117 #else /* POLYMORPHIC */
1118     return vreinterpretq_u16_u64(a);
1119 #endif /* POLYMORPHIC */
1120 }
1121 
1122 // LE-LABEL: @test_vreinterpretq_u16_u8(
1123 // LE-NEXT:  entry:
1124 // LE-NEXT:    [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <8 x i16>
1125 // LE-NEXT:    ret <8 x i16> [[TMP0]]
1126 //
1127 // BE-LABEL: @test_vreinterpretq_u16_u8(
1128 // BE-NEXT:  entry:
1129 // BE-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v16i8(<16 x i8> [[A:%.*]])
1130 // BE-NEXT:    ret <8 x i16> [[TMP0]]
1131 //
test_vreinterpretq_u16_u8(uint8x16_t a)1132 uint16x8_t test_vreinterpretq_u16_u8(uint8x16_t a)
1133 {
1134 #ifdef POLYMORPHIC
1135     return vreinterpretq_u16(a);
1136 #else /* POLYMORPHIC */
1137     return vreinterpretq_u16_u8(a);
1138 #endif /* POLYMORPHIC */
1139 }
1140 
1141 // LE-LABEL: @test_vreinterpretq_u32_f16(
1142 // LE-NEXT:  entry:
1143 // LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <4 x i32>
1144 // LE-NEXT:    ret <4 x i32> [[TMP0]]
1145 //
1146 // BE-LABEL: @test_vreinterpretq_u32_f16(
1147 // BE-NEXT:  entry:
1148 // BE-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v8f16(<8 x half> [[A:%.*]])
1149 // BE-NEXT:    ret <4 x i32> [[TMP0]]
1150 //
test_vreinterpretq_u32_f16(float16x8_t a)1151 uint32x4_t test_vreinterpretq_u32_f16(float16x8_t a)
1152 {
1153 #ifdef POLYMORPHIC
1154     return vreinterpretq_u32(a);
1155 #else /* POLYMORPHIC */
1156     return vreinterpretq_u32_f16(a);
1157 #endif /* POLYMORPHIC */
1158 }
1159 
1160 // BOTH-LABEL: @test_vreinterpretq_u32_f32(
1161 // BOTH-NEXT:  entry:
1162 // BOTH-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <4 x i32>
1163 // BOTH-NEXT:    ret <4 x i32> [[TMP0]]
1164 //
test_vreinterpretq_u32_f32(float32x4_t a)1165 uint32x4_t test_vreinterpretq_u32_f32(float32x4_t a)
1166 {
1167 #ifdef POLYMORPHIC
1168     return vreinterpretq_u32(a);
1169 #else /* POLYMORPHIC */
1170     return vreinterpretq_u32_f32(a);
1171 #endif /* POLYMORPHIC */
1172 }
1173 
1174 // LE-LABEL: @test_vreinterpretq_u32_s16(
1175 // LE-NEXT:  entry:
1176 // LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <4 x i32>
1177 // LE-NEXT:    ret <4 x i32> [[TMP0]]
1178 //
1179 // BE-LABEL: @test_vreinterpretq_u32_s16(
1180 // BE-NEXT:  entry:
1181 // BE-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v8i16(<8 x i16> [[A:%.*]])
1182 // BE-NEXT:    ret <4 x i32> [[TMP0]]
1183 //
test_vreinterpretq_u32_s16(int16x8_t a)1184 uint32x4_t test_vreinterpretq_u32_s16(int16x8_t a)
1185 {
1186 #ifdef POLYMORPHIC
1187     return vreinterpretq_u32(a);
1188 #else /* POLYMORPHIC */
1189     return vreinterpretq_u32_s16(a);
1190 #endif /* POLYMORPHIC */
1191 }
1192 
1193 // BOTH-LABEL: @test_vreinterpretq_u32_s32(
1194 // BOTH-NEXT:  entry:
1195 // BOTH-NEXT:    ret <4 x i32> [[A:%.*]]
1196 //
test_vreinterpretq_u32_s32(int32x4_t a)1197 uint32x4_t test_vreinterpretq_u32_s32(int32x4_t a)
1198 {
1199 #ifdef POLYMORPHIC
1200     return vreinterpretq_u32(a);
1201 #else /* POLYMORPHIC */
1202     return vreinterpretq_u32_s32(a);
1203 #endif /* POLYMORPHIC */
1204 }
1205 
1206 // LE-LABEL: @test_vreinterpretq_u32_s64(
1207 // LE-NEXT:  entry:
1208 // LE-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <4 x i32>
1209 // LE-NEXT:    ret <4 x i32> [[TMP0]]
1210 //
1211 // BE-LABEL: @test_vreinterpretq_u32_s64(
1212 // BE-NEXT:  entry:
1213 // BE-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v2i64(<2 x i64> [[A:%.*]])
1214 // BE-NEXT:    ret <4 x i32> [[TMP0]]
1215 //
test_vreinterpretq_u32_s64(int64x2_t a)1216 uint32x4_t test_vreinterpretq_u32_s64(int64x2_t a)
1217 {
1218 #ifdef POLYMORPHIC
1219     return vreinterpretq_u32(a);
1220 #else /* POLYMORPHIC */
1221     return vreinterpretq_u32_s64(a);
1222 #endif /* POLYMORPHIC */
1223 }
1224 
1225 // LE-LABEL: @test_vreinterpretq_u32_s8(
1226 // LE-NEXT:  entry:
1227 // LE-NEXT:    [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <4 x i32>
1228 // LE-NEXT:    ret <4 x i32> [[TMP0]]
1229 //
1230 // BE-LABEL: @test_vreinterpretq_u32_s8(
1231 // BE-NEXT:  entry:
1232 // BE-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v16i8(<16 x i8> [[A:%.*]])
1233 // BE-NEXT:    ret <4 x i32> [[TMP0]]
1234 //
test_vreinterpretq_u32_s8(int8x16_t a)1235 uint32x4_t test_vreinterpretq_u32_s8(int8x16_t a)
1236 {
1237 #ifdef POLYMORPHIC
1238     return vreinterpretq_u32(a);
1239 #else /* POLYMORPHIC */
1240     return vreinterpretq_u32_s8(a);
1241 #endif /* POLYMORPHIC */
1242 }
1243 
1244 // LE-LABEL: @test_vreinterpretq_u32_u16(
1245 // LE-NEXT:  entry:
1246 // LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <4 x i32>
1247 // LE-NEXT:    ret <4 x i32> [[TMP0]]
1248 //
1249 // BE-LABEL: @test_vreinterpretq_u32_u16(
1250 // BE-NEXT:  entry:
1251 // BE-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v8i16(<8 x i16> [[A:%.*]])
1252 // BE-NEXT:    ret <4 x i32> [[TMP0]]
1253 //
test_vreinterpretq_u32_u16(uint16x8_t a)1254 uint32x4_t test_vreinterpretq_u32_u16(uint16x8_t a)
1255 {
1256 #ifdef POLYMORPHIC
1257     return vreinterpretq_u32(a);
1258 #else /* POLYMORPHIC */
1259     return vreinterpretq_u32_u16(a);
1260 #endif /* POLYMORPHIC */
1261 }
1262 
1263 // LE-LABEL: @test_vreinterpretq_u32_u64(
1264 // LE-NEXT:  entry:
1265 // LE-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <4 x i32>
1266 // LE-NEXT:    ret <4 x i32> [[TMP0]]
1267 //
1268 // BE-LABEL: @test_vreinterpretq_u32_u64(
1269 // BE-NEXT:  entry:
1270 // BE-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v2i64(<2 x i64> [[A:%.*]])
1271 // BE-NEXT:    ret <4 x i32> [[TMP0]]
1272 //
test_vreinterpretq_u32_u64(uint64x2_t a)1273 uint32x4_t test_vreinterpretq_u32_u64(uint64x2_t a)
1274 {
1275 #ifdef POLYMORPHIC
1276     return vreinterpretq_u32(a);
1277 #else /* POLYMORPHIC */
1278     return vreinterpretq_u32_u64(a);
1279 #endif /* POLYMORPHIC */
1280 }
1281 
1282 // LE-LABEL: @test_vreinterpretq_u32_u8(
1283 // LE-NEXT:  entry:
1284 // LE-NEXT:    [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <4 x i32>
1285 // LE-NEXT:    ret <4 x i32> [[TMP0]]
1286 //
1287 // BE-LABEL: @test_vreinterpretq_u32_u8(
1288 // BE-NEXT:  entry:
1289 // BE-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v16i8(<16 x i8> [[A:%.*]])
1290 // BE-NEXT:    ret <4 x i32> [[TMP0]]
1291 //
test_vreinterpretq_u32_u8(uint8x16_t a)1292 uint32x4_t test_vreinterpretq_u32_u8(uint8x16_t a)
1293 {
1294 #ifdef POLYMORPHIC
1295     return vreinterpretq_u32(a);
1296 #else /* POLYMORPHIC */
1297     return vreinterpretq_u32_u8(a);
1298 #endif /* POLYMORPHIC */
1299 }
1300 
1301 // LE-LABEL: @test_vreinterpretq_u64_f16(
1302 // LE-NEXT:  entry:
1303 // LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <2 x i64>
1304 // LE-NEXT:    ret <2 x i64> [[TMP0]]
1305 //
1306 // BE-LABEL: @test_vreinterpretq_u64_f16(
1307 // BE-NEXT:  entry:
1308 // BE-NEXT:    [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v8f16(<8 x half> [[A:%.*]])
1309 // BE-NEXT:    ret <2 x i64> [[TMP0]]
1310 //
test_vreinterpretq_u64_f16(float16x8_t a)1311 uint64x2_t test_vreinterpretq_u64_f16(float16x8_t a)
1312 {
1313 #ifdef POLYMORPHIC
1314     return vreinterpretq_u64(a);
1315 #else /* POLYMORPHIC */
1316     return vreinterpretq_u64_f16(a);
1317 #endif /* POLYMORPHIC */
1318 }
1319 
1320 // LE-LABEL: @test_vreinterpretq_u64_f32(
1321 // LE-NEXT:  entry:
1322 // LE-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <2 x i64>
1323 // LE-NEXT:    ret <2 x i64> [[TMP0]]
1324 //
1325 // BE-LABEL: @test_vreinterpretq_u64_f32(
1326 // BE-NEXT:  entry:
1327 // BE-NEXT:    [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v4f32(<4 x float> [[A:%.*]])
1328 // BE-NEXT:    ret <2 x i64> [[TMP0]]
1329 //
test_vreinterpretq_u64_f32(float32x4_t a)1330 uint64x2_t test_vreinterpretq_u64_f32(float32x4_t a)
1331 {
1332 #ifdef POLYMORPHIC
1333     return vreinterpretq_u64(a);
1334 #else /* POLYMORPHIC */
1335     return vreinterpretq_u64_f32(a);
1336 #endif /* POLYMORPHIC */
1337 }
1338 
1339 // LE-LABEL: @test_vreinterpretq_u64_s16(
1340 // LE-NEXT:  entry:
1341 // LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <2 x i64>
1342 // LE-NEXT:    ret <2 x i64> [[TMP0]]
1343 //
1344 // BE-LABEL: @test_vreinterpretq_u64_s16(
1345 // BE-NEXT:  entry:
1346 // BE-NEXT:    [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v8i16(<8 x i16> [[A:%.*]])
1347 // BE-NEXT:    ret <2 x i64> [[TMP0]]
1348 //
test_vreinterpretq_u64_s16(int16x8_t a)1349 uint64x2_t test_vreinterpretq_u64_s16(int16x8_t a)
1350 {
1351 #ifdef POLYMORPHIC
1352     return vreinterpretq_u64(a);
1353 #else /* POLYMORPHIC */
1354     return vreinterpretq_u64_s16(a);
1355 #endif /* POLYMORPHIC */
1356 }
1357 
1358 // LE-LABEL: @test_vreinterpretq_u64_s32(
1359 // LE-NEXT:  entry:
1360 // LE-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <2 x i64>
1361 // LE-NEXT:    ret <2 x i64> [[TMP0]]
1362 //
1363 // BE-LABEL: @test_vreinterpretq_u64_s32(
1364 // BE-NEXT:  entry:
1365 // BE-NEXT:    [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v4i32(<4 x i32> [[A:%.*]])
1366 // BE-NEXT:    ret <2 x i64> [[TMP0]]
1367 //
test_vreinterpretq_u64_s32(int32x4_t a)1368 uint64x2_t test_vreinterpretq_u64_s32(int32x4_t a)
1369 {
1370 #ifdef POLYMORPHIC
1371     return vreinterpretq_u64(a);
1372 #else /* POLYMORPHIC */
1373     return vreinterpretq_u64_s32(a);
1374 #endif /* POLYMORPHIC */
1375 }
1376 
1377 // BOTH-LABEL: @test_vreinterpretq_u64_s64(
1378 // BOTH-NEXT:  entry:
1379 // BOTH-NEXT:    ret <2 x i64> [[A:%.*]]
1380 //
test_vreinterpretq_u64_s64(int64x2_t a)1381 uint64x2_t test_vreinterpretq_u64_s64(int64x2_t a)
1382 {
1383 #ifdef POLYMORPHIC
1384     return vreinterpretq_u64(a);
1385 #else /* POLYMORPHIC */
1386     return vreinterpretq_u64_s64(a);
1387 #endif /* POLYMORPHIC */
1388 }
1389 
1390 // LE-LABEL: @test_vreinterpretq_u64_s8(
1391 // LE-NEXT:  entry:
1392 // LE-NEXT:    [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <2 x i64>
1393 // LE-NEXT:    ret <2 x i64> [[TMP0]]
1394 //
1395 // BE-LABEL: @test_vreinterpretq_u64_s8(
1396 // BE-NEXT:  entry:
1397 // BE-NEXT:    [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v16i8(<16 x i8> [[A:%.*]])
1398 // BE-NEXT:    ret <2 x i64> [[TMP0]]
1399 //
test_vreinterpretq_u64_s8(int8x16_t a)1400 uint64x2_t test_vreinterpretq_u64_s8(int8x16_t a)
1401 {
1402 #ifdef POLYMORPHIC
1403     return vreinterpretq_u64(a);
1404 #else /* POLYMORPHIC */
1405     return vreinterpretq_u64_s8(a);
1406 #endif /* POLYMORPHIC */
1407 }
1408 
1409 // LE-LABEL: @test_vreinterpretq_u64_u16(
1410 // LE-NEXT:  entry:
1411 // LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <2 x i64>
1412 // LE-NEXT:    ret <2 x i64> [[TMP0]]
1413 //
1414 // BE-LABEL: @test_vreinterpretq_u64_u16(
1415 // BE-NEXT:  entry:
1416 // BE-NEXT:    [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v8i16(<8 x i16> [[A:%.*]])
1417 // BE-NEXT:    ret <2 x i64> [[TMP0]]
1418 //
test_vreinterpretq_u64_u16(uint16x8_t a)1419 uint64x2_t test_vreinterpretq_u64_u16(uint16x8_t a)
1420 {
1421 #ifdef POLYMORPHIC
1422     return vreinterpretq_u64(a);
1423 #else /* POLYMORPHIC */
1424     return vreinterpretq_u64_u16(a);
1425 #endif /* POLYMORPHIC */
1426 }
1427 
1428 // LE-LABEL: @test_vreinterpretq_u64_u32(
1429 // LE-NEXT:  entry:
1430 // LE-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <2 x i64>
1431 // LE-NEXT:    ret <2 x i64> [[TMP0]]
1432 //
1433 // BE-LABEL: @test_vreinterpretq_u64_u32(
1434 // BE-NEXT:  entry:
1435 // BE-NEXT:    [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v4i32(<4 x i32> [[A:%.*]])
1436 // BE-NEXT:    ret <2 x i64> [[TMP0]]
1437 //
test_vreinterpretq_u64_u32(uint32x4_t a)1438 uint64x2_t test_vreinterpretq_u64_u32(uint32x4_t a)
1439 {
1440 #ifdef POLYMORPHIC
1441     return vreinterpretq_u64(a);
1442 #else /* POLYMORPHIC */
1443     return vreinterpretq_u64_u32(a);
1444 #endif /* POLYMORPHIC */
1445 }
1446 
1447 // LE-LABEL: @test_vreinterpretq_u64_u8(
1448 // LE-NEXT:  entry:
1449 // LE-NEXT:    [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <2 x i64>
1450 // LE-NEXT:    ret <2 x i64> [[TMP0]]
1451 //
1452 // BE-LABEL: @test_vreinterpretq_u64_u8(
1453 // BE-NEXT:  entry:
1454 // BE-NEXT:    [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v16i8(<16 x i8> [[A:%.*]])
1455 // BE-NEXT:    ret <2 x i64> [[TMP0]]
1456 //
test_vreinterpretq_u64_u8(uint8x16_t a)1457 uint64x2_t test_vreinterpretq_u64_u8(uint8x16_t a)
1458 {
1459 #ifdef POLYMORPHIC
1460     return vreinterpretq_u64(a);
1461 #else /* POLYMORPHIC */
1462     return vreinterpretq_u64_u8(a);
1463 #endif /* POLYMORPHIC */
1464 }
1465 
1466 // LE-LABEL: @test_vreinterpretq_u8_f16(
1467 // LE-NEXT:  entry:
1468 // LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <16 x i8>
1469 // LE-NEXT:    ret <16 x i8> [[TMP0]]
1470 //
1471 // BE-LABEL: @test_vreinterpretq_u8_f16(
1472 // BE-NEXT:  entry:
1473 // BE-NEXT:    [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v8f16(<8 x half> [[A:%.*]])
1474 // BE-NEXT:    ret <16 x i8> [[TMP0]]
1475 //
test_vreinterpretq_u8_f16(float16x8_t a)1476 uint8x16_t test_vreinterpretq_u8_f16(float16x8_t a)
1477 {
1478 #ifdef POLYMORPHIC
1479     return vreinterpretq_u8(a);
1480 #else /* POLYMORPHIC */
1481     return vreinterpretq_u8_f16(a);
1482 #endif /* POLYMORPHIC */
1483 }
1484 
1485 // LE-LABEL: @test_vreinterpretq_u8_f32(
1486 // LE-NEXT:  entry:
1487 // LE-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <16 x i8>
1488 // LE-NEXT:    ret <16 x i8> [[TMP0]]
1489 //
1490 // BE-LABEL: @test_vreinterpretq_u8_f32(
1491 // BE-NEXT:  entry:
1492 // BE-NEXT:    [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v4f32(<4 x float> [[A:%.*]])
1493 // BE-NEXT:    ret <16 x i8> [[TMP0]]
1494 //
test_vreinterpretq_u8_f32(float32x4_t a)1495 uint8x16_t test_vreinterpretq_u8_f32(float32x4_t a)
1496 {
1497 #ifdef POLYMORPHIC
1498     return vreinterpretq_u8(a);
1499 #else /* POLYMORPHIC */
1500     return vreinterpretq_u8_f32(a);
1501 #endif /* POLYMORPHIC */
1502 }
1503 
1504 // LE-LABEL: @test_vreinterpretq_u8_s16(
1505 // LE-NEXT:  entry:
1506 // LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <16 x i8>
1507 // LE-NEXT:    ret <16 x i8> [[TMP0]]
1508 //
1509 // BE-LABEL: @test_vreinterpretq_u8_s16(
1510 // BE-NEXT:  entry:
1511 // BE-NEXT:    [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v8i16(<8 x i16> [[A:%.*]])
1512 // BE-NEXT:    ret <16 x i8> [[TMP0]]
1513 //
test_vreinterpretq_u8_s16(int16x8_t a)1514 uint8x16_t test_vreinterpretq_u8_s16(int16x8_t a)
1515 {
1516 #ifdef POLYMORPHIC
1517     return vreinterpretq_u8(a);
1518 #else /* POLYMORPHIC */
1519     return vreinterpretq_u8_s16(a);
1520 #endif /* POLYMORPHIC */
1521 }
1522 
1523 // LE-LABEL: @test_vreinterpretq_u8_s32(
1524 // LE-NEXT:  entry:
1525 // LE-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <16 x i8>
1526 // LE-NEXT:    ret <16 x i8> [[TMP0]]
1527 //
1528 // BE-LABEL: @test_vreinterpretq_u8_s32(
1529 // BE-NEXT:  entry:
1530 // BE-NEXT:    [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v4i32(<4 x i32> [[A:%.*]])
1531 // BE-NEXT:    ret <16 x i8> [[TMP0]]
1532 //
test_vreinterpretq_u8_s32(int32x4_t a)1533 uint8x16_t test_vreinterpretq_u8_s32(int32x4_t a)
1534 {
1535 #ifdef POLYMORPHIC
1536     return vreinterpretq_u8(a);
1537 #else /* POLYMORPHIC */
1538     return vreinterpretq_u8_s32(a);
1539 #endif /* POLYMORPHIC */
1540 }
1541 
1542 // LE-LABEL: @test_vreinterpretq_u8_s64(
1543 // LE-NEXT:  entry:
1544 // LE-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <16 x i8>
1545 // LE-NEXT:    ret <16 x i8> [[TMP0]]
1546 //
1547 // BE-LABEL: @test_vreinterpretq_u8_s64(
1548 // BE-NEXT:  entry:
1549 // BE-NEXT:    [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v2i64(<2 x i64> [[A:%.*]])
1550 // BE-NEXT:    ret <16 x i8> [[TMP0]]
1551 //
test_vreinterpretq_u8_s64(int64x2_t a)1552 uint8x16_t test_vreinterpretq_u8_s64(int64x2_t a)
1553 {
1554 #ifdef POLYMORPHIC
1555     return vreinterpretq_u8(a);
1556 #else /* POLYMORPHIC */
1557     return vreinterpretq_u8_s64(a);
1558 #endif /* POLYMORPHIC */
1559 }
1560 
1561 // BOTH-LABEL: @test_vreinterpretq_u8_s8(
1562 // BOTH-NEXT:  entry:
1563 // BOTH-NEXT:    ret <16 x i8> [[A:%.*]]
1564 //
test_vreinterpretq_u8_s8(int8x16_t a)1565 uint8x16_t test_vreinterpretq_u8_s8(int8x16_t a)
1566 {
1567 #ifdef POLYMORPHIC
1568     return vreinterpretq_u8(a);
1569 #else /* POLYMORPHIC */
1570     return vreinterpretq_u8_s8(a);
1571 #endif /* POLYMORPHIC */
1572 }
1573 
1574 // LE-LABEL: @test_vreinterpretq_u8_u16(
1575 // LE-NEXT:  entry:
1576 // LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <16 x i8>
1577 // LE-NEXT:    ret <16 x i8> [[TMP0]]
1578 //
1579 // BE-LABEL: @test_vreinterpretq_u8_u16(
1580 // BE-NEXT:  entry:
1581 // BE-NEXT:    [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v8i16(<8 x i16> [[A:%.*]])
1582 // BE-NEXT:    ret <16 x i8> [[TMP0]]
1583 //
test_vreinterpretq_u8_u16(uint16x8_t a)1584 uint8x16_t test_vreinterpretq_u8_u16(uint16x8_t a)
1585 {
1586 #ifdef POLYMORPHIC
1587     return vreinterpretq_u8(a);
1588 #else /* POLYMORPHIC */
1589     return vreinterpretq_u8_u16(a);
1590 #endif /* POLYMORPHIC */
1591 }
1592 
1593 // LE-LABEL: @test_vreinterpretq_u8_u32(
1594 // LE-NEXT:  entry:
1595 // LE-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <16 x i8>
1596 // LE-NEXT:    ret <16 x i8> [[TMP0]]
1597 //
1598 // BE-LABEL: @test_vreinterpretq_u8_u32(
1599 // BE-NEXT:  entry:
1600 // BE-NEXT:    [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v4i32(<4 x i32> [[A:%.*]])
1601 // BE-NEXT:    ret <16 x i8> [[TMP0]]
1602 //
test_vreinterpretq_u8_u32(uint32x4_t a)1603 uint8x16_t test_vreinterpretq_u8_u32(uint32x4_t a)
1604 {
1605 #ifdef POLYMORPHIC
1606     return vreinterpretq_u8(a);
1607 #else /* POLYMORPHIC */
1608     return vreinterpretq_u8_u32(a);
1609 #endif /* POLYMORPHIC */
1610 }
1611 
1612 // LE-LABEL: @test_vreinterpretq_u8_u64(
1613 // LE-NEXT:  entry:
1614 // LE-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <16 x i8>
1615 // LE-NEXT:    ret <16 x i8> [[TMP0]]
1616 //
1617 // BE-LABEL: @test_vreinterpretq_u8_u64(
1618 // BE-NEXT:  entry:
1619 // BE-NEXT:    [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v2i64(<2 x i64> [[A:%.*]])
1620 // BE-NEXT:    ret <16 x i8> [[TMP0]]
1621 //
test_vreinterpretq_u8_u64(uint64x2_t a)1622 uint8x16_t test_vreinterpretq_u8_u64(uint64x2_t a)
1623 {
1624 #ifdef POLYMORPHIC
1625     return vreinterpretq_u8(a);
1626 #else /* POLYMORPHIC */
1627     return vreinterpretq_u8_u64(a);
1628 #endif /* POLYMORPHIC */
1629 }
1630