1 // REQUIRES: aarch64-registered-target
2 // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
3 // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s
4 // RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
5 // RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s
6 // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -o - %s >/dev/null
7 
8 #include <arm_sve.h>
9 
10 #ifdef SVE_OVERLOADED_FORMS
11 // A simple used,unused... macro, long enough to represent any SVE builtin.
12 #define SVE_ACLE_FUNC(A1,A2_UNUSED,A3,A4_UNUSED) A1##A3
13 #else
14 #define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4
15 #endif
16 
test_svreinterpret_s8_s8(svint8_t op)17 svint8_t test_svreinterpret_s8_s8(svint8_t op)
18 {
19   // CHECK-LABEL: test_svreinterpret_s8_s8
20   // CHECK: ret <vscale x 16 x i8> %op
21   return SVE_ACLE_FUNC(svreinterpret_s8,_s8,,)(op);
22 }
23 
test_svreinterpret_s8_s16(svint16_t op)24 svint8_t test_svreinterpret_s8_s16(svint16_t op)
25 {
26   // CHECK-LABEL: test_svreinterpret_s8_s16
27   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x i16> %op to <vscale x 16 x i8>
28   // CHECK: ret <vscale x 16 x i8> %[[CAST]]
29   return SVE_ACLE_FUNC(svreinterpret_s8,_s16,,)(op);
30 }
31 
test_svreinterpret_s8_s32(svint32_t op)32 svint8_t test_svreinterpret_s8_s32(svint32_t op)
33 {
34   // CHECK-LABEL: test_svreinterpret_s8_s32
35   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x i32> %op to <vscale x 16 x i8>
36   // CHECK: ret <vscale x 16 x i8> %[[CAST]]
37   return SVE_ACLE_FUNC(svreinterpret_s8,_s32,,)(op);
38 }
39 
test_svreinterpret_s8_s64(svint64_t op)40 svint8_t test_svreinterpret_s8_s64(svint64_t op)
41 {
42   // CHECK-LABEL: test_svreinterpret_s8_s64
43   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x i64> %op to <vscale x 16 x i8>
44   // CHECK: ret <vscale x 16 x i8> %[[CAST]]
45   return SVE_ACLE_FUNC(svreinterpret_s8,_s64,,)(op);
46 }
47 
test_svreinterpret_s8_u8(svuint8_t op)48 svint8_t test_svreinterpret_s8_u8(svuint8_t op)
49 {
50   // CHECK-LABEL: test_svreinterpret_s8_u8
51   // CHECK: ret <vscale x 16 x i8> %op
52   return SVE_ACLE_FUNC(svreinterpret_s8,_u8,,)(op);
53 }
54 
test_svreinterpret_s8_u16(svuint16_t op)55 svint8_t test_svreinterpret_s8_u16(svuint16_t op)
56 {
57   // CHECK-LABEL: test_svreinterpret_s8_u16
58   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x i16> %op to <vscale x 16 x i8>
59   // CHECK: ret <vscale x 16 x i8> %[[CAST]]
60   return SVE_ACLE_FUNC(svreinterpret_s8,_u16,,)(op);
61 }
62 
test_svreinterpret_s8_u32(svuint32_t op)63 svint8_t test_svreinterpret_s8_u32(svuint32_t op)
64 {
65   // CHECK-LABEL: test_svreinterpret_s8_u32
66   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x i32> %op to <vscale x 16 x i8>
67   // CHECK: ret <vscale x 16 x i8> %[[CAST]]
68   return SVE_ACLE_FUNC(svreinterpret_s8,_u32,,)(op);
69 }
70 
test_svreinterpret_s8_u64(svuint64_t op)71 svint8_t test_svreinterpret_s8_u64(svuint64_t op)
72 {
73   // CHECK-LABEL: test_svreinterpret_s8_u64
74   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x i64> %op to <vscale x 16 x i8>
75   // CHECK: ret <vscale x 16 x i8> %[[CAST]]
76   return SVE_ACLE_FUNC(svreinterpret_s8,_u64,,)(op);
77 }
78 
test_svreinterpret_s8_f16(svfloat16_t op)79 svint8_t test_svreinterpret_s8_f16(svfloat16_t op)
80 {
81   // CHECK-LABEL: test_svreinterpret_s8_f16
82   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x half> %op to <vscale x 16 x i8>
83   // CHECK: ret <vscale x 16 x i8> %[[CAST]]
84   return SVE_ACLE_FUNC(svreinterpret_s8,_f16,,)(op);
85 }
86 
test_svreinterpret_s8_f32(svfloat32_t op)87 svint8_t test_svreinterpret_s8_f32(svfloat32_t op)
88 {
89   // CHECK-LABEL: test_svreinterpret_s8_f32
90   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x float> %op to <vscale x 16 x i8>
91   // CHECK: ret <vscale x 16 x i8> %[[CAST]]
92   return SVE_ACLE_FUNC(svreinterpret_s8,_f32,,)(op);
93 }
94 
test_svreinterpret_s8_f64(svfloat64_t op)95 svint8_t test_svreinterpret_s8_f64(svfloat64_t op)
96 {
97   // CHECK-LABEL: test_svreinterpret_s8_f64
98   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x double> %op to <vscale x 16 x i8>
99   // CHECK: ret <vscale x 16 x i8> %[[CAST]]
100   return SVE_ACLE_FUNC(svreinterpret_s8,_f64,,)(op);
101 }
102 
test_svreinterpret_s16_s8(svint8_t op)103 svint16_t test_svreinterpret_s16_s8(svint8_t op)
104 {
105   // CHECK-LABEL: test_svreinterpret_s16_s8
106   // CHECK: %[[CAST:.*]] = bitcast <vscale x 16 x i8> %op to <vscale x 8 x i16>
107   // CHECK: ret <vscale x 8 x i16> %[[CAST]]
108   return SVE_ACLE_FUNC(svreinterpret_s16,_s8,,)(op);
109 }
110 
test_svreinterpret_s16_s16(svint16_t op)111 svint16_t test_svreinterpret_s16_s16(svint16_t op)
112 {
113   // CHECK-LABEL: test_svreinterpret_s16_s16
114   // CHECK: ret <vscale x 8 x i16> %op
115   return SVE_ACLE_FUNC(svreinterpret_s16,_s16,,)(op);
116 }
117 
test_svreinterpret_s16_s32(svint32_t op)118 svint16_t test_svreinterpret_s16_s32(svint32_t op)
119 {
120   // CHECK-LABEL: test_svreinterpret_s16_s32
121   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x i32> %op to <vscale x 8 x i16>
122   // CHECK: ret <vscale x 8 x i16> %[[CAST]]
123   return SVE_ACLE_FUNC(svreinterpret_s16,_s32,,)(op);
124 }
125 
test_svreinterpret_s16_s64(svint64_t op)126 svint16_t test_svreinterpret_s16_s64(svint64_t op)
127 {
128   // CHECK-LABEL: test_svreinterpret_s16_s64
129   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x i64> %op to <vscale x 8 x i16>
130   // CHECK: ret <vscale x 8 x i16> %[[CAST]]
131   return SVE_ACLE_FUNC(svreinterpret_s16,_s64,,)(op);
132 }
133 
test_svreinterpret_s16_u8(svuint8_t op)134 svint16_t test_svreinterpret_s16_u8(svuint8_t op)
135 {
136   // CHECK-LABEL: test_svreinterpret_s16_u8
137   // CHECK: %[[CAST:.*]] = bitcast <vscale x 16 x i8> %op to <vscale x 8 x i16>
138   // CHECK: ret <vscale x 8 x i16> %[[CAST]]
139   return SVE_ACLE_FUNC(svreinterpret_s16,_u8,,)(op);
140 }
141 
test_svreinterpret_s16_u16(svuint16_t op)142 svint16_t test_svreinterpret_s16_u16(svuint16_t op)
143 {
144   // CHECK-LABEL: test_svreinterpret_s16_u16
145   // CHECK: ret <vscale x 8 x i16> %op
146   return SVE_ACLE_FUNC(svreinterpret_s16,_u16,,)(op);
147 }
148 
test_svreinterpret_s16_u32(svuint32_t op)149 svint16_t test_svreinterpret_s16_u32(svuint32_t op)
150 {
151   // CHECK-LABEL: test_svreinterpret_s16_u32
152   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x i32> %op to <vscale x 8 x i16>
153   // CHECK: ret <vscale x 8 x i16> %[[CAST]]
154   return SVE_ACLE_FUNC(svreinterpret_s16,_u32,,)(op);
155 }
156 
test_svreinterpret_s16_u64(svuint64_t op)157 svint16_t test_svreinterpret_s16_u64(svuint64_t op)
158 {
159   // CHECK-LABEL: test_svreinterpret_s16_u64
160   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x i64> %op to <vscale x 8 x i16>
161   // CHECK: ret <vscale x 8 x i16> %[[CAST]]
162   return SVE_ACLE_FUNC(svreinterpret_s16,_u64,,)(op);
163 }
164 
test_svreinterpret_s16_f16(svfloat16_t op)165 svint16_t test_svreinterpret_s16_f16(svfloat16_t op)
166 {
167   // CHECK-LABEL: test_svreinterpret_s16_f16
168   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x half> %op to <vscale x 8 x i16>
169   // CHECK: ret <vscale x 8 x i16> %[[CAST]]
170   return SVE_ACLE_FUNC(svreinterpret_s16,_f16,,)(op);
171 }
172 
test_svreinterpret_s16_f32(svfloat32_t op)173 svint16_t test_svreinterpret_s16_f32(svfloat32_t op)
174 {
175   // CHECK-LABEL: test_svreinterpret_s16_f32
176   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x float> %op to <vscale x 8 x i16>
177   // CHECK: ret <vscale x 8 x i16> %[[CAST]]
178   return SVE_ACLE_FUNC(svreinterpret_s16,_f32,,)(op);
179 }
180 
test_svreinterpret_s16_f64(svfloat64_t op)181 svint16_t test_svreinterpret_s16_f64(svfloat64_t op)
182 {
183   // CHECK-LABEL: test_svreinterpret_s16_f64
184   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x double> %op to <vscale x 8 x i16>
185   // CHECK: ret <vscale x 8 x i16> %[[CAST]]
186   return SVE_ACLE_FUNC(svreinterpret_s16,_f64,,)(op);
187 }
188 
test_svreinterpret_s32_s8(svint8_t op)189 svint32_t test_svreinterpret_s32_s8(svint8_t op)
190 {
191   // CHECK-LABEL: test_svreinterpret_s32_s8
192   // CHECK: %[[CAST:.*]] = bitcast <vscale x 16 x i8> %op to <vscale x 4 x i32>
193   // CHECK: ret <vscale x 4 x i32> %[[CAST]]
194   return SVE_ACLE_FUNC(svreinterpret_s32,_s8,,)(op);
195 }
196 
test_svreinterpret_s32_s16(svint16_t op)197 svint32_t test_svreinterpret_s32_s16(svint16_t op)
198 {
199   // CHECK-LABEL: test_svreinterpret_s32_s16
200   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x i16> %op to <vscale x 4 x i32>
201   // CHECK: ret <vscale x 4 x i32> %[[CAST]]
202   return SVE_ACLE_FUNC(svreinterpret_s32,_s16,,)(op);
203 }
204 
test_svreinterpret_s32_s32(svint32_t op)205 svint32_t test_svreinterpret_s32_s32(svint32_t op)
206 {
207   // CHECK-LABEL: test_svreinterpret_s32_s32
208   // CHECK: ret <vscale x 4 x i32> %op
209   return SVE_ACLE_FUNC(svreinterpret_s32,_s32,,)(op);
210 }
211 
test_svreinterpret_s32_s64(svint64_t op)212 svint32_t test_svreinterpret_s32_s64(svint64_t op)
213 {
214   // CHECK-LABEL: test_svreinterpret_s32_s64
215   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x i64> %op to <vscale x 4 x i32>
216   // CHECK: ret <vscale x 4 x i32> %[[CAST]]
217   return SVE_ACLE_FUNC(svreinterpret_s32,_s64,,)(op);
218 }
219 
test_svreinterpret_s32_u8(svuint8_t op)220 svint32_t test_svreinterpret_s32_u8(svuint8_t op)
221 {
222   // CHECK-LABEL: test_svreinterpret_s32_u8
223   // CHECK: %[[CAST:.*]] = bitcast <vscale x 16 x i8> %op to <vscale x 4 x i32>
224   // CHECK: ret <vscale x 4 x i32> %[[CAST]]
225   return SVE_ACLE_FUNC(svreinterpret_s32,_u8,,)(op);
226 }
227 
test_svreinterpret_s32_u16(svuint16_t op)228 svint32_t test_svreinterpret_s32_u16(svuint16_t op)
229 {
230   // CHECK-LABEL: test_svreinterpret_s32_u16
231   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x i16> %op to <vscale x 4 x i32>
232   // CHECK: ret <vscale x 4 x i32> %[[CAST]]
233   return SVE_ACLE_FUNC(svreinterpret_s32,_u16,,)(op);
234 }
235 
test_svreinterpret_s32_u32(svuint32_t op)236 svint32_t test_svreinterpret_s32_u32(svuint32_t op)
237 {
238   // CHECK-LABEL: test_svreinterpret_s32_u32
239   // CHECK: ret <vscale x 4 x i32> %op
240   return SVE_ACLE_FUNC(svreinterpret_s32,_u32,,)(op);
241 }
242 
test_svreinterpret_s32_u64(svuint64_t op)243 svint32_t test_svreinterpret_s32_u64(svuint64_t op)
244 {
245   // CHECK-LABEL: test_svreinterpret_s32_u64
246   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x i64> %op to <vscale x 4 x i32>
247   // CHECK: ret <vscale x 4 x i32> %[[CAST]]
248   return SVE_ACLE_FUNC(svreinterpret_s32,_u64,,)(op);
249 }
250 
test_svreinterpret_s32_f16(svfloat16_t op)251 svint32_t test_svreinterpret_s32_f16(svfloat16_t op)
252 {
253   // CHECK-LABEL: test_svreinterpret_s32_f16
254   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x half> %op to <vscale x 4 x i32>
255   // CHECK: ret <vscale x 4 x i32> %[[CAST]]
256   return SVE_ACLE_FUNC(svreinterpret_s32,_f16,,)(op);
257 }
258 
test_svreinterpret_s32_f32(svfloat32_t op)259 svint32_t test_svreinterpret_s32_f32(svfloat32_t op)
260 {
261   // CHECK-LABEL: test_svreinterpret_s32_f32
262   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x float> %op to <vscale x 4 x i32>
263   // CHECK: ret <vscale x 4 x i32> %[[CAST]]
264   return SVE_ACLE_FUNC(svreinterpret_s32,_f32,,)(op);
265 }
266 
test_svreinterpret_s32_f64(svfloat64_t op)267 svint32_t test_svreinterpret_s32_f64(svfloat64_t op)
268 {
269   // CHECK-LABEL: test_svreinterpret_s32_f64
270   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x double> %op to <vscale x 4 x i32>
271   // CHECK: ret <vscale x 4 x i32> %[[CAST]]
272   return SVE_ACLE_FUNC(svreinterpret_s32,_f64,,)(op);
273 }
274 
test_svreinterpret_s64_s8(svint8_t op)275 svint64_t test_svreinterpret_s64_s8(svint8_t op)
276 {
277   // CHECK-LABEL: test_svreinterpret_s64_s8
278   // CHECK: %[[CAST:.*]] = bitcast <vscale x 16 x i8> %op to <vscale x 2 x i64>
279   // CHECK: ret <vscale x 2 x i64> %[[CAST]]
280   return SVE_ACLE_FUNC(svreinterpret_s64,_s8,,)(op);
281 }
282 
test_svreinterpret_s64_s16(svint16_t op)283 svint64_t test_svreinterpret_s64_s16(svint16_t op)
284 {
285   // CHECK-LABEL: test_svreinterpret_s64_s16
286   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x i16> %op to <vscale x 2 x i64>
287   // CHECK: ret <vscale x 2 x i64> %[[CAST]]
288   return SVE_ACLE_FUNC(svreinterpret_s64,_s16,,)(op);
289 }
290 
test_svreinterpret_s64_s32(svint32_t op)291 svint64_t test_svreinterpret_s64_s32(svint32_t op)
292 {
293   // CHECK-LABEL: test_svreinterpret_s64_s32
294   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x i32> %op to <vscale x 2 x i64>
295   // CHECK: ret <vscale x 2 x i64> %[[CAST]]
296   return SVE_ACLE_FUNC(svreinterpret_s64,_s32,,)(op);
297 }
298 
test_svreinterpret_s64_s64(svint64_t op)299 svint64_t test_svreinterpret_s64_s64(svint64_t op)
300 {
301   // CHECK-LABEL: test_svreinterpret_s64_s64
302   // CHECK: ret <vscale x 2 x i64> %op
303   return SVE_ACLE_FUNC(svreinterpret_s64,_s64,,)(op);
304 }
305 
test_svreinterpret_s64_u8(svuint8_t op)306 svint64_t test_svreinterpret_s64_u8(svuint8_t op)
307 {
308   // CHECK-LABEL: test_svreinterpret_s64_u8
309   // CHECK: %[[CAST:.*]] = bitcast <vscale x 16 x i8> %op to <vscale x 2 x i64>
310   // CHECK: ret <vscale x 2 x i64> %[[CAST]]
311   return SVE_ACLE_FUNC(svreinterpret_s64,_u8,,)(op);
312 }
313 
test_svreinterpret_s64_u16(svuint16_t op)314 svint64_t test_svreinterpret_s64_u16(svuint16_t op)
315 {
316   // CHECK-LABEL: test_svreinterpret_s64_u16
317   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x i16> %op to <vscale x 2 x i64>
318   // CHECK: ret <vscale x 2 x i64> %[[CAST]]
319   return SVE_ACLE_FUNC(svreinterpret_s64,_u16,,)(op);
320 }
321 
test_svreinterpret_s64_u32(svuint32_t op)322 svint64_t test_svreinterpret_s64_u32(svuint32_t op)
323 {
324   // CHECK-LABEL: test_svreinterpret_s64_u32
325   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x i32> %op to <vscale x 2 x i64>
326   // CHECK: ret <vscale x 2 x i64> %[[CAST]]
327   return SVE_ACLE_FUNC(svreinterpret_s64,_u32,,)(op);
328 }
329 
test_svreinterpret_s64_u64(svuint64_t op)330 svint64_t test_svreinterpret_s64_u64(svuint64_t op)
331 {
332   // CHECK-LABEL: test_svreinterpret_s64_u64
333   // CHECK: ret <vscale x 2 x i64> %op
334   return SVE_ACLE_FUNC(svreinterpret_s64,_u64,,)(op);
335 }
336 
test_svreinterpret_s64_f16(svfloat16_t op)337 svint64_t test_svreinterpret_s64_f16(svfloat16_t op)
338 {
339   // CHECK-LABEL: test_svreinterpret_s64_f16
340   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x half> %op to <vscale x 2 x i64>
341   // CHECK: ret <vscale x 2 x i64> %[[CAST]]
342   return SVE_ACLE_FUNC(svreinterpret_s64,_f16,,)(op);
343 }
344 
test_svreinterpret_s64_f32(svfloat32_t op)345 svint64_t test_svreinterpret_s64_f32(svfloat32_t op)
346 {
347   // CHECK-LABEL: test_svreinterpret_s64_f32
348   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x float> %op to <vscale x 2 x i64>
349   // CHECK: ret <vscale x 2 x i64> %[[CAST]]
350   return SVE_ACLE_FUNC(svreinterpret_s64,_f32,,)(op);
351 }
352 
test_svreinterpret_s64_f64(svfloat64_t op)353 svint64_t test_svreinterpret_s64_f64(svfloat64_t op)
354 {
355   // CHECK-LABEL: test_svreinterpret_s64_f64
356   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x double> %op to <vscale x 2 x i64>
357   // CHECK: ret <vscale x 2 x i64> %[[CAST]]
358   return SVE_ACLE_FUNC(svreinterpret_s64,_f64,,)(op);
359 }
360 
test_svreinterpret_u8_s8(svint8_t op)361 svuint8_t test_svreinterpret_u8_s8(svint8_t op)
362 {
363   // CHECK-LABEL: test_svreinterpret_u8_s8
364   // CHECK: ret <vscale x 16 x i8> %op
365   return SVE_ACLE_FUNC(svreinterpret_u8,_s8,,)(op);
366 }
367 
test_svreinterpret_u8_s16(svint16_t op)368 svuint8_t test_svreinterpret_u8_s16(svint16_t op)
369 {
370   // CHECK-LABEL: test_svreinterpret_u8_s16
371   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x i16> %op to <vscale x 16 x i8>
372   // CHECK: ret <vscale x 16 x i8> %[[CAST]]
373   return SVE_ACLE_FUNC(svreinterpret_u8,_s16,,)(op);
374 }
375 
test_svreinterpret_u8_s32(svint32_t op)376 svuint8_t test_svreinterpret_u8_s32(svint32_t op)
377 {
378   // CHECK-LABEL: test_svreinterpret_u8_s32
379   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x i32> %op to <vscale x 16 x i8>
380   // CHECK: ret <vscale x 16 x i8> %[[CAST]]
381   return SVE_ACLE_FUNC(svreinterpret_u8,_s32,,)(op);
382 }
383 
test_svreinterpret_u8_s64(svint64_t op)384 svuint8_t test_svreinterpret_u8_s64(svint64_t op)
385 {
386   // CHECK-LABEL: test_svreinterpret_u8_s64
387   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x i64> %op to <vscale x 16 x i8>
388   // CHECK: ret <vscale x 16 x i8> %[[CAST]]
389   return SVE_ACLE_FUNC(svreinterpret_u8,_s64,,)(op);
390 }
391 
test_svreinterpret_u8_u8(svuint8_t op)392 svuint8_t test_svreinterpret_u8_u8(svuint8_t op)
393 {
394   // CHECK-LABEL: test_svreinterpret_u8_u8
395   // CHECK: ret <vscale x 16 x i8> %op
396   return SVE_ACLE_FUNC(svreinterpret_u8,_u8,,)(op);
397 }
398 
test_svreinterpret_u8_u16(svuint16_t op)399 svuint8_t test_svreinterpret_u8_u16(svuint16_t op)
400 {
401   // CHECK-LABEL: test_svreinterpret_u8_u16
402   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x i16> %op to <vscale x 16 x i8>
403   // CHECK: ret <vscale x 16 x i8> %[[CAST]]
404   return SVE_ACLE_FUNC(svreinterpret_u8,_u16,,)(op);
405 }
406 
test_svreinterpret_u8_u32(svuint32_t op)407 svuint8_t test_svreinterpret_u8_u32(svuint32_t op)
408 {
409   // CHECK-LABEL: test_svreinterpret_u8_u32
410   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x i32> %op to <vscale x 16 x i8>
411   // CHECK: ret <vscale x 16 x i8> %[[CAST]]
412   return SVE_ACLE_FUNC(svreinterpret_u8,_u32,,)(op);
413 }
414 
test_svreinterpret_u8_u64(svuint64_t op)415 svuint8_t test_svreinterpret_u8_u64(svuint64_t op)
416 {
417   // CHECK-LABEL: test_svreinterpret_u8_u64
418   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x i64> %op to <vscale x 16 x i8>
419   // CHECK: ret <vscale x 16 x i8> %[[CAST]]
420   return SVE_ACLE_FUNC(svreinterpret_u8,_u64,,)(op);
421 }
422 
test_svreinterpret_u8_f16(svfloat16_t op)423 svuint8_t test_svreinterpret_u8_f16(svfloat16_t op)
424 {
425   // CHECK-LABEL: test_svreinterpret_u8_f16
426   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x half> %op to <vscale x 16 x i8>
427   // CHECK: ret <vscale x 16 x i8> %[[CAST]]
428   return SVE_ACLE_FUNC(svreinterpret_u8,_f16,,)(op);
429 }
430 
test_svreinterpret_u8_f32(svfloat32_t op)431 svuint8_t test_svreinterpret_u8_f32(svfloat32_t op)
432 {
433   // CHECK-LABEL: test_svreinterpret_u8_f32
434   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x float> %op to <vscale x 16 x i8>
435   // CHECK: ret <vscale x 16 x i8> %[[CAST]]
436   return SVE_ACLE_FUNC(svreinterpret_u8,_f32,,)(op);
437 }
438 
test_svreinterpret_u8_f64(svfloat64_t op)439 svuint8_t test_svreinterpret_u8_f64(svfloat64_t op)
440 {
441   // CHECK-LABEL: test_svreinterpret_u8_f64
442   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x double> %op to <vscale x 16 x i8>
443   // CHECK: ret <vscale x 16 x i8> %[[CAST]]
444   return SVE_ACLE_FUNC(svreinterpret_u8,_f64,,)(op);
445 }
446 
test_svreinterpret_u16_s8(svint8_t op)447 svuint16_t test_svreinterpret_u16_s8(svint8_t op)
448 {
449   // CHECK-LABEL: test_svreinterpret_u16_s8
450   // CHECK: %[[CAST:.*]] = bitcast <vscale x 16 x i8> %op to <vscale x 8 x i16>
451   // CHECK: ret <vscale x 8 x i16> %[[CAST]]
452   return SVE_ACLE_FUNC(svreinterpret_u16,_s8,,)(op);
453 }
454 
test_svreinterpret_u16_s16(svint16_t op)455 svuint16_t test_svreinterpret_u16_s16(svint16_t op)
456 {
457   // CHECK-LABEL: test_svreinterpret_u16_s16
458   // CHECK: ret <vscale x 8 x i16> %op
459   return SVE_ACLE_FUNC(svreinterpret_u16,_s16,,)(op);
460 }
461 
test_svreinterpret_u16_s32(svint32_t op)462 svuint16_t test_svreinterpret_u16_s32(svint32_t op)
463 {
464   // CHECK-LABEL: test_svreinterpret_u16_s32
465   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x i32> %op to <vscale x 8 x i16>
466   // CHECK: ret <vscale x 8 x i16> %[[CAST]]
467   return SVE_ACLE_FUNC(svreinterpret_u16,_s32,,)(op);
468 }
469 
test_svreinterpret_u16_s64(svint64_t op)470 svuint16_t test_svreinterpret_u16_s64(svint64_t op)
471 {
472   // CHECK-LABEL: test_svreinterpret_u16_s64
473   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x i64> %op to <vscale x 8 x i16>
474   // CHECK: ret <vscale x 8 x i16> %[[CAST]]
475   return SVE_ACLE_FUNC(svreinterpret_u16,_s64,,)(op);
476 }
477 
test_svreinterpret_u16_u8(svuint8_t op)478 svuint16_t test_svreinterpret_u16_u8(svuint8_t op)
479 {
480   // CHECK-LABEL: test_svreinterpret_u16_u8
481   // CHECK: %[[CAST:.*]] = bitcast <vscale x 16 x i8> %op to <vscale x 8 x i16>
482   // CHECK: ret <vscale x 8 x i16> %[[CAST]]
483   return SVE_ACLE_FUNC(svreinterpret_u16,_u8,,)(op);
484 }
485 
test_svreinterpret_u16_u16(svuint16_t op)486 svuint16_t test_svreinterpret_u16_u16(svuint16_t op)
487 {
488   // CHECK-LABEL: test_svreinterpret_u16_u16
489   // CHECK: ret <vscale x 8 x i16> %op
490   return SVE_ACLE_FUNC(svreinterpret_u16,_u16,,)(op);
491 }
492 
test_svreinterpret_u16_u32(svuint32_t op)493 svuint16_t test_svreinterpret_u16_u32(svuint32_t op)
494 {
495   // CHECK-LABEL: test_svreinterpret_u16_u32
496   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x i32> %op to <vscale x 8 x i16>
497   // CHECK: ret <vscale x 8 x i16> %[[CAST]]
498   return SVE_ACLE_FUNC(svreinterpret_u16,_u32,,)(op);
499 }
500 
test_svreinterpret_u16_u64(svuint64_t op)501 svuint16_t test_svreinterpret_u16_u64(svuint64_t op)
502 {
503   // CHECK-LABEL: test_svreinterpret_u16_u64
504   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x i64> %op to <vscale x 8 x i16>
505   // CHECK: ret <vscale x 8 x i16> %[[CAST]]
506   return SVE_ACLE_FUNC(svreinterpret_u16,_u64,,)(op);
507 }
508 
test_svreinterpret_u16_f16(svfloat16_t op)509 svuint16_t test_svreinterpret_u16_f16(svfloat16_t op)
510 {
511   // CHECK-LABEL: test_svreinterpret_u16_f16
512   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x half> %op to <vscale x 8 x i16>
513   // CHECK: ret <vscale x 8 x i16> %[[CAST]]
514   return SVE_ACLE_FUNC(svreinterpret_u16,_f16,,)(op);
515 }
516 
test_svreinterpret_u16_f32(svfloat32_t op)517 svuint16_t test_svreinterpret_u16_f32(svfloat32_t op)
518 {
519   // CHECK-LABEL: test_svreinterpret_u16_f32
520   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x float> %op to <vscale x 8 x i16>
521   // CHECK: ret <vscale x 8 x i16> %[[CAST]]
522   return SVE_ACLE_FUNC(svreinterpret_u16,_f32,,)(op);
523 }
524 
test_svreinterpret_u16_f64(svfloat64_t op)525 svuint16_t test_svreinterpret_u16_f64(svfloat64_t op)
526 {
527   // CHECK-LABEL: test_svreinterpret_u16_f64
528   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x double> %op to <vscale x 8 x i16>
529   // CHECK: ret <vscale x 8 x i16> %[[CAST]]
530   return SVE_ACLE_FUNC(svreinterpret_u16,_f64,,)(op);
531 }
532 
test_svreinterpret_u32_s8(svint8_t op)533 svuint32_t test_svreinterpret_u32_s8(svint8_t op)
534 {
535   // CHECK-LABEL: test_svreinterpret_u32_s8
536   // CHECK: %[[CAST:.*]] = bitcast <vscale x 16 x i8> %op to <vscale x 4 x i32>
537   // CHECK: ret <vscale x 4 x i32> %[[CAST]]
538   return SVE_ACLE_FUNC(svreinterpret_u32,_s8,,)(op);
539 }
540 
test_svreinterpret_u32_s16(svint16_t op)541 svuint32_t test_svreinterpret_u32_s16(svint16_t op)
542 {
543   // CHECK-LABEL: test_svreinterpret_u32_s16
544   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x i16> %op to <vscale x 4 x i32>
545   // CHECK: ret <vscale x 4 x i32> %[[CAST]]
546   return SVE_ACLE_FUNC(svreinterpret_u32,_s16,,)(op);
547 }
548 
test_svreinterpret_u32_s32(svint32_t op)549 svuint32_t test_svreinterpret_u32_s32(svint32_t op)
550 {
551   // CHECK-LABEL: test_svreinterpret_u32_s32
552   // CHECK: ret <vscale x 4 x i32> %op
553   return SVE_ACLE_FUNC(svreinterpret_u32,_s32,,)(op);
554 }
555 
test_svreinterpret_u32_s64(svint64_t op)556 svuint32_t test_svreinterpret_u32_s64(svint64_t op)
557 {
558   // CHECK-LABEL: test_svreinterpret_u32_s64
559   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x i64> %op to <vscale x 4 x i32>
560   // CHECK: ret <vscale x 4 x i32> %[[CAST]]
561   return SVE_ACLE_FUNC(svreinterpret_u32,_s64,,)(op);
562 }
563 
test_svreinterpret_u32_u8(svuint8_t op)564 svuint32_t test_svreinterpret_u32_u8(svuint8_t op)
565 {
566   // CHECK-LABEL: test_svreinterpret_u32_u8
567   // CHECK: %[[CAST:.*]] = bitcast <vscale x 16 x i8> %op to <vscale x 4 x i32>
568   // CHECK: ret <vscale x 4 x i32> %[[CAST]]
569   return SVE_ACLE_FUNC(svreinterpret_u32,_u8,,)(op);
570 }
571 
test_svreinterpret_u32_u16(svuint16_t op)572 svuint32_t test_svreinterpret_u32_u16(svuint16_t op)
573 {
574   // CHECK-LABEL: test_svreinterpret_u32_u16
575   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x i16> %op to <vscale x 4 x i32>
576   // CHECK: ret <vscale x 4 x i32> %[[CAST]]
577   return SVE_ACLE_FUNC(svreinterpret_u32,_u16,,)(op);
578 }
579 
test_svreinterpret_u32_u32(svuint32_t op)580 svuint32_t test_svreinterpret_u32_u32(svuint32_t op)
581 {
582   // CHECK-LABEL: test_svreinterpret_u32_u32
583   // CHECK: ret <vscale x 4 x i32> %op
584   return SVE_ACLE_FUNC(svreinterpret_u32,_u32,,)(op);
585 }
586 
test_svreinterpret_u32_u64(svuint64_t op)587 svuint32_t test_svreinterpret_u32_u64(svuint64_t op)
588 {
589   // CHECK-LABEL: test_svreinterpret_u32_u64
590   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x i64> %op to <vscale x 4 x i32>
591   // CHECK: ret <vscale x 4 x i32> %[[CAST]]
592   return SVE_ACLE_FUNC(svreinterpret_u32,_u64,,)(op);
593 }
594 
test_svreinterpret_u32_f16(svfloat16_t op)595 svuint32_t test_svreinterpret_u32_f16(svfloat16_t op)
596 {
597   // CHECK-LABEL: test_svreinterpret_u32_f16
598   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x half> %op to <vscale x 4 x i32>
599   // CHECK: ret <vscale x 4 x i32> %[[CAST]]
600   return SVE_ACLE_FUNC(svreinterpret_u32,_f16,,)(op);
601 }
602 
test_svreinterpret_u32_f32(svfloat32_t op)603 svuint32_t test_svreinterpret_u32_f32(svfloat32_t op)
604 {
605   // CHECK-LABEL: test_svreinterpret_u32_f32
606   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x float> %op to <vscale x 4 x i32>
607   // CHECK: ret <vscale x 4 x i32> %[[CAST]]
608   return SVE_ACLE_FUNC(svreinterpret_u32,_f32,,)(op);
609 }
610 
test_svreinterpret_u32_f64(svfloat64_t op)611 svuint32_t test_svreinterpret_u32_f64(svfloat64_t op)
612 {
613   // CHECK-LABEL: test_svreinterpret_u32_f64
614   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x double> %op to <vscale x 4 x i32>
615   // CHECK: ret <vscale x 4 x i32> %[[CAST]]
616   return SVE_ACLE_FUNC(svreinterpret_u32,_f64,,)(op);
617 }
618 
test_svreinterpret_u64_s8(svint8_t op)619 svuint64_t test_svreinterpret_u64_s8(svint8_t op)
620 {
621   // CHECK-LABEL: test_svreinterpret_u64_s8
622   // CHECK: %[[CAST:.*]] = bitcast <vscale x 16 x i8> %op to <vscale x 2 x i64>
623   // CHECK: ret <vscale x 2 x i64> %[[CAST]]
624   return SVE_ACLE_FUNC(svreinterpret_u64,_s8,,)(op);
625 }
626 
test_svreinterpret_u64_s16(svint16_t op)627 svuint64_t test_svreinterpret_u64_s16(svint16_t op)
628 {
629   // CHECK-LABEL: test_svreinterpret_u64_s16
630   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x i16> %op to <vscale x 2 x i64>
631   // CHECK: ret <vscale x 2 x i64> %[[CAST]]
632   return SVE_ACLE_FUNC(svreinterpret_u64,_s16,,)(op);
633 }
634 
test_svreinterpret_u64_s32(svint32_t op)635 svuint64_t test_svreinterpret_u64_s32(svint32_t op)
636 {
637   // CHECK-LABEL: test_svreinterpret_u64_s32
638   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x i32> %op to <vscale x 2 x i64>
639   // CHECK: ret <vscale x 2 x i64> %[[CAST]]
640   return SVE_ACLE_FUNC(svreinterpret_u64,_s32,,)(op);
641 }
642 
test_svreinterpret_u64_s64(svint64_t op)643 svuint64_t test_svreinterpret_u64_s64(svint64_t op)
644 {
645   // CHECK-LABEL: test_svreinterpret_u64_s64
646   // CHECK: ret <vscale x 2 x i64> %op
647   return SVE_ACLE_FUNC(svreinterpret_u64,_s64,,)(op);
648 }
649 
test_svreinterpret_u64_u8(svuint8_t op)650 svuint64_t test_svreinterpret_u64_u8(svuint8_t op)
651 {
652   // CHECK-LABEL: test_svreinterpret_u64_u8
653   // CHECK: %[[CAST:.*]] = bitcast <vscale x 16 x i8> %op to <vscale x 2 x i64>
654   // CHECK: ret <vscale x 2 x i64> %[[CAST]]
655   return SVE_ACLE_FUNC(svreinterpret_u64,_u8,,)(op);
656 }
657 
test_svreinterpret_u64_u16(svuint16_t op)658 svuint64_t test_svreinterpret_u64_u16(svuint16_t op)
659 {
660   // CHECK-LABEL: test_svreinterpret_u64_u16
661   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x i16> %op to <vscale x 2 x i64>
662   // CHECK: ret <vscale x 2 x i64> %[[CAST]]
663   return SVE_ACLE_FUNC(svreinterpret_u64,_u16,,)(op);
664 }
665 
test_svreinterpret_u64_u32(svuint32_t op)666 svuint64_t test_svreinterpret_u64_u32(svuint32_t op)
667 {
668   // CHECK-LABEL: test_svreinterpret_u64_u32
669   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x i32> %op to <vscale x 2 x i64>
670   // CHECK: ret <vscale x 2 x i64> %[[CAST]]
671   return SVE_ACLE_FUNC(svreinterpret_u64,_u32,,)(op);
672 }
673 
test_svreinterpret_u64_u64(svuint64_t op)674 svuint64_t test_svreinterpret_u64_u64(svuint64_t op)
675 {
676   // CHECK-LABEL: test_svreinterpret_u64_u64
677   // CHECK: ret <vscale x 2 x i64> %op
678   return SVE_ACLE_FUNC(svreinterpret_u64,_u64,,)(op);
679 }
680 
test_svreinterpret_u64_f16(svfloat16_t op)681 svuint64_t test_svreinterpret_u64_f16(svfloat16_t op)
682 {
683   // CHECK-LABEL: test_svreinterpret_u64_f16
684   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x half> %op to <vscale x 2 x i64>
685   // CHECK: ret <vscale x 2 x i64> %[[CAST]]
686   return SVE_ACLE_FUNC(svreinterpret_u64,_f16,,)(op);
687 }
688 
test_svreinterpret_u64_f32(svfloat32_t op)689 svuint64_t test_svreinterpret_u64_f32(svfloat32_t op)
690 {
691   // CHECK-LABEL: test_svreinterpret_u64_f32
692   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x float> %op to <vscale x 2 x i64>
693   // CHECK: ret <vscale x 2 x i64> %[[CAST]]
694   return SVE_ACLE_FUNC(svreinterpret_u64,_f32,,)(op);
695 }
696 
test_svreinterpret_u64_f64(svfloat64_t op)697 svuint64_t test_svreinterpret_u64_f64(svfloat64_t op)
698 {
699   // CHECK-LABEL: test_svreinterpret_u64_f64
700   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x double> %op to <vscale x 2 x i64>
701   // CHECK: ret <vscale x 2 x i64> %[[CAST]]
702   return SVE_ACLE_FUNC(svreinterpret_u64,_f64,,)(op);
703 }
704 
test_svreinterpret_f16_s8(svint8_t op)705 svfloat16_t test_svreinterpret_f16_s8(svint8_t op)
706 {
707   // CHECK-LABEL: test_svreinterpret_f16_s8
708   // CHECK: %[[CAST:.*]] = bitcast <vscale x 16 x i8> %op to <vscale x 8 x half>
709   // CHECK: ret <vscale x 8 x half> %[[CAST]]
710   return SVE_ACLE_FUNC(svreinterpret_f16,_s8,,)(op);
711 }
712 
test_svreinterpret_f16_s16(svint16_t op)713 svfloat16_t test_svreinterpret_f16_s16(svint16_t op)
714 {
715   // CHECK-LABEL: test_svreinterpret_f16_s16
716   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x i16> %op to <vscale x 8 x half>
717   // CHECK: ret <vscale x 8 x half> %[[CAST]]
718   return SVE_ACLE_FUNC(svreinterpret_f16,_s16,,)(op);
719 }
720 
test_svreinterpret_f16_s32(svint32_t op)721 svfloat16_t test_svreinterpret_f16_s32(svint32_t op)
722 {
723   // CHECK-LABEL: test_svreinterpret_f16_s32
724   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x i32> %op to <vscale x 8 x half>
725   // CHECK: ret <vscale x 8 x half> %[[CAST]]
726   return SVE_ACLE_FUNC(svreinterpret_f16,_s32,,)(op);
727 }
728 
test_svreinterpret_f16_s64(svint64_t op)729 svfloat16_t test_svreinterpret_f16_s64(svint64_t op)
730 {
731   // CHECK-LABEL: test_svreinterpret_f16_s64
732   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x i64> %op to <vscale x 8 x half>
733   // CHECK: ret <vscale x 8 x half> %[[CAST]]
734   return SVE_ACLE_FUNC(svreinterpret_f16,_s64,,)(op);
735 }
736 
test_svreinterpret_f16_u8(svuint8_t op)737 svfloat16_t test_svreinterpret_f16_u8(svuint8_t op)
738 {
739   // CHECK-LABEL: test_svreinterpret_f16_u8
740   // CHECK: %[[CAST:.*]] = bitcast <vscale x 16 x i8> %op to <vscale x 8 x half>
741   // CHECK: ret <vscale x 8 x half> %[[CAST]]
742   return SVE_ACLE_FUNC(svreinterpret_f16,_u8,,)(op);
743 }
744 
test_svreinterpret_f16_u16(svuint16_t op)745 svfloat16_t test_svreinterpret_f16_u16(svuint16_t op)
746 {
747   // CHECK-LABEL: test_svreinterpret_f16_u16
748   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x i16> %op to <vscale x 8 x half>
749   // CHECK: ret <vscale x 8 x half> %[[CAST]]
750   return SVE_ACLE_FUNC(svreinterpret_f16,_u16,,)(op);
751 }
752 
test_svreinterpret_f16_u32(svuint32_t op)753 svfloat16_t test_svreinterpret_f16_u32(svuint32_t op)
754 {
755   // CHECK-LABEL: test_svreinterpret_f16_u32
756   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x i32> %op to <vscale x 8 x half>
757   // CHECK: ret <vscale x 8 x half> %[[CAST]]
758   return SVE_ACLE_FUNC(svreinterpret_f16,_u32,,)(op);
759 }
760 
test_svreinterpret_f16_u64(svuint64_t op)761 svfloat16_t test_svreinterpret_f16_u64(svuint64_t op)
762 {
763   // CHECK-LABEL: test_svreinterpret_f16_u64
764   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x i64> %op to <vscale x 8 x half>
765   // CHECK: ret <vscale x 8 x half> %[[CAST]]
766   return SVE_ACLE_FUNC(svreinterpret_f16,_u64,,)(op);
767 }
768 
test_svreinterpret_f16_f16(svfloat16_t op)769 svfloat16_t test_svreinterpret_f16_f16(svfloat16_t op)
770 {
771   // CHECK-LABEL: test_svreinterpret_f16_f16
772   // CHECK: ret <vscale x 8 x half> %op
773   return SVE_ACLE_FUNC(svreinterpret_f16,_f16,,)(op);
774 }
775 
test_svreinterpret_f16_f32(svfloat32_t op)776 svfloat16_t test_svreinterpret_f16_f32(svfloat32_t op)
777 {
778   // CHECK-LABEL: test_svreinterpret_f16_f32
779   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x float> %op to <vscale x 8 x half>
780   // CHECK: ret <vscale x 8 x half> %[[CAST]]
781   return SVE_ACLE_FUNC(svreinterpret_f16,_f32,,)(op);
782 }
783 
test_svreinterpret_f16_f64(svfloat64_t op)784 svfloat16_t test_svreinterpret_f16_f64(svfloat64_t op)
785 {
786   // CHECK-LABEL: test_svreinterpret_f16_f64
787   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x double> %op to <vscale x 8 x half>
788   // CHECK: ret <vscale x 8 x half> %[[CAST]]
789   return SVE_ACLE_FUNC(svreinterpret_f16,_f64,,)(op);
790 }
791 
test_svreinterpret_f32_s8(svint8_t op)792 svfloat32_t test_svreinterpret_f32_s8(svint8_t op)
793 {
794   // CHECK-LABEL: test_svreinterpret_f32_s8
795   // CHECK: %[[CAST:.*]] = bitcast <vscale x 16 x i8> %op to <vscale x 4 x float>
796   // CHECK: ret <vscale x 4 x float> %[[CAST]]
797   return SVE_ACLE_FUNC(svreinterpret_f32,_s8,,)(op);
798 }
799 
test_svreinterpret_f32_s16(svint16_t op)800 svfloat32_t test_svreinterpret_f32_s16(svint16_t op)
801 {
802   // CHECK-LABEL: test_svreinterpret_f32_s16
803   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x i16> %op to <vscale x 4 x float>
804   // CHECK: ret <vscale x 4 x float> %[[CAST]]
805   return SVE_ACLE_FUNC(svreinterpret_f32,_s16,,)(op);
806 }
807 
test_svreinterpret_f32_s32(svint32_t op)808 svfloat32_t test_svreinterpret_f32_s32(svint32_t op)
809 {
810   // CHECK-LABEL: test_svreinterpret_f32_s32
811   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x i32> %op to <vscale x 4 x float>
812   // CHECK: ret <vscale x 4 x float> %[[CAST]]
813   return SVE_ACLE_FUNC(svreinterpret_f32,_s32,,)(op);
814 }
815 
test_svreinterpret_f32_s64(svint64_t op)816 svfloat32_t test_svreinterpret_f32_s64(svint64_t op)
817 {
818   // CHECK-LABEL: test_svreinterpret_f32_s64
819   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x i64> %op to <vscale x 4 x float>
820   // CHECK: ret <vscale x 4 x float> %[[CAST]]
821   return SVE_ACLE_FUNC(svreinterpret_f32,_s64,,)(op);
822 }
823 
test_svreinterpret_f32_u8(svuint8_t op)824 svfloat32_t test_svreinterpret_f32_u8(svuint8_t op)
825 {
826   // CHECK-LABEL: test_svreinterpret_f32_u8
827   // CHECK: %[[CAST:.*]] = bitcast <vscale x 16 x i8> %op to <vscale x 4 x float>
828   // CHECK: ret <vscale x 4 x float> %[[CAST]]
829   return SVE_ACLE_FUNC(svreinterpret_f32,_u8,,)(op);
830 }
831 
test_svreinterpret_f32_u16(svuint16_t op)832 svfloat32_t test_svreinterpret_f32_u16(svuint16_t op)
833 {
834   // CHECK-LABEL: test_svreinterpret_f32_u16
835   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x i16> %op to <vscale x 4 x float>
836   // CHECK: ret <vscale x 4 x float> %[[CAST]]
837   return SVE_ACLE_FUNC(svreinterpret_f32,_u16,,)(op);
838 }
839 
test_svreinterpret_f32_u32(svuint32_t op)840 svfloat32_t test_svreinterpret_f32_u32(svuint32_t op)
841 {
842   // CHECK-LABEL: test_svreinterpret_f32_u32
843   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x i32> %op to <vscale x 4 x float>
844   // CHECK: ret <vscale x 4 x float> %[[CAST]]
845   return SVE_ACLE_FUNC(svreinterpret_f32,_u32,,)(op);
846 }
847 
test_svreinterpret_f32_u64(svuint64_t op)848 svfloat32_t test_svreinterpret_f32_u64(svuint64_t op)
849 {
850   // CHECK-LABEL: test_svreinterpret_f32_u64
851   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x i64> %op to <vscale x 4 x float>
852   // CHECK: ret <vscale x 4 x float> %[[CAST]]
853   return SVE_ACLE_FUNC(svreinterpret_f32,_u64,,)(op);
854 }
855 
test_svreinterpret_f32_f16(svfloat16_t op)856 svfloat32_t test_svreinterpret_f32_f16(svfloat16_t op)
857 {
858   // CHECK-LABEL: test_svreinterpret_f32_f16
859   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x half> %op to <vscale x 4 x float>
860   // CHECK: ret <vscale x 4 x float> %[[CAST]]
861   return SVE_ACLE_FUNC(svreinterpret_f32,_f16,,)(op);
862 }
863 
test_svreinterpret_f32_f32(svfloat32_t op)864 svfloat32_t test_svreinterpret_f32_f32(svfloat32_t op)
865 {
866   // CHECK-LABEL: test_svreinterpret_f32_f32
867   // CHECK: ret <vscale x 4 x float> %op
868   return SVE_ACLE_FUNC(svreinterpret_f32,_f32,,)(op);
869 }
870 
test_svreinterpret_f32_f64(svfloat64_t op)871 svfloat32_t test_svreinterpret_f32_f64(svfloat64_t op)
872 {
873   // CHECK-LABEL: test_svreinterpret_f32_f64
874   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x double> %op to <vscale x 4 x float>
875   // CHECK: ret <vscale x 4 x float> %[[CAST]]
876   return SVE_ACLE_FUNC(svreinterpret_f32,_f64,,)(op);
877 }
878 
test_svreinterpret_f64_s8(svint8_t op)879 svfloat64_t test_svreinterpret_f64_s8(svint8_t op)
880 {
881   // CHECK-LABEL: test_svreinterpret_f64_s8
882   // CHECK: %[[CAST:.*]] = bitcast <vscale x 16 x i8> %op to <vscale x 2 x double>
883   // CHECK: ret <vscale x 2 x double> %[[CAST]]
884   return SVE_ACLE_FUNC(svreinterpret_f64,_s8,,)(op);
885 }
886 
test_svreinterpret_f64_s16(svint16_t op)887 svfloat64_t test_svreinterpret_f64_s16(svint16_t op)
888 {
889   // CHECK-LABEL: test_svreinterpret_f64_s16
890   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x i16> %op to <vscale x 2 x double>
891   // CHECK: ret <vscale x 2 x double> %[[CAST]]
892   return SVE_ACLE_FUNC(svreinterpret_f64,_s16,,)(op);
893 }
894 
test_svreinterpret_f64_s32(svint32_t op)895 svfloat64_t test_svreinterpret_f64_s32(svint32_t op)
896 {
897   // CHECK-LABEL: test_svreinterpret_f64_s32
898   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x i32> %op to <vscale x 2 x double>
899   // CHECK: ret <vscale x 2 x double> %[[CAST]]
900   return SVE_ACLE_FUNC(svreinterpret_f64,_s32,,)(op);
901 }
902 
test_svreinterpret_f64_s64(svint64_t op)903 svfloat64_t test_svreinterpret_f64_s64(svint64_t op)
904 {
905   // CHECK-LABEL: test_svreinterpret_f64_s64
906   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x i64> %op to <vscale x 2 x double>
907   // CHECK: ret <vscale x 2 x double> %[[CAST]]
908   return SVE_ACLE_FUNC(svreinterpret_f64,_s64,,)(op);
909 }
910 
test_svreinterpret_f64_u8(svuint8_t op)911 svfloat64_t test_svreinterpret_f64_u8(svuint8_t op)
912 {
913   // CHECK-LABEL: test_svreinterpret_f64_u8
914   // CHECK: %[[CAST:.*]] = bitcast <vscale x 16 x i8> %op to <vscale x 2 x double>
915   // CHECK: ret <vscale x 2 x double> %[[CAST]]
916   return SVE_ACLE_FUNC(svreinterpret_f64,_u8,,)(op);
917 }
918 
test_svreinterpret_f64_u16(svuint16_t op)919 svfloat64_t test_svreinterpret_f64_u16(svuint16_t op)
920 {
921   // CHECK-LABEL: test_svreinterpret_f64_u16
922   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x i16> %op to <vscale x 2 x double>
923   // CHECK: ret <vscale x 2 x double> %[[CAST]]
924   return SVE_ACLE_FUNC(svreinterpret_f64,_u16,,)(op);
925 }
926 
test_svreinterpret_f64_u32(svuint32_t op)927 svfloat64_t test_svreinterpret_f64_u32(svuint32_t op)
928 {
929   // CHECK-LABEL: test_svreinterpret_f64_u32
930   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x i32> %op to <vscale x 2 x double>
931   // CHECK: ret <vscale x 2 x double> %[[CAST]]
932   return SVE_ACLE_FUNC(svreinterpret_f64,_u32,,)(op);
933 }
934 
test_svreinterpret_f64_u64(svuint64_t op)935 svfloat64_t test_svreinterpret_f64_u64(svuint64_t op)
936 {
937   // CHECK-LABEL: test_svreinterpret_f64_u64
938   // CHECK: %[[CAST:.*]] = bitcast <vscale x 2 x i64> %op to <vscale x 2 x double>
939   // CHECK: ret <vscale x 2 x double> %[[CAST]]
940   return SVE_ACLE_FUNC(svreinterpret_f64,_u64,,)(op);
941 }
942 
test_svreinterpret_f64_f16(svfloat16_t op)943 svfloat64_t test_svreinterpret_f64_f16(svfloat16_t op)
944 {
945   // CHECK-LABEL: test_svreinterpret_f64_f16
946   // CHECK: %[[CAST:.*]] = bitcast <vscale x 8 x half> %op to <vscale x 2 x double>
947   // CHECK: ret <vscale x 2 x double> %[[CAST]]
948   return SVE_ACLE_FUNC(svreinterpret_f64,_f16,,)(op);
949 }
950 
test_svreinterpret_f64_f32(svfloat32_t op)951 svfloat64_t test_svreinterpret_f64_f32(svfloat32_t op)
952 {
953   // CHECK-LABEL: test_svreinterpret_f64_f32
954   // CHECK: %[[CAST:.*]] = bitcast <vscale x 4 x float> %op to <vscale x 2 x double>
955   // CHECK: ret <vscale x 2 x double> %[[CAST]]
956   return SVE_ACLE_FUNC(svreinterpret_f64,_f32,,)(op);
957 }
958 
test_svreinterpret_f64_f64(svfloat64_t op)959 svfloat64_t test_svreinterpret_f64_f64(svfloat64_t op)
960 {
961   // CHECK-LABEL: test_svreinterpret_f64_f64
962   // CHECK: ret <vscale x 2 x double> %op
963   return SVE_ACLE_FUNC(svreinterpret_f64,_f64,,)(op);
964 }
965