1 // RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon \
2 // RUN: -disable-O0-optnone -fallow-half-arguments-and-returns -emit-llvm -o - %s \
3 // RUN: | opt -S -mem2reg | FileCheck %s
5 // Test new aarch64 intrinsics and types
9 // CHECK-LABEL: @test_vceqz_s8(
10 // CHECK: [[TMP0:%.*]] = icmp eq <8 x i8> %a, zeroinitializer
11 // CHECK: [[VCEQZ_I:%.*]] = sext <8 x i1> [[TMP0]] to <8 x i8>
12 // CHECK: ret <8 x i8> [[VCEQZ_I]]
13 uint8x8_t test_vceqz_s8(int8x8_t a) {
17 // CHECK-LABEL: @test_vceqz_s16(
18 // CHECK: [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
19 // CHECK: [[TMP1:%.*]] = icmp eq <4 x i16> %a, zeroinitializer
20 // CHECK: [[VCEQZ_I:%.*]] = sext <4 x i1> [[TMP1]] to <4 x i16>
21 // CHECK: ret <4 x i16> [[VCEQZ_I]]
22 uint16x4_t test_vceqz_s16(int16x4_t a) {
26 // CHECK-LABEL: @test_vceqz_s32(
27 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
28 // CHECK: [[TMP1:%.*]] = icmp eq <2 x i32> %a, zeroinitializer
29 // CHECK: [[VCEQZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i32>
30 // CHECK: ret <2 x i32> [[VCEQZ_I]]
31 uint32x2_t test_vceqz_s32(int32x2_t a) {
35 // CHECK-LABEL: @test_vceqz_s64(
36 // CHECK: [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8>
37 // CHECK: [[TMP1:%.*]] = icmp eq <1 x i64> %a, zeroinitializer
38 // CHECK: [[VCEQZ_I:%.*]] = sext <1 x i1> [[TMP1]] to <1 x i64>
39 // CHECK: ret <1 x i64> [[VCEQZ_I]]
40 uint64x1_t test_vceqz_s64(int64x1_t a) {
44 // CHECK-LABEL: @test_vceqz_u64(
45 // CHECK: [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8>
46 // CHECK: [[TMP1:%.*]] = icmp eq <1 x i64> %a, zeroinitializer
47 // CHECK: [[VCEQZ_I:%.*]] = sext <1 x i1> [[TMP1]] to <1 x i64>
48 // CHECK: ret <1 x i64> [[VCEQZ_I]]
49 uint64x1_t test_vceqz_u64(uint64x1_t a) {
53 // CHECK-LABEL: @test_vceqz_p64(
54 // CHECK: [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8>
55 // CHECK: [[TMP1:%.*]] = icmp eq <1 x i64> %a, zeroinitializer
56 // CHECK: [[VCEQZ_I:%.*]] = sext <1 x i1> [[TMP1]] to <1 x i64>
57 // CHECK: ret <1 x i64> [[VCEQZ_I]]
58 uint64x1_t test_vceqz_p64(poly64x1_t a) {
62 // CHECK-LABEL: @test_vceqzq_s8(
63 // CHECK: [[TMP0:%.*]] = icmp eq <16 x i8> %a, zeroinitializer
64 // CHECK: [[VCEQZ_I:%.*]] = sext <16 x i1> [[TMP0]] to <16 x i8>
65 // CHECK: ret <16 x i8> [[VCEQZ_I]]
66 uint8x16_t test_vceqzq_s8(int8x16_t a) {
70 // CHECK-LABEL: @test_vceqzq_s16(
71 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
72 // CHECK: [[TMP1:%.*]] = icmp eq <8 x i16> %a, zeroinitializer
73 // CHECK: [[VCEQZ_I:%.*]] = sext <8 x i1> [[TMP1]] to <8 x i16>
74 // CHECK: ret <8 x i16> [[VCEQZ_I]]
75 uint16x8_t test_vceqzq_s16(int16x8_t a) {
79 // CHECK-LABEL: @test_vceqzq_s32(
80 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
81 // CHECK: [[TMP1:%.*]] = icmp eq <4 x i32> %a, zeroinitializer
82 // CHECK: [[VCEQZ_I:%.*]] = sext <4 x i1> [[TMP1]] to <4 x i32>
83 // CHECK: ret <4 x i32> [[VCEQZ_I]]
84 uint32x4_t test_vceqzq_s32(int32x4_t a) {
88 // CHECK-LABEL: @test_vceqzq_s64(
89 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
90 // CHECK: [[TMP1:%.*]] = icmp eq <2 x i64> %a, zeroinitializer
91 // CHECK: [[VCEQZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i64>
92 // CHECK: ret <2 x i64> [[VCEQZ_I]]
93 uint64x2_t test_vceqzq_s64(int64x2_t a) {
97 // CHECK-LABEL: @test_vceqz_u8(
98 // CHECK: [[TMP0:%.*]] = icmp eq <8 x i8> %a, zeroinitializer
99 // CHECK: [[VCEQZ_I:%.*]] = sext <8 x i1> [[TMP0]] to <8 x i8>
100 // CHECK: ret <8 x i8> [[VCEQZ_I]]
101 uint8x8_t test_vceqz_u8(uint8x8_t a) {
105 // CHECK-LABEL: @test_vceqz_u16(
106 // CHECK: [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
107 // CHECK: [[TMP1:%.*]] = icmp eq <4 x i16> %a, zeroinitializer
108 // CHECK: [[VCEQZ_I:%.*]] = sext <4 x i1> [[TMP1]] to <4 x i16>
109 // CHECK: ret <4 x i16> [[VCEQZ_I]]
110 uint16x4_t test_vceqz_u16(uint16x4_t a) {
114 // CHECK-LABEL: @test_vceqz_u32(
115 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
116 // CHECK: [[TMP1:%.*]] = icmp eq <2 x i32> %a, zeroinitializer
117 // CHECK: [[VCEQZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i32>
118 // CHECK: ret <2 x i32> [[VCEQZ_I]]
119 uint32x2_t test_vceqz_u32(uint32x2_t a) {
123 // CHECK-LABEL: @test_vceqzq_u8(
124 // CHECK: [[TMP0:%.*]] = icmp eq <16 x i8> %a, zeroinitializer
125 // CHECK: [[VCEQZ_I:%.*]] = sext <16 x i1> [[TMP0]] to <16 x i8>
126 // CHECK: ret <16 x i8> [[VCEQZ_I]]
127 uint8x16_t test_vceqzq_u8(uint8x16_t a) {
131 // CHECK-LABEL: @test_vceqzq_u16(
132 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
133 // CHECK: [[TMP1:%.*]] = icmp eq <8 x i16> %a, zeroinitializer
134 // CHECK: [[VCEQZ_I:%.*]] = sext <8 x i1> [[TMP1]] to <8 x i16>
135 // CHECK: ret <8 x i16> [[VCEQZ_I]]
136 uint16x8_t test_vceqzq_u16(uint16x8_t a) {
137 return vceqzq_u16(a);
140 // CHECK-LABEL: @test_vceqzq_u32(
141 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
142 // CHECK: [[TMP1:%.*]] = icmp eq <4 x i32> %a, zeroinitializer
143 // CHECK: [[VCEQZ_I:%.*]] = sext <4 x i1> [[TMP1]] to <4 x i32>
144 // CHECK: ret <4 x i32> [[VCEQZ_I]]
145 uint32x4_t test_vceqzq_u32(uint32x4_t a) {
146 return vceqzq_u32(a);
149 // CHECK-LABEL: @test_vceqzq_u64(
150 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
151 // CHECK: [[TMP1:%.*]] = icmp eq <2 x i64> %a, zeroinitializer
152 // CHECK: [[VCEQZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i64>
153 // CHECK: ret <2 x i64> [[VCEQZ_I]]
154 uint64x2_t test_vceqzq_u64(uint64x2_t a) {
155 return vceqzq_u64(a);
158 // CHECK-LABEL: @test_vceqz_f32(
159 // CHECK: [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
160 // CHECK: [[TMP1:%.*]] = fcmp oeq <2 x float> %a, zeroinitializer
161 // CHECK: [[VCEQZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i32>
162 // CHECK: ret <2 x i32> [[VCEQZ_I]]
163 uint32x2_t test_vceqz_f32(float32x2_t a) {
167 // CHECK-LABEL: @test_vceqz_f64(
168 // CHECK: [[TMP0:%.*]] = bitcast <1 x double> %a to <8 x i8>
169 // CHECK: [[TMP1:%.*]] = fcmp oeq <1 x double> %a, zeroinitializer
170 // CHECK: [[VCEQZ_I:%.*]] = sext <1 x i1> [[TMP1]] to <1 x i64>
171 // CHECK: ret <1 x i64> [[VCEQZ_I]]
172 uint64x1_t test_vceqz_f64(float64x1_t a) {
176 // CHECK-LABEL: @test_vceqzq_f32(
177 // CHECK: [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
178 // CHECK: [[TMP1:%.*]] = fcmp oeq <4 x float> %a, zeroinitializer
179 // CHECK: [[VCEQZ_I:%.*]] = sext <4 x i1> [[TMP1]] to <4 x i32>
180 // CHECK: ret <4 x i32> [[VCEQZ_I]]
181 uint32x4_t test_vceqzq_f32(float32x4_t a) {
182 return vceqzq_f32(a);
185 // CHECK-LABEL: @test_vceqz_p8(
186 // CHECK: [[TMP0:%.*]] = icmp eq <8 x i8> %a, zeroinitializer
187 // CHECK: [[VCEQZ_I:%.*]] = sext <8 x i1> [[TMP0]] to <8 x i8>
188 // CHECK: ret <8 x i8> [[VCEQZ_I]]
189 uint8x8_t test_vceqz_p8(poly8x8_t a) {
193 // CHECK-LABEL: @test_vceqzq_p8(
194 // CHECK: [[TMP0:%.*]] = icmp eq <16 x i8> %a, zeroinitializer
195 // CHECK: [[VCEQZ_I:%.*]] = sext <16 x i1> [[TMP0]] to <16 x i8>
196 // CHECK: ret <16 x i8> [[VCEQZ_I]]
197 uint8x16_t test_vceqzq_p8(poly8x16_t a) {
201 // CHECK-LABEL: @test_vceqz_p16(
202 // CHECK: [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
203 // CHECK: [[TMP1:%.*]] = icmp eq <4 x i16> %a, zeroinitializer
204 // CHECK: [[VCEQZ_I:%.*]] = sext <4 x i1> [[TMP1]] to <4 x i16>
205 // CHECK: ret <4 x i16> [[VCEQZ_I]]
206 uint16x4_t test_vceqz_p16(poly16x4_t a) {
210 // CHECK-LABEL: @test_vceqzq_p16(
211 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
212 // CHECK: [[TMP1:%.*]] = icmp eq <8 x i16> %a, zeroinitializer
213 // CHECK: [[VCEQZ_I:%.*]] = sext <8 x i1> [[TMP1]] to <8 x i16>
214 // CHECK: ret <8 x i16> [[VCEQZ_I]]
215 uint16x8_t test_vceqzq_p16(poly16x8_t a) {
216 return vceqzq_p16(a);
219 // CHECK-LABEL: @test_vceqzq_f64(
220 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
221 // CHECK: [[TMP1:%.*]] = fcmp oeq <2 x double> %a, zeroinitializer
222 // CHECK: [[VCEQZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i64>
223 // CHECK: ret <2 x i64> [[VCEQZ_I]]
224 uint64x2_t test_vceqzq_f64(float64x2_t a) {
225 return vceqzq_f64(a);
228 // CHECK-LABEL: @test_vceqzq_p64(
229 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
230 // CHECK: [[TMP1:%.*]] = icmp eq <2 x i64> %a, zeroinitializer
231 // CHECK: [[VCEQZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i64>
232 // CHECK: ret <2 x i64> [[VCEQZ_I]]
233 uint64x2_t test_vceqzq_p64(poly64x2_t a) {
234 return vceqzq_p64(a);
237 // CHECK-LABEL: @test_vcgez_s8(
238 // CHECK: [[TMP0:%.*]] = icmp sge <8 x i8> %a, zeroinitializer
239 // CHECK: [[VCGEZ_I:%.*]] = sext <8 x i1> [[TMP0]] to <8 x i8>
240 // CHECK: ret <8 x i8> [[VCGEZ_I]]
241 uint8x8_t test_vcgez_s8(int8x8_t a) {
245 // CHECK-LABEL: @test_vcgez_s16(
246 // CHECK: [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
247 // CHECK: [[TMP1:%.*]] = icmp sge <4 x i16> %a, zeroinitializer
248 // CHECK: [[VCGEZ_I:%.*]] = sext <4 x i1> [[TMP1]] to <4 x i16>
249 // CHECK: ret <4 x i16> [[VCGEZ_I]]
250 uint16x4_t test_vcgez_s16(int16x4_t a) {
254 // CHECK-LABEL: @test_vcgez_s32(
255 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
256 // CHECK: [[TMP1:%.*]] = icmp sge <2 x i32> %a, zeroinitializer
257 // CHECK: [[VCGEZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i32>
258 // CHECK: ret <2 x i32> [[VCGEZ_I]]
259 uint32x2_t test_vcgez_s32(int32x2_t a) {
263 // CHECK-LABEL: @test_vcgez_s64(
264 // CHECK: [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8>
265 // CHECK: [[TMP1:%.*]] = icmp sge <1 x i64> %a, zeroinitializer
266 // CHECK: [[VCGEZ_I:%.*]] = sext <1 x i1> [[TMP1]] to <1 x i64>
267 // CHECK: ret <1 x i64> [[VCGEZ_I]]
268 uint64x1_t test_vcgez_s64(int64x1_t a) {
272 // CHECK-LABEL: @test_vcgezq_s8(
273 // CHECK: [[TMP0:%.*]] = icmp sge <16 x i8> %a, zeroinitializer
274 // CHECK: [[VCGEZ_I:%.*]] = sext <16 x i1> [[TMP0]] to <16 x i8>
275 // CHECK: ret <16 x i8> [[VCGEZ_I]]
276 uint8x16_t test_vcgezq_s8(int8x16_t a) {
280 // CHECK-LABEL: @test_vcgezq_s16(
281 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
282 // CHECK: [[TMP1:%.*]] = icmp sge <8 x i16> %a, zeroinitializer
283 // CHECK: [[VCGEZ_I:%.*]] = sext <8 x i1> [[TMP1]] to <8 x i16>
284 // CHECK: ret <8 x i16> [[VCGEZ_I]]
285 uint16x8_t test_vcgezq_s16(int16x8_t a) {
286 return vcgezq_s16(a);
289 // CHECK-LABEL: @test_vcgezq_s32(
290 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
291 // CHECK: [[TMP1:%.*]] = icmp sge <4 x i32> %a, zeroinitializer
292 // CHECK: [[VCGEZ_I:%.*]] = sext <4 x i1> [[TMP1]] to <4 x i32>
293 // CHECK: ret <4 x i32> [[VCGEZ_I]]
294 uint32x4_t test_vcgezq_s32(int32x4_t a) {
295 return vcgezq_s32(a);
298 // CHECK-LABEL: @test_vcgezq_s64(
299 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
300 // CHECK: [[TMP1:%.*]] = icmp sge <2 x i64> %a, zeroinitializer
301 // CHECK: [[VCGEZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i64>
302 // CHECK: ret <2 x i64> [[VCGEZ_I]]
303 uint64x2_t test_vcgezq_s64(int64x2_t a) {
304 return vcgezq_s64(a);
307 // CHECK-LABEL: @test_vcgez_f32(
308 // CHECK: [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
309 // CHECK: [[TMP1:%.*]] = fcmp oge <2 x float> %a, zeroinitializer
310 // CHECK: [[VCGEZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i32>
311 // CHECK: ret <2 x i32> [[VCGEZ_I]]
312 uint32x2_t test_vcgez_f32(float32x2_t a) {
316 // CHECK-LABEL: @test_vcgez_f64(
317 // CHECK: [[TMP0:%.*]] = bitcast <1 x double> %a to <8 x i8>
318 // CHECK: [[TMP1:%.*]] = fcmp oge <1 x double> %a, zeroinitializer
319 // CHECK: [[VCGEZ_I:%.*]] = sext <1 x i1> [[TMP1]] to <1 x i64>
320 // CHECK: ret <1 x i64> [[VCGEZ_I]]
321 uint64x1_t test_vcgez_f64(float64x1_t a) {
325 // CHECK-LABEL: @test_vcgezq_f32(
326 // CHECK: [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
327 // CHECK: [[TMP1:%.*]] = fcmp oge <4 x float> %a, zeroinitializer
328 // CHECK: [[VCGEZ_I:%.*]] = sext <4 x i1> [[TMP1]] to <4 x i32>
329 // CHECK: ret <4 x i32> [[VCGEZ_I]]
330 uint32x4_t test_vcgezq_f32(float32x4_t a) {
331 return vcgezq_f32(a);
334 // CHECK-LABEL: @test_vcgezq_f64(
335 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
336 // CHECK: [[TMP1:%.*]] = fcmp oge <2 x double> %a, zeroinitializer
337 // CHECK: [[VCGEZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i64>
338 // CHECK: ret <2 x i64> [[VCGEZ_I]]
339 uint64x2_t test_vcgezq_f64(float64x2_t a) {
340 return vcgezq_f64(a);
343 // CHECK-LABEL: @test_vclez_s8(
344 // CHECK: [[TMP0:%.*]] = icmp sle <8 x i8> %a, zeroinitializer
345 // CHECK: [[VCLEZ_I:%.*]] = sext <8 x i1> [[TMP0]] to <8 x i8>
346 // CHECK: ret <8 x i8> [[VCLEZ_I]]
347 uint8x8_t test_vclez_s8(int8x8_t a) {
351 // CHECK-LABEL: @test_vclez_s16(
352 // CHECK: [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
353 // CHECK: [[TMP1:%.*]] = icmp sle <4 x i16> %a, zeroinitializer
354 // CHECK: [[VCLEZ_I:%.*]] = sext <4 x i1> [[TMP1]] to <4 x i16>
355 // CHECK: ret <4 x i16> [[VCLEZ_I]]
356 uint16x4_t test_vclez_s16(int16x4_t a) {
360 // CHECK-LABEL: @test_vclez_s32(
361 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
362 // CHECK: [[TMP1:%.*]] = icmp sle <2 x i32> %a, zeroinitializer
363 // CHECK: [[VCLEZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i32>
364 // CHECK: ret <2 x i32> [[VCLEZ_I]]
365 uint32x2_t test_vclez_s32(int32x2_t a) {
369 // CHECK-LABEL: @test_vclez_s64(
370 // CHECK: [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8>
371 // CHECK: [[TMP1:%.*]] = icmp sle <1 x i64> %a, zeroinitializer
372 // CHECK: [[VCLEZ_I:%.*]] = sext <1 x i1> [[TMP1]] to <1 x i64>
373 // CHECK: ret <1 x i64> [[VCLEZ_I]]
374 uint64x1_t test_vclez_s64(int64x1_t a) {
378 // CHECK-LABEL: @test_vclezq_s8(
379 // CHECK: [[TMP0:%.*]] = icmp sle <16 x i8> %a, zeroinitializer
380 // CHECK: [[VCLEZ_I:%.*]] = sext <16 x i1> [[TMP0]] to <16 x i8>
381 // CHECK: ret <16 x i8> [[VCLEZ_I]]
382 uint8x16_t test_vclezq_s8(int8x16_t a) {
386 // CHECK-LABEL: @test_vclezq_s16(
387 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
388 // CHECK: [[TMP1:%.*]] = icmp sle <8 x i16> %a, zeroinitializer
389 // CHECK: [[VCLEZ_I:%.*]] = sext <8 x i1> [[TMP1]] to <8 x i16>
390 // CHECK: ret <8 x i16> [[VCLEZ_I]]
391 uint16x8_t test_vclezq_s16(int16x8_t a) {
392 return vclezq_s16(a);
395 // CHECK-LABEL: @test_vclezq_s32(
396 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
397 // CHECK: [[TMP1:%.*]] = icmp sle <4 x i32> %a, zeroinitializer
398 // CHECK: [[VCLEZ_I:%.*]] = sext <4 x i1> [[TMP1]] to <4 x i32>
399 // CHECK: ret <4 x i32> [[VCLEZ_I]]
400 uint32x4_t test_vclezq_s32(int32x4_t a) {
401 return vclezq_s32(a);
404 // CHECK-LABEL: @test_vclezq_s64(
405 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
406 // CHECK: [[TMP1:%.*]] = icmp sle <2 x i64> %a, zeroinitializer
407 // CHECK: [[VCLEZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i64>
408 // CHECK: ret <2 x i64> [[VCLEZ_I]]
409 uint64x2_t test_vclezq_s64(int64x2_t a) {
410 return vclezq_s64(a);
413 // CHECK-LABEL: @test_vclez_f32(
414 // CHECK: [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
415 // CHECK: [[TMP1:%.*]] = fcmp ole <2 x float> %a, zeroinitializer
416 // CHECK: [[VCLEZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i32>
417 // CHECK: ret <2 x i32> [[VCLEZ_I]]
418 uint32x2_t test_vclez_f32(float32x2_t a) {
422 // CHECK-LABEL: @test_vclez_f64(
423 // CHECK: [[TMP0:%.*]] = bitcast <1 x double> %a to <8 x i8>
424 // CHECK: [[TMP1:%.*]] = fcmp ole <1 x double> %a, zeroinitializer
425 // CHECK: [[VCLEZ_I:%.*]] = sext <1 x i1> [[TMP1]] to <1 x i64>
426 // CHECK: ret <1 x i64> [[VCLEZ_I]]
427 uint64x1_t test_vclez_f64(float64x1_t a) {
431 // CHECK-LABEL: @test_vclezq_f32(
432 // CHECK: [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
433 // CHECK: [[TMP1:%.*]] = fcmp ole <4 x float> %a, zeroinitializer
434 // CHECK: [[VCLEZ_I:%.*]] = sext <4 x i1> [[TMP1]] to <4 x i32>
435 // CHECK: ret <4 x i32> [[VCLEZ_I]]
436 uint32x4_t test_vclezq_f32(float32x4_t a) {
437 return vclezq_f32(a);
440 // CHECK-LABEL: @test_vclezq_f64(
441 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
442 // CHECK: [[TMP1:%.*]] = fcmp ole <2 x double> %a, zeroinitializer
443 // CHECK: [[VCLEZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i64>
444 // CHECK: ret <2 x i64> [[VCLEZ_I]]
445 uint64x2_t test_vclezq_f64(float64x2_t a) {
446 return vclezq_f64(a);
449 // CHECK-LABEL: @test_vcgtz_s8(
450 // CHECK: [[TMP0:%.*]] = icmp sgt <8 x i8> %a, zeroinitializer
451 // CHECK: [[VCGTZ_I:%.*]] = sext <8 x i1> [[TMP0]] to <8 x i8>
452 // CHECK: ret <8 x i8> [[VCGTZ_I]]
453 uint8x8_t test_vcgtz_s8(int8x8_t a) {
457 // CHECK-LABEL: @test_vcgtz_s16(
458 // CHECK: [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
459 // CHECK: [[TMP1:%.*]] = icmp sgt <4 x i16> %a, zeroinitializer
460 // CHECK: [[VCGTZ_I:%.*]] = sext <4 x i1> [[TMP1]] to <4 x i16>
461 // CHECK: ret <4 x i16> [[VCGTZ_I]]
462 uint16x4_t test_vcgtz_s16(int16x4_t a) {
466 // CHECK-LABEL: @test_vcgtz_s32(
467 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
468 // CHECK: [[TMP1:%.*]] = icmp sgt <2 x i32> %a, zeroinitializer
469 // CHECK: [[VCGTZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i32>
470 // CHECK: ret <2 x i32> [[VCGTZ_I]]
471 uint32x2_t test_vcgtz_s32(int32x2_t a) {
475 // CHECK-LABEL: @test_vcgtz_s64(
476 // CHECK: [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8>
477 // CHECK: [[TMP1:%.*]] = icmp sgt <1 x i64> %a, zeroinitializer
478 // CHECK: [[VCGTZ_I:%.*]] = sext <1 x i1> [[TMP1]] to <1 x i64>
479 // CHECK: ret <1 x i64> [[VCGTZ_I]]
480 uint64x1_t test_vcgtz_s64(int64x1_t a) {
484 // CHECK-LABEL: @test_vcgtzq_s8(
485 // CHECK: [[TMP0:%.*]] = icmp sgt <16 x i8> %a, zeroinitializer
486 // CHECK: [[VCGTZ_I:%.*]] = sext <16 x i1> [[TMP0]] to <16 x i8>
487 // CHECK: ret <16 x i8> [[VCGTZ_I]]
488 uint8x16_t test_vcgtzq_s8(int8x16_t a) {
492 // CHECK-LABEL: @test_vcgtzq_s16(
493 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
494 // CHECK: [[TMP1:%.*]] = icmp sgt <8 x i16> %a, zeroinitializer
495 // CHECK: [[VCGTZ_I:%.*]] = sext <8 x i1> [[TMP1]] to <8 x i16>
496 // CHECK: ret <8 x i16> [[VCGTZ_I]]
497 uint16x8_t test_vcgtzq_s16(int16x8_t a) {
498 return vcgtzq_s16(a);
501 // CHECK-LABEL: @test_vcgtzq_s32(
502 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
503 // CHECK: [[TMP1:%.*]] = icmp sgt <4 x i32> %a, zeroinitializer
504 // CHECK: [[VCGTZ_I:%.*]] = sext <4 x i1> [[TMP1]] to <4 x i32>
505 // CHECK: ret <4 x i32> [[VCGTZ_I]]
506 uint32x4_t test_vcgtzq_s32(int32x4_t a) {
507 return vcgtzq_s32(a);
510 // CHECK-LABEL: @test_vcgtzq_s64(
511 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
512 // CHECK: [[TMP1:%.*]] = icmp sgt <2 x i64> %a, zeroinitializer
513 // CHECK: [[VCGTZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i64>
514 // CHECK: ret <2 x i64> [[VCGTZ_I]]
515 uint64x2_t test_vcgtzq_s64(int64x2_t a) {
516 return vcgtzq_s64(a);
519 // CHECK-LABEL: @test_vcgtz_f32(
520 // CHECK: [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
521 // CHECK: [[TMP1:%.*]] = fcmp ogt <2 x float> %a, zeroinitializer
522 // CHECK: [[VCGTZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i32>
523 // CHECK: ret <2 x i32> [[VCGTZ_I]]
524 uint32x2_t test_vcgtz_f32(float32x2_t a) {
528 // CHECK-LABEL: @test_vcgtz_f64(
529 // CHECK: [[TMP0:%.*]] = bitcast <1 x double> %a to <8 x i8>
530 // CHECK: [[TMP1:%.*]] = fcmp ogt <1 x double> %a, zeroinitializer
531 // CHECK: [[VCGTZ_I:%.*]] = sext <1 x i1> [[TMP1]] to <1 x i64>
532 // CHECK: ret <1 x i64> [[VCGTZ_I]]
533 uint64x1_t test_vcgtz_f64(float64x1_t a) {
537 // CHECK-LABEL: @test_vcgtzq_f32(
538 // CHECK: [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
539 // CHECK: [[TMP1:%.*]] = fcmp ogt <4 x float> %a, zeroinitializer
540 // CHECK: [[VCGTZ_I:%.*]] = sext <4 x i1> [[TMP1]] to <4 x i32>
541 // CHECK: ret <4 x i32> [[VCGTZ_I]]
542 uint32x4_t test_vcgtzq_f32(float32x4_t a) {
543 return vcgtzq_f32(a);
546 // CHECK-LABEL: @test_vcgtzq_f64(
547 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
548 // CHECK: [[TMP1:%.*]] = fcmp ogt <2 x double> %a, zeroinitializer
549 // CHECK: [[VCGTZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i64>
550 // CHECK: ret <2 x i64> [[VCGTZ_I]]
551 uint64x2_t test_vcgtzq_f64(float64x2_t a) {
552 return vcgtzq_f64(a);
555 // CHECK-LABEL: @test_vcltz_s8(
556 // CHECK: [[TMP0:%.*]] = icmp slt <8 x i8> %a, zeroinitializer
557 // CHECK: [[VCLTZ_I:%.*]] = sext <8 x i1> [[TMP0]] to <8 x i8>
558 // CHECK: ret <8 x i8> [[VCLTZ_I]]
559 uint8x8_t test_vcltz_s8(int8x8_t a) {
563 // CHECK-LABEL: @test_vcltz_s16(
564 // CHECK: [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
565 // CHECK: [[TMP1:%.*]] = icmp slt <4 x i16> %a, zeroinitializer
566 // CHECK: [[VCLTZ_I:%.*]] = sext <4 x i1> [[TMP1]] to <4 x i16>
567 // CHECK: ret <4 x i16> [[VCLTZ_I]]
568 uint16x4_t test_vcltz_s16(int16x4_t a) {
572 // CHECK-LABEL: @test_vcltz_s32(
573 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
574 // CHECK: [[TMP1:%.*]] = icmp slt <2 x i32> %a, zeroinitializer
575 // CHECK: [[VCLTZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i32>
576 // CHECK: ret <2 x i32> [[VCLTZ_I]]
577 uint32x2_t test_vcltz_s32(int32x2_t a) {
581 // CHECK-LABEL: @test_vcltz_s64(
582 // CHECK: [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8>
583 // CHECK: [[TMP1:%.*]] = icmp slt <1 x i64> %a, zeroinitializer
584 // CHECK: [[VCLTZ_I:%.*]] = sext <1 x i1> [[TMP1]] to <1 x i64>
585 // CHECK: ret <1 x i64> [[VCLTZ_I]]
586 uint64x1_t test_vcltz_s64(int64x1_t a) {
590 // CHECK-LABEL: @test_vcltzq_s8(
591 // CHECK: [[TMP0:%.*]] = icmp slt <16 x i8> %a, zeroinitializer
592 // CHECK: [[VCLTZ_I:%.*]] = sext <16 x i1> [[TMP0]] to <16 x i8>
593 // CHECK: ret <16 x i8> [[VCLTZ_I]]
594 uint8x16_t test_vcltzq_s8(int8x16_t a) {
598 // CHECK-LABEL: @test_vcltzq_s16(
599 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
600 // CHECK: [[TMP1:%.*]] = icmp slt <8 x i16> %a, zeroinitializer
601 // CHECK: [[VCLTZ_I:%.*]] = sext <8 x i1> [[TMP1]] to <8 x i16>
602 // CHECK: ret <8 x i16> [[VCLTZ_I]]
603 uint16x8_t test_vcltzq_s16(int16x8_t a) {
604 return vcltzq_s16(a);
607 // CHECK-LABEL: @test_vcltzq_s32(
608 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
609 // CHECK: [[TMP1:%.*]] = icmp slt <4 x i32> %a, zeroinitializer
610 // CHECK: [[VCLTZ_I:%.*]] = sext <4 x i1> [[TMP1]] to <4 x i32>
611 // CHECK: ret <4 x i32> [[VCLTZ_I]]
612 uint32x4_t test_vcltzq_s32(int32x4_t a) {
613 return vcltzq_s32(a);
616 // CHECK-LABEL: @test_vcltzq_s64(
617 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
618 // CHECK: [[TMP1:%.*]] = icmp slt <2 x i64> %a, zeroinitializer
619 // CHECK: [[VCLTZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i64>
620 // CHECK: ret <2 x i64> [[VCLTZ_I]]
621 uint64x2_t test_vcltzq_s64(int64x2_t a) {
622 return vcltzq_s64(a);
625 // CHECK-LABEL: @test_vcltz_f32(
626 // CHECK: [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
627 // CHECK: [[TMP1:%.*]] = fcmp olt <2 x float> %a, zeroinitializer
628 // CHECK: [[VCLTZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i32>
629 // CHECK: ret <2 x i32> [[VCLTZ_I]]
630 uint32x2_t test_vcltz_f32(float32x2_t a) {
634 // CHECK-LABEL: @test_vcltz_f64(
635 // CHECK: [[TMP0:%.*]] = bitcast <1 x double> %a to <8 x i8>
636 // CHECK: [[TMP1:%.*]] = fcmp olt <1 x double> %a, zeroinitializer
637 // CHECK: [[VCLTZ_I:%.*]] = sext <1 x i1> [[TMP1]] to <1 x i64>
638 // CHECK: ret <1 x i64> [[VCLTZ_I]]
639 uint64x1_t test_vcltz_f64(float64x1_t a) {
643 // CHECK-LABEL: @test_vcltzq_f32(
644 // CHECK: [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
645 // CHECK: [[TMP1:%.*]] = fcmp olt <4 x float> %a, zeroinitializer
646 // CHECK: [[VCLTZ_I:%.*]] = sext <4 x i1> [[TMP1]] to <4 x i32>
647 // CHECK: ret <4 x i32> [[VCLTZ_I]]
648 uint32x4_t test_vcltzq_f32(float32x4_t a) {
649 return vcltzq_f32(a);
652 // CHECK-LABEL: @test_vcltzq_f64(
653 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
654 // CHECK: [[TMP1:%.*]] = fcmp olt <2 x double> %a, zeroinitializer
655 // CHECK: [[VCLTZ_I:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i64>
656 // CHECK: ret <2 x i64> [[VCLTZ_I]]
657 uint64x2_t test_vcltzq_f64(float64x2_t a) {
658 return vcltzq_f64(a);
661 // CHECK-LABEL: @test_vrev16_s8(
662 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>
663 // CHECK: ret <8 x i8> [[SHUFFLE_I]]
664 int8x8_t test_vrev16_s8(int8x8_t a) {
668 // CHECK-LABEL: @test_vrev16_u8(
669 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>
670 // CHECK: ret <8 x i8> [[SHUFFLE_I]]
671 uint8x8_t test_vrev16_u8(uint8x8_t a) {
675 // CHECK-LABEL: @test_vrev16_p8(
676 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>
677 // CHECK: ret <8 x i8> [[SHUFFLE_I]]
678 poly8x8_t test_vrev16_p8(poly8x8_t a) {
682 // CHECK-LABEL: @test_vrev16q_s8(
683 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6, i32 9, i32 8, i32 11, i32 10, i32 13, i32 12, i32 15, i32 14>
684 // CHECK: ret <16 x i8> [[SHUFFLE_I]]
685 int8x16_t test_vrev16q_s8(int8x16_t a) {
686 return vrev16q_s8(a);
689 // CHECK-LABEL: @test_vrev16q_u8(
690 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6, i32 9, i32 8, i32 11, i32 10, i32 13, i32 12, i32 15, i32 14>
691 // CHECK: ret <16 x i8> [[SHUFFLE_I]]
692 uint8x16_t test_vrev16q_u8(uint8x16_t a) {
693 return vrev16q_u8(a);
696 // CHECK-LABEL: @test_vrev16q_p8(
697 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6, i32 9, i32 8, i32 11, i32 10, i32 13, i32 12, i32 15, i32 14>
698 // CHECK: ret <16 x i8> [[SHUFFLE_I]]
699 poly8x16_t test_vrev16q_p8(poly8x16_t a) {
700 return vrev16q_p8(a);
703 // CHECK-LABEL: @test_vrev32_s8(
704 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
705 // CHECK: ret <8 x i8> [[SHUFFLE_I]]
706 int8x8_t test_vrev32_s8(int8x8_t a) {
710 // CHECK-LABEL: @test_vrev32_s16(
711 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
712 // CHECK: ret <4 x i16> [[SHUFFLE_I]]
713 int16x4_t test_vrev32_s16(int16x4_t a) {
714 return vrev32_s16(a);
717 // CHECK-LABEL: @test_vrev32_u8(
718 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
719 // CHECK: ret <8 x i8> [[SHUFFLE_I]]
720 uint8x8_t test_vrev32_u8(uint8x8_t a) {
724 // CHECK-LABEL: @test_vrev32_u16(
725 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
726 // CHECK: ret <4 x i16> [[SHUFFLE_I]]
727 uint16x4_t test_vrev32_u16(uint16x4_t a) {
728 return vrev32_u16(a);
731 // CHECK-LABEL: @test_vrev32_p8(
732 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
733 // CHECK: ret <8 x i8> [[SHUFFLE_I]]
734 poly8x8_t test_vrev32_p8(poly8x8_t a) {
738 // CHECK-LABEL: @test_vrev32_p16(
739 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
740 // CHECK: ret <4 x i16> [[SHUFFLE_I]]
741 poly16x4_t test_vrev32_p16(poly16x4_t a) {
742 return vrev32_p16(a);
745 // CHECK-LABEL: @test_vrev32q_s8(
746 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>
747 // CHECK: ret <16 x i8> [[SHUFFLE_I]]
748 int8x16_t test_vrev32q_s8(int8x16_t a) {
749 return vrev32q_s8(a);
752 // CHECK-LABEL: @test_vrev32q_s16(
753 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>
754 // CHECK: ret <8 x i16> [[SHUFFLE_I]]
755 int16x8_t test_vrev32q_s16(int16x8_t a) {
756 return vrev32q_s16(a);
759 // CHECK-LABEL: @test_vrev32q_u8(
760 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>
761 // CHECK: ret <16 x i8> [[SHUFFLE_I]]
762 uint8x16_t test_vrev32q_u8(uint8x16_t a) {
763 return vrev32q_u8(a);
766 // CHECK-LABEL: @test_vrev32q_u16(
767 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>
768 // CHECK: ret <8 x i16> [[SHUFFLE_I]]
769 uint16x8_t test_vrev32q_u16(uint16x8_t a) {
770 return vrev32q_u16(a);
773 // CHECK-LABEL: @test_vrev32q_p8(
774 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>
775 // CHECK: ret <16 x i8> [[SHUFFLE_I]]
776 poly8x16_t test_vrev32q_p8(poly8x16_t a) {
777 return vrev32q_p8(a);
780 // CHECK-LABEL: @test_vrev32q_p16(
781 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>
782 // CHECK: ret <8 x i16> [[SHUFFLE_I]]
783 poly16x8_t test_vrev32q_p16(poly16x8_t a) {
784 return vrev32q_p16(a);
787 // CHECK-LABEL: @test_vrev64_s8(
788 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
789 // CHECK: ret <8 x i8> [[SHUFFLE_I]]
790 int8x8_t test_vrev64_s8(int8x8_t a) {
794 // CHECK-LABEL: @test_vrev64_s16(
795 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
796 // CHECK: ret <4 x i16> [[SHUFFLE_I]]
797 int16x4_t test_vrev64_s16(int16x4_t a) {
798 return vrev64_s16(a);
801 // CHECK-LABEL: @test_vrev64_s32(
802 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <2 x i32> %a, <2 x i32> %a, <2 x i32> <i32 1, i32 0>
803 // CHECK: ret <2 x i32> [[SHUFFLE_I]]
804 int32x2_t test_vrev64_s32(int32x2_t a) {
805 return vrev64_s32(a);
808 // CHECK-LABEL: @test_vrev64_u8(
809 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
810 // CHECK: ret <8 x i8> [[SHUFFLE_I]]
811 uint8x8_t test_vrev64_u8(uint8x8_t a) {
815 // CHECK-LABEL: @test_vrev64_u16(
816 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
817 // CHECK: ret <4 x i16> [[SHUFFLE_I]]
818 uint16x4_t test_vrev64_u16(uint16x4_t a) {
819 return vrev64_u16(a);
822 // CHECK-LABEL: @test_vrev64_u32(
823 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <2 x i32> %a, <2 x i32> %a, <2 x i32> <i32 1, i32 0>
824 // CHECK: ret <2 x i32> [[SHUFFLE_I]]
825 uint32x2_t test_vrev64_u32(uint32x2_t a) {
826 return vrev64_u32(a);
829 // CHECK-LABEL: @test_vrev64_p8(
830 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
831 // CHECK: ret <8 x i8> [[SHUFFLE_I]]
832 poly8x8_t test_vrev64_p8(poly8x8_t a) {
836 // CHECK-LABEL: @test_vrev64_p16(
837 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
838 // CHECK: ret <4 x i16> [[SHUFFLE_I]]
839 poly16x4_t test_vrev64_p16(poly16x4_t a) {
840 return vrev64_p16(a);
843 // CHECK-LABEL: @test_vrev64_f32(
844 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <2 x float> %a, <2 x float> %a, <2 x i32> <i32 1, i32 0>
845 // CHECK: ret <2 x float> [[SHUFFLE_I]]
846 float32x2_t test_vrev64_f32(float32x2_t a) {
847 return vrev64_f32(a);
850 // CHECK-LABEL: @test_vrev64q_s8(
851 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8>
852 // CHECK: ret <16 x i8> [[SHUFFLE_I]]
853 int8x16_t test_vrev64q_s8(int8x16_t a) {
854 return vrev64q_s8(a);
857 // CHECK-LABEL: @test_vrev64q_s16(
858 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
859 // CHECK: ret <8 x i16> [[SHUFFLE_I]]
860 int16x8_t test_vrev64q_s16(int16x8_t a) {
861 return vrev64q_s16(a);
864 // CHECK-LABEL: @test_vrev64q_s32(
865 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
866 // CHECK: ret <4 x i32> [[SHUFFLE_I]]
867 int32x4_t test_vrev64q_s32(int32x4_t a) {
868 return vrev64q_s32(a);
871 // CHECK-LABEL: @test_vrev64q_u8(
872 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8>
873 // CHECK: ret <16 x i8> [[SHUFFLE_I]]
874 uint8x16_t test_vrev64q_u8(uint8x16_t a) {
875 return vrev64q_u8(a);
878 // CHECK-LABEL: @test_vrev64q_u16(
879 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
880 // CHECK: ret <8 x i16> [[SHUFFLE_I]]
881 uint16x8_t test_vrev64q_u16(uint16x8_t a) {
882 return vrev64q_u16(a);
885 // CHECK-LABEL: @test_vrev64q_u32(
886 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
887 // CHECK: ret <4 x i32> [[SHUFFLE_I]]
888 uint32x4_t test_vrev64q_u32(uint32x4_t a) {
889 return vrev64q_u32(a);
892 // CHECK-LABEL: @test_vrev64q_p8(
893 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8>
894 // CHECK: ret <16 x i8> [[SHUFFLE_I]]
895 poly8x16_t test_vrev64q_p8(poly8x16_t a) {
896 return vrev64q_p8(a);
899 // CHECK-LABEL: @test_vrev64q_p16(
900 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
901 // CHECK: ret <8 x i16> [[SHUFFLE_I]]
902 poly16x8_t test_vrev64q_p16(poly16x8_t a) {
903 return vrev64q_p16(a);
906 // CHECK-LABEL: @test_vrev64q_f32(
907 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
908 // CHECK: ret <4 x float> [[SHUFFLE_I]]
909 float32x4_t test_vrev64q_f32(float32x4_t a) {
910 return vrev64q_f32(a);
913 // CHECK-LABEL: @test_vpaddl_s8(
914 // CHECK: [[VPADDL_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.saddlp.v4i16.v8i8(<8 x i8> %a)
915 // CHECK: ret <4 x i16> [[VPADDL_I]]
916 int16x4_t test_vpaddl_s8(int8x8_t a) {
920 // CHECK-LABEL: @test_vpaddl_s16(
921 // CHECK: [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
922 // CHECK: [[VPADDL1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.saddlp.v2i32.v4i16(<4 x i16> %a)
923 // CHECK: ret <2 x i32> [[VPADDL1_I]]
924 int32x2_t test_vpaddl_s16(int16x4_t a) {
925 return vpaddl_s16(a);
928 // CHECK-LABEL: @test_vpaddl_s32(
929 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
930 // CHECK: [[VPADDL1_I:%.*]] = call <1 x i64> @llvm.aarch64.neon.saddlp.v1i64.v2i32(<2 x i32> %a)
931 // CHECK: ret <1 x i64> [[VPADDL1_I]]
932 int64x1_t test_vpaddl_s32(int32x2_t a) {
933 return vpaddl_s32(a);
936 // CHECK-LABEL: @test_vpaddl_u8(
937 // CHECK: [[VPADDL_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.uaddlp.v4i16.v8i8(<8 x i8> %a)
938 // CHECK: ret <4 x i16> [[VPADDL_I]]
939 uint16x4_t test_vpaddl_u8(uint8x8_t a) {
943 // CHECK-LABEL: @test_vpaddl_u16(
944 // CHECK: [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
945 // CHECK: [[VPADDL1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.uaddlp.v2i32.v4i16(<4 x i16> %a)
946 // CHECK: ret <2 x i32> [[VPADDL1_I]]
947 uint32x2_t test_vpaddl_u16(uint16x4_t a) {
948 return vpaddl_u16(a);
951 // CHECK-LABEL: @test_vpaddl_u32(
952 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
953 // CHECK: [[VPADDL1_I:%.*]] = call <1 x i64> @llvm.aarch64.neon.uaddlp.v1i64.v2i32(<2 x i32> %a)
954 // CHECK: ret <1 x i64> [[VPADDL1_I]]
955 uint64x1_t test_vpaddl_u32(uint32x2_t a) {
956 return vpaddl_u32(a);
959 // CHECK-LABEL: @test_vpaddlq_s8(
960 // CHECK: [[VPADDL_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.saddlp.v8i16.v16i8(<16 x i8> %a)
961 // CHECK: ret <8 x i16> [[VPADDL_I]]
962 int16x8_t test_vpaddlq_s8(int8x16_t a) {
963 return vpaddlq_s8(a);
966 // CHECK-LABEL: @test_vpaddlq_s16(
967 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
968 // CHECK: [[VPADDL1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.saddlp.v4i32.v8i16(<8 x i16> %a)
969 // CHECK: ret <4 x i32> [[VPADDL1_I]]
970 int32x4_t test_vpaddlq_s16(int16x8_t a) {
971 return vpaddlq_s16(a);
974 // CHECK-LABEL: @test_vpaddlq_s32(
975 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
976 // CHECK: [[VPADDL1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.saddlp.v2i64.v4i32(<4 x i32> %a)
977 // CHECK: ret <2 x i64> [[VPADDL1_I]]
978 int64x2_t test_vpaddlq_s32(int32x4_t a) {
979 return vpaddlq_s32(a);
982 // CHECK-LABEL: @test_vpaddlq_u8(
983 // CHECK: [[VPADDL_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.uaddlp.v8i16.v16i8(<16 x i8> %a)
984 // CHECK: ret <8 x i16> [[VPADDL_I]]
985 uint16x8_t test_vpaddlq_u8(uint8x16_t a) {
986 return vpaddlq_u8(a);
989 // CHECK-LABEL: @test_vpaddlq_u16(
990 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
991 // CHECK: [[VPADDL1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.uaddlp.v4i32.v8i16(<8 x i16> %a)
992 // CHECK: ret <4 x i32> [[VPADDL1_I]]
993 uint32x4_t test_vpaddlq_u16(uint16x8_t a) {
994 return vpaddlq_u16(a);
997 // CHECK-LABEL: @test_vpaddlq_u32(
998 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
999 // CHECK: [[VPADDL1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.uaddlp.v2i64.v4i32(<4 x i32> %a)
1000 // CHECK: ret <2 x i64> [[VPADDL1_I]]
1001 uint64x2_t test_vpaddlq_u32(uint32x4_t a) {
1002 return vpaddlq_u32(a);
1005 // CHECK-LABEL: @test_vpadal_s8(
1006 // CHECK: [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
1007 // CHECK: [[VPADAL_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.saddlp.v4i16.v8i8(<8 x i8> %b)
1008 // CHECK: [[TMP1:%.*]] = add <4 x i16> [[VPADAL_I]], %a
1009 // CHECK: ret <4 x i16> [[TMP1]]
1010 int16x4_t test_vpadal_s8(int16x4_t a, int8x8_t b) {
1011 return vpadal_s8(a, b);
1014 // CHECK-LABEL: @test_vpadal_s16(
1015 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
1016 // CHECK: [[TMP1:%.*]] = bitcast <4 x i16> %b to <8 x i8>
1017 // CHECK: [[VPADAL1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.saddlp.v2i32.v4i16(<4 x i16> %b)
1018 // CHECK: [[TMP2:%.*]] = add <2 x i32> [[VPADAL1_I]], %a
1019 // CHECK: ret <2 x i32> [[TMP2]]
1020 int32x2_t test_vpadal_s16(int32x2_t a, int16x4_t b) {
1021 return vpadal_s16(a, b);
1024 // CHECK-LABEL: @test_vpadal_s32(
1025 // CHECK: [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8>
1026 // CHECK: [[TMP1:%.*]] = bitcast <2 x i32> %b to <8 x i8>
1027 // CHECK: [[VPADAL1_I:%.*]] = call <1 x i64> @llvm.aarch64.neon.saddlp.v1i64.v2i32(<2 x i32> %b)
1028 // CHECK: [[TMP2:%.*]] = add <1 x i64> [[VPADAL1_I]], %a
1029 // CHECK: ret <1 x i64> [[TMP2]]
1030 int64x1_t test_vpadal_s32(int64x1_t a, int32x2_t b) {
1031 return vpadal_s32(a, b);
1034 // CHECK-LABEL: @test_vpadal_u8(
1035 // CHECK: [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
1036 // CHECK: [[VPADAL_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.uaddlp.v4i16.v8i8(<8 x i8> %b)
1037 // CHECK: [[TMP1:%.*]] = add <4 x i16> [[VPADAL_I]], %a
1038 // CHECK: ret <4 x i16> [[TMP1]]
1039 uint16x4_t test_vpadal_u8(uint16x4_t a, uint8x8_t b) {
1040 return vpadal_u8(a, b);
1043 // CHECK-LABEL: @test_vpadal_u16(
1044 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
1045 // CHECK: [[TMP1:%.*]] = bitcast <4 x i16> %b to <8 x i8>
1046 // CHECK: [[VPADAL1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.uaddlp.v2i32.v4i16(<4 x i16> %b)
1047 // CHECK: [[TMP2:%.*]] = add <2 x i32> [[VPADAL1_I]], %a
1048 // CHECK: ret <2 x i32> [[TMP2]]
1049 uint32x2_t test_vpadal_u16(uint32x2_t a, uint16x4_t b) {
1050 return vpadal_u16(a, b);
1053 // CHECK-LABEL: @test_vpadal_u32(
1054 // CHECK: [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8>
1055 // CHECK: [[TMP1:%.*]] = bitcast <2 x i32> %b to <8 x i8>
1056 // CHECK: [[VPADAL1_I:%.*]] = call <1 x i64> @llvm.aarch64.neon.uaddlp.v1i64.v2i32(<2 x i32> %b)
1057 // CHECK: [[TMP2:%.*]] = add <1 x i64> [[VPADAL1_I]], %a
1058 // CHECK: ret <1 x i64> [[TMP2]]
1059 uint64x1_t test_vpadal_u32(uint64x1_t a, uint32x2_t b) {
1060 return vpadal_u32(a, b);
1063 // CHECK-LABEL: @test_vpadalq_s8(
1064 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1065 // CHECK: [[VPADAL_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.saddlp.v8i16.v16i8(<16 x i8> %b)
1066 // CHECK: [[TMP1:%.*]] = add <8 x i16> [[VPADAL_I]], %a
1067 // CHECK: ret <8 x i16> [[TMP1]]
1068 int16x8_t test_vpadalq_s8(int16x8_t a, int8x16_t b) {
1069 return vpadalq_s8(a, b);
1072 // CHECK-LABEL: @test_vpadalq_s16(
1073 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1074 // CHECK: [[TMP1:%.*]] = bitcast <8 x i16> %b to <16 x i8>
1075 // CHECK: [[VPADAL1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.saddlp.v4i32.v8i16(<8 x i16> %b)
1076 // CHECK: [[TMP2:%.*]] = add <4 x i32> [[VPADAL1_I]], %a
1077 // CHECK: ret <4 x i32> [[TMP2]]
1078 int32x4_t test_vpadalq_s16(int32x4_t a, int16x8_t b) {
1079 return vpadalq_s16(a, b);
1082 // CHECK-LABEL: @test_vpadalq_s32(
1083 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
1084 // CHECK: [[TMP1:%.*]] = bitcast <4 x i32> %b to <16 x i8>
1085 // CHECK: [[VPADAL1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.saddlp.v2i64.v4i32(<4 x i32> %b)
1086 // CHECK: [[TMP2:%.*]] = add <2 x i64> [[VPADAL1_I]], %a
1087 // CHECK: ret <2 x i64> [[TMP2]]
1088 int64x2_t test_vpadalq_s32(int64x2_t a, int32x4_t b) {
1089 return vpadalq_s32(a, b);
1092 // CHECK-LABEL: @test_vpadalq_u8(
1093 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1094 // CHECK: [[VPADAL_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.uaddlp.v8i16.v16i8(<16 x i8> %b)
1095 // CHECK: [[TMP1:%.*]] = add <8 x i16> [[VPADAL_I]], %a
1096 // CHECK: ret <8 x i16> [[TMP1]]
1097 uint16x8_t test_vpadalq_u8(uint16x8_t a, uint8x16_t b) {
1098 return vpadalq_u8(a, b);
1101 // CHECK-LABEL: @test_vpadalq_u16(
1102 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1103 // CHECK: [[TMP1:%.*]] = bitcast <8 x i16> %b to <16 x i8>
1104 // CHECK: [[VPADAL1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.uaddlp.v4i32.v8i16(<8 x i16> %b)
1105 // CHECK: [[TMP2:%.*]] = add <4 x i32> [[VPADAL1_I]], %a
1106 // CHECK: ret <4 x i32> [[TMP2]]
1107 uint32x4_t test_vpadalq_u16(uint32x4_t a, uint16x8_t b) {
1108 return vpadalq_u16(a, b);
1111 // CHECK-LABEL: @test_vpadalq_u32(
1112 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
1113 // CHECK: [[TMP1:%.*]] = bitcast <4 x i32> %b to <16 x i8>
1114 // CHECK: [[VPADAL1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.uaddlp.v2i64.v4i32(<4 x i32> %b)
1115 // CHECK: [[TMP2:%.*]] = add <2 x i64> [[VPADAL1_I]], %a
1116 // CHECK: ret <2 x i64> [[TMP2]]
1117 uint64x2_t test_vpadalq_u32(uint64x2_t a, uint32x4_t b) {
1118 return vpadalq_u32(a, b);
1121 // CHECK-LABEL: @test_vqabs_s8(
1122 // CHECK: [[VQABS_V_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqabs.v8i8(<8 x i8> %a)
1123 // CHECK: ret <8 x i8> [[VQABS_V_I]]
1124 int8x8_t test_vqabs_s8(int8x8_t a) {
1128 // CHECK-LABEL: @test_vqabsq_s8(
1129 // CHECK: [[VQABSQ_V_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.sqabs.v16i8(<16 x i8> %a)
1130 // CHECK: ret <16 x i8> [[VQABSQ_V_I]]
1131 int8x16_t test_vqabsq_s8(int8x16_t a) {
1132 return vqabsq_s8(a);
1135 // CHECK-LABEL: @test_vqabs_s16(
1136 // CHECK: [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
1137 // CHECK: [[VQABS_V1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqabs.v4i16(<4 x i16> %a)
1138 // CHECK: [[VQABS_V2_I:%.*]] = bitcast <4 x i16> [[VQABS_V1_I]] to <8 x i8>
1139 // CHECK: ret <4 x i16> [[VQABS_V1_I]]
1140 int16x4_t test_vqabs_s16(int16x4_t a) {
1141 return vqabs_s16(a);
1144 // CHECK-LABEL: @test_vqabsq_s16(
1145 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1146 // CHECK: [[VQABSQ_V1_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.sqabs.v8i16(<8 x i16> %a)
1147 // CHECK: [[VQABSQ_V2_I:%.*]] = bitcast <8 x i16> [[VQABSQ_V1_I]] to <16 x i8>
1148 // CHECK: ret <8 x i16> [[VQABSQ_V1_I]]
1149 int16x8_t test_vqabsq_s16(int16x8_t a) {
1150 return vqabsq_s16(a);
1153 // CHECK-LABEL: @test_vqabs_s32(
1154 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
1155 // CHECK: [[VQABS_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqabs.v2i32(<2 x i32> %a)
1156 // CHECK: [[VQABS_V2_I:%.*]] = bitcast <2 x i32> [[VQABS_V1_I]] to <8 x i8>
1157 // CHECK: ret <2 x i32> [[VQABS_V1_I]]
1158 int32x2_t test_vqabs_s32(int32x2_t a) {
1159 return vqabs_s32(a);
1162 // CHECK-LABEL: @test_vqabsq_s32(
1163 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1164 // CHECK: [[VQABSQ_V1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqabs.v4i32(<4 x i32> %a)
1165 // CHECK: [[VQABSQ_V2_I:%.*]] = bitcast <4 x i32> [[VQABSQ_V1_I]] to <16 x i8>
1166 // CHECK: ret <4 x i32> [[VQABSQ_V1_I]]
1167 int32x4_t test_vqabsq_s32(int32x4_t a) {
1168 return vqabsq_s32(a);
1171 // CHECK-LABEL: @test_vqabsq_s64(
1172 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
1173 // CHECK: [[VQABSQ_V1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.sqabs.v2i64(<2 x i64> %a)
1174 // CHECK: [[VQABSQ_V2_I:%.*]] = bitcast <2 x i64> [[VQABSQ_V1_I]] to <16 x i8>
1175 // CHECK: ret <2 x i64> [[VQABSQ_V1_I]]
1176 int64x2_t test_vqabsq_s64(int64x2_t a) {
1177 return vqabsq_s64(a);
1180 // CHECK-LABEL: @test_vqneg_s8(
1181 // CHECK: [[VQNEG_V_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqneg.v8i8(<8 x i8> %a)
1182 // CHECK: ret <8 x i8> [[VQNEG_V_I]]
1183 int8x8_t test_vqneg_s8(int8x8_t a) {
1187 // CHECK-LABEL: @test_vqnegq_s8(
1188 // CHECK: [[VQNEGQ_V_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.sqneg.v16i8(<16 x i8> %a)
1189 // CHECK: ret <16 x i8> [[VQNEGQ_V_I]]
1190 int8x16_t test_vqnegq_s8(int8x16_t a) {
1191 return vqnegq_s8(a);
1194 // CHECK-LABEL: @test_vqneg_s16(
1195 // CHECK: [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
1196 // CHECK: [[VQNEG_V1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqneg.v4i16(<4 x i16> %a)
1197 // CHECK: [[VQNEG_V2_I:%.*]] = bitcast <4 x i16> [[VQNEG_V1_I]] to <8 x i8>
1198 // CHECK: ret <4 x i16> [[VQNEG_V1_I]]
1199 int16x4_t test_vqneg_s16(int16x4_t a) {
1200 return vqneg_s16(a);
1203 // CHECK-LABEL: @test_vqnegq_s16(
1204 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1205 // CHECK: [[VQNEGQ_V1_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.sqneg.v8i16(<8 x i16> %a)
1206 // CHECK: [[VQNEGQ_V2_I:%.*]] = bitcast <8 x i16> [[VQNEGQ_V1_I]] to <16 x i8>
1207 // CHECK: ret <8 x i16> [[VQNEGQ_V1_I]]
1208 int16x8_t test_vqnegq_s16(int16x8_t a) {
1209 return vqnegq_s16(a);
1212 // CHECK-LABEL: @test_vqneg_s32(
1213 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
1214 // CHECK: [[VQNEG_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqneg.v2i32(<2 x i32> %a)
1215 // CHECK: [[VQNEG_V2_I:%.*]] = bitcast <2 x i32> [[VQNEG_V1_I]] to <8 x i8>
1216 // CHECK: ret <2 x i32> [[VQNEG_V1_I]]
1217 int32x2_t test_vqneg_s32(int32x2_t a) {
1218 return vqneg_s32(a);
1221 // CHECK-LABEL: @test_vqnegq_s32(
1222 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1223 // CHECK: [[VQNEGQ_V1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqneg.v4i32(<4 x i32> %a)
1224 // CHECK: [[VQNEGQ_V2_I:%.*]] = bitcast <4 x i32> [[VQNEGQ_V1_I]] to <16 x i8>
1225 // CHECK: ret <4 x i32> [[VQNEGQ_V1_I]]
1226 int32x4_t test_vqnegq_s32(int32x4_t a) {
1227 return vqnegq_s32(a);
1230 // CHECK-LABEL: @test_vqnegq_s64(
1231 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
1232 // CHECK: [[VQNEGQ_V1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.sqneg.v2i64(<2 x i64> %a)
1233 // CHECK: [[VQNEGQ_V2_I:%.*]] = bitcast <2 x i64> [[VQNEGQ_V1_I]] to <16 x i8>
1234 // CHECK: ret <2 x i64> [[VQNEGQ_V1_I]]
1235 int64x2_t test_vqnegq_s64(int64x2_t a) {
1236 return vqnegq_s64(a);
1239 // CHECK-LABEL: @test_vneg_s8(
1240 // CHECK: [[SUB_I:%.*]] = sub <8 x i8> zeroinitializer, %a
1241 // CHECK: ret <8 x i8> [[SUB_I]]
1242 int8x8_t test_vneg_s8(int8x8_t a) {
1246 // CHECK-LABEL: @test_vnegq_s8(
1247 // CHECK: [[SUB_I:%.*]] = sub <16 x i8> zeroinitializer, %a
1248 // CHECK: ret <16 x i8> [[SUB_I]]
1249 int8x16_t test_vnegq_s8(int8x16_t a) {
1253 // CHECK-LABEL: @test_vneg_s16(
1254 // CHECK: [[SUB_I:%.*]] = sub <4 x i16> zeroinitializer, %a
1255 // CHECK: ret <4 x i16> [[SUB_I]]
1256 int16x4_t test_vneg_s16(int16x4_t a) {
1260 // CHECK-LABEL: @test_vnegq_s16(
1261 // CHECK: [[SUB_I:%.*]] = sub <8 x i16> zeroinitializer, %a
1262 // CHECK: ret <8 x i16> [[SUB_I]]
1263 int16x8_t test_vnegq_s16(int16x8_t a) {
1264 return vnegq_s16(a);
1267 // CHECK-LABEL: @test_vneg_s32(
1268 // CHECK: [[SUB_I:%.*]] = sub <2 x i32> zeroinitializer, %a
1269 // CHECK: ret <2 x i32> [[SUB_I]]
1270 int32x2_t test_vneg_s32(int32x2_t a) {
1274 // CHECK-LABEL: @test_vnegq_s32(
1275 // CHECK: [[SUB_I:%.*]] = sub <4 x i32> zeroinitializer, %a
1276 // CHECK: ret <4 x i32> [[SUB_I]]
1277 int32x4_t test_vnegq_s32(int32x4_t a) {
1278 return vnegq_s32(a);
1281 // CHECK-LABEL: @test_vnegq_s64(
1282 // CHECK: [[SUB_I:%.*]] = sub <2 x i64> zeroinitializer, %a
1283 // CHECK: ret <2 x i64> [[SUB_I]]
1284 int64x2_t test_vnegq_s64(int64x2_t a) {
1285 return vnegq_s64(a);
1288 // CHECK-LABEL: @test_vneg_f32(
1289 // CHECK: [[SUB_I:%.*]] = fsub <2 x float> <float -0.000000e+00, float -0.000000e+00>, %a
1290 // CHECK: ret <2 x float> [[SUB_I]]
1291 float32x2_t test_vneg_f32(float32x2_t a) {
1295 // CHECK-LABEL: @test_vnegq_f32(
1296 // CHECK: [[SUB_I:%.*]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %a
1297 // CHECK: ret <4 x float> [[SUB_I]]
1298 float32x4_t test_vnegq_f32(float32x4_t a) {
1299 return vnegq_f32(a);
1302 // CHECK-LABEL: @test_vnegq_f64(
1303 // CHECK: [[SUB_I:%.*]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %a
1304 // CHECK: ret <2 x double> [[SUB_I]]
1305 float64x2_t test_vnegq_f64(float64x2_t a) {
1306 return vnegq_f64(a);
1309 // CHECK-LABEL: @test_vabs_s8(
1310 // CHECK: [[VABS_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.abs.v8i8(<8 x i8> %a)
1311 // CHECK: ret <8 x i8> [[VABS_I]]
1312 int8x8_t test_vabs_s8(int8x8_t a) {
1316 // CHECK-LABEL: @test_vabsq_s8(
1317 // CHECK: [[VABS_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.abs.v16i8(<16 x i8> %a)
1318 // CHECK: ret <16 x i8> [[VABS_I]]
1319 int8x16_t test_vabsq_s8(int8x16_t a) {
1323 // CHECK-LABEL: @test_vabs_s16(
1324 // CHECK: [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
1325 // CHECK: [[VABS1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.abs.v4i16(<4 x i16> %a)
1326 // CHECK: ret <4 x i16> [[VABS1_I]]
1327 int16x4_t test_vabs_s16(int16x4_t a) {
1331 // CHECK-LABEL: @test_vabsq_s16(
1332 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1333 // CHECK: [[VABS1_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.abs.v8i16(<8 x i16> %a)
1334 // CHECK: ret <8 x i16> [[VABS1_I]]
1335 int16x8_t test_vabsq_s16(int16x8_t a) {
1336 return vabsq_s16(a);
1339 // CHECK-LABEL: @test_vabs_s32(
1340 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
1341 // CHECK: [[VABS1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.abs.v2i32(<2 x i32> %a)
1342 // CHECK: ret <2 x i32> [[VABS1_I]]
1343 int32x2_t test_vabs_s32(int32x2_t a) {
1347 // CHECK-LABEL: @test_vabsq_s32(
1348 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1349 // CHECK: [[VABS1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.abs.v4i32(<4 x i32> %a)
1350 // CHECK: ret <4 x i32> [[VABS1_I]]
1351 int32x4_t test_vabsq_s32(int32x4_t a) {
1352 return vabsq_s32(a);
1355 // CHECK-LABEL: @test_vabsq_s64(
1356 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
1357 // CHECK: [[VABS1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.abs.v2i64(<2 x i64> %a)
1358 // CHECK: ret <2 x i64> [[VABS1_I]]
1359 int64x2_t test_vabsq_s64(int64x2_t a) {
1360 return vabsq_s64(a);
1363 // CHECK-LABEL: @test_vabs_f32(
1364 // CHECK: [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
1365 // CHECK: [[VABS1_I:%.*]] = call <2 x float> @llvm.fabs.v2f32(<2 x float> %a)
1366 // CHECK: ret <2 x float> [[VABS1_I]]
1367 float32x2_t test_vabs_f32(float32x2_t a) {
1371 // CHECK-LABEL: @test_vabsq_f32(
1372 // CHECK: [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
1373 // CHECK: [[VABS1_I:%.*]] = call <4 x float> @llvm.fabs.v4f32(<4 x float> %a)
1374 // CHECK: ret <4 x float> [[VABS1_I]]
1375 float32x4_t test_vabsq_f32(float32x4_t a) {
1376 return vabsq_f32(a);
1379 // CHECK-LABEL: @test_vabsq_f64(
1380 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
1381 // CHECK: [[VABS1_I:%.*]] = call <2 x double> @llvm.fabs.v2f64(<2 x double> %a)
1382 // CHECK: ret <2 x double> [[VABS1_I]]
1383 float64x2_t test_vabsq_f64(float64x2_t a) {
1384 return vabsq_f64(a);
1387 // CHECK-LABEL: @test_vuqadd_s8(
1388 // CHECK: [[VUQADD_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.suqadd.v8i8(<8 x i8> %a, <8 x i8> %b)
1389 // CHECK: ret <8 x i8> [[VUQADD_I]]
1390 int8x8_t test_vuqadd_s8(int8x8_t a, int8x8_t b) {
1391 return vuqadd_s8(a, b);
1394 // CHECK-LABEL: @test_vuqaddq_s8(
1395 // CHECK: [[VUQADD_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.suqadd.v16i8(<16 x i8> %a, <16 x i8> %b)
1396 // CHECK: ret <16 x i8> [[VUQADD_I]]
1397 int8x16_t test_vuqaddq_s8(int8x16_t a, int8x16_t b) {
1398 return vuqaddq_s8(a, b);
1401 // CHECK-LABEL: @test_vuqadd_s16(
1402 // CHECK: [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
1403 // CHECK: [[TMP1:%.*]] = bitcast <4 x i16> %b to <8 x i8>
1404 // CHECK: [[VUQADD2_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.suqadd.v4i16(<4 x i16> %a, <4 x i16> %b)
1405 // CHECK: ret <4 x i16> [[VUQADD2_I]]
1406 int16x4_t test_vuqadd_s16(int16x4_t a, int16x4_t b) {
1407 return vuqadd_s16(a, b);
1410 // CHECK-LABEL: @test_vuqaddq_s16(
1411 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1412 // CHECK: [[TMP1:%.*]] = bitcast <8 x i16> %b to <16 x i8>
1413 // CHECK: [[VUQADD2_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.suqadd.v8i16(<8 x i16> %a, <8 x i16> %b)
1414 // CHECK: ret <8 x i16> [[VUQADD2_I]]
1415 int16x8_t test_vuqaddq_s16(int16x8_t a, int16x8_t b) {
1416 return vuqaddq_s16(a, b);
1419 // CHECK-LABEL: @test_vuqadd_s32(
1420 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
1421 // CHECK: [[TMP1:%.*]] = bitcast <2 x i32> %b to <8 x i8>
1422 // CHECK: [[VUQADD2_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.suqadd.v2i32(<2 x i32> %a, <2 x i32> %b)
1423 // CHECK: ret <2 x i32> [[VUQADD2_I]]
1424 int32x2_t test_vuqadd_s32(int32x2_t a, int32x2_t b) {
1425 return vuqadd_s32(a, b);
1428 // CHECK-LABEL: @test_vuqaddq_s32(
1429 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1430 // CHECK: [[TMP1:%.*]] = bitcast <4 x i32> %b to <16 x i8>
1431 // CHECK: [[VUQADD2_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.suqadd.v4i32(<4 x i32> %a, <4 x i32> %b)
1432 // CHECK: ret <4 x i32> [[VUQADD2_I]]
1433 int32x4_t test_vuqaddq_s32(int32x4_t a, int32x4_t b) {
1434 return vuqaddq_s32(a, b);
1437 // CHECK-LABEL: @test_vuqaddq_s64(
1438 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
1439 // CHECK: [[TMP1:%.*]] = bitcast <2 x i64> %b to <16 x i8>
1440 // CHECK: [[VUQADD2_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.suqadd.v2i64(<2 x i64> %a, <2 x i64> %b)
1441 // CHECK: ret <2 x i64> [[VUQADD2_I]]
1442 int64x2_t test_vuqaddq_s64(int64x2_t a, int64x2_t b) {
1443 return vuqaddq_s64(a, b);
1446 // CHECK-LABEL: @test_vcls_s8(
1447 // CHECK: [[VCLS_V_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.cls.v8i8(<8 x i8> %a)
1448 // CHECK: ret <8 x i8> [[VCLS_V_I]]
1449 int8x8_t test_vcls_s8(int8x8_t a) {
1453 // CHECK-LABEL: @test_vclsq_s8(
1454 // CHECK: [[VCLSQ_V_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.cls.v16i8(<16 x i8> %a)
1455 // CHECK: ret <16 x i8> [[VCLSQ_V_I]]
1456 int8x16_t test_vclsq_s8(int8x16_t a) {
1460 // CHECK-LABEL: @test_vcls_s16(
1461 // CHECK: [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
1462 // CHECK: [[VCLS_V1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.cls.v4i16(<4 x i16> %a)
1463 // CHECK: [[VCLS_V2_I:%.*]] = bitcast <4 x i16> [[VCLS_V1_I]] to <8 x i8>
1464 // CHECK: ret <4 x i16> [[VCLS_V1_I]]
1465 int16x4_t test_vcls_s16(int16x4_t a) {
1469 // CHECK-LABEL: @test_vclsq_s16(
1470 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1471 // CHECK: [[VCLSQ_V1_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.cls.v8i16(<8 x i16> %a)
1472 // CHECK: [[VCLSQ_V2_I:%.*]] = bitcast <8 x i16> [[VCLSQ_V1_I]] to <16 x i8>
1473 // CHECK: ret <8 x i16> [[VCLSQ_V1_I]]
1474 int16x8_t test_vclsq_s16(int16x8_t a) {
1475 return vclsq_s16(a);
1478 // CHECK-LABEL: @test_vcls_s32(
1479 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
1480 // CHECK: [[VCLS_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.cls.v2i32(<2 x i32> %a)
1481 // CHECK: [[VCLS_V2_I:%.*]] = bitcast <2 x i32> [[VCLS_V1_I]] to <8 x i8>
1482 // CHECK: ret <2 x i32> [[VCLS_V1_I]]
1483 int32x2_t test_vcls_s32(int32x2_t a) {
1487 // CHECK-LABEL: @test_vclsq_s32(
1488 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1489 // CHECK: [[VCLSQ_V1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.cls.v4i32(<4 x i32> %a)
1490 // CHECK: [[VCLSQ_V2_I:%.*]] = bitcast <4 x i32> [[VCLSQ_V1_I]] to <16 x i8>
1491 // CHECK: ret <4 x i32> [[VCLSQ_V1_I]]
1492 int32x4_t test_vclsq_s32(int32x4_t a) {
1493 return vclsq_s32(a);
1496 // CHECK-LABEL: @test_vclz_s8(
1497 // CHECK: [[VCLZ_V_I:%.*]] = call <8 x i8> @llvm.ctlz.v8i8(<8 x i8> %a, i1 false)
1498 // CHECK: ret <8 x i8> [[VCLZ_V_I]]
1499 int8x8_t test_vclz_s8(int8x8_t a) {
1503 // CHECK-LABEL: @test_vclzq_s8(
1504 // CHECK: [[VCLZQ_V_I:%.*]] = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false)
1505 // CHECK: ret <16 x i8> [[VCLZQ_V_I]]
1506 int8x16_t test_vclzq_s8(int8x16_t a) {
1510 // CHECK-LABEL: @test_vclz_s16(
1511 // CHECK: [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
1512 // CHECK: [[VCLZ_V1_I:%.*]] = call <4 x i16> @llvm.ctlz.v4i16(<4 x i16> %a, i1 false)
1513 // CHECK: [[VCLZ_V2_I:%.*]] = bitcast <4 x i16> [[VCLZ_V1_I]] to <8 x i8>
1514 // CHECK: ret <4 x i16> [[VCLZ_V1_I]]
1515 int16x4_t test_vclz_s16(int16x4_t a) {
1519 // CHECK-LABEL: @test_vclzq_s16(
1520 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1521 // CHECK: [[VCLZQ_V1_I:%.*]] = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false)
1522 // CHECK: [[VCLZQ_V2_I:%.*]] = bitcast <8 x i16> [[VCLZQ_V1_I]] to <16 x i8>
1523 // CHECK: ret <8 x i16> [[VCLZQ_V1_I]]
1524 int16x8_t test_vclzq_s16(int16x8_t a) {
1525 return vclzq_s16(a);
1528 // CHECK-LABEL: @test_vclz_s32(
1529 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
1530 // CHECK: [[VCLZ_V1_I:%.*]] = call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> %a, i1 false)
1531 // CHECK: [[VCLZ_V2_I:%.*]] = bitcast <2 x i32> [[VCLZ_V1_I]] to <8 x i8>
1532 // CHECK: ret <2 x i32> [[VCLZ_V1_I]]
1533 int32x2_t test_vclz_s32(int32x2_t a) {
1537 // CHECK-LABEL: @test_vclzq_s32(
1538 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1539 // CHECK: [[VCLZQ_V1_I:%.*]] = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false)
1540 // CHECK: [[VCLZQ_V2_I:%.*]] = bitcast <4 x i32> [[VCLZQ_V1_I]] to <16 x i8>
1541 // CHECK: ret <4 x i32> [[VCLZQ_V1_I]]
1542 int32x4_t test_vclzq_s32(int32x4_t a) {
1543 return vclzq_s32(a);
1546 // CHECK-LABEL: @test_vclz_u8(
1547 // CHECK: [[VCLZ_V_I:%.*]] = call <8 x i8> @llvm.ctlz.v8i8(<8 x i8> %a, i1 false)
1548 // CHECK: ret <8 x i8> [[VCLZ_V_I]]
1549 uint8x8_t test_vclz_u8(uint8x8_t a) {
1553 // CHECK-LABEL: @test_vclzq_u8(
1554 // CHECK: [[VCLZQ_V_I:%.*]] = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false)
1555 // CHECK: ret <16 x i8> [[VCLZQ_V_I]]
1556 uint8x16_t test_vclzq_u8(uint8x16_t a) {
1560 // CHECK-LABEL: @test_vclz_u16(
1561 // CHECK: [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
1562 // CHECK: [[VCLZ_V1_I:%.*]] = call <4 x i16> @llvm.ctlz.v4i16(<4 x i16> %a, i1 false)
1563 // CHECK: [[VCLZ_V2_I:%.*]] = bitcast <4 x i16> [[VCLZ_V1_I]] to <8 x i8>
1564 // CHECK: ret <4 x i16> [[VCLZ_V1_I]]
1565 uint16x4_t test_vclz_u16(uint16x4_t a) {
1569 // CHECK-LABEL: @test_vclzq_u16(
1570 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1571 // CHECK: [[VCLZQ_V1_I:%.*]] = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false)
1572 // CHECK: [[VCLZQ_V2_I:%.*]] = bitcast <8 x i16> [[VCLZQ_V1_I]] to <16 x i8>
1573 // CHECK: ret <8 x i16> [[VCLZQ_V1_I]]
1574 uint16x8_t test_vclzq_u16(uint16x8_t a) {
1575 return vclzq_u16(a);
1578 // CHECK-LABEL: @test_vclz_u32(
1579 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
1580 // CHECK: [[VCLZ_V1_I:%.*]] = call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> %a, i1 false)
1581 // CHECK: [[VCLZ_V2_I:%.*]] = bitcast <2 x i32> [[VCLZ_V1_I]] to <8 x i8>
1582 // CHECK: ret <2 x i32> [[VCLZ_V1_I]]
1583 uint32x2_t test_vclz_u32(uint32x2_t a) {
1587 // CHECK-LABEL: @test_vclzq_u32(
1588 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1589 // CHECK: [[VCLZQ_V1_I:%.*]] = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false)
1590 // CHECK: [[VCLZQ_V2_I:%.*]] = bitcast <4 x i32> [[VCLZQ_V1_I]] to <16 x i8>
1591 // CHECK: ret <4 x i32> [[VCLZQ_V1_I]]
1592 uint32x4_t test_vclzq_u32(uint32x4_t a) {
1593 return vclzq_u32(a);
1596 // CHECK-LABEL: @test_vcnt_s8(
1597 // CHECK: [[VCNT_V_I:%.*]] = call <8 x i8> @llvm.ctpop.v8i8(<8 x i8> %a)
1598 // CHECK: ret <8 x i8> [[VCNT_V_I]]
1599 int8x8_t test_vcnt_s8(int8x8_t a) {
1603 // CHECK-LABEL: @test_vcntq_s8(
1604 // CHECK: [[VCNTQ_V_I:%.*]] = call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %a)
1605 // CHECK: ret <16 x i8> [[VCNTQ_V_I]]
1606 int8x16_t test_vcntq_s8(int8x16_t a) {
1610 // CHECK-LABEL: @test_vcnt_u8(
1611 // CHECK: [[VCNT_V_I:%.*]] = call <8 x i8> @llvm.ctpop.v8i8(<8 x i8> %a)
1612 // CHECK: ret <8 x i8> [[VCNT_V_I]]
1613 uint8x8_t test_vcnt_u8(uint8x8_t a) {
1617 // CHECK-LABEL: @test_vcntq_u8(
1618 // CHECK: [[VCNTQ_V_I:%.*]] = call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %a)
1619 // CHECK: ret <16 x i8> [[VCNTQ_V_I]]
1620 uint8x16_t test_vcntq_u8(uint8x16_t a) {
1624 // CHECK-LABEL: @test_vcnt_p8(
1625 // CHECK: [[VCNT_V_I:%.*]] = call <8 x i8> @llvm.ctpop.v8i8(<8 x i8> %a)
1626 // CHECK: ret <8 x i8> [[VCNT_V_I]]
1627 poly8x8_t test_vcnt_p8(poly8x8_t a) {
1631 // CHECK-LABEL: @test_vcntq_p8(
1632 // CHECK: [[VCNTQ_V_I:%.*]] = call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %a)
1633 // CHECK: ret <16 x i8> [[VCNTQ_V_I]]
1634 poly8x16_t test_vcntq_p8(poly8x16_t a) {
1638 // CHECK-LABEL: @test_vmvn_s8(
1639 // CHECK: [[NEG_I:%.*]] = xor <8 x i8> %a, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
1640 // CHECK: ret <8 x i8> [[NEG_I]]
1641 int8x8_t test_vmvn_s8(int8x8_t a) {
1645 // CHECK-LABEL: @test_vmvnq_s8(
1646 // CHECK: [[NEG_I:%.*]] = xor <16 x i8> %a, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
1647 // CHECK: ret <16 x i8> [[NEG_I]]
1648 int8x16_t test_vmvnq_s8(int8x16_t a) {
1652 // CHECK-LABEL: @test_vmvn_s16(
1653 // CHECK: [[NEG_I:%.*]] = xor <4 x i16> %a, <i16 -1, i16 -1, i16 -1, i16 -1>
1654 // CHECK: ret <4 x i16> [[NEG_I]]
1655 int16x4_t test_vmvn_s16(int16x4_t a) {
1659 // CHECK-LABEL: @test_vmvnq_s16(
1660 // CHECK: [[NEG_I:%.*]] = xor <8 x i16> %a, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
1661 // CHECK: ret <8 x i16> [[NEG_I]]
1662 int16x8_t test_vmvnq_s16(int16x8_t a) {
1663 return vmvnq_s16(a);
1666 // CHECK-LABEL: @test_vmvn_s32(
1667 // CHECK: [[NEG_I:%.*]] = xor <2 x i32> %a, <i32 -1, i32 -1>
1668 // CHECK: ret <2 x i32> [[NEG_I]]
1669 int32x2_t test_vmvn_s32(int32x2_t a) {
1673 // CHECK-LABEL: @test_vmvnq_s32(
1674 // CHECK: [[NEG_I:%.*]] = xor <4 x i32> %a, <i32 -1, i32 -1, i32 -1, i32 -1>
1675 // CHECK: ret <4 x i32> [[NEG_I]]
1676 int32x4_t test_vmvnq_s32(int32x4_t a) {
1677 return vmvnq_s32(a);
1680 // CHECK-LABEL: @test_vmvn_u8(
1681 // CHECK: [[NEG_I:%.*]] = xor <8 x i8> %a, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
1682 // CHECK: ret <8 x i8> [[NEG_I]]
1683 uint8x8_t test_vmvn_u8(uint8x8_t a) {
1687 // CHECK-LABEL: @test_vmvnq_u8(
1688 // CHECK: [[NEG_I:%.*]] = xor <16 x i8> %a, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
1689 // CHECK: ret <16 x i8> [[NEG_I]]
1690 uint8x16_t test_vmvnq_u8(uint8x16_t a) {
1694 // CHECK-LABEL: @test_vmvn_u16(
1695 // CHECK: [[NEG_I:%.*]] = xor <4 x i16> %a, <i16 -1, i16 -1, i16 -1, i16 -1>
1696 // CHECK: ret <4 x i16> [[NEG_I]]
1697 uint16x4_t test_vmvn_u16(uint16x4_t a) {
1701 // CHECK-LABEL: @test_vmvnq_u16(
1702 // CHECK: [[NEG_I:%.*]] = xor <8 x i16> %a, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
1703 // CHECK: ret <8 x i16> [[NEG_I]]
1704 uint16x8_t test_vmvnq_u16(uint16x8_t a) {
1705 return vmvnq_u16(a);
1708 // CHECK-LABEL: @test_vmvn_u32(
1709 // CHECK: [[NEG_I:%.*]] = xor <2 x i32> %a, <i32 -1, i32 -1>
1710 // CHECK: ret <2 x i32> [[NEG_I]]
1711 uint32x2_t test_vmvn_u32(uint32x2_t a) {
1715 // CHECK-LABEL: @test_vmvnq_u32(
1716 // CHECK: [[NEG_I:%.*]] = xor <4 x i32> %a, <i32 -1, i32 -1, i32 -1, i32 -1>
1717 // CHECK: ret <4 x i32> [[NEG_I]]
1718 uint32x4_t test_vmvnq_u32(uint32x4_t a) {
1719 return vmvnq_u32(a);
1722 // CHECK-LABEL: @test_vmvn_p8(
1723 // CHECK: [[NEG_I:%.*]] = xor <8 x i8> %a, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
1724 // CHECK: ret <8 x i8> [[NEG_I]]
1725 poly8x8_t test_vmvn_p8(poly8x8_t a) {
1729 // CHECK-LABEL: @test_vmvnq_p8(
1730 // CHECK: [[NEG_I:%.*]] = xor <16 x i8> %a, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
1731 // CHECK: ret <16 x i8> [[NEG_I]]
1732 poly8x16_t test_vmvnq_p8(poly8x16_t a) {
1736 // CHECK-LABEL: @test_vrbit_s8(
1737 // CHECK: [[VRBIT_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.rbit.v8i8(<8 x i8> %a)
1738 // CHECK: ret <8 x i8> [[VRBIT_I]]
1739 int8x8_t test_vrbit_s8(int8x8_t a) {
1743 // CHECK-LABEL: @test_vrbitq_s8(
1744 // CHECK: [[VRBIT_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.rbit.v16i8(<16 x i8> %a)
1745 // CHECK: ret <16 x i8> [[VRBIT_I]]
1746 int8x16_t test_vrbitq_s8(int8x16_t a) {
1747 return vrbitq_s8(a);
1750 // CHECK-LABEL: @test_vrbit_u8(
1751 // CHECK: [[VRBIT_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.rbit.v8i8(<8 x i8> %a)
1752 // CHECK: ret <8 x i8> [[VRBIT_I]]
1753 uint8x8_t test_vrbit_u8(uint8x8_t a) {
1757 // CHECK-LABEL: @test_vrbitq_u8(
1758 // CHECK: [[VRBIT_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.rbit.v16i8(<16 x i8> %a)
1759 // CHECK: ret <16 x i8> [[VRBIT_I]]
1760 uint8x16_t test_vrbitq_u8(uint8x16_t a) {
1761 return vrbitq_u8(a);
1764 // CHECK-LABEL: @test_vrbit_p8(
1765 // CHECK: [[VRBIT_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.rbit.v8i8(<8 x i8> %a)
1766 // CHECK: ret <8 x i8> [[VRBIT_I]]
1767 poly8x8_t test_vrbit_p8(poly8x8_t a) {
1771 // CHECK-LABEL: @test_vrbitq_p8(
1772 // CHECK: [[VRBIT_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.rbit.v16i8(<16 x i8> %a)
1773 // CHECK: ret <16 x i8> [[VRBIT_I]]
1774 poly8x16_t test_vrbitq_p8(poly8x16_t a) {
1775 return vrbitq_p8(a);
1778 // CHECK-LABEL: @test_vmovn_s16(
1779 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1780 // CHECK: [[VMOVN_I:%.*]] = trunc <8 x i16> %a to <8 x i8>
1781 // CHECK: ret <8 x i8> [[VMOVN_I]]
1782 int8x8_t test_vmovn_s16(int16x8_t a) {
1783 return vmovn_s16(a);
1786 // CHECK-LABEL: @test_vmovn_s32(
1787 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1788 // CHECK: [[VMOVN_I:%.*]] = trunc <4 x i32> %a to <4 x i16>
1789 // CHECK: ret <4 x i16> [[VMOVN_I]]
1790 int16x4_t test_vmovn_s32(int32x4_t a) {
1791 return vmovn_s32(a);
1794 // CHECK-LABEL: @test_vmovn_s64(
1795 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
1796 // CHECK: [[VMOVN_I:%.*]] = trunc <2 x i64> %a to <2 x i32>
1797 // CHECK: ret <2 x i32> [[VMOVN_I]]
1798 int32x2_t test_vmovn_s64(int64x2_t a) {
1799 return vmovn_s64(a);
1802 // CHECK-LABEL: @test_vmovn_u16(
1803 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1804 // CHECK: [[VMOVN_I:%.*]] = trunc <8 x i16> %a to <8 x i8>
1805 // CHECK: ret <8 x i8> [[VMOVN_I]]
1806 uint8x8_t test_vmovn_u16(uint16x8_t a) {
1807 return vmovn_u16(a);
1810 // CHECK-LABEL: @test_vmovn_u32(
1811 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1812 // CHECK: [[VMOVN_I:%.*]] = trunc <4 x i32> %a to <4 x i16>
1813 // CHECK: ret <4 x i16> [[VMOVN_I]]
1814 uint16x4_t test_vmovn_u32(uint32x4_t a) {
1815 return vmovn_u32(a);
1818 // CHECK-LABEL: @test_vmovn_u64(
1819 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
1820 // CHECK: [[VMOVN_I:%.*]] = trunc <2 x i64> %a to <2 x i32>
1821 // CHECK: ret <2 x i32> [[VMOVN_I]]
1822 uint32x2_t test_vmovn_u64(uint64x2_t a) {
1823 return vmovn_u64(a);
1826 // CHECK-LABEL: @test_vmovn_high_s16(
1827 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %b to <16 x i8>
1828 // CHECK: [[VMOVN_I_I:%.*]] = trunc <8 x i16> %b to <8 x i8>
1829 // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <8 x i8> %a, <8 x i8> [[VMOVN_I_I]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
1830 // CHECK: ret <16 x i8> [[SHUFFLE_I_I]]
1831 int8x16_t test_vmovn_high_s16(int8x8_t a, int16x8_t b) {
1832 return vmovn_high_s16(a, b);
1835 // CHECK-LABEL: @test_vmovn_high_s32(
1836 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %b to <16 x i8>
1837 // CHECK: [[VMOVN_I_I:%.*]] = trunc <4 x i32> %b to <4 x i16>
1838 // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <4 x i16> %a, <4 x i16> [[VMOVN_I_I]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1839 // CHECK: ret <8 x i16> [[SHUFFLE_I_I]]
1840 int16x8_t test_vmovn_high_s32(int16x4_t a, int32x4_t b) {
1841 return vmovn_high_s32(a, b);
1844 // CHECK-LABEL: @test_vmovn_high_s64(
1845 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %b to <16 x i8>
1846 // CHECK: [[VMOVN_I_I:%.*]] = trunc <2 x i64> %b to <2 x i32>
1847 // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <2 x i32> %a, <2 x i32> [[VMOVN_I_I]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1848 // CHECK: ret <4 x i32> [[SHUFFLE_I_I]]
1849 int32x4_t test_vmovn_high_s64(int32x2_t a, int64x2_t b) {
1850 return vmovn_high_s64(a, b);
1853 // CHECK-LABEL: @test_vmovn_high_u16(
1854 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %b to <16 x i8>
1855 // CHECK: [[VMOVN_I_I:%.*]] = trunc <8 x i16> %b to <8 x i8>
1856 // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <8 x i8> %a, <8 x i8> [[VMOVN_I_I]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
1857 // CHECK: ret <16 x i8> [[SHUFFLE_I_I]]
1858 int8x16_t test_vmovn_high_u16(int8x8_t a, int16x8_t b) {
1859 return vmovn_high_u16(a, b);
1862 // CHECK-LABEL: @test_vmovn_high_u32(
1863 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %b to <16 x i8>
1864 // CHECK: [[VMOVN_I_I:%.*]] = trunc <4 x i32> %b to <4 x i16>
1865 // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <4 x i16> %a, <4 x i16> [[VMOVN_I_I]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1866 // CHECK: ret <8 x i16> [[SHUFFLE_I_I]]
1867 int16x8_t test_vmovn_high_u32(int16x4_t a, int32x4_t b) {
1868 return vmovn_high_u32(a, b);
1871 // CHECK-LABEL: @test_vmovn_high_u64(
1872 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %b to <16 x i8>
1873 // CHECK: [[VMOVN_I_I:%.*]] = trunc <2 x i64> %b to <2 x i32>
1874 // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <2 x i32> %a, <2 x i32> [[VMOVN_I_I]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1875 // CHECK: ret <4 x i32> [[SHUFFLE_I_I]]
1876 int32x4_t test_vmovn_high_u64(int32x2_t a, int64x2_t b) {
1877 return vmovn_high_u64(a, b);
1880 // CHECK-LABEL: @test_vqmovun_s16(
1881 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1882 // CHECK: [[VQMOVUN_V1_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqxtun.v8i8(<8 x i16> %a)
1883 // CHECK: ret <8 x i8> [[VQMOVUN_V1_I]]
1884 int8x8_t test_vqmovun_s16(int16x8_t a) {
1885 return vqmovun_s16(a);
1888 // CHECK-LABEL: @test_vqmovun_s32(
1889 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1890 // CHECK: [[VQMOVUN_V1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqxtun.v4i16(<4 x i32> %a)
1891 // CHECK: [[VQMOVUN_V2_I:%.*]] = bitcast <4 x i16> [[VQMOVUN_V1_I]] to <8 x i8>
1892 // CHECK: ret <4 x i16> [[VQMOVUN_V1_I]]
1893 int16x4_t test_vqmovun_s32(int32x4_t a) {
1894 return vqmovun_s32(a);
1897 // CHECK-LABEL: @test_vqmovun_s64(
1898 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
1899 // CHECK: [[VQMOVUN_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqxtun.v2i32(<2 x i64> %a)
1900 // CHECK: [[VQMOVUN_V2_I:%.*]] = bitcast <2 x i32> [[VQMOVUN_V1_I]] to <8 x i8>
1901 // CHECK: ret <2 x i32> [[VQMOVUN_V1_I]]
1902 int32x2_t test_vqmovun_s64(int64x2_t a) {
1903 return vqmovun_s64(a);
1906 // CHECK-LABEL: @test_vqmovun_high_s16(
1907 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %b to <16 x i8>
1908 // CHECK: [[VQMOVUN_V1_I_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqxtun.v8i8(<8 x i16> %b)
1909 // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <8 x i8> %a, <8 x i8> [[VQMOVUN_V1_I_I]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
1910 // CHECK: ret <16 x i8> [[SHUFFLE_I_I]]
1911 int8x16_t test_vqmovun_high_s16(int8x8_t a, int16x8_t b) {
1912 return vqmovun_high_s16(a, b);
1915 // CHECK-LABEL: @test_vqmovun_high_s32(
1916 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %b to <16 x i8>
1917 // CHECK: [[VQMOVUN_V1_I_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqxtun.v4i16(<4 x i32> %b)
1918 // CHECK: [[VQMOVUN_V2_I_I:%.*]] = bitcast <4 x i16> [[VQMOVUN_V1_I_I]] to <8 x i8>
1919 // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <4 x i16> %a, <4 x i16> [[VQMOVUN_V1_I_I]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1920 // CHECK: ret <8 x i16> [[SHUFFLE_I_I]]
1921 int16x8_t test_vqmovun_high_s32(int16x4_t a, int32x4_t b) {
1922 return vqmovun_high_s32(a, b);
1925 // CHECK-LABEL: @test_vqmovun_high_s64(
1926 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %b to <16 x i8>
1927 // CHECK: [[VQMOVUN_V1_I_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqxtun.v2i32(<2 x i64> %b)
1928 // CHECK: [[VQMOVUN_V2_I_I:%.*]] = bitcast <2 x i32> [[VQMOVUN_V1_I_I]] to <8 x i8>
1929 // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <2 x i32> %a, <2 x i32> [[VQMOVUN_V1_I_I]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1930 // CHECK: ret <4 x i32> [[SHUFFLE_I_I]]
1931 int32x4_t test_vqmovun_high_s64(int32x2_t a, int64x2_t b) {
1932 return vqmovun_high_s64(a, b);
1935 // CHECK-LABEL: @test_vqmovn_s16(
1936 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1937 // CHECK: [[VQMOVN_V1_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqxtn.v8i8(<8 x i16> %a)
1938 // CHECK: ret <8 x i8> [[VQMOVN_V1_I]]
1939 int8x8_t test_vqmovn_s16(int16x8_t a) {
1940 return vqmovn_s16(a);
1943 // CHECK-LABEL: @test_vqmovn_s32(
1944 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1945 // CHECK: [[VQMOVN_V1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqxtn.v4i16(<4 x i32> %a)
1946 // CHECK: [[VQMOVN_V2_I:%.*]] = bitcast <4 x i16> [[VQMOVN_V1_I]] to <8 x i8>
1947 // CHECK: ret <4 x i16> [[VQMOVN_V1_I]]
1948 int16x4_t test_vqmovn_s32(int32x4_t a) {
1949 return vqmovn_s32(a);
1952 // CHECK-LABEL: @test_vqmovn_s64(
1953 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
1954 // CHECK: [[VQMOVN_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqxtn.v2i32(<2 x i64> %a)
1955 // CHECK: [[VQMOVN_V2_I:%.*]] = bitcast <2 x i32> [[VQMOVN_V1_I]] to <8 x i8>
1956 // CHECK: ret <2 x i32> [[VQMOVN_V1_I]]
1957 int32x2_t test_vqmovn_s64(int64x2_t a) {
1958 return vqmovn_s64(a);
1961 // CHECK-LABEL: @test_vqmovn_high_s16(
1962 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %b to <16 x i8>
1963 // CHECK: [[VQMOVN_V1_I_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqxtn.v8i8(<8 x i16> %b)
1964 // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <8 x i8> %a, <8 x i8> [[VQMOVN_V1_I_I]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
1965 // CHECK: ret <16 x i8> [[SHUFFLE_I_I]]
1966 int8x16_t test_vqmovn_high_s16(int8x8_t a, int16x8_t b) {
1967 return vqmovn_high_s16(a, b);
1970 // CHECK-LABEL: @test_vqmovn_high_s32(
1971 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %b to <16 x i8>
1972 // CHECK: [[VQMOVN_V1_I_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqxtn.v4i16(<4 x i32> %b)
1973 // CHECK: [[VQMOVN_V2_I_I:%.*]] = bitcast <4 x i16> [[VQMOVN_V1_I_I]] to <8 x i8>
1974 // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <4 x i16> %a, <4 x i16> [[VQMOVN_V1_I_I]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1975 // CHECK: ret <8 x i16> [[SHUFFLE_I_I]]
1976 int16x8_t test_vqmovn_high_s32(int16x4_t a, int32x4_t b) {
1977 return vqmovn_high_s32(a, b);
1980 // CHECK-LABEL: @test_vqmovn_high_s64(
1981 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %b to <16 x i8>
1982 // CHECK: [[VQMOVN_V1_I_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqxtn.v2i32(<2 x i64> %b)
1983 // CHECK: [[VQMOVN_V2_I_I:%.*]] = bitcast <2 x i32> [[VQMOVN_V1_I_I]] to <8 x i8>
1984 // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <2 x i32> %a, <2 x i32> [[VQMOVN_V1_I_I]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1985 // CHECK: ret <4 x i32> [[SHUFFLE_I_I]]
1986 int32x4_t test_vqmovn_high_s64(int32x2_t a, int64x2_t b) {
1987 return vqmovn_high_s64(a, b);
1990 // CHECK-LABEL: @test_vqmovn_u16(
1991 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1992 // CHECK: [[VQMOVN_V1_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqxtn.v8i8(<8 x i16> %a)
1993 // CHECK: ret <8 x i8> [[VQMOVN_V1_I]]
1994 uint8x8_t test_vqmovn_u16(uint16x8_t a) {
1995 return vqmovn_u16(a);
1998 // CHECK-LABEL: @test_vqmovn_u32(
1999 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
2000 // CHECK: [[VQMOVN_V1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqxtn.v4i16(<4 x i32> %a)
2001 // CHECK: [[VQMOVN_V2_I:%.*]] = bitcast <4 x i16> [[VQMOVN_V1_I]] to <8 x i8>
2002 // CHECK: ret <4 x i16> [[VQMOVN_V1_I]]
2003 uint16x4_t test_vqmovn_u32(uint32x4_t a) {
2004 return vqmovn_u32(a);
2007 // CHECK-LABEL: @test_vqmovn_u64(
2008 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
2009 // CHECK: [[VQMOVN_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqxtn.v2i32(<2 x i64> %a)
2010 // CHECK: [[VQMOVN_V2_I:%.*]] = bitcast <2 x i32> [[VQMOVN_V1_I]] to <8 x i8>
2011 // CHECK: ret <2 x i32> [[VQMOVN_V1_I]]
2012 uint32x2_t test_vqmovn_u64(uint64x2_t a) {
2013 return vqmovn_u64(a);
2016 // CHECK-LABEL: @test_vqmovn_high_u16(
2017 // CHECK: [[TMP0:%.*]] = bitcast <8 x i16> %b to <16 x i8>
2018 // CHECK: [[VQMOVN_V1_I_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqxtn.v8i8(<8 x i16> %b)
2019 // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <8 x i8> %a, <8 x i8> [[VQMOVN_V1_I_I]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
2020 // CHECK: ret <16 x i8> [[SHUFFLE_I_I]]
2021 uint8x16_t test_vqmovn_high_u16(uint8x8_t a, uint16x8_t b) {
2022 return vqmovn_high_u16(a, b);
2025 // CHECK-LABEL: @test_vqmovn_high_u32(
2026 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %b to <16 x i8>
2027 // CHECK: [[VQMOVN_V1_I_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqxtn.v4i16(<4 x i32> %b)
2028 // CHECK: [[VQMOVN_V2_I_I:%.*]] = bitcast <4 x i16> [[VQMOVN_V1_I_I]] to <8 x i8>
2029 // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <4 x i16> %a, <4 x i16> [[VQMOVN_V1_I_I]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
2030 // CHECK: ret <8 x i16> [[SHUFFLE_I_I]]
2031 uint16x8_t test_vqmovn_high_u32(uint16x4_t a, uint32x4_t b) {
2032 return vqmovn_high_u32(a, b);
2035 // CHECK-LABEL: @test_vqmovn_high_u64(
2036 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %b to <16 x i8>
2037 // CHECK: [[VQMOVN_V1_I_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqxtn.v2i32(<2 x i64> %b)
2038 // CHECK: [[VQMOVN_V2_I_I:%.*]] = bitcast <2 x i32> [[VQMOVN_V1_I_I]] to <8 x i8>
2039 // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <2 x i32> %a, <2 x i32> [[VQMOVN_V1_I_I]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
2040 // CHECK: ret <4 x i32> [[SHUFFLE_I_I]]
2041 uint32x4_t test_vqmovn_high_u64(uint32x2_t a, uint64x2_t b) {
2042 return vqmovn_high_u64(a, b);
2045 // CHECK-LABEL: @test_vshll_n_s8(
2046 // CHECK: [[TMP0:%.*]] = sext <8 x i8> %a to <8 x i16>
2047 // CHECK: [[VSHLL_N:%.*]] = shl <8 x i16> [[TMP0]], <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
2048 // CHECK: ret <8 x i16> [[VSHLL_N]]
2049 int16x8_t test_vshll_n_s8(int8x8_t a) {
2050 return vshll_n_s8(a, 8);
2053 // CHECK-LABEL: @test_vshll_n_s16(
2054 // CHECK: [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
2055 // CHECK: [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
2056 // CHECK: [[TMP2:%.*]] = sext <4 x i16> [[TMP1]] to <4 x i32>
2057 // CHECK: [[VSHLL_N:%.*]] = shl <4 x i32> [[TMP2]], <i32 16, i32 16, i32 16, i32 16>
2058 // CHECK: ret <4 x i32> [[VSHLL_N]]
2059 int32x4_t test_vshll_n_s16(int16x4_t a) {
2060 return vshll_n_s16(a, 16);
2063 // CHECK-LABEL: @test_vshll_n_s32(
2064 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
2065 // CHECK: [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
2066 // CHECK: [[TMP2:%.*]] = sext <2 x i32> [[TMP1]] to <2 x i64>
2067 // CHECK: [[VSHLL_N:%.*]] = shl <2 x i64> [[TMP2]], <i64 32, i64 32>
2068 // CHECK: ret <2 x i64> [[VSHLL_N]]
2069 int64x2_t test_vshll_n_s32(int32x2_t a) {
2070 return vshll_n_s32(a, 32);
2073 // CHECK-LABEL: @test_vshll_n_u8(
2074 // CHECK: [[TMP0:%.*]] = zext <8 x i8> %a to <8 x i16>
2075 // CHECK: [[VSHLL_N:%.*]] = shl <8 x i16> [[TMP0]], <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
2076 // CHECK: ret <8 x i16> [[VSHLL_N]]
2077 uint16x8_t test_vshll_n_u8(uint8x8_t a) {
2078 return vshll_n_u8(a, 8);
2081 // CHECK-LABEL: @test_vshll_n_u16(
2082 // CHECK: [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
2083 // CHECK: [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
2084 // CHECK: [[TMP2:%.*]] = zext <4 x i16> [[TMP1]] to <4 x i32>
2085 // CHECK: [[VSHLL_N:%.*]] = shl <4 x i32> [[TMP2]], <i32 16, i32 16, i32 16, i32 16>
2086 // CHECK: ret <4 x i32> [[VSHLL_N]]
2087 uint32x4_t test_vshll_n_u16(uint16x4_t a) {
2088 return vshll_n_u16(a, 16);
2091 // CHECK-LABEL: @test_vshll_n_u32(
2092 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
2093 // CHECK: [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
2094 // CHECK: [[TMP2:%.*]] = zext <2 x i32> [[TMP1]] to <2 x i64>
2095 // CHECK: [[VSHLL_N:%.*]] = shl <2 x i64> [[TMP2]], <i64 32, i64 32>
2096 // CHECK: ret <2 x i64> [[VSHLL_N]]
2097 uint64x2_t test_vshll_n_u32(uint32x2_t a) {
2098 return vshll_n_u32(a, 32);
2101 // CHECK-LABEL: @test_vshll_high_n_s8(
2102 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <16 x i8> %a, <16 x i8> %a, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
2103 // CHECK: [[TMP0:%.*]] = sext <8 x i8> [[SHUFFLE_I]] to <8 x i16>
2104 // CHECK: [[VSHLL_N:%.*]] = shl <8 x i16> [[TMP0]], <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
2105 // CHECK: ret <8 x i16> [[VSHLL_N]]
2106 int16x8_t test_vshll_high_n_s8(int8x16_t a) {
2107 return vshll_high_n_s8(a, 8);
2110 // CHECK-LABEL: @test_vshll_high_n_s16(
2111 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <8 x i16> %a, <8 x i16> %a, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
2112 // CHECK: [[TMP0:%.*]] = bitcast <4 x i16> [[SHUFFLE_I]] to <8 x i8>
2113 // CHECK: [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
2114 // CHECK: [[TMP2:%.*]] = sext <4 x i16> [[TMP1]] to <4 x i32>
2115 // CHECK: [[VSHLL_N:%.*]] = shl <4 x i32> [[TMP2]], <i32 16, i32 16, i32 16, i32 16>
2116 // CHECK: ret <4 x i32> [[VSHLL_N]]
2117 int32x4_t test_vshll_high_n_s16(int16x8_t a) {
2118 return vshll_high_n_s16(a, 16);
2121 // CHECK-LABEL: @test_vshll_high_n_s32(
2122 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <4 x i32> %a, <4 x i32> %a, <2 x i32> <i32 2, i32 3>
2123 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> [[SHUFFLE_I]] to <8 x i8>
2124 // CHECK: [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
2125 // CHECK: [[TMP2:%.*]] = sext <2 x i32> [[TMP1]] to <2 x i64>
2126 // CHECK: [[VSHLL_N:%.*]] = shl <2 x i64> [[TMP2]], <i64 32, i64 32>
2127 // CHECK: ret <2 x i64> [[VSHLL_N]]
2128 int64x2_t test_vshll_high_n_s32(int32x4_t a) {
2129 return vshll_high_n_s32(a, 32);
2132 // CHECK-LABEL: @test_vshll_high_n_u8(
2133 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <16 x i8> %a, <16 x i8> %a, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
2134 // CHECK: [[TMP0:%.*]] = zext <8 x i8> [[SHUFFLE_I]] to <8 x i16>
2135 // CHECK: [[VSHLL_N:%.*]] = shl <8 x i16> [[TMP0]], <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
2136 // CHECK: ret <8 x i16> [[VSHLL_N]]
2137 uint16x8_t test_vshll_high_n_u8(uint8x16_t a) {
2138 return vshll_high_n_u8(a, 8);
2141 // CHECK-LABEL: @test_vshll_high_n_u16(
2142 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <8 x i16> %a, <8 x i16> %a, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
2143 // CHECK: [[TMP0:%.*]] = bitcast <4 x i16> [[SHUFFLE_I]] to <8 x i8>
2144 // CHECK: [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
2145 // CHECK: [[TMP2:%.*]] = zext <4 x i16> [[TMP1]] to <4 x i32>
2146 // CHECK: [[VSHLL_N:%.*]] = shl <4 x i32> [[TMP2]], <i32 16, i32 16, i32 16, i32 16>
2147 // CHECK: ret <4 x i32> [[VSHLL_N]]
2148 uint32x4_t test_vshll_high_n_u16(uint16x8_t a) {
2149 return vshll_high_n_u16(a, 16);
2152 // CHECK-LABEL: @test_vshll_high_n_u32(
2153 // CHECK: [[SHUFFLE_I:%.*]] = shufflevector <4 x i32> %a, <4 x i32> %a, <2 x i32> <i32 2, i32 3>
2154 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> [[SHUFFLE_I]] to <8 x i8>
2155 // CHECK: [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
2156 // CHECK: [[TMP2:%.*]] = zext <2 x i32> [[TMP1]] to <2 x i64>
2157 // CHECK: [[VSHLL_N:%.*]] = shl <2 x i64> [[TMP2]], <i64 32, i64 32>
2158 // CHECK: ret <2 x i64> [[VSHLL_N]]
2159 uint64x2_t test_vshll_high_n_u32(uint32x4_t a) {
2160 return vshll_high_n_u32(a, 32);
2163 // CHECK-LABEL: @test_vcvt_f16_f32(
2164 // CHECK: [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2165 // CHECK: [[VCVT_F16_F321_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.vcvtfp2hf(<4 x float> %a)
2166 // CHECK: [[VCVT_F16_F322_I:%.*]] = bitcast <4 x i16> [[VCVT_F16_F321_I]] to <8 x i8>
2167 // CHECK: [[TMP1:%.*]] = bitcast <8 x i8> [[VCVT_F16_F322_I]] to <4 x half>
2168 // CHECK: ret <4 x half> [[TMP1]]
2169 float16x4_t test_vcvt_f16_f32(float32x4_t a) {
2170 return vcvt_f16_f32(a);
2173 // CHECK-LABEL: @test_vcvt_high_f16_f32(
2174 // CHECK: [[TMP0:%.*]] = bitcast <4 x float> %b to <16 x i8>
2175 // CHECK: [[VCVT_F16_F321_I_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.vcvtfp2hf(<4 x float> %b)
2176 // CHECK: [[VCVT_F16_F322_I_I:%.*]] = bitcast <4 x i16> [[VCVT_F16_F321_I_I]] to <8 x i8>
2177 // CHECK: [[TMP1:%.*]] = bitcast <8 x i8> [[VCVT_F16_F322_I_I]] to <4 x half>
2178 // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <4 x half> %a, <4 x half> [[TMP1]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
2179 // CHECK: ret <8 x half> [[SHUFFLE_I_I]]
2180 float16x8_t test_vcvt_high_f16_f32(float16x4_t a, float32x4_t b) {
2181 return vcvt_high_f16_f32(a, b);
2184 // CHECK-LABEL: @test_vcvt_f32_f64(
2185 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2186 // CHECK: [[VCVT_I:%.*]] = fptrunc <2 x double> %a to <2 x float>
2187 // CHECK: ret <2 x float> [[VCVT_I]]
2188 float32x2_t test_vcvt_f32_f64(float64x2_t a) {
2189 return vcvt_f32_f64(a);
2192 // CHECK-LABEL: @test_vcvt_high_f32_f64(
2193 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %b to <16 x i8>
2194 // CHECK: [[VCVT_I_I:%.*]] = fptrunc <2 x double> %b to <2 x float>
2195 // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <2 x float> %a, <2 x float> [[VCVT_I_I]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
2196 // CHECK: ret <4 x float> [[SHUFFLE_I_I]]
2197 float32x4_t test_vcvt_high_f32_f64(float32x2_t a, float64x2_t b) {
2198 return vcvt_high_f32_f64(a, b);
2201 // CHECK-LABEL: @test_vcvtx_f32_f64(
2202 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2203 // CHECK: [[VCVTX_F32_V1_I:%.*]] = call <2 x float> @llvm.aarch64.neon.fcvtxn.v2f32.v2f64(<2 x double> %a)
2204 // CHECK: ret <2 x float> [[VCVTX_F32_V1_I]]
2205 float32x2_t test_vcvtx_f32_f64(float64x2_t a) {
2206 return vcvtx_f32_f64(a);
2209 // CHECK-LABEL: @test_vcvtx_high_f32_f64(
2210 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %b to <16 x i8>
2211 // CHECK: [[VCVTX_F32_V1_I_I:%.*]] = call <2 x float> @llvm.aarch64.neon.fcvtxn.v2f32.v2f64(<2 x double> %b)
2212 // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <2 x float> %a, <2 x float> [[VCVTX_F32_V1_I_I]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
2213 // CHECK: ret <4 x float> [[SHUFFLE_I_I]]
2214 float32x4_t test_vcvtx_high_f32_f64(float32x2_t a, float64x2_t b) {
2215 return vcvtx_high_f32_f64(a, b);
2218 // CHECK-LABEL: @test_vcvt_f32_f16(
2219 // CHECK: [[TMP0:%.*]] = bitcast <4 x half> %a to <8 x i8>
2220 // CHECK: [[VCVT_F32_F16_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
2221 // CHECK: [[VCVT_F32_F161_I:%.*]] = call <4 x float> @llvm.aarch64.neon.vcvthf2fp(<4 x i16> [[VCVT_F32_F16_I]])
2222 // CHECK: [[VCVT_F32_F162_I:%.*]] = bitcast <4 x float> [[VCVT_F32_F161_I]] to <16 x i8>
2223 // CHECK: ret <4 x float> [[VCVT_F32_F161_I]]
2224 float32x4_t test_vcvt_f32_f16(float16x4_t a) {
2225 return vcvt_f32_f16(a);
2228 // CHECK-LABEL: @test_vcvt_high_f32_f16(
2229 // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <8 x half> %a, <8 x half> %a, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
2230 // CHECK: [[TMP0:%.*]] = bitcast <4 x half> [[SHUFFLE_I_I]] to <8 x i8>
2231 // CHECK: [[VCVT_F32_F16_I_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
2232 // CHECK: [[VCVT_F32_F161_I_I:%.*]] = call <4 x float> @llvm.aarch64.neon.vcvthf2fp(<4 x i16> [[VCVT_F32_F16_I_I]])
2233 // CHECK: [[VCVT_F32_F162_I_I:%.*]] = bitcast <4 x float> [[VCVT_F32_F161_I_I]] to <16 x i8>
2234 // CHECK: ret <4 x float> [[VCVT_F32_F161_I_I]]
2235 float32x4_t test_vcvt_high_f32_f16(float16x8_t a) {
2236 return vcvt_high_f32_f16(a);
2239 // CHECK-LABEL: @test_vcvt_f64_f32(
2240 // CHECK: [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2241 // CHECK: [[VCVT_I:%.*]] = fpext <2 x float> %a to <2 x double>
2242 // CHECK: ret <2 x double> [[VCVT_I]]
2243 float64x2_t test_vcvt_f64_f32(float32x2_t a) {
2244 return vcvt_f64_f32(a);
2247 // CHECK-LABEL: @test_vcvt_high_f64_f32(
2248 // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <4 x float> %a, <4 x float> %a, <2 x i32> <i32 2, i32 3>
2249 // CHECK: [[TMP0:%.*]] = bitcast <2 x float> [[SHUFFLE_I_I]] to <8 x i8>
2250 // CHECK: [[VCVT_I_I:%.*]] = fpext <2 x float> [[SHUFFLE_I_I]] to <2 x double>
2251 // CHECK: ret <2 x double> [[VCVT_I_I]]
2252 float64x2_t test_vcvt_high_f64_f32(float32x4_t a) {
2253 return vcvt_high_f64_f32(a);
2256 // CHECK-LABEL: @test_vrndnq_f64(
2257 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2258 // CHECK: [[VRNDN1_I:%.*]] = call <2 x double> @llvm.aarch64.neon.frintn.v2f64(<2 x double> %a)
2259 // CHECK: ret <2 x double> [[VRNDN1_I]]
2260 float64x2_t test_vrndnq_f64(float64x2_t a) {
2261 return vrndnq_f64(a);
2264 // CHECK-LABEL: @test_vrndaq_f64(
2265 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2266 // CHECK: [[VRNDA1_I:%.*]] = call <2 x double> @llvm.round.v2f64(<2 x double> %a)
2267 // CHECK: ret <2 x double> [[VRNDA1_I]]
2268 float64x2_t test_vrndaq_f64(float64x2_t a) {
2269 return vrndaq_f64(a);
2272 // CHECK-LABEL: @test_vrndpq_f64(
2273 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2274 // CHECK: [[VRNDP1_I:%.*]] = call <2 x double> @llvm.ceil.v2f64(<2 x double> %a)
2275 // CHECK: ret <2 x double> [[VRNDP1_I]]
2276 float64x2_t test_vrndpq_f64(float64x2_t a) {
2277 return vrndpq_f64(a);
2280 // CHECK-LABEL: @test_vrndmq_f64(
2281 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2282 // CHECK: [[VRNDM1_I:%.*]] = call <2 x double> @llvm.floor.v2f64(<2 x double> %a)
2283 // CHECK: ret <2 x double> [[VRNDM1_I]]
2284 float64x2_t test_vrndmq_f64(float64x2_t a) {
2285 return vrndmq_f64(a);
2288 // CHECK-LABEL: @test_vrndxq_f64(
2289 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2290 // CHECK: [[VRNDX1_I:%.*]] = call <2 x double> @llvm.rint.v2f64(<2 x double> %a)
2291 // CHECK: ret <2 x double> [[VRNDX1_I]]
2292 float64x2_t test_vrndxq_f64(float64x2_t a) {
2293 return vrndxq_f64(a);
2296 // CHECK-LABEL: @test_vrndq_f64(
2297 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2298 // CHECK: [[VRNDZ1_I:%.*]] = call <2 x double> @llvm.trunc.v2f64(<2 x double> %a)
2299 // CHECK: ret <2 x double> [[VRNDZ1_I]]
2300 float64x2_t test_vrndq_f64(float64x2_t a) {
2301 return vrndq_f64(a);
2304 // CHECK-LABEL: @test_vrndiq_f64(
2305 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2306 // CHECK: [[VRNDI1_I:%.*]] = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %a)
2307 // CHECK: ret <2 x double> [[VRNDI1_I]]
2308 float64x2_t test_vrndiq_f64(float64x2_t a) {
2309 return vrndiq_f64(a);
2312 // CHECK-LABEL: @test_vcvt_s32_f32(
2313 // CHECK: [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2314 // CHECK: [[TMP1:%.*]] = fptosi <2 x float> %a to <2 x i32>
2315 // CHECK: ret <2 x i32> [[TMP1]]
2316 int32x2_t test_vcvt_s32_f32(float32x2_t a) {
2317 return vcvt_s32_f32(a);
2320 // CHECK-LABEL: @test_vcvtq_s32_f32(
2321 // CHECK: [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2322 // CHECK: [[TMP1:%.*]] = fptosi <4 x float> %a to <4 x i32>
2323 // CHECK: ret <4 x i32> [[TMP1]]
2324 int32x4_t test_vcvtq_s32_f32(float32x4_t a) {
2325 return vcvtq_s32_f32(a);
2328 // CHECK-LABEL: @test_vcvtq_s64_f64(
2329 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2330 // CHECK: [[TMP1:%.*]] = fptosi <2 x double> %a to <2 x i64>
2331 // CHECK: ret <2 x i64> [[TMP1]]
2332 int64x2_t test_vcvtq_s64_f64(float64x2_t a) {
2333 return vcvtq_s64_f64(a);
2336 // CHECK-LABEL: @test_vcvt_u32_f32(
2337 // CHECK: [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2338 // CHECK: [[TMP1:%.*]] = fptoui <2 x float> %a to <2 x i32>
2339 // CHECK: ret <2 x i32> [[TMP1]]
2340 uint32x2_t test_vcvt_u32_f32(float32x2_t a) {
2341 return vcvt_u32_f32(a);
2344 // CHECK-LABEL: @test_vcvtq_u32_f32(
2345 // CHECK: [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2346 // CHECK: [[TMP1:%.*]] = fptoui <4 x float> %a to <4 x i32>
2347 // CHECK: ret <4 x i32> [[TMP1]]
2348 uint32x4_t test_vcvtq_u32_f32(float32x4_t a) {
2349 return vcvtq_u32_f32(a);
2352 // CHECK-LABEL: @test_vcvtq_u64_f64(
2353 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2354 // CHECK: [[TMP1:%.*]] = fptoui <2 x double> %a to <2 x i64>
2355 // CHECK: ret <2 x i64> [[TMP1]]
2356 uint64x2_t test_vcvtq_u64_f64(float64x2_t a) {
2357 return vcvtq_u64_f64(a);
2360 // CHECK-LABEL: @test_vcvtn_s32_f32(
2361 // CHECK: [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2362 // CHECK: [[VCVTN1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtns.v2i32.v2f32(<2 x float> %a)
2363 // CHECK: ret <2 x i32> [[VCVTN1_I]]
2364 int32x2_t test_vcvtn_s32_f32(float32x2_t a) {
2365 return vcvtn_s32_f32(a);
2368 // CHECK-LABEL: @test_vcvtnq_s32_f32(
2369 // CHECK: [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2370 // CHECK: [[VCVTN1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtns.v4i32.v4f32(<4 x float> %a)
2371 // CHECK: ret <4 x i32> [[VCVTN1_I]]
2372 int32x4_t test_vcvtnq_s32_f32(float32x4_t a) {
2373 return vcvtnq_s32_f32(a);
2376 // CHECK-LABEL: @test_vcvtnq_s64_f64(
2377 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2378 // CHECK: [[VCVTN1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtns.v2i64.v2f64(<2 x double> %a)
2379 // CHECK: ret <2 x i64> [[VCVTN1_I]]
2380 int64x2_t test_vcvtnq_s64_f64(float64x2_t a) {
2381 return vcvtnq_s64_f64(a);
2384 // CHECK-LABEL: @test_vcvtn_u32_f32(
2385 // CHECK: [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2386 // CHECK: [[VCVTN1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtnu.v2i32.v2f32(<2 x float> %a)
2387 // CHECK: ret <2 x i32> [[VCVTN1_I]]
2388 uint32x2_t test_vcvtn_u32_f32(float32x2_t a) {
2389 return vcvtn_u32_f32(a);
2392 // CHECK-LABEL: @test_vcvtnq_u32_f32(
2393 // CHECK: [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2394 // CHECK: [[VCVTN1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtnu.v4i32.v4f32(<4 x float> %a)
2395 // CHECK: ret <4 x i32> [[VCVTN1_I]]
2396 uint32x4_t test_vcvtnq_u32_f32(float32x4_t a) {
2397 return vcvtnq_u32_f32(a);
2400 // CHECK-LABEL: @test_vcvtnq_u64_f64(
2401 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2402 // CHECK: [[VCVTN1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtnu.v2i64.v2f64(<2 x double> %a)
2403 // CHECK: ret <2 x i64> [[VCVTN1_I]]
2404 uint64x2_t test_vcvtnq_u64_f64(float64x2_t a) {
2405 return vcvtnq_u64_f64(a);
2408 // CHECK-LABEL: @test_vcvtp_s32_f32(
2409 // CHECK: [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2410 // CHECK: [[VCVTP1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtps.v2i32.v2f32(<2 x float> %a)
2411 // CHECK: ret <2 x i32> [[VCVTP1_I]]
2412 int32x2_t test_vcvtp_s32_f32(float32x2_t a) {
2413 return vcvtp_s32_f32(a);
2416 // CHECK-LABEL: @test_vcvtpq_s32_f32(
2417 // CHECK: [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2418 // CHECK: [[VCVTP1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtps.v4i32.v4f32(<4 x float> %a)
2419 // CHECK: ret <4 x i32> [[VCVTP1_I]]
2420 int32x4_t test_vcvtpq_s32_f32(float32x4_t a) {
2421 return vcvtpq_s32_f32(a);
2424 // CHECK-LABEL: @test_vcvtpq_s64_f64(
2425 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2426 // CHECK: [[VCVTP1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtps.v2i64.v2f64(<2 x double> %a)
2427 // CHECK: ret <2 x i64> [[VCVTP1_I]]
2428 int64x2_t test_vcvtpq_s64_f64(float64x2_t a) {
2429 return vcvtpq_s64_f64(a);
2432 // CHECK-LABEL: @test_vcvtp_u32_f32(
2433 // CHECK: [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2434 // CHECK: [[VCVTP1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtpu.v2i32.v2f32(<2 x float> %a)
2435 // CHECK: ret <2 x i32> [[VCVTP1_I]]
2436 uint32x2_t test_vcvtp_u32_f32(float32x2_t a) {
2437 return vcvtp_u32_f32(a);
2440 // CHECK-LABEL: @test_vcvtpq_u32_f32(
2441 // CHECK: [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2442 // CHECK: [[VCVTP1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtpu.v4i32.v4f32(<4 x float> %a)
2443 // CHECK: ret <4 x i32> [[VCVTP1_I]]
2444 uint32x4_t test_vcvtpq_u32_f32(float32x4_t a) {
2445 return vcvtpq_u32_f32(a);
2448 // CHECK-LABEL: @test_vcvtpq_u64_f64(
2449 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2450 // CHECK: [[VCVTP1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtpu.v2i64.v2f64(<2 x double> %a)
2451 // CHECK: ret <2 x i64> [[VCVTP1_I]]
2452 uint64x2_t test_vcvtpq_u64_f64(float64x2_t a) {
2453 return vcvtpq_u64_f64(a);
2456 // CHECK-LABEL: @test_vcvtm_s32_f32(
2457 // CHECK: [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2458 // CHECK: [[VCVTM1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtms.v2i32.v2f32(<2 x float> %a)
2459 // CHECK: ret <2 x i32> [[VCVTM1_I]]
2460 int32x2_t test_vcvtm_s32_f32(float32x2_t a) {
2461 return vcvtm_s32_f32(a);
2464 // CHECK-LABEL: @test_vcvtmq_s32_f32(
2465 // CHECK: [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2466 // CHECK: [[VCVTM1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtms.v4i32.v4f32(<4 x float> %a)
2467 // CHECK: ret <4 x i32> [[VCVTM1_I]]
2468 int32x4_t test_vcvtmq_s32_f32(float32x4_t a) {
2469 return vcvtmq_s32_f32(a);
2472 // CHECK-LABEL: @test_vcvtmq_s64_f64(
2473 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2474 // CHECK: [[VCVTM1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtms.v2i64.v2f64(<2 x double> %a)
2475 // CHECK: ret <2 x i64> [[VCVTM1_I]]
2476 int64x2_t test_vcvtmq_s64_f64(float64x2_t a) {
2477 return vcvtmq_s64_f64(a);
2480 // CHECK-LABEL: @test_vcvtm_u32_f32(
2481 // CHECK: [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2482 // CHECK: [[VCVTM1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtmu.v2i32.v2f32(<2 x float> %a)
2483 // CHECK: ret <2 x i32> [[VCVTM1_I]]
2484 uint32x2_t test_vcvtm_u32_f32(float32x2_t a) {
2485 return vcvtm_u32_f32(a);
2488 // CHECK-LABEL: @test_vcvtmq_u32_f32(
2489 // CHECK: [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2490 // CHECK: [[VCVTM1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtmu.v4i32.v4f32(<4 x float> %a)
2491 // CHECK: ret <4 x i32> [[VCVTM1_I]]
2492 uint32x4_t test_vcvtmq_u32_f32(float32x4_t a) {
2493 return vcvtmq_u32_f32(a);
2496 // CHECK-LABEL: @test_vcvtmq_u64_f64(
2497 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2498 // CHECK: [[VCVTM1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtmu.v2i64.v2f64(<2 x double> %a)
2499 // CHECK: ret <2 x i64> [[VCVTM1_I]]
2500 uint64x2_t test_vcvtmq_u64_f64(float64x2_t a) {
2501 return vcvtmq_u64_f64(a);
2504 // CHECK-LABEL: @test_vcvta_s32_f32(
2505 // CHECK: [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2506 // CHECK: [[VCVTA1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtas.v2i32.v2f32(<2 x float> %a)
2507 // CHECK: ret <2 x i32> [[VCVTA1_I]]
2508 int32x2_t test_vcvta_s32_f32(float32x2_t a) {
2509 return vcvta_s32_f32(a);
2512 // CHECK-LABEL: @test_vcvtaq_s32_f32(
2513 // CHECK: [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2514 // CHECK: [[VCVTA1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtas.v4i32.v4f32(<4 x float> %a)
2515 // CHECK: ret <4 x i32> [[VCVTA1_I]]
2516 int32x4_t test_vcvtaq_s32_f32(float32x4_t a) {
2517 return vcvtaq_s32_f32(a);
2520 // CHECK-LABEL: @test_vcvtaq_s64_f64(
2521 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2522 // CHECK: [[VCVTA1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtas.v2i64.v2f64(<2 x double> %a)
2523 // CHECK: ret <2 x i64> [[VCVTA1_I]]
2524 int64x2_t test_vcvtaq_s64_f64(float64x2_t a) {
2525 return vcvtaq_s64_f64(a);
2528 // CHECK-LABEL: @test_vcvta_u32_f32(
2529 // CHECK: [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2530 // CHECK: [[VCVTA1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtau.v2i32.v2f32(<2 x float> %a)
2531 // CHECK: ret <2 x i32> [[VCVTA1_I]]
2532 uint32x2_t test_vcvta_u32_f32(float32x2_t a) {
2533 return vcvta_u32_f32(a);
2536 // CHECK-LABEL: @test_vcvtaq_u32_f32(
2537 // CHECK: [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2538 // CHECK: [[VCVTA1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtau.v4i32.v4f32(<4 x float> %a)
2539 // CHECK: ret <4 x i32> [[VCVTA1_I]]
2540 uint32x4_t test_vcvtaq_u32_f32(float32x4_t a) {
2541 return vcvtaq_u32_f32(a);
2544 // CHECK-LABEL: @test_vcvtaq_u64_f64(
2545 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2546 // CHECK: [[VCVTA1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtau.v2i64.v2f64(<2 x double> %a)
2547 // CHECK: ret <2 x i64> [[VCVTA1_I]]
2548 uint64x2_t test_vcvtaq_u64_f64(float64x2_t a) {
2549 return vcvtaq_u64_f64(a);
2552 // CHECK-LABEL: @test_vrsqrte_f32(
2553 // CHECK: [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2554 // CHECK: [[VRSQRTE_V1_I:%.*]] = call <2 x float> @llvm.aarch64.neon.frsqrte.v2f32(<2 x float> %a)
2555 // CHECK: ret <2 x float> [[VRSQRTE_V1_I]]
2556 float32x2_t test_vrsqrte_f32(float32x2_t a) {
2557 return vrsqrte_f32(a);
2560 // CHECK-LABEL: @test_vrsqrteq_f32(
2561 // CHECK: [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2562 // CHECK: [[VRSQRTEQ_V1_I:%.*]] = call <4 x float> @llvm.aarch64.neon.frsqrte.v4f32(<4 x float> %a)
2563 // CHECK: ret <4 x float> [[VRSQRTEQ_V1_I]]
2564 float32x4_t test_vrsqrteq_f32(float32x4_t a) {
2565 return vrsqrteq_f32(a);
2568 // CHECK-LABEL: @test_vrsqrteq_f64(
2569 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2570 // CHECK: [[VRSQRTEQ_V1_I:%.*]] = call <2 x double> @llvm.aarch64.neon.frsqrte.v2f64(<2 x double> %a)
2571 // CHECK: ret <2 x double> [[VRSQRTEQ_V1_I]]
2572 float64x2_t test_vrsqrteq_f64(float64x2_t a) {
2573 return vrsqrteq_f64(a);
2576 // CHECK-LABEL: @test_vrecpe_f32(
2577 // CHECK: [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2578 // CHECK: [[VRECPE_V1_I:%.*]] = call <2 x float> @llvm.aarch64.neon.frecpe.v2f32(<2 x float> %a)
2579 // CHECK: ret <2 x float> [[VRECPE_V1_I]]
2580 float32x2_t test_vrecpe_f32(float32x2_t a) {
2581 return vrecpe_f32(a);
2584 // CHECK-LABEL: @test_vrecpeq_f32(
2585 // CHECK: [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2586 // CHECK: [[VRECPEQ_V1_I:%.*]] = call <4 x float> @llvm.aarch64.neon.frecpe.v4f32(<4 x float> %a)
2587 // CHECK: ret <4 x float> [[VRECPEQ_V1_I]]
2588 float32x4_t test_vrecpeq_f32(float32x4_t a) {
2589 return vrecpeq_f32(a);
2592 // CHECK-LABEL: @test_vrecpeq_f64(
2593 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2594 // CHECK: [[VRECPEQ_V1_I:%.*]] = call <2 x double> @llvm.aarch64.neon.frecpe.v2f64(<2 x double> %a)
2595 // CHECK: ret <2 x double> [[VRECPEQ_V1_I]]
2596 float64x2_t test_vrecpeq_f64(float64x2_t a) {
2597 return vrecpeq_f64(a);
2600 // CHECK-LABEL: @test_vrecpe_u32(
2601 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
2602 // CHECK: [[VRECPE_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.urecpe.v2i32(<2 x i32> %a)
2603 // CHECK: ret <2 x i32> [[VRECPE_V1_I]]
2604 uint32x2_t test_vrecpe_u32(uint32x2_t a) {
2605 return vrecpe_u32(a);
2608 // CHECK-LABEL: @test_vrecpeq_u32(
2609 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
2610 // CHECK: [[VRECPEQ_V1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.urecpe.v4i32(<4 x i32> %a)
2611 // CHECK: ret <4 x i32> [[VRECPEQ_V1_I]]
2612 uint32x4_t test_vrecpeq_u32(uint32x4_t a) {
2613 return vrecpeq_u32(a);
2616 // CHECK-LABEL: @test_vsqrt_f32(
2617 // CHECK: [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2618 // CHECK: [[VSQRT_I:%.*]] = call <2 x float> @llvm.sqrt.v2f32(<2 x float> %a)
2619 // CHECK: ret <2 x float> [[VSQRT_I]]
2620 float32x2_t test_vsqrt_f32(float32x2_t a) {
2621 return vsqrt_f32(a);
2624 // CHECK-LABEL: @test_vsqrtq_f32(
2625 // CHECK: [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2626 // CHECK: [[VSQRT_I:%.*]] = call <4 x float> @llvm.sqrt.v4f32(<4 x float> %a)
2627 // CHECK: ret <4 x float> [[VSQRT_I]]
2628 float32x4_t test_vsqrtq_f32(float32x4_t a) {
2629 return vsqrtq_f32(a);
2632 // CHECK-LABEL: @test_vsqrtq_f64(
2633 // CHECK: [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2634 // CHECK: [[VSQRT_I:%.*]] = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %a)
2635 // CHECK: ret <2 x double> [[VSQRT_I]]
2636 float64x2_t test_vsqrtq_f64(float64x2_t a) {
2637 return vsqrtq_f64(a);
2640 // CHECK-LABEL: @test_vcvt_f32_s32(
2641 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
2642 // CHECK: [[VCVT_I:%.*]] = sitofp <2 x i32> %a to <2 x float>
2643 // CHECK: ret <2 x float> [[VCVT_I]]
2644 float32x2_t test_vcvt_f32_s32(int32x2_t a) {
2645 return vcvt_f32_s32(a);
2648 // CHECK-LABEL: @test_vcvt_f32_u32(
2649 // CHECK: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
2650 // CHECK: [[VCVT_I:%.*]] = uitofp <2 x i32> %a to <2 x float>
2651 // CHECK: ret <2 x float> [[VCVT_I]]
2652 float32x2_t test_vcvt_f32_u32(uint32x2_t a) {
2653 return vcvt_f32_u32(a);
2656 // CHECK-LABEL: @test_vcvtq_f32_s32(
2657 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
2658 // CHECK: [[VCVT_I:%.*]] = sitofp <4 x i32> %a to <4 x float>
2659 // CHECK: ret <4 x float> [[VCVT_I]]
2660 float32x4_t test_vcvtq_f32_s32(int32x4_t a) {
2661 return vcvtq_f32_s32(a);
2664 // CHECK-LABEL: @test_vcvtq_f32_u32(
2665 // CHECK: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
2666 // CHECK: [[VCVT_I:%.*]] = uitofp <4 x i32> %a to <4 x float>
2667 // CHECK: ret <4 x float> [[VCVT_I]]
2668 float32x4_t test_vcvtq_f32_u32(uint32x4_t a) {
2669 return vcvtq_f32_u32(a);
2672 // CHECK-LABEL: @test_vcvtq_f64_s64(
2673 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
2674 // CHECK: [[VCVT_I:%.*]] = sitofp <2 x i64> %a to <2 x double>
2675 // CHECK: ret <2 x double> [[VCVT_I]]
2676 float64x2_t test_vcvtq_f64_s64(int64x2_t a) {
2677 return vcvtq_f64_s64(a);
2680 // CHECK-LABEL: @test_vcvtq_f64_u64(
2681 // CHECK: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
2682 // CHECK: [[VCVT_I:%.*]] = uitofp <2 x i64> %a to <2 x double>
2683 // CHECK: ret <2 x double> [[VCVT_I]]
2684 float64x2_t test_vcvtq_f64_u64(uint64x2_t a) {
2685 return vcvtq_f64_u64(a);