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