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