xref: /aosp_15_r20/external/clang/test/CodeGen/aarch64-neon-misc.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon \
2*67e74705SXin Li // RUN:  -fallow-half-arguments-and-returns -emit-llvm -o - %s \
3*67e74705SXin Li // RUN: | opt -S -mem2reg | FileCheck %s
4*67e74705SXin Li 
5*67e74705SXin Li // Test new aarch64 intrinsics and types
6*67e74705SXin Li 
7*67e74705SXin Li #include <arm_neon.h>
8*67e74705SXin Li 
9*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vceqz_s8(<8 x i8> %a) #0 {
10*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = icmp eq <8 x i8> %a, zeroinitializer
11*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <8 x i1> [[TMP0]] to <8 x i8>
12*67e74705SXin Li // CHECK:   ret <8 x i8> [[VCEQZ_I]]
test_vceqz_s8(int8x8_t a)13*67e74705SXin Li uint8x8_t test_vceqz_s8(int8x8_t a) {
14*67e74705SXin Li   return vceqz_s8(a);
15*67e74705SXin Li }
16*67e74705SXin Li 
17*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vceqz_s16(<4 x i16> %a) #0 {
18*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
19*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
20*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp eq <4 x i16> [[TMP1]], zeroinitializer
21*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i16>
22*67e74705SXin Li // CHECK:   ret <4 x i16> [[VCEQZ_I]]
test_vceqz_s16(int16x4_t a)23*67e74705SXin Li uint16x4_t test_vceqz_s16(int16x4_t a) {
24*67e74705SXin Li   return vceqz_s16(a);
25*67e74705SXin Li }
26*67e74705SXin Li 
27*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vceqz_s32(<2 x i32> %a) #0 {
28*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
29*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
30*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp eq <2 x i32> [[TMP1]], zeroinitializer
31*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i32>
32*67e74705SXin Li // CHECK:   ret <2 x i32> [[VCEQZ_I]]
test_vceqz_s32(int32x2_t a)33*67e74705SXin Li uint32x2_t test_vceqz_s32(int32x2_t a) {
34*67e74705SXin Li   return vceqz_s32(a);
35*67e74705SXin Li }
36*67e74705SXin Li 
37*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vceqz_s64(<1 x i64> %a) #0 {
38*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8>
39*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
40*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp eq <1 x i64> [[TMP1]], zeroinitializer
41*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <1 x i1> [[TMP2]] to <1 x i64>
42*67e74705SXin Li // CHECK:   ret <1 x i64> [[VCEQZ_I]]
test_vceqz_s64(int64x1_t a)43*67e74705SXin Li uint64x1_t test_vceqz_s64(int64x1_t a) {
44*67e74705SXin Li   return vceqz_s64(a);
45*67e74705SXin Li }
46*67e74705SXin Li 
47*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vceqz_u64(<1 x i64> %a) #0 {
48*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8>
49*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
50*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp eq <1 x i64> [[TMP1]], zeroinitializer
51*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <1 x i1> [[TMP2]] to <1 x i64>
52*67e74705SXin Li // CHECK:   ret <1 x i64> [[VCEQZ_I]]
test_vceqz_u64(uint64x1_t a)53*67e74705SXin Li uint64x1_t test_vceqz_u64(uint64x1_t a) {
54*67e74705SXin Li   return vceqz_u64(a);
55*67e74705SXin Li }
56*67e74705SXin Li 
57*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vceqz_p64(<1 x i64> %a) #0 {
58*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8>
59*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
60*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp eq <1 x i64> [[TMP1]], zeroinitializer
61*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <1 x i1> [[TMP2]] to <1 x i64>
62*67e74705SXin Li // CHECK:   ret <1 x i64> [[VCEQZ_I]]
test_vceqz_p64(poly64x1_t a)63*67e74705SXin Li uint64x1_t test_vceqz_p64(poly64x1_t a) {
64*67e74705SXin Li   return vceqz_p64(a);
65*67e74705SXin Li }
66*67e74705SXin Li 
67*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vceqzq_s8(<16 x i8> %a) #0 {
68*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = icmp eq <16 x i8> %a, zeroinitializer
69*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <16 x i1> [[TMP0]] to <16 x i8>
70*67e74705SXin Li // CHECK:   ret <16 x i8> [[VCEQZ_I]]
test_vceqzq_s8(int8x16_t a)71*67e74705SXin Li uint8x16_t test_vceqzq_s8(int8x16_t a) {
72*67e74705SXin Li   return vceqzq_s8(a);
73*67e74705SXin Li }
74*67e74705SXin Li 
75*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vceqzq_s16(<8 x i16> %a) #0 {
76*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
77*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
78*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp eq <8 x i16> [[TMP1]], zeroinitializer
79*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <8 x i1> [[TMP2]] to <8 x i16>
80*67e74705SXin Li // CHECK:   ret <8 x i16> [[VCEQZ_I]]
test_vceqzq_s16(int16x8_t a)81*67e74705SXin Li uint16x8_t test_vceqzq_s16(int16x8_t a) {
82*67e74705SXin Li   return vceqzq_s16(a);
83*67e74705SXin Li }
84*67e74705SXin Li 
85*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vceqzq_s32(<4 x i32> %a) #0 {
86*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
87*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
88*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp eq <4 x i32> [[TMP1]], zeroinitializer
89*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i32>
90*67e74705SXin Li // CHECK:   ret <4 x i32> [[VCEQZ_I]]
test_vceqzq_s32(int32x4_t a)91*67e74705SXin Li uint32x4_t test_vceqzq_s32(int32x4_t a) {
92*67e74705SXin Li   return vceqzq_s32(a);
93*67e74705SXin Li }
94*67e74705SXin Li 
95*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vceqzq_s64(<2 x i64> %a) #0 {
96*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
97*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
98*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp eq <2 x i64> [[TMP1]], zeroinitializer
99*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i64>
100*67e74705SXin Li // CHECK:   ret <2 x i64> [[VCEQZ_I]]
test_vceqzq_s64(int64x2_t a)101*67e74705SXin Li uint64x2_t test_vceqzq_s64(int64x2_t a) {
102*67e74705SXin Li   return vceqzq_s64(a);
103*67e74705SXin Li }
104*67e74705SXin Li 
105*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vceqz_u8(<8 x i8> %a) #0 {
106*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = icmp eq <8 x i8> %a, zeroinitializer
107*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <8 x i1> [[TMP0]] to <8 x i8>
108*67e74705SXin Li // CHECK:   ret <8 x i8> [[VCEQZ_I]]
test_vceqz_u8(uint8x8_t a)109*67e74705SXin Li uint8x8_t test_vceqz_u8(uint8x8_t a) {
110*67e74705SXin Li   return vceqz_u8(a);
111*67e74705SXin Li }
112*67e74705SXin Li 
113*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vceqz_u16(<4 x i16> %a) #0 {
114*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
115*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
116*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp eq <4 x i16> [[TMP1]], zeroinitializer
117*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i16>
118*67e74705SXin Li // CHECK:   ret <4 x i16> [[VCEQZ_I]]
test_vceqz_u16(uint16x4_t a)119*67e74705SXin Li uint16x4_t test_vceqz_u16(uint16x4_t a) {
120*67e74705SXin Li   return vceqz_u16(a);
121*67e74705SXin Li }
122*67e74705SXin Li 
123*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vceqz_u32(<2 x i32> %a) #0 {
124*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
125*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
126*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp eq <2 x i32> [[TMP1]], zeroinitializer
127*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i32>
128*67e74705SXin Li // CHECK:   ret <2 x i32> [[VCEQZ_I]]
test_vceqz_u32(uint32x2_t a)129*67e74705SXin Li uint32x2_t test_vceqz_u32(uint32x2_t a) {
130*67e74705SXin Li   return vceqz_u32(a);
131*67e74705SXin Li }
132*67e74705SXin Li 
133*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vceqzq_u8(<16 x i8> %a) #0 {
134*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = icmp eq <16 x i8> %a, zeroinitializer
135*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <16 x i1> [[TMP0]] to <16 x i8>
136*67e74705SXin Li // CHECK:   ret <16 x i8> [[VCEQZ_I]]
test_vceqzq_u8(uint8x16_t a)137*67e74705SXin Li uint8x16_t test_vceqzq_u8(uint8x16_t a) {
138*67e74705SXin Li   return vceqzq_u8(a);
139*67e74705SXin Li }
140*67e74705SXin Li 
141*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vceqzq_u16(<8 x i16> %a) #0 {
142*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
143*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
144*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp eq <8 x i16> [[TMP1]], zeroinitializer
145*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <8 x i1> [[TMP2]] to <8 x i16>
146*67e74705SXin Li // CHECK:   ret <8 x i16> [[VCEQZ_I]]
test_vceqzq_u16(uint16x8_t a)147*67e74705SXin Li uint16x8_t test_vceqzq_u16(uint16x8_t a) {
148*67e74705SXin Li   return vceqzq_u16(a);
149*67e74705SXin Li }
150*67e74705SXin Li 
151*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vceqzq_u32(<4 x i32> %a) #0 {
152*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
153*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
154*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp eq <4 x i32> [[TMP1]], zeroinitializer
155*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i32>
156*67e74705SXin Li // CHECK:   ret <4 x i32> [[VCEQZ_I]]
test_vceqzq_u32(uint32x4_t a)157*67e74705SXin Li uint32x4_t test_vceqzq_u32(uint32x4_t a) {
158*67e74705SXin Li   return vceqzq_u32(a);
159*67e74705SXin Li }
160*67e74705SXin Li 
161*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vceqzq_u64(<2 x i64> %a) #0 {
162*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
163*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
164*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp eq <2 x i64> [[TMP1]], zeroinitializer
165*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i64>
166*67e74705SXin Li // CHECK:   ret <2 x i64> [[VCEQZ_I]]
test_vceqzq_u64(uint64x2_t a)167*67e74705SXin Li uint64x2_t test_vceqzq_u64(uint64x2_t a) {
168*67e74705SXin Li   return vceqzq_u64(a);
169*67e74705SXin Li }
170*67e74705SXin Li 
171*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vceqz_f32(<2 x float> %a) #0 {
172*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
173*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
174*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fcmp oeq <2 x float> [[TMP1]], zeroinitializer
175*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i32>
176*67e74705SXin Li // CHECK:   ret <2 x i32> [[VCEQZ_I]]
test_vceqz_f32(float32x2_t a)177*67e74705SXin Li uint32x2_t test_vceqz_f32(float32x2_t a) {
178*67e74705SXin Li   return vceqz_f32(a);
179*67e74705SXin Li }
180*67e74705SXin Li 
181*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vceqz_f64(<1 x double> %a) #0 {
182*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <1 x double> %a to <8 x i8>
183*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x double>
184*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fcmp oeq <1 x double> [[TMP1]], zeroinitializer
185*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <1 x i1> [[TMP2]] to <1 x i64>
186*67e74705SXin Li // CHECK:   ret <1 x i64> [[VCEQZ_I]]
test_vceqz_f64(float64x1_t a)187*67e74705SXin Li uint64x1_t test_vceqz_f64(float64x1_t a) {
188*67e74705SXin Li   return vceqz_f64(a);
189*67e74705SXin Li }
190*67e74705SXin Li 
191*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vceqzq_f32(<4 x float> %a) #0 {
192*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
193*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
194*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fcmp oeq <4 x float> [[TMP1]], zeroinitializer
195*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i32>
196*67e74705SXin Li // CHECK:   ret <4 x i32> [[VCEQZ_I]]
test_vceqzq_f32(float32x4_t a)197*67e74705SXin Li uint32x4_t test_vceqzq_f32(float32x4_t a) {
198*67e74705SXin Li   return vceqzq_f32(a);
199*67e74705SXin Li }
200*67e74705SXin Li 
201*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vceqz_p8(<8 x i8> %a) #0 {
202*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = icmp eq <8 x i8> %a, zeroinitializer
203*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <8 x i1> [[TMP0]] to <8 x i8>
204*67e74705SXin Li // CHECK:   ret <8 x i8> [[VCEQZ_I]]
test_vceqz_p8(poly8x8_t a)205*67e74705SXin Li uint8x8_t test_vceqz_p8(poly8x8_t a) {
206*67e74705SXin Li   return vceqz_p8(a);
207*67e74705SXin Li }
208*67e74705SXin Li 
209*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vceqzq_p8(<16 x i8> %a) #0 {
210*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = icmp eq <16 x i8> %a, zeroinitializer
211*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <16 x i1> [[TMP0]] to <16 x i8>
212*67e74705SXin Li // CHECK:   ret <16 x i8> [[VCEQZ_I]]
test_vceqzq_p8(poly8x16_t a)213*67e74705SXin Li uint8x16_t test_vceqzq_p8(poly8x16_t a) {
214*67e74705SXin Li   return vceqzq_p8(a);
215*67e74705SXin Li }
216*67e74705SXin Li 
217*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vceqz_p16(<4 x i16> %a) #0 {
218*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
219*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
220*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp eq <4 x i16> [[TMP1]], zeroinitializer
221*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i16>
222*67e74705SXin Li // CHECK:   ret <4 x i16> [[VCEQZ_I]]
test_vceqz_p16(poly16x4_t a)223*67e74705SXin Li uint16x4_t test_vceqz_p16(poly16x4_t a) {
224*67e74705SXin Li   return vceqz_p16(a);
225*67e74705SXin Li }
226*67e74705SXin Li 
227*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vceqzq_p16(<8 x i16> %a) #0 {
228*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
229*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
230*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp eq <8 x i16> [[TMP1]], zeroinitializer
231*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <8 x i1> [[TMP2]] to <8 x i16>
232*67e74705SXin Li // CHECK:   ret <8 x i16> [[VCEQZ_I]]
test_vceqzq_p16(poly16x8_t a)233*67e74705SXin Li uint16x8_t test_vceqzq_p16(poly16x8_t a) {
234*67e74705SXin Li   return vceqzq_p16(a);
235*67e74705SXin Li }
236*67e74705SXin Li 
237*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vceqzq_f64(<2 x double> %a) #0 {
238*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
239*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
240*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fcmp oeq <2 x double> [[TMP1]], zeroinitializer
241*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i64>
242*67e74705SXin Li // CHECK:   ret <2 x i64> [[VCEQZ_I]]
test_vceqzq_f64(float64x2_t a)243*67e74705SXin Li uint64x2_t test_vceqzq_f64(float64x2_t a) {
244*67e74705SXin Li   return vceqzq_f64(a);
245*67e74705SXin Li }
246*67e74705SXin Li 
247*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vceqzq_p64(<2 x i64> %a) #0 {
248*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
249*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
250*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp eq <2 x i64> [[TMP1]], zeroinitializer
251*67e74705SXin Li // CHECK:   [[VCEQZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i64>
252*67e74705SXin Li // CHECK:   ret <2 x i64> [[VCEQZ_I]]
test_vceqzq_p64(poly64x2_t a)253*67e74705SXin Li uint64x2_t test_vceqzq_p64(poly64x2_t a) {
254*67e74705SXin Li   return vceqzq_p64(a);
255*67e74705SXin Li }
256*67e74705SXin Li 
257*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vcgez_s8(<8 x i8> %a) #0 {
258*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = icmp sge <8 x i8> %a, zeroinitializer
259*67e74705SXin Li // CHECK:   [[VCGEZ_I:%.*]] = sext <8 x i1> [[TMP0]] to <8 x i8>
260*67e74705SXin Li // CHECK:   ret <8 x i8> [[VCGEZ_I]]
test_vcgez_s8(int8x8_t a)261*67e74705SXin Li uint8x8_t test_vcgez_s8(int8x8_t a) {
262*67e74705SXin Li   return vcgez_s8(a);
263*67e74705SXin Li }
264*67e74705SXin Li 
265*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vcgez_s16(<4 x i16> %a) #0 {
266*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
267*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
268*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp sge <4 x i16> [[TMP1]], zeroinitializer
269*67e74705SXin Li // CHECK:   [[VCGEZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i16>
270*67e74705SXin Li // CHECK:   ret <4 x i16> [[VCGEZ_I]]
test_vcgez_s16(int16x4_t a)271*67e74705SXin Li uint16x4_t test_vcgez_s16(int16x4_t a) {
272*67e74705SXin Li   return vcgez_s16(a);
273*67e74705SXin Li }
274*67e74705SXin Li 
275*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vcgez_s32(<2 x i32> %a) #0 {
276*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
277*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
278*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp sge <2 x i32> [[TMP1]], zeroinitializer
279*67e74705SXin Li // CHECK:   [[VCGEZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i32>
280*67e74705SXin Li // CHECK:   ret <2 x i32> [[VCGEZ_I]]
test_vcgez_s32(int32x2_t a)281*67e74705SXin Li uint32x2_t test_vcgez_s32(int32x2_t a) {
282*67e74705SXin Li   return vcgez_s32(a);
283*67e74705SXin Li }
284*67e74705SXin Li 
285*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vcgez_s64(<1 x i64> %a) #0 {
286*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8>
287*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
288*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp sge <1 x i64> [[TMP1]], zeroinitializer
289*67e74705SXin Li // CHECK:   [[VCGEZ_I:%.*]] = sext <1 x i1> [[TMP2]] to <1 x i64>
290*67e74705SXin Li // CHECK:   ret <1 x i64> [[VCGEZ_I]]
test_vcgez_s64(int64x1_t a)291*67e74705SXin Li uint64x1_t test_vcgez_s64(int64x1_t a) {
292*67e74705SXin Li   return vcgez_s64(a);
293*67e74705SXin Li }
294*67e74705SXin Li 
295*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vcgezq_s8(<16 x i8> %a) #0 {
296*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = icmp sge <16 x i8> %a, zeroinitializer
297*67e74705SXin Li // CHECK:   [[VCGEZ_I:%.*]] = sext <16 x i1> [[TMP0]] to <16 x i8>
298*67e74705SXin Li // CHECK:   ret <16 x i8> [[VCGEZ_I]]
test_vcgezq_s8(int8x16_t a)299*67e74705SXin Li uint8x16_t test_vcgezq_s8(int8x16_t a) {
300*67e74705SXin Li   return vcgezq_s8(a);
301*67e74705SXin Li }
302*67e74705SXin Li 
303*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vcgezq_s16(<8 x i16> %a) #0 {
304*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
305*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
306*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp sge <8 x i16> [[TMP1]], zeroinitializer
307*67e74705SXin Li // CHECK:   [[VCGEZ_I:%.*]] = sext <8 x i1> [[TMP2]] to <8 x i16>
308*67e74705SXin Li // CHECK:   ret <8 x i16> [[VCGEZ_I]]
test_vcgezq_s16(int16x8_t a)309*67e74705SXin Li uint16x8_t test_vcgezq_s16(int16x8_t a) {
310*67e74705SXin Li   return vcgezq_s16(a);
311*67e74705SXin Li }
312*67e74705SXin Li 
313*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vcgezq_s32(<4 x i32> %a) #0 {
314*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
315*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
316*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp sge <4 x i32> [[TMP1]], zeroinitializer
317*67e74705SXin Li // CHECK:   [[VCGEZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i32>
318*67e74705SXin Li // CHECK:   ret <4 x i32> [[VCGEZ_I]]
test_vcgezq_s32(int32x4_t a)319*67e74705SXin Li uint32x4_t test_vcgezq_s32(int32x4_t a) {
320*67e74705SXin Li   return vcgezq_s32(a);
321*67e74705SXin Li }
322*67e74705SXin Li 
323*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vcgezq_s64(<2 x i64> %a) #0 {
324*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
325*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
326*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp sge <2 x i64> [[TMP1]], zeroinitializer
327*67e74705SXin Li // CHECK:   [[VCGEZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i64>
328*67e74705SXin Li // CHECK:   ret <2 x i64> [[VCGEZ_I]]
test_vcgezq_s64(int64x2_t a)329*67e74705SXin Li uint64x2_t test_vcgezq_s64(int64x2_t a) {
330*67e74705SXin Li   return vcgezq_s64(a);
331*67e74705SXin Li }
332*67e74705SXin Li 
333*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vcgez_f32(<2 x float> %a) #0 {
334*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
335*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
336*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fcmp oge <2 x float> [[TMP1]], zeroinitializer
337*67e74705SXin Li // CHECK:   [[VCGEZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i32>
338*67e74705SXin Li // CHECK:   ret <2 x i32> [[VCGEZ_I]]
test_vcgez_f32(float32x2_t a)339*67e74705SXin Li uint32x2_t test_vcgez_f32(float32x2_t a) {
340*67e74705SXin Li   return vcgez_f32(a);
341*67e74705SXin Li }
342*67e74705SXin Li 
343*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vcgez_f64(<1 x double> %a) #0 {
344*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <1 x double> %a to <8 x i8>
345*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x double>
346*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fcmp oge <1 x double> [[TMP1]], zeroinitializer
347*67e74705SXin Li // CHECK:   [[VCGEZ_I:%.*]] = sext <1 x i1> [[TMP2]] to <1 x i64>
348*67e74705SXin Li // CHECK:   ret <1 x i64> [[VCGEZ_I]]
test_vcgez_f64(float64x1_t a)349*67e74705SXin Li uint64x1_t test_vcgez_f64(float64x1_t a) {
350*67e74705SXin Li   return vcgez_f64(a);
351*67e74705SXin Li }
352*67e74705SXin Li 
353*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vcgezq_f32(<4 x float> %a) #0 {
354*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
355*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
356*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fcmp oge <4 x float> [[TMP1]], zeroinitializer
357*67e74705SXin Li // CHECK:   [[VCGEZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i32>
358*67e74705SXin Li // CHECK:   ret <4 x i32> [[VCGEZ_I]]
test_vcgezq_f32(float32x4_t a)359*67e74705SXin Li uint32x4_t test_vcgezq_f32(float32x4_t a) {
360*67e74705SXin Li   return vcgezq_f32(a);
361*67e74705SXin Li }
362*67e74705SXin Li 
363*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vcgezq_f64(<2 x double> %a) #0 {
364*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
365*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
366*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fcmp oge <2 x double> [[TMP1]], zeroinitializer
367*67e74705SXin Li // CHECK:   [[VCGEZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i64>
368*67e74705SXin Li // CHECK:   ret <2 x i64> [[VCGEZ_I]]
test_vcgezq_f64(float64x2_t a)369*67e74705SXin Li uint64x2_t test_vcgezq_f64(float64x2_t a) {
370*67e74705SXin Li   return vcgezq_f64(a);
371*67e74705SXin Li }
372*67e74705SXin Li 
373*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vclez_s8(<8 x i8> %a) #0 {
374*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = icmp sle <8 x i8> %a, zeroinitializer
375*67e74705SXin Li // CHECK:   [[VCLEZ_I:%.*]] = sext <8 x i1> [[TMP0]] to <8 x i8>
376*67e74705SXin Li // CHECK:   ret <8 x i8> [[VCLEZ_I]]
test_vclez_s8(int8x8_t a)377*67e74705SXin Li uint8x8_t test_vclez_s8(int8x8_t a) {
378*67e74705SXin Li   return vclez_s8(a);
379*67e74705SXin Li }
380*67e74705SXin Li 
381*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vclez_s16(<4 x i16> %a) #0 {
382*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
383*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
384*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp sle <4 x i16> [[TMP1]], zeroinitializer
385*67e74705SXin Li // CHECK:   [[VCLEZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i16>
386*67e74705SXin Li // CHECK:   ret <4 x i16> [[VCLEZ_I]]
test_vclez_s16(int16x4_t a)387*67e74705SXin Li uint16x4_t test_vclez_s16(int16x4_t a) {
388*67e74705SXin Li   return vclez_s16(a);
389*67e74705SXin Li }
390*67e74705SXin Li 
391*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vclez_s32(<2 x i32> %a) #0 {
392*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
393*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
394*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp sle <2 x i32> [[TMP1]], zeroinitializer
395*67e74705SXin Li // CHECK:   [[VCLEZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i32>
396*67e74705SXin Li // CHECK:   ret <2 x i32> [[VCLEZ_I]]
test_vclez_s32(int32x2_t a)397*67e74705SXin Li uint32x2_t test_vclez_s32(int32x2_t a) {
398*67e74705SXin Li   return vclez_s32(a);
399*67e74705SXin Li }
400*67e74705SXin Li 
401*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vclez_s64(<1 x i64> %a) #0 {
402*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8>
403*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
404*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp sle <1 x i64> [[TMP1]], zeroinitializer
405*67e74705SXin Li // CHECK:   [[VCLEZ_I:%.*]] = sext <1 x i1> [[TMP2]] to <1 x i64>
406*67e74705SXin Li // CHECK:   ret <1 x i64> [[VCLEZ_I]]
test_vclez_s64(int64x1_t a)407*67e74705SXin Li uint64x1_t test_vclez_s64(int64x1_t a) {
408*67e74705SXin Li   return vclez_s64(a);
409*67e74705SXin Li }
410*67e74705SXin Li 
411*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vclezq_s8(<16 x i8> %a) #0 {
412*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = icmp sle <16 x i8> %a, zeroinitializer
413*67e74705SXin Li // CHECK:   [[VCLEZ_I:%.*]] = sext <16 x i1> [[TMP0]] to <16 x i8>
414*67e74705SXin Li // CHECK:   ret <16 x i8> [[VCLEZ_I]]
test_vclezq_s8(int8x16_t a)415*67e74705SXin Li uint8x16_t test_vclezq_s8(int8x16_t a) {
416*67e74705SXin Li   return vclezq_s8(a);
417*67e74705SXin Li }
418*67e74705SXin Li 
419*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vclezq_s16(<8 x i16> %a) #0 {
420*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
421*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
422*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp sle <8 x i16> [[TMP1]], zeroinitializer
423*67e74705SXin Li // CHECK:   [[VCLEZ_I:%.*]] = sext <8 x i1> [[TMP2]] to <8 x i16>
424*67e74705SXin Li // CHECK:   ret <8 x i16> [[VCLEZ_I]]
test_vclezq_s16(int16x8_t a)425*67e74705SXin Li uint16x8_t test_vclezq_s16(int16x8_t a) {
426*67e74705SXin Li   return vclezq_s16(a);
427*67e74705SXin Li }
428*67e74705SXin Li 
429*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vclezq_s32(<4 x i32> %a) #0 {
430*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
431*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
432*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp sle <4 x i32> [[TMP1]], zeroinitializer
433*67e74705SXin Li // CHECK:   [[VCLEZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i32>
434*67e74705SXin Li // CHECK:   ret <4 x i32> [[VCLEZ_I]]
test_vclezq_s32(int32x4_t a)435*67e74705SXin Li uint32x4_t test_vclezq_s32(int32x4_t a) {
436*67e74705SXin Li   return vclezq_s32(a);
437*67e74705SXin Li }
438*67e74705SXin Li 
439*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vclezq_s64(<2 x i64> %a) #0 {
440*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
441*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
442*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp sle <2 x i64> [[TMP1]], zeroinitializer
443*67e74705SXin Li // CHECK:   [[VCLEZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i64>
444*67e74705SXin Li // CHECK:   ret <2 x i64> [[VCLEZ_I]]
test_vclezq_s64(int64x2_t a)445*67e74705SXin Li uint64x2_t test_vclezq_s64(int64x2_t a) {
446*67e74705SXin Li   return vclezq_s64(a);
447*67e74705SXin Li }
448*67e74705SXin Li 
449*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vclez_f32(<2 x float> %a) #0 {
450*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
451*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
452*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fcmp ole <2 x float> [[TMP1]], zeroinitializer
453*67e74705SXin Li // CHECK:   [[VCLEZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i32>
454*67e74705SXin Li // CHECK:   ret <2 x i32> [[VCLEZ_I]]
test_vclez_f32(float32x2_t a)455*67e74705SXin Li uint32x2_t test_vclez_f32(float32x2_t a) {
456*67e74705SXin Li   return vclez_f32(a);
457*67e74705SXin Li }
458*67e74705SXin Li 
459*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vclez_f64(<1 x double> %a) #0 {
460*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <1 x double> %a to <8 x i8>
461*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x double>
462*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fcmp ole <1 x double> [[TMP1]], zeroinitializer
463*67e74705SXin Li // CHECK:   [[VCLEZ_I:%.*]] = sext <1 x i1> [[TMP2]] to <1 x i64>
464*67e74705SXin Li // CHECK:   ret <1 x i64> [[VCLEZ_I]]
test_vclez_f64(float64x1_t a)465*67e74705SXin Li uint64x1_t test_vclez_f64(float64x1_t a) {
466*67e74705SXin Li   return vclez_f64(a);
467*67e74705SXin Li }
468*67e74705SXin Li 
469*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vclezq_f32(<4 x float> %a) #0 {
470*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
471*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
472*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fcmp ole <4 x float> [[TMP1]], zeroinitializer
473*67e74705SXin Li // CHECK:   [[VCLEZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i32>
474*67e74705SXin Li // CHECK:   ret <4 x i32> [[VCLEZ_I]]
test_vclezq_f32(float32x4_t a)475*67e74705SXin Li uint32x4_t test_vclezq_f32(float32x4_t a) {
476*67e74705SXin Li   return vclezq_f32(a);
477*67e74705SXin Li }
478*67e74705SXin Li 
479*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vclezq_f64(<2 x double> %a) #0 {
480*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
481*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
482*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fcmp ole <2 x double> [[TMP1]], zeroinitializer
483*67e74705SXin Li // CHECK:   [[VCLEZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i64>
484*67e74705SXin Li // CHECK:   ret <2 x i64> [[VCLEZ_I]]
test_vclezq_f64(float64x2_t a)485*67e74705SXin Li uint64x2_t test_vclezq_f64(float64x2_t a) {
486*67e74705SXin Li   return vclezq_f64(a);
487*67e74705SXin Li }
488*67e74705SXin Li 
489*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vcgtz_s8(<8 x i8> %a) #0 {
490*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = icmp sgt <8 x i8> %a, zeroinitializer
491*67e74705SXin Li // CHECK:   [[VCGTZ_I:%.*]] = sext <8 x i1> [[TMP0]] to <8 x i8>
492*67e74705SXin Li // CHECK:   ret <8 x i8> [[VCGTZ_I]]
test_vcgtz_s8(int8x8_t a)493*67e74705SXin Li uint8x8_t test_vcgtz_s8(int8x8_t a) {
494*67e74705SXin Li   return vcgtz_s8(a);
495*67e74705SXin Li }
496*67e74705SXin Li 
497*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vcgtz_s16(<4 x i16> %a) #0 {
498*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
499*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
500*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp sgt <4 x i16> [[TMP1]], zeroinitializer
501*67e74705SXin Li // CHECK:   [[VCGTZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i16>
502*67e74705SXin Li // CHECK:   ret <4 x i16> [[VCGTZ_I]]
test_vcgtz_s16(int16x4_t a)503*67e74705SXin Li uint16x4_t test_vcgtz_s16(int16x4_t a) {
504*67e74705SXin Li   return vcgtz_s16(a);
505*67e74705SXin Li }
506*67e74705SXin Li 
507*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vcgtz_s32(<2 x i32> %a) #0 {
508*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
509*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
510*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp sgt <2 x i32> [[TMP1]], zeroinitializer
511*67e74705SXin Li // CHECK:   [[VCGTZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i32>
512*67e74705SXin Li // CHECK:   ret <2 x i32> [[VCGTZ_I]]
test_vcgtz_s32(int32x2_t a)513*67e74705SXin Li uint32x2_t test_vcgtz_s32(int32x2_t a) {
514*67e74705SXin Li   return vcgtz_s32(a);
515*67e74705SXin Li }
516*67e74705SXin Li 
517*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vcgtz_s64(<1 x i64> %a) #0 {
518*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8>
519*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
520*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp sgt <1 x i64> [[TMP1]], zeroinitializer
521*67e74705SXin Li // CHECK:   [[VCGTZ_I:%.*]] = sext <1 x i1> [[TMP2]] to <1 x i64>
522*67e74705SXin Li // CHECK:   ret <1 x i64> [[VCGTZ_I]]
test_vcgtz_s64(int64x1_t a)523*67e74705SXin Li uint64x1_t test_vcgtz_s64(int64x1_t a) {
524*67e74705SXin Li   return vcgtz_s64(a);
525*67e74705SXin Li }
526*67e74705SXin Li 
527*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vcgtzq_s8(<16 x i8> %a) #0 {
528*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = icmp sgt <16 x i8> %a, zeroinitializer
529*67e74705SXin Li // CHECK:   [[VCGTZ_I:%.*]] = sext <16 x i1> [[TMP0]] to <16 x i8>
530*67e74705SXin Li // CHECK:   ret <16 x i8> [[VCGTZ_I]]
test_vcgtzq_s8(int8x16_t a)531*67e74705SXin Li uint8x16_t test_vcgtzq_s8(int8x16_t a) {
532*67e74705SXin Li   return vcgtzq_s8(a);
533*67e74705SXin Li }
534*67e74705SXin Li 
535*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vcgtzq_s16(<8 x i16> %a) #0 {
536*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
537*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
538*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp sgt <8 x i16> [[TMP1]], zeroinitializer
539*67e74705SXin Li // CHECK:   [[VCGTZ_I:%.*]] = sext <8 x i1> [[TMP2]] to <8 x i16>
540*67e74705SXin Li // CHECK:   ret <8 x i16> [[VCGTZ_I]]
test_vcgtzq_s16(int16x8_t a)541*67e74705SXin Li uint16x8_t test_vcgtzq_s16(int16x8_t a) {
542*67e74705SXin Li   return vcgtzq_s16(a);
543*67e74705SXin Li }
544*67e74705SXin Li 
545*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vcgtzq_s32(<4 x i32> %a) #0 {
546*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
547*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
548*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp sgt <4 x i32> [[TMP1]], zeroinitializer
549*67e74705SXin Li // CHECK:   [[VCGTZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i32>
550*67e74705SXin Li // CHECK:   ret <4 x i32> [[VCGTZ_I]]
test_vcgtzq_s32(int32x4_t a)551*67e74705SXin Li uint32x4_t test_vcgtzq_s32(int32x4_t a) {
552*67e74705SXin Li   return vcgtzq_s32(a);
553*67e74705SXin Li }
554*67e74705SXin Li 
555*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vcgtzq_s64(<2 x i64> %a) #0 {
556*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
557*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
558*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp sgt <2 x i64> [[TMP1]], zeroinitializer
559*67e74705SXin Li // CHECK:   [[VCGTZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i64>
560*67e74705SXin Li // CHECK:   ret <2 x i64> [[VCGTZ_I]]
test_vcgtzq_s64(int64x2_t a)561*67e74705SXin Li uint64x2_t test_vcgtzq_s64(int64x2_t a) {
562*67e74705SXin Li   return vcgtzq_s64(a);
563*67e74705SXin Li }
564*67e74705SXin Li 
565*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vcgtz_f32(<2 x float> %a) #0 {
566*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
567*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
568*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fcmp ogt <2 x float> [[TMP1]], zeroinitializer
569*67e74705SXin Li // CHECK:   [[VCGTZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i32>
570*67e74705SXin Li // CHECK:   ret <2 x i32> [[VCGTZ_I]]
test_vcgtz_f32(float32x2_t a)571*67e74705SXin Li uint32x2_t test_vcgtz_f32(float32x2_t a) {
572*67e74705SXin Li   return vcgtz_f32(a);
573*67e74705SXin Li }
574*67e74705SXin Li 
575*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vcgtz_f64(<1 x double> %a) #0 {
576*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <1 x double> %a to <8 x i8>
577*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x double>
578*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fcmp ogt <1 x double> [[TMP1]], zeroinitializer
579*67e74705SXin Li // CHECK:   [[VCGTZ_I:%.*]] = sext <1 x i1> [[TMP2]] to <1 x i64>
580*67e74705SXin Li // CHECK:   ret <1 x i64> [[VCGTZ_I]]
test_vcgtz_f64(float64x1_t a)581*67e74705SXin Li uint64x1_t test_vcgtz_f64(float64x1_t a) {
582*67e74705SXin Li   return vcgtz_f64(a);
583*67e74705SXin Li }
584*67e74705SXin Li 
585*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vcgtzq_f32(<4 x float> %a) #0 {
586*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
587*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
588*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fcmp ogt <4 x float> [[TMP1]], zeroinitializer
589*67e74705SXin Li // CHECK:   [[VCGTZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i32>
590*67e74705SXin Li // CHECK:   ret <4 x i32> [[VCGTZ_I]]
test_vcgtzq_f32(float32x4_t a)591*67e74705SXin Li uint32x4_t test_vcgtzq_f32(float32x4_t a) {
592*67e74705SXin Li   return vcgtzq_f32(a);
593*67e74705SXin Li }
594*67e74705SXin Li 
595*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vcgtzq_f64(<2 x double> %a) #0 {
596*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
597*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
598*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fcmp ogt <2 x double> [[TMP1]], zeroinitializer
599*67e74705SXin Li // CHECK:   [[VCGTZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i64>
600*67e74705SXin Li // CHECK:   ret <2 x i64> [[VCGTZ_I]]
test_vcgtzq_f64(float64x2_t a)601*67e74705SXin Li uint64x2_t test_vcgtzq_f64(float64x2_t a) {
602*67e74705SXin Li   return vcgtzq_f64(a);
603*67e74705SXin Li }
604*67e74705SXin Li 
605*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vcltz_s8(<8 x i8> %a) #0 {
606*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = icmp slt <8 x i8> %a, zeroinitializer
607*67e74705SXin Li // CHECK:   [[VCLTZ_I:%.*]] = sext <8 x i1> [[TMP0]] to <8 x i8>
608*67e74705SXin Li // CHECK:   ret <8 x i8> [[VCLTZ_I]]
test_vcltz_s8(int8x8_t a)609*67e74705SXin Li uint8x8_t test_vcltz_s8(int8x8_t a) {
610*67e74705SXin Li   return vcltz_s8(a);
611*67e74705SXin Li }
612*67e74705SXin Li 
613*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vcltz_s16(<4 x i16> %a) #0 {
614*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
615*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
616*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp slt <4 x i16> [[TMP1]], zeroinitializer
617*67e74705SXin Li // CHECK:   [[VCLTZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i16>
618*67e74705SXin Li // CHECK:   ret <4 x i16> [[VCLTZ_I]]
test_vcltz_s16(int16x4_t a)619*67e74705SXin Li uint16x4_t test_vcltz_s16(int16x4_t a) {
620*67e74705SXin Li   return vcltz_s16(a);
621*67e74705SXin Li }
622*67e74705SXin Li 
623*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vcltz_s32(<2 x i32> %a) #0 {
624*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
625*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
626*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp slt <2 x i32> [[TMP1]], zeroinitializer
627*67e74705SXin Li // CHECK:   [[VCLTZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i32>
628*67e74705SXin Li // CHECK:   ret <2 x i32> [[VCLTZ_I]]
test_vcltz_s32(int32x2_t a)629*67e74705SXin Li uint32x2_t test_vcltz_s32(int32x2_t a) {
630*67e74705SXin Li   return vcltz_s32(a);
631*67e74705SXin Li }
632*67e74705SXin Li 
633*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vcltz_s64(<1 x i64> %a) #0 {
634*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8>
635*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
636*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp slt <1 x i64> [[TMP1]], zeroinitializer
637*67e74705SXin Li // CHECK:   [[VCLTZ_I:%.*]] = sext <1 x i1> [[TMP2]] to <1 x i64>
638*67e74705SXin Li // CHECK:   ret <1 x i64> [[VCLTZ_I]]
test_vcltz_s64(int64x1_t a)639*67e74705SXin Li uint64x1_t test_vcltz_s64(int64x1_t a) {
640*67e74705SXin Li   return vcltz_s64(a);
641*67e74705SXin Li }
642*67e74705SXin Li 
643*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vcltzq_s8(<16 x i8> %a) #0 {
644*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = icmp slt <16 x i8> %a, zeroinitializer
645*67e74705SXin Li // CHECK:   [[VCLTZ_I:%.*]] = sext <16 x i1> [[TMP0]] to <16 x i8>
646*67e74705SXin Li // CHECK:   ret <16 x i8> [[VCLTZ_I]]
test_vcltzq_s8(int8x16_t a)647*67e74705SXin Li uint8x16_t test_vcltzq_s8(int8x16_t a) {
648*67e74705SXin Li   return vcltzq_s8(a);
649*67e74705SXin Li }
650*67e74705SXin Li 
651*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vcltzq_s16(<8 x i16> %a) #0 {
652*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
653*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
654*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp slt <8 x i16> [[TMP1]], zeroinitializer
655*67e74705SXin Li // CHECK:   [[VCLTZ_I:%.*]] = sext <8 x i1> [[TMP2]] to <8 x i16>
656*67e74705SXin Li // CHECK:   ret <8 x i16> [[VCLTZ_I]]
test_vcltzq_s16(int16x8_t a)657*67e74705SXin Li uint16x8_t test_vcltzq_s16(int16x8_t a) {
658*67e74705SXin Li   return vcltzq_s16(a);
659*67e74705SXin Li }
660*67e74705SXin Li 
661*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vcltzq_s32(<4 x i32> %a) #0 {
662*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
663*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
664*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp slt <4 x i32> [[TMP1]], zeroinitializer
665*67e74705SXin Li // CHECK:   [[VCLTZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i32>
666*67e74705SXin Li // CHECK:   ret <4 x i32> [[VCLTZ_I]]
test_vcltzq_s32(int32x4_t a)667*67e74705SXin Li uint32x4_t test_vcltzq_s32(int32x4_t a) {
668*67e74705SXin Li   return vcltzq_s32(a);
669*67e74705SXin Li }
670*67e74705SXin Li 
671*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vcltzq_s64(<2 x i64> %a) #0 {
672*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
673*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
674*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = icmp slt <2 x i64> [[TMP1]], zeroinitializer
675*67e74705SXin Li // CHECK:   [[VCLTZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i64>
676*67e74705SXin Li // CHECK:   ret <2 x i64> [[VCLTZ_I]]
test_vcltzq_s64(int64x2_t a)677*67e74705SXin Li uint64x2_t test_vcltzq_s64(int64x2_t a) {
678*67e74705SXin Li   return vcltzq_s64(a);
679*67e74705SXin Li }
680*67e74705SXin Li 
681*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vcltz_f32(<2 x float> %a) #0 {
682*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
683*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
684*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fcmp olt <2 x float> [[TMP1]], zeroinitializer
685*67e74705SXin Li // CHECK:   [[VCLTZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i32>
686*67e74705SXin Li // CHECK:   ret <2 x i32> [[VCLTZ_I]]
test_vcltz_f32(float32x2_t a)687*67e74705SXin Li uint32x2_t test_vcltz_f32(float32x2_t a) {
688*67e74705SXin Li   return vcltz_f32(a);
689*67e74705SXin Li }
690*67e74705SXin Li 
691*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vcltz_f64(<1 x double> %a) #0 {
692*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <1 x double> %a to <8 x i8>
693*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x double>
694*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fcmp olt <1 x double> [[TMP1]], zeroinitializer
695*67e74705SXin Li // CHECK:   [[VCLTZ_I:%.*]] = sext <1 x i1> [[TMP2]] to <1 x i64>
696*67e74705SXin Li // CHECK:   ret <1 x i64> [[VCLTZ_I]]
test_vcltz_f64(float64x1_t a)697*67e74705SXin Li uint64x1_t test_vcltz_f64(float64x1_t a) {
698*67e74705SXin Li   return vcltz_f64(a);
699*67e74705SXin Li }
700*67e74705SXin Li 
701*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vcltzq_f32(<4 x float> %a) #0 {
702*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
703*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
704*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fcmp olt <4 x float> [[TMP1]], zeroinitializer
705*67e74705SXin Li // CHECK:   [[VCLTZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i32>
706*67e74705SXin Li // CHECK:   ret <4 x i32> [[VCLTZ_I]]
test_vcltzq_f32(float32x4_t a)707*67e74705SXin Li uint32x4_t test_vcltzq_f32(float32x4_t a) {
708*67e74705SXin Li   return vcltzq_f32(a);
709*67e74705SXin Li }
710*67e74705SXin Li 
711*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vcltzq_f64(<2 x double> %a) #0 {
712*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
713*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
714*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fcmp olt <2 x double> [[TMP1]], zeroinitializer
715*67e74705SXin Li // CHECK:   [[VCLTZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i64>
716*67e74705SXin Li // CHECK:   ret <2 x i64> [[VCLTZ_I]]
test_vcltzq_f64(float64x2_t a)717*67e74705SXin Li uint64x2_t test_vcltzq_f64(float64x2_t a) {
718*67e74705SXin Li   return vcltzq_f64(a);
719*67e74705SXin Li }
720*67e74705SXin Li 
721*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vrev16_s8(<8 x i8> %a) #0 {
722*67e74705SXin Li // 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>
723*67e74705SXin Li // CHECK:   ret <8 x i8> [[SHUFFLE_I]]
test_vrev16_s8(int8x8_t a)724*67e74705SXin Li int8x8_t test_vrev16_s8(int8x8_t a) {
725*67e74705SXin Li   return vrev16_s8(a);
726*67e74705SXin Li }
727*67e74705SXin Li 
728*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vrev16_u8(<8 x i8> %a) #0 {
729*67e74705SXin Li // 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>
730*67e74705SXin Li // CHECK:   ret <8 x i8> [[SHUFFLE_I]]
test_vrev16_u8(uint8x8_t a)731*67e74705SXin Li uint8x8_t test_vrev16_u8(uint8x8_t a) {
732*67e74705SXin Li   return vrev16_u8(a);
733*67e74705SXin Li }
734*67e74705SXin Li 
735*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vrev16_p8(<8 x i8> %a) #0 {
736*67e74705SXin Li // 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>
737*67e74705SXin Li // CHECK:   ret <8 x i8> [[SHUFFLE_I]]
test_vrev16_p8(poly8x8_t a)738*67e74705SXin Li poly8x8_t test_vrev16_p8(poly8x8_t a) {
739*67e74705SXin Li   return vrev16_p8(a);
740*67e74705SXin Li }
741*67e74705SXin Li 
742*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vrev16q_s8(<16 x i8> %a) #0 {
743*67e74705SXin Li // 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>
744*67e74705SXin Li // CHECK:   ret <16 x i8> [[SHUFFLE_I]]
test_vrev16q_s8(int8x16_t a)745*67e74705SXin Li int8x16_t test_vrev16q_s8(int8x16_t a) {
746*67e74705SXin Li   return vrev16q_s8(a);
747*67e74705SXin Li }
748*67e74705SXin Li 
749*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vrev16q_u8(<16 x i8> %a) #0 {
750*67e74705SXin Li // 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>
751*67e74705SXin Li // CHECK:   ret <16 x i8> [[SHUFFLE_I]]
test_vrev16q_u8(uint8x16_t a)752*67e74705SXin Li uint8x16_t test_vrev16q_u8(uint8x16_t a) {
753*67e74705SXin Li   return vrev16q_u8(a);
754*67e74705SXin Li }
755*67e74705SXin Li 
756*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vrev16q_p8(<16 x i8> %a) #0 {
757*67e74705SXin Li // 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>
758*67e74705SXin Li // CHECK:   ret <16 x i8> [[SHUFFLE_I]]
test_vrev16q_p8(poly8x16_t a)759*67e74705SXin Li poly8x16_t test_vrev16q_p8(poly8x16_t a) {
760*67e74705SXin Li   return vrev16q_p8(a);
761*67e74705SXin Li }
762*67e74705SXin Li 
763*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vrev32_s8(<8 x i8> %a) #0 {
764*67e74705SXin Li // 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>
765*67e74705SXin Li // CHECK:   ret <8 x i8> [[SHUFFLE_I]]
test_vrev32_s8(int8x8_t a)766*67e74705SXin Li int8x8_t test_vrev32_s8(int8x8_t a) {
767*67e74705SXin Li   return vrev32_s8(a);
768*67e74705SXin Li }
769*67e74705SXin Li 
770*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vrev32_s16(<4 x i16> %a) #0 {
771*67e74705SXin Li // CHECK:   [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
772*67e74705SXin Li // CHECK:   ret <4 x i16> [[SHUFFLE_I]]
test_vrev32_s16(int16x4_t a)773*67e74705SXin Li int16x4_t test_vrev32_s16(int16x4_t a) {
774*67e74705SXin Li   return vrev32_s16(a);
775*67e74705SXin Li }
776*67e74705SXin Li 
777*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vrev32_u8(<8 x i8> %a) #0 {
778*67e74705SXin Li // 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>
779*67e74705SXin Li // CHECK:   ret <8 x i8> [[SHUFFLE_I]]
test_vrev32_u8(uint8x8_t a)780*67e74705SXin Li uint8x8_t test_vrev32_u8(uint8x8_t a) {
781*67e74705SXin Li   return vrev32_u8(a);
782*67e74705SXin Li }
783*67e74705SXin Li 
784*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vrev32_u16(<4 x i16> %a) #0 {
785*67e74705SXin Li // CHECK:   [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
786*67e74705SXin Li // CHECK:   ret <4 x i16> [[SHUFFLE_I]]
test_vrev32_u16(uint16x4_t a)787*67e74705SXin Li uint16x4_t test_vrev32_u16(uint16x4_t a) {
788*67e74705SXin Li   return vrev32_u16(a);
789*67e74705SXin Li }
790*67e74705SXin Li 
791*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vrev32_p8(<8 x i8> %a) #0 {
792*67e74705SXin Li // 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>
793*67e74705SXin Li // CHECK:   ret <8 x i8> [[SHUFFLE_I]]
test_vrev32_p8(poly8x8_t a)794*67e74705SXin Li poly8x8_t test_vrev32_p8(poly8x8_t a) {
795*67e74705SXin Li   return vrev32_p8(a);
796*67e74705SXin Li }
797*67e74705SXin Li 
798*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vrev32_p16(<4 x i16> %a) #0 {
799*67e74705SXin Li // CHECK:   [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
800*67e74705SXin Li // CHECK:   ret <4 x i16> [[SHUFFLE_I]]
test_vrev32_p16(poly16x4_t a)801*67e74705SXin Li poly16x4_t test_vrev32_p16(poly16x4_t a) {
802*67e74705SXin Li   return vrev32_p16(a);
803*67e74705SXin Li }
804*67e74705SXin Li 
805*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vrev32q_s8(<16 x i8> %a) #0 {
806*67e74705SXin Li // 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>
807*67e74705SXin Li // CHECK:   ret <16 x i8> [[SHUFFLE_I]]
test_vrev32q_s8(int8x16_t a)808*67e74705SXin Li int8x16_t test_vrev32q_s8(int8x16_t a) {
809*67e74705SXin Li   return vrev32q_s8(a);
810*67e74705SXin Li }
811*67e74705SXin Li 
812*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vrev32q_s16(<8 x i16> %a) #0 {
813*67e74705SXin Li // 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>
814*67e74705SXin Li // CHECK:   ret <8 x i16> [[SHUFFLE_I]]
test_vrev32q_s16(int16x8_t a)815*67e74705SXin Li int16x8_t test_vrev32q_s16(int16x8_t a) {
816*67e74705SXin Li   return vrev32q_s16(a);
817*67e74705SXin Li }
818*67e74705SXin Li 
819*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vrev32q_u8(<16 x i8> %a) #0 {
820*67e74705SXin Li // 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>
821*67e74705SXin Li // CHECK:   ret <16 x i8> [[SHUFFLE_I]]
test_vrev32q_u8(uint8x16_t a)822*67e74705SXin Li uint8x16_t test_vrev32q_u8(uint8x16_t a) {
823*67e74705SXin Li   return vrev32q_u8(a);
824*67e74705SXin Li }
825*67e74705SXin Li 
826*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vrev32q_u16(<8 x i16> %a) #0 {
827*67e74705SXin Li // 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>
828*67e74705SXin Li // CHECK:   ret <8 x i16> [[SHUFFLE_I]]
test_vrev32q_u16(uint16x8_t a)829*67e74705SXin Li uint16x8_t test_vrev32q_u16(uint16x8_t a) {
830*67e74705SXin Li   return vrev32q_u16(a);
831*67e74705SXin Li }
832*67e74705SXin Li 
833*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vrev32q_p8(<16 x i8> %a) #0 {
834*67e74705SXin Li // 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>
835*67e74705SXin Li // CHECK:   ret <16 x i8> [[SHUFFLE_I]]
test_vrev32q_p8(poly8x16_t a)836*67e74705SXin Li poly8x16_t test_vrev32q_p8(poly8x16_t a) {
837*67e74705SXin Li   return vrev32q_p8(a);
838*67e74705SXin Li }
839*67e74705SXin Li 
840*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vrev32q_p16(<8 x i16> %a) #0 {
841*67e74705SXin Li // 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>
842*67e74705SXin Li // CHECK:   ret <8 x i16> [[SHUFFLE_I]]
test_vrev32q_p16(poly16x8_t a)843*67e74705SXin Li poly16x8_t test_vrev32q_p16(poly16x8_t a) {
844*67e74705SXin Li   return vrev32q_p16(a);
845*67e74705SXin Li }
846*67e74705SXin Li 
847*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vrev64_s8(<8 x i8> %a) #0 {
848*67e74705SXin Li // 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>
849*67e74705SXin Li // CHECK:   ret <8 x i8> [[SHUFFLE_I]]
test_vrev64_s8(int8x8_t a)850*67e74705SXin Li int8x8_t test_vrev64_s8(int8x8_t a) {
851*67e74705SXin Li   return vrev64_s8(a);
852*67e74705SXin Li }
853*67e74705SXin Li 
854*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vrev64_s16(<4 x i16> %a) #0 {
855*67e74705SXin Li // CHECK:   [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
856*67e74705SXin Li // CHECK:   ret <4 x i16> [[SHUFFLE_I]]
test_vrev64_s16(int16x4_t a)857*67e74705SXin Li int16x4_t test_vrev64_s16(int16x4_t a) {
858*67e74705SXin Li   return vrev64_s16(a);
859*67e74705SXin Li }
860*67e74705SXin Li 
861*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vrev64_s32(<2 x i32> %a) #0 {
862*67e74705SXin Li // CHECK:   [[SHUFFLE_I:%.*]] = shufflevector <2 x i32> %a, <2 x i32> %a, <2 x i32> <i32 1, i32 0>
863*67e74705SXin Li // CHECK:   ret <2 x i32> [[SHUFFLE_I]]
test_vrev64_s32(int32x2_t a)864*67e74705SXin Li int32x2_t test_vrev64_s32(int32x2_t a) {
865*67e74705SXin Li   return vrev64_s32(a);
866*67e74705SXin Li }
867*67e74705SXin Li 
868*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vrev64_u8(<8 x i8> %a) #0 {
869*67e74705SXin Li // 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>
870*67e74705SXin Li // CHECK:   ret <8 x i8> [[SHUFFLE_I]]
test_vrev64_u8(uint8x8_t a)871*67e74705SXin Li uint8x8_t test_vrev64_u8(uint8x8_t a) {
872*67e74705SXin Li   return vrev64_u8(a);
873*67e74705SXin Li }
874*67e74705SXin Li 
875*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vrev64_u16(<4 x i16> %a) #0 {
876*67e74705SXin Li // CHECK:   [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
877*67e74705SXin Li // CHECK:   ret <4 x i16> [[SHUFFLE_I]]
test_vrev64_u16(uint16x4_t a)878*67e74705SXin Li uint16x4_t test_vrev64_u16(uint16x4_t a) {
879*67e74705SXin Li   return vrev64_u16(a);
880*67e74705SXin Li }
881*67e74705SXin Li 
882*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vrev64_u32(<2 x i32> %a) #0 {
883*67e74705SXin Li // CHECK:   [[SHUFFLE_I:%.*]] = shufflevector <2 x i32> %a, <2 x i32> %a, <2 x i32> <i32 1, i32 0>
884*67e74705SXin Li // CHECK:   ret <2 x i32> [[SHUFFLE_I]]
test_vrev64_u32(uint32x2_t a)885*67e74705SXin Li uint32x2_t test_vrev64_u32(uint32x2_t a) {
886*67e74705SXin Li   return vrev64_u32(a);
887*67e74705SXin Li }
888*67e74705SXin Li 
889*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vrev64_p8(<8 x i8> %a) #0 {
890*67e74705SXin Li // 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>
891*67e74705SXin Li // CHECK:   ret <8 x i8> [[SHUFFLE_I]]
test_vrev64_p8(poly8x8_t a)892*67e74705SXin Li poly8x8_t test_vrev64_p8(poly8x8_t a) {
893*67e74705SXin Li   return vrev64_p8(a);
894*67e74705SXin Li }
895*67e74705SXin Li 
896*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vrev64_p16(<4 x i16> %a) #0 {
897*67e74705SXin Li // CHECK:   [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
898*67e74705SXin Li // CHECK:   ret <4 x i16> [[SHUFFLE_I]]
test_vrev64_p16(poly16x4_t a)899*67e74705SXin Li poly16x4_t test_vrev64_p16(poly16x4_t a) {
900*67e74705SXin Li   return vrev64_p16(a);
901*67e74705SXin Li }
902*67e74705SXin Li 
903*67e74705SXin Li // CHECK-LABEL: define <2 x float> @test_vrev64_f32(<2 x float> %a) #0 {
904*67e74705SXin Li // CHECK:   [[SHUFFLE_I:%.*]] = shufflevector <2 x float> %a, <2 x float> %a, <2 x i32> <i32 1, i32 0>
905*67e74705SXin Li // CHECK:   ret <2 x float> [[SHUFFLE_I]]
test_vrev64_f32(float32x2_t a)906*67e74705SXin Li float32x2_t test_vrev64_f32(float32x2_t a) {
907*67e74705SXin Li   return vrev64_f32(a);
908*67e74705SXin Li }
909*67e74705SXin Li 
910*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vrev64q_s8(<16 x i8> %a) #0 {
911*67e74705SXin Li // 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>
912*67e74705SXin Li // CHECK:   ret <16 x i8> [[SHUFFLE_I]]
test_vrev64q_s8(int8x16_t a)913*67e74705SXin Li int8x16_t test_vrev64q_s8(int8x16_t a) {
914*67e74705SXin Li   return vrev64q_s8(a);
915*67e74705SXin Li }
916*67e74705SXin Li 
917*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vrev64q_s16(<8 x i16> %a) #0 {
918*67e74705SXin Li // 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>
919*67e74705SXin Li // CHECK:   ret <8 x i16> [[SHUFFLE_I]]
test_vrev64q_s16(int16x8_t a)920*67e74705SXin Li int16x8_t test_vrev64q_s16(int16x8_t a) {
921*67e74705SXin Li   return vrev64q_s16(a);
922*67e74705SXin Li }
923*67e74705SXin Li 
924*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vrev64q_s32(<4 x i32> %a) #0 {
925*67e74705SXin Li // CHECK:   [[SHUFFLE_I:%.*]] = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
926*67e74705SXin Li // CHECK:   ret <4 x i32> [[SHUFFLE_I]]
test_vrev64q_s32(int32x4_t a)927*67e74705SXin Li int32x4_t test_vrev64q_s32(int32x4_t a) {
928*67e74705SXin Li   return vrev64q_s32(a);
929*67e74705SXin Li }
930*67e74705SXin Li 
931*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vrev64q_u8(<16 x i8> %a) #0 {
932*67e74705SXin Li // 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>
933*67e74705SXin Li // CHECK:   ret <16 x i8> [[SHUFFLE_I]]
test_vrev64q_u8(uint8x16_t a)934*67e74705SXin Li uint8x16_t test_vrev64q_u8(uint8x16_t a) {
935*67e74705SXin Li   return vrev64q_u8(a);
936*67e74705SXin Li }
937*67e74705SXin Li 
938*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vrev64q_u16(<8 x i16> %a) #0 {
939*67e74705SXin Li // 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>
940*67e74705SXin Li // CHECK:   ret <8 x i16> [[SHUFFLE_I]]
test_vrev64q_u16(uint16x8_t a)941*67e74705SXin Li uint16x8_t test_vrev64q_u16(uint16x8_t a) {
942*67e74705SXin Li   return vrev64q_u16(a);
943*67e74705SXin Li }
944*67e74705SXin Li 
945*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vrev64q_u32(<4 x i32> %a) #0 {
946*67e74705SXin Li // CHECK:   [[SHUFFLE_I:%.*]] = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
947*67e74705SXin Li // CHECK:   ret <4 x i32> [[SHUFFLE_I]]
test_vrev64q_u32(uint32x4_t a)948*67e74705SXin Li uint32x4_t test_vrev64q_u32(uint32x4_t a) {
949*67e74705SXin Li   return vrev64q_u32(a);
950*67e74705SXin Li }
951*67e74705SXin Li 
952*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vrev64q_p8(<16 x i8> %a) #0 {
953*67e74705SXin Li // 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>
954*67e74705SXin Li // CHECK:   ret <16 x i8> [[SHUFFLE_I]]
test_vrev64q_p8(poly8x16_t a)955*67e74705SXin Li poly8x16_t test_vrev64q_p8(poly8x16_t a) {
956*67e74705SXin Li   return vrev64q_p8(a);
957*67e74705SXin Li }
958*67e74705SXin Li 
959*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vrev64q_p16(<8 x i16> %a) #0 {
960*67e74705SXin Li // 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>
961*67e74705SXin Li // CHECK:   ret <8 x i16> [[SHUFFLE_I]]
test_vrev64q_p16(poly16x8_t a)962*67e74705SXin Li poly16x8_t test_vrev64q_p16(poly16x8_t a) {
963*67e74705SXin Li   return vrev64q_p16(a);
964*67e74705SXin Li }
965*67e74705SXin Li 
966*67e74705SXin Li // CHECK-LABEL: define <4 x float> @test_vrev64q_f32(<4 x float> %a) #0 {
967*67e74705SXin Li // CHECK:   [[SHUFFLE_I:%.*]] = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
968*67e74705SXin Li // CHECK:   ret <4 x float> [[SHUFFLE_I]]
test_vrev64q_f32(float32x4_t a)969*67e74705SXin Li float32x4_t test_vrev64q_f32(float32x4_t a) {
970*67e74705SXin Li   return vrev64q_f32(a);
971*67e74705SXin Li }
972*67e74705SXin Li 
973*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vpaddl_s8(<8 x i8> %a) #0 {
974*67e74705SXin Li // CHECK:   [[VPADDL_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.saddlp.v4i16.v8i8(<8 x i8> %a) #2
975*67e74705SXin Li // CHECK:   ret <4 x i16> [[VPADDL_I]]
test_vpaddl_s8(int8x8_t a)976*67e74705SXin Li int16x4_t test_vpaddl_s8(int8x8_t a) {
977*67e74705SXin Li   return vpaddl_s8(a);
978*67e74705SXin Li }
979*67e74705SXin Li 
980*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vpaddl_s16(<4 x i16> %a) #0 {
981*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
982*67e74705SXin Li // CHECK:   [[VPADDL_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
983*67e74705SXin Li // CHECK:   [[VPADDL1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.saddlp.v2i32.v4i16(<4 x i16> [[VPADDL_I]]) #2
984*67e74705SXin Li // CHECK:   ret <2 x i32> [[VPADDL1_I]]
test_vpaddl_s16(int16x4_t a)985*67e74705SXin Li int32x2_t test_vpaddl_s16(int16x4_t a) {
986*67e74705SXin Li   return vpaddl_s16(a);
987*67e74705SXin Li }
988*67e74705SXin Li 
989*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vpaddl_s32(<2 x i32> %a) #0 {
990*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
991*67e74705SXin Li // CHECK:   [[VPADDL_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
992*67e74705SXin Li // CHECK:   [[VPADDL1_I:%.*]] = call <1 x i64> @llvm.aarch64.neon.saddlp.v1i64.v2i32(<2 x i32> [[VPADDL_I]]) #2
993*67e74705SXin Li // CHECK:   ret <1 x i64> [[VPADDL1_I]]
test_vpaddl_s32(int32x2_t a)994*67e74705SXin Li int64x1_t test_vpaddl_s32(int32x2_t a) {
995*67e74705SXin Li   return vpaddl_s32(a);
996*67e74705SXin Li }
997*67e74705SXin Li 
998*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vpaddl_u8(<8 x i8> %a) #0 {
999*67e74705SXin Li // CHECK:   [[VPADDL_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.uaddlp.v4i16.v8i8(<8 x i8> %a) #2
1000*67e74705SXin Li // CHECK:   ret <4 x i16> [[VPADDL_I]]
test_vpaddl_u8(uint8x8_t a)1001*67e74705SXin Li uint16x4_t test_vpaddl_u8(uint8x8_t a) {
1002*67e74705SXin Li   return vpaddl_u8(a);
1003*67e74705SXin Li }
1004*67e74705SXin Li 
1005*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vpaddl_u16(<4 x i16> %a) #0 {
1006*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
1007*67e74705SXin Li // CHECK:   [[VPADDL_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
1008*67e74705SXin Li // CHECK:   [[VPADDL1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.uaddlp.v2i32.v4i16(<4 x i16> [[VPADDL_I]]) #2
1009*67e74705SXin Li // CHECK:   ret <2 x i32> [[VPADDL1_I]]
test_vpaddl_u16(uint16x4_t a)1010*67e74705SXin Li uint32x2_t test_vpaddl_u16(uint16x4_t a) {
1011*67e74705SXin Li   return vpaddl_u16(a);
1012*67e74705SXin Li }
1013*67e74705SXin Li 
1014*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vpaddl_u32(<2 x i32> %a) #0 {
1015*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
1016*67e74705SXin Li // CHECK:   [[VPADDL_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
1017*67e74705SXin Li // CHECK:   [[VPADDL1_I:%.*]] = call <1 x i64> @llvm.aarch64.neon.uaddlp.v1i64.v2i32(<2 x i32> [[VPADDL_I]]) #2
1018*67e74705SXin Li // CHECK:   ret <1 x i64> [[VPADDL1_I]]
test_vpaddl_u32(uint32x2_t a)1019*67e74705SXin Li uint64x1_t test_vpaddl_u32(uint32x2_t a) {
1020*67e74705SXin Li   return vpaddl_u32(a);
1021*67e74705SXin Li }
1022*67e74705SXin Li 
1023*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vpaddlq_s8(<16 x i8> %a) #0 {
1024*67e74705SXin Li // CHECK:   [[VPADDL_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.saddlp.v8i16.v16i8(<16 x i8> %a) #2
1025*67e74705SXin Li // CHECK:   ret <8 x i16> [[VPADDL_I]]
test_vpaddlq_s8(int8x16_t a)1026*67e74705SXin Li int16x8_t test_vpaddlq_s8(int8x16_t a) {
1027*67e74705SXin Li   return vpaddlq_s8(a);
1028*67e74705SXin Li }
1029*67e74705SXin Li 
1030*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vpaddlq_s16(<8 x i16> %a) #0 {
1031*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1032*67e74705SXin Li // CHECK:   [[VPADDL_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
1033*67e74705SXin Li // CHECK:   [[VPADDL1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.saddlp.v4i32.v8i16(<8 x i16> [[VPADDL_I]]) #2
1034*67e74705SXin Li // CHECK:   ret <4 x i32> [[VPADDL1_I]]
test_vpaddlq_s16(int16x8_t a)1035*67e74705SXin Li int32x4_t test_vpaddlq_s16(int16x8_t a) {
1036*67e74705SXin Li   return vpaddlq_s16(a);
1037*67e74705SXin Li }
1038*67e74705SXin Li 
1039*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vpaddlq_s32(<4 x i32> %a) #0 {
1040*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1041*67e74705SXin Li // CHECK:   [[VPADDL_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
1042*67e74705SXin Li // CHECK:   [[VPADDL1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.saddlp.v2i64.v4i32(<4 x i32> [[VPADDL_I]]) #2
1043*67e74705SXin Li // CHECK:   ret <2 x i64> [[VPADDL1_I]]
test_vpaddlq_s32(int32x4_t a)1044*67e74705SXin Li int64x2_t test_vpaddlq_s32(int32x4_t a) {
1045*67e74705SXin Li   return vpaddlq_s32(a);
1046*67e74705SXin Li }
1047*67e74705SXin Li 
1048*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vpaddlq_u8(<16 x i8> %a) #0 {
1049*67e74705SXin Li // CHECK:   [[VPADDL_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.uaddlp.v8i16.v16i8(<16 x i8> %a) #2
1050*67e74705SXin Li // CHECK:   ret <8 x i16> [[VPADDL_I]]
test_vpaddlq_u8(uint8x16_t a)1051*67e74705SXin Li uint16x8_t test_vpaddlq_u8(uint8x16_t a) {
1052*67e74705SXin Li   return vpaddlq_u8(a);
1053*67e74705SXin Li }
1054*67e74705SXin Li 
1055*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vpaddlq_u16(<8 x i16> %a) #0 {
1056*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1057*67e74705SXin Li // CHECK:   [[VPADDL_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
1058*67e74705SXin Li // CHECK:   [[VPADDL1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.uaddlp.v4i32.v8i16(<8 x i16> [[VPADDL_I]]) #2
1059*67e74705SXin Li // CHECK:   ret <4 x i32> [[VPADDL1_I]]
test_vpaddlq_u16(uint16x8_t a)1060*67e74705SXin Li uint32x4_t test_vpaddlq_u16(uint16x8_t a) {
1061*67e74705SXin Li   return vpaddlq_u16(a);
1062*67e74705SXin Li }
1063*67e74705SXin Li 
1064*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vpaddlq_u32(<4 x i32> %a) #0 {
1065*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1066*67e74705SXin Li // CHECK:   [[VPADDL_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
1067*67e74705SXin Li // CHECK:   [[VPADDL1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.uaddlp.v2i64.v4i32(<4 x i32> [[VPADDL_I]]) #2
1068*67e74705SXin Li // CHECK:   ret <2 x i64> [[VPADDL1_I]]
test_vpaddlq_u32(uint32x4_t a)1069*67e74705SXin Li uint64x2_t test_vpaddlq_u32(uint32x4_t a) {
1070*67e74705SXin Li   return vpaddlq_u32(a);
1071*67e74705SXin Li }
1072*67e74705SXin Li 
1073*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vpadal_s8(<4 x i16> %a, <8 x i8> %b) #0 {
1074*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
1075*67e74705SXin Li // CHECK:   [[VPADAL_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.saddlp.v4i16.v8i8(<8 x i8> %b) #2
1076*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
1077*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = add <4 x i16> [[VPADAL_I]], [[TMP1]]
1078*67e74705SXin Li // CHECK:   ret <4 x i16> [[TMP2]]
test_vpadal_s8(int16x4_t a,int8x8_t b)1079*67e74705SXin Li int16x4_t test_vpadal_s8(int16x4_t a, int8x8_t b) {
1080*67e74705SXin Li   return vpadal_s8(a, b);
1081*67e74705SXin Li }
1082*67e74705SXin Li 
1083*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vpadal_s16(<2 x i32> %a, <4 x i16> %b) #0 {
1084*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
1085*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <4 x i16> %b to <8 x i8>
1086*67e74705SXin Li // CHECK:   [[VPADAL_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <4 x i16>
1087*67e74705SXin Li // CHECK:   [[VPADAL1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.saddlp.v2i32.v4i16(<4 x i16> [[VPADAL_I]]) #2
1088*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
1089*67e74705SXin Li // CHECK:   [[TMP3:%.*]] = add <2 x i32> [[VPADAL1_I]], [[TMP2]]
1090*67e74705SXin Li // CHECK:   ret <2 x i32> [[TMP3]]
test_vpadal_s16(int32x2_t a,int16x4_t b)1091*67e74705SXin Li int32x2_t test_vpadal_s16(int32x2_t a, int16x4_t b) {
1092*67e74705SXin Li   return vpadal_s16(a, b);
1093*67e74705SXin Li }
1094*67e74705SXin Li 
1095*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vpadal_s32(<1 x i64> %a, <2 x i32> %b) #0 {
1096*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8>
1097*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <2 x i32> %b to <8 x i8>
1098*67e74705SXin Li // CHECK:   [[VPADAL_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x i32>
1099*67e74705SXin Li // CHECK:   [[VPADAL1_I:%.*]] = call <1 x i64> @llvm.aarch64.neon.saddlp.v1i64.v2i32(<2 x i32> [[VPADAL_I]]) #2
1100*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
1101*67e74705SXin Li // CHECK:   [[TMP3:%.*]] = add <1 x i64> [[VPADAL1_I]], [[TMP2]]
1102*67e74705SXin Li // CHECK:   ret <1 x i64> [[TMP3]]
test_vpadal_s32(int64x1_t a,int32x2_t b)1103*67e74705SXin Li int64x1_t test_vpadal_s32(int64x1_t a, int32x2_t b) {
1104*67e74705SXin Li   return vpadal_s32(a, b);
1105*67e74705SXin Li }
1106*67e74705SXin Li 
1107*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vpadal_u8(<4 x i16> %a, <8 x i8> %b) #0 {
1108*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
1109*67e74705SXin Li // CHECK:   [[VPADAL_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.uaddlp.v4i16.v8i8(<8 x i8> %b) #2
1110*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
1111*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = add <4 x i16> [[VPADAL_I]], [[TMP1]]
1112*67e74705SXin Li // CHECK:   ret <4 x i16> [[TMP2]]
test_vpadal_u8(uint16x4_t a,uint8x8_t b)1113*67e74705SXin Li uint16x4_t test_vpadal_u8(uint16x4_t a, uint8x8_t b) {
1114*67e74705SXin Li   return vpadal_u8(a, b);
1115*67e74705SXin Li }
1116*67e74705SXin Li 
1117*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vpadal_u16(<2 x i32> %a, <4 x i16> %b) #0 {
1118*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
1119*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <4 x i16> %b to <8 x i8>
1120*67e74705SXin Li // CHECK:   [[VPADAL_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <4 x i16>
1121*67e74705SXin Li // CHECK:   [[VPADAL1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.uaddlp.v2i32.v4i16(<4 x i16> [[VPADAL_I]]) #2
1122*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
1123*67e74705SXin Li // CHECK:   [[TMP3:%.*]] = add <2 x i32> [[VPADAL1_I]], [[TMP2]]
1124*67e74705SXin Li // CHECK:   ret <2 x i32> [[TMP3]]
test_vpadal_u16(uint32x2_t a,uint16x4_t b)1125*67e74705SXin Li uint32x2_t test_vpadal_u16(uint32x2_t a, uint16x4_t b) {
1126*67e74705SXin Li   return vpadal_u16(a, b);
1127*67e74705SXin Li }
1128*67e74705SXin Li 
1129*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vpadal_u32(<1 x i64> %a, <2 x i32> %b) #0 {
1130*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8>
1131*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <2 x i32> %b to <8 x i8>
1132*67e74705SXin Li // CHECK:   [[VPADAL_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x i32>
1133*67e74705SXin Li // CHECK:   [[VPADAL1_I:%.*]] = call <1 x i64> @llvm.aarch64.neon.uaddlp.v1i64.v2i32(<2 x i32> [[VPADAL_I]]) #2
1134*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
1135*67e74705SXin Li // CHECK:   [[TMP3:%.*]] = add <1 x i64> [[VPADAL1_I]], [[TMP2]]
1136*67e74705SXin Li // CHECK:   ret <1 x i64> [[TMP3]]
test_vpadal_u32(uint64x1_t a,uint32x2_t b)1137*67e74705SXin Li uint64x1_t test_vpadal_u32(uint64x1_t a, uint32x2_t b) {
1138*67e74705SXin Li   return vpadal_u32(a, b);
1139*67e74705SXin Li }
1140*67e74705SXin Li 
1141*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vpadalq_s8(<8 x i16> %a, <16 x i8> %b) #0 {
1142*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1143*67e74705SXin Li // CHECK:   [[VPADAL_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.saddlp.v8i16.v16i8(<16 x i8> %b) #2
1144*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
1145*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = add <8 x i16> [[VPADAL_I]], [[TMP1]]
1146*67e74705SXin Li // CHECK:   ret <8 x i16> [[TMP2]]
test_vpadalq_s8(int16x8_t a,int8x16_t b)1147*67e74705SXin Li int16x8_t test_vpadalq_s8(int16x8_t a, int8x16_t b) {
1148*67e74705SXin Li   return vpadalq_s8(a, b);
1149*67e74705SXin Li }
1150*67e74705SXin Li 
1151*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vpadalq_s16(<4 x i32> %a, <8 x i16> %b) #0 {
1152*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1153*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i16> %b to <16 x i8>
1154*67e74705SXin Li // CHECK:   [[VPADAL_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <8 x i16>
1155*67e74705SXin Li // CHECK:   [[VPADAL1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.saddlp.v4i32.v8i16(<8 x i16> [[VPADAL_I]]) #2
1156*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
1157*67e74705SXin Li // CHECK:   [[TMP3:%.*]] = add <4 x i32> [[VPADAL1_I]], [[TMP2]]
1158*67e74705SXin Li // CHECK:   ret <4 x i32> [[TMP3]]
test_vpadalq_s16(int32x4_t a,int16x8_t b)1159*67e74705SXin Li int32x4_t test_vpadalq_s16(int32x4_t a, int16x8_t b) {
1160*67e74705SXin Li   return vpadalq_s16(a, b);
1161*67e74705SXin Li }
1162*67e74705SXin Li 
1163*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vpadalq_s32(<2 x i64> %a, <4 x i32> %b) #0 {
1164*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
1165*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <4 x i32> %b to <16 x i8>
1166*67e74705SXin Li // CHECK:   [[VPADAL_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x i32>
1167*67e74705SXin Li // CHECK:   [[VPADAL1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.saddlp.v2i64.v4i32(<4 x i32> [[VPADAL_I]]) #2
1168*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
1169*67e74705SXin Li // CHECK:   [[TMP3:%.*]] = add <2 x i64> [[VPADAL1_I]], [[TMP2]]
1170*67e74705SXin Li // CHECK:   ret <2 x i64> [[TMP3]]
test_vpadalq_s32(int64x2_t a,int32x4_t b)1171*67e74705SXin Li int64x2_t test_vpadalq_s32(int64x2_t a, int32x4_t b) {
1172*67e74705SXin Li   return vpadalq_s32(a, b);
1173*67e74705SXin Li }
1174*67e74705SXin Li 
1175*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vpadalq_u8(<8 x i16> %a, <16 x i8> %b) #0 {
1176*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1177*67e74705SXin Li // CHECK:   [[VPADAL_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.uaddlp.v8i16.v16i8(<16 x i8> %b) #2
1178*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
1179*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = add <8 x i16> [[VPADAL_I]], [[TMP1]]
1180*67e74705SXin Li // CHECK:   ret <8 x i16> [[TMP2]]
test_vpadalq_u8(uint16x8_t a,uint8x16_t b)1181*67e74705SXin Li uint16x8_t test_vpadalq_u8(uint16x8_t a, uint8x16_t b) {
1182*67e74705SXin Li   return vpadalq_u8(a, b);
1183*67e74705SXin Li }
1184*67e74705SXin Li 
1185*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vpadalq_u16(<4 x i32> %a, <8 x i16> %b) #0 {
1186*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1187*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i16> %b to <16 x i8>
1188*67e74705SXin Li // CHECK:   [[VPADAL_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <8 x i16>
1189*67e74705SXin Li // CHECK:   [[VPADAL1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.uaddlp.v4i32.v8i16(<8 x i16> [[VPADAL_I]]) #2
1190*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
1191*67e74705SXin Li // CHECK:   [[TMP3:%.*]] = add <4 x i32> [[VPADAL1_I]], [[TMP2]]
1192*67e74705SXin Li // CHECK:   ret <4 x i32> [[TMP3]]
test_vpadalq_u16(uint32x4_t a,uint16x8_t b)1193*67e74705SXin Li uint32x4_t test_vpadalq_u16(uint32x4_t a, uint16x8_t b) {
1194*67e74705SXin Li   return vpadalq_u16(a, b);
1195*67e74705SXin Li }
1196*67e74705SXin Li 
1197*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vpadalq_u32(<2 x i64> %a, <4 x i32> %b) #0 {
1198*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
1199*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <4 x i32> %b to <16 x i8>
1200*67e74705SXin Li // CHECK:   [[VPADAL_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x i32>
1201*67e74705SXin Li // CHECK:   [[VPADAL1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.uaddlp.v2i64.v4i32(<4 x i32> [[VPADAL_I]]) #2
1202*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
1203*67e74705SXin Li // CHECK:   [[TMP3:%.*]] = add <2 x i64> [[VPADAL1_I]], [[TMP2]]
1204*67e74705SXin Li // CHECK:   ret <2 x i64> [[TMP3]]
test_vpadalq_u32(uint64x2_t a,uint32x4_t b)1205*67e74705SXin Li uint64x2_t test_vpadalq_u32(uint64x2_t a, uint32x4_t b) {
1206*67e74705SXin Li   return vpadalq_u32(a, b);
1207*67e74705SXin Li }
1208*67e74705SXin Li 
1209*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vqabs_s8(<8 x i8> %a) #0 {
1210*67e74705SXin Li // CHECK:   [[VQABS_V_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqabs.v8i8(<8 x i8> %a) #2
1211*67e74705SXin Li // CHECK:   ret <8 x i8> [[VQABS_V_I]]
test_vqabs_s8(int8x8_t a)1212*67e74705SXin Li int8x8_t test_vqabs_s8(int8x8_t a) {
1213*67e74705SXin Li   return vqabs_s8(a);
1214*67e74705SXin Li }
1215*67e74705SXin Li 
1216*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vqabsq_s8(<16 x i8> %a) #0 {
1217*67e74705SXin Li // CHECK:   [[VQABSQ_V_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.sqabs.v16i8(<16 x i8> %a) #2
1218*67e74705SXin Li // CHECK:   ret <16 x i8> [[VQABSQ_V_I]]
test_vqabsq_s8(int8x16_t a)1219*67e74705SXin Li int8x16_t test_vqabsq_s8(int8x16_t a) {
1220*67e74705SXin Li   return vqabsq_s8(a);
1221*67e74705SXin Li }
1222*67e74705SXin Li 
1223*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vqabs_s16(<4 x i16> %a) #0 {
1224*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
1225*67e74705SXin Li // CHECK:   [[VQABS_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
1226*67e74705SXin Li // CHECK:   [[VQABS_V1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqabs.v4i16(<4 x i16> [[VQABS_V_I]]) #2
1227*67e74705SXin Li // CHECK:   [[VQABS_V2_I:%.*]] = bitcast <4 x i16> [[VQABS_V1_I]] to <8 x i8>
1228*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VQABS_V2_I]] to <4 x i16>
1229*67e74705SXin Li // CHECK:   ret <4 x i16> [[TMP1]]
test_vqabs_s16(int16x4_t a)1230*67e74705SXin Li int16x4_t test_vqabs_s16(int16x4_t a) {
1231*67e74705SXin Li   return vqabs_s16(a);
1232*67e74705SXin Li }
1233*67e74705SXin Li 
1234*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vqabsq_s16(<8 x i16> %a) #0 {
1235*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1236*67e74705SXin Li // CHECK:   [[VQABSQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
1237*67e74705SXin Li // CHECK:   [[VQABSQ_V1_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.sqabs.v8i16(<8 x i16> [[VQABSQ_V_I]]) #2
1238*67e74705SXin Li // CHECK:   [[VQABSQ_V2_I:%.*]] = bitcast <8 x i16> [[VQABSQ_V1_I]] to <16 x i8>
1239*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[VQABSQ_V2_I]] to <8 x i16>
1240*67e74705SXin Li // CHECK:   ret <8 x i16> [[TMP1]]
test_vqabsq_s16(int16x8_t a)1241*67e74705SXin Li int16x8_t test_vqabsq_s16(int16x8_t a) {
1242*67e74705SXin Li   return vqabsq_s16(a);
1243*67e74705SXin Li }
1244*67e74705SXin Li 
1245*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vqabs_s32(<2 x i32> %a) #0 {
1246*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
1247*67e74705SXin Li // CHECK:   [[VQABS_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
1248*67e74705SXin Li // CHECK:   [[VQABS_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqabs.v2i32(<2 x i32> [[VQABS_V_I]]) #2
1249*67e74705SXin Li // CHECK:   [[VQABS_V2_I:%.*]] = bitcast <2 x i32> [[VQABS_V1_I]] to <8 x i8>
1250*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VQABS_V2_I]] to <2 x i32>
1251*67e74705SXin Li // CHECK:   ret <2 x i32> [[TMP1]]
test_vqabs_s32(int32x2_t a)1252*67e74705SXin Li int32x2_t test_vqabs_s32(int32x2_t a) {
1253*67e74705SXin Li   return vqabs_s32(a);
1254*67e74705SXin Li }
1255*67e74705SXin Li 
1256*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vqabsq_s32(<4 x i32> %a) #0 {
1257*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1258*67e74705SXin Li // CHECK:   [[VQABSQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
1259*67e74705SXin Li // CHECK:   [[VQABSQ_V1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqabs.v4i32(<4 x i32> [[VQABSQ_V_I]]) #2
1260*67e74705SXin Li // CHECK:   [[VQABSQ_V2_I:%.*]] = bitcast <4 x i32> [[VQABSQ_V1_I]] to <16 x i8>
1261*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[VQABSQ_V2_I]] to <4 x i32>
1262*67e74705SXin Li // CHECK:   ret <4 x i32> [[TMP1]]
test_vqabsq_s32(int32x4_t a)1263*67e74705SXin Li int32x4_t test_vqabsq_s32(int32x4_t a) {
1264*67e74705SXin Li   return vqabsq_s32(a);
1265*67e74705SXin Li }
1266*67e74705SXin Li 
1267*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vqabsq_s64(<2 x i64> %a) #0 {
1268*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
1269*67e74705SXin Li // CHECK:   [[VQABSQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
1270*67e74705SXin Li // CHECK:   [[VQABSQ_V1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.sqabs.v2i64(<2 x i64> [[VQABSQ_V_I]]) #2
1271*67e74705SXin Li // CHECK:   [[VQABSQ_V2_I:%.*]] = bitcast <2 x i64> [[VQABSQ_V1_I]] to <16 x i8>
1272*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[VQABSQ_V2_I]] to <2 x i64>
1273*67e74705SXin Li // CHECK:   ret <2 x i64> [[TMP1]]
test_vqabsq_s64(int64x2_t a)1274*67e74705SXin Li int64x2_t test_vqabsq_s64(int64x2_t a) {
1275*67e74705SXin Li   return vqabsq_s64(a);
1276*67e74705SXin Li }
1277*67e74705SXin Li 
1278*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vqneg_s8(<8 x i8> %a) #0 {
1279*67e74705SXin Li // CHECK:   [[VQNEG_V_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqneg.v8i8(<8 x i8> %a) #2
1280*67e74705SXin Li // CHECK:   ret <8 x i8> [[VQNEG_V_I]]
test_vqneg_s8(int8x8_t a)1281*67e74705SXin Li int8x8_t test_vqneg_s8(int8x8_t a) {
1282*67e74705SXin Li   return vqneg_s8(a);
1283*67e74705SXin Li }
1284*67e74705SXin Li 
1285*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vqnegq_s8(<16 x i8> %a) #0 {
1286*67e74705SXin Li // CHECK:   [[VQNEGQ_V_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.sqneg.v16i8(<16 x i8> %a) #2
1287*67e74705SXin Li // CHECK:   ret <16 x i8> [[VQNEGQ_V_I]]
test_vqnegq_s8(int8x16_t a)1288*67e74705SXin Li int8x16_t test_vqnegq_s8(int8x16_t a) {
1289*67e74705SXin Li   return vqnegq_s8(a);
1290*67e74705SXin Li }
1291*67e74705SXin Li 
1292*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vqneg_s16(<4 x i16> %a) #0 {
1293*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
1294*67e74705SXin Li // CHECK:   [[VQNEG_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
1295*67e74705SXin Li // CHECK:   [[VQNEG_V1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqneg.v4i16(<4 x i16> [[VQNEG_V_I]]) #2
1296*67e74705SXin Li // CHECK:   [[VQNEG_V2_I:%.*]] = bitcast <4 x i16> [[VQNEG_V1_I]] to <8 x i8>
1297*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VQNEG_V2_I]] to <4 x i16>
1298*67e74705SXin Li // CHECK:   ret <4 x i16> [[TMP1]]
test_vqneg_s16(int16x4_t a)1299*67e74705SXin Li int16x4_t test_vqneg_s16(int16x4_t a) {
1300*67e74705SXin Li   return vqneg_s16(a);
1301*67e74705SXin Li }
1302*67e74705SXin Li 
1303*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vqnegq_s16(<8 x i16> %a) #0 {
1304*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1305*67e74705SXin Li // CHECK:   [[VQNEGQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
1306*67e74705SXin Li // CHECK:   [[VQNEGQ_V1_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.sqneg.v8i16(<8 x i16> [[VQNEGQ_V_I]]) #2
1307*67e74705SXin Li // CHECK:   [[VQNEGQ_V2_I:%.*]] = bitcast <8 x i16> [[VQNEGQ_V1_I]] to <16 x i8>
1308*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[VQNEGQ_V2_I]] to <8 x i16>
1309*67e74705SXin Li // CHECK:   ret <8 x i16> [[TMP1]]
test_vqnegq_s16(int16x8_t a)1310*67e74705SXin Li int16x8_t test_vqnegq_s16(int16x8_t a) {
1311*67e74705SXin Li   return vqnegq_s16(a);
1312*67e74705SXin Li }
1313*67e74705SXin Li 
1314*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vqneg_s32(<2 x i32> %a) #0 {
1315*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
1316*67e74705SXin Li // CHECK:   [[VQNEG_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
1317*67e74705SXin Li // CHECK:   [[VQNEG_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqneg.v2i32(<2 x i32> [[VQNEG_V_I]]) #2
1318*67e74705SXin Li // CHECK:   [[VQNEG_V2_I:%.*]] = bitcast <2 x i32> [[VQNEG_V1_I]] to <8 x i8>
1319*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VQNEG_V2_I]] to <2 x i32>
1320*67e74705SXin Li // CHECK:   ret <2 x i32> [[TMP1]]
test_vqneg_s32(int32x2_t a)1321*67e74705SXin Li int32x2_t test_vqneg_s32(int32x2_t a) {
1322*67e74705SXin Li   return vqneg_s32(a);
1323*67e74705SXin Li }
1324*67e74705SXin Li 
1325*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vqnegq_s32(<4 x i32> %a) #0 {
1326*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1327*67e74705SXin Li // CHECK:   [[VQNEGQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
1328*67e74705SXin Li // CHECK:   [[VQNEGQ_V1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqneg.v4i32(<4 x i32> [[VQNEGQ_V_I]]) #2
1329*67e74705SXin Li // CHECK:   [[VQNEGQ_V2_I:%.*]] = bitcast <4 x i32> [[VQNEGQ_V1_I]] to <16 x i8>
1330*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[VQNEGQ_V2_I]] to <4 x i32>
1331*67e74705SXin Li // CHECK:   ret <4 x i32> [[TMP1]]
test_vqnegq_s32(int32x4_t a)1332*67e74705SXin Li int32x4_t test_vqnegq_s32(int32x4_t a) {
1333*67e74705SXin Li   return vqnegq_s32(a);
1334*67e74705SXin Li }
1335*67e74705SXin Li 
1336*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vqnegq_s64(<2 x i64> %a) #0 {
1337*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
1338*67e74705SXin Li // CHECK:   [[VQNEGQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
1339*67e74705SXin Li // CHECK:   [[VQNEGQ_V1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.sqneg.v2i64(<2 x i64> [[VQNEGQ_V_I]]) #2
1340*67e74705SXin Li // CHECK:   [[VQNEGQ_V2_I:%.*]] = bitcast <2 x i64> [[VQNEGQ_V1_I]] to <16 x i8>
1341*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[VQNEGQ_V2_I]] to <2 x i64>
1342*67e74705SXin Li // CHECK:   ret <2 x i64> [[TMP1]]
test_vqnegq_s64(int64x2_t a)1343*67e74705SXin Li int64x2_t test_vqnegq_s64(int64x2_t a) {
1344*67e74705SXin Li   return vqnegq_s64(a);
1345*67e74705SXin Li }
1346*67e74705SXin Li 
1347*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vneg_s8(<8 x i8> %a) #0 {
1348*67e74705SXin Li // CHECK:   [[SUB_I:%.*]] = sub <8 x i8> zeroinitializer, %a
1349*67e74705SXin Li // CHECK:   ret <8 x i8> [[SUB_I]]
test_vneg_s8(int8x8_t a)1350*67e74705SXin Li int8x8_t test_vneg_s8(int8x8_t a) {
1351*67e74705SXin Li   return vneg_s8(a);
1352*67e74705SXin Li }
1353*67e74705SXin Li 
1354*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vnegq_s8(<16 x i8> %a) #0 {
1355*67e74705SXin Li // CHECK:   [[SUB_I:%.*]] = sub <16 x i8> zeroinitializer, %a
1356*67e74705SXin Li // CHECK:   ret <16 x i8> [[SUB_I]]
test_vnegq_s8(int8x16_t a)1357*67e74705SXin Li int8x16_t test_vnegq_s8(int8x16_t a) {
1358*67e74705SXin Li   return vnegq_s8(a);
1359*67e74705SXin Li }
1360*67e74705SXin Li 
1361*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vneg_s16(<4 x i16> %a) #0 {
1362*67e74705SXin Li // CHECK:   [[SUB_I:%.*]] = sub <4 x i16> zeroinitializer, %a
1363*67e74705SXin Li // CHECK:   ret <4 x i16> [[SUB_I]]
test_vneg_s16(int16x4_t a)1364*67e74705SXin Li int16x4_t test_vneg_s16(int16x4_t a) {
1365*67e74705SXin Li   return vneg_s16(a);
1366*67e74705SXin Li }
1367*67e74705SXin Li 
1368*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vnegq_s16(<8 x i16> %a) #0 {
1369*67e74705SXin Li // CHECK:   [[SUB_I:%.*]] = sub <8 x i16> zeroinitializer, %a
1370*67e74705SXin Li // CHECK:   ret <8 x i16> [[SUB_I]]
test_vnegq_s16(int16x8_t a)1371*67e74705SXin Li int16x8_t test_vnegq_s16(int16x8_t a) {
1372*67e74705SXin Li   return vnegq_s16(a);
1373*67e74705SXin Li }
1374*67e74705SXin Li 
1375*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vneg_s32(<2 x i32> %a) #0 {
1376*67e74705SXin Li // CHECK:   [[SUB_I:%.*]] = sub <2 x i32> zeroinitializer, %a
1377*67e74705SXin Li // CHECK:   ret <2 x i32> [[SUB_I]]
test_vneg_s32(int32x2_t a)1378*67e74705SXin Li int32x2_t test_vneg_s32(int32x2_t a) {
1379*67e74705SXin Li   return vneg_s32(a);
1380*67e74705SXin Li }
1381*67e74705SXin Li 
1382*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vnegq_s32(<4 x i32> %a) #0 {
1383*67e74705SXin Li // CHECK:   [[SUB_I:%.*]] = sub <4 x i32> zeroinitializer, %a
1384*67e74705SXin Li // CHECK:   ret <4 x i32> [[SUB_I]]
test_vnegq_s32(int32x4_t a)1385*67e74705SXin Li int32x4_t test_vnegq_s32(int32x4_t a) {
1386*67e74705SXin Li   return vnegq_s32(a);
1387*67e74705SXin Li }
1388*67e74705SXin Li 
1389*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vnegq_s64(<2 x i64> %a) #0 {
1390*67e74705SXin Li // CHECK:   [[SUB_I:%.*]] = sub <2 x i64> zeroinitializer, %a
1391*67e74705SXin Li // CHECK:   ret <2 x i64> [[SUB_I]]
test_vnegq_s64(int64x2_t a)1392*67e74705SXin Li int64x2_t test_vnegq_s64(int64x2_t a) {
1393*67e74705SXin Li   return vnegq_s64(a);
1394*67e74705SXin Li }
1395*67e74705SXin Li 
1396*67e74705SXin Li // CHECK-LABEL: define <2 x float> @test_vneg_f32(<2 x float> %a) #0 {
1397*67e74705SXin Li // CHECK:   [[SUB_I:%.*]] = fsub <2 x float> <float -0.000000e+00, float -0.000000e+00>, %a
1398*67e74705SXin Li // CHECK:   ret <2 x float> [[SUB_I]]
test_vneg_f32(float32x2_t a)1399*67e74705SXin Li float32x2_t test_vneg_f32(float32x2_t a) {
1400*67e74705SXin Li   return vneg_f32(a);
1401*67e74705SXin Li }
1402*67e74705SXin Li 
1403*67e74705SXin Li // CHECK-LABEL: define <4 x float> @test_vnegq_f32(<4 x float> %a) #0 {
1404*67e74705SXin Li // CHECK:   [[SUB_I:%.*]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %a
1405*67e74705SXin Li // CHECK:   ret <4 x float> [[SUB_I]]
test_vnegq_f32(float32x4_t a)1406*67e74705SXin Li float32x4_t test_vnegq_f32(float32x4_t a) {
1407*67e74705SXin Li   return vnegq_f32(a);
1408*67e74705SXin Li }
1409*67e74705SXin Li 
1410*67e74705SXin Li // CHECK-LABEL: define <2 x double> @test_vnegq_f64(<2 x double> %a) #0 {
1411*67e74705SXin Li // CHECK:   [[SUB_I:%.*]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %a
1412*67e74705SXin Li // CHECK:   ret <2 x double> [[SUB_I]]
test_vnegq_f64(float64x2_t a)1413*67e74705SXin Li float64x2_t test_vnegq_f64(float64x2_t a) {
1414*67e74705SXin Li   return vnegq_f64(a);
1415*67e74705SXin Li }
1416*67e74705SXin Li 
1417*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vabs_s8(<8 x i8> %a) #0 {
1418*67e74705SXin Li // CHECK:   [[VABS_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.abs.v8i8(<8 x i8> %a) #2
1419*67e74705SXin Li // CHECK:   ret <8 x i8> [[VABS_I]]
test_vabs_s8(int8x8_t a)1420*67e74705SXin Li int8x8_t test_vabs_s8(int8x8_t a) {
1421*67e74705SXin Li   return vabs_s8(a);
1422*67e74705SXin Li }
1423*67e74705SXin Li 
1424*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vabsq_s8(<16 x i8> %a) #0 {
1425*67e74705SXin Li // CHECK:   [[VABS_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.abs.v16i8(<16 x i8> %a) #2
1426*67e74705SXin Li // CHECK:   ret <16 x i8> [[VABS_I]]
test_vabsq_s8(int8x16_t a)1427*67e74705SXin Li int8x16_t test_vabsq_s8(int8x16_t a) {
1428*67e74705SXin Li   return vabsq_s8(a);
1429*67e74705SXin Li }
1430*67e74705SXin Li 
1431*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vabs_s16(<4 x i16> %a) #0 {
1432*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
1433*67e74705SXin Li // CHECK:   [[VABS_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
1434*67e74705SXin Li // CHECK:   [[VABS1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.abs.v4i16(<4 x i16> [[VABS_I]]) #2
1435*67e74705SXin Li // CHECK:   ret <4 x i16> [[VABS1_I]]
test_vabs_s16(int16x4_t a)1436*67e74705SXin Li int16x4_t test_vabs_s16(int16x4_t a) {
1437*67e74705SXin Li   return vabs_s16(a);
1438*67e74705SXin Li }
1439*67e74705SXin Li 
1440*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vabsq_s16(<8 x i16> %a) #0 {
1441*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1442*67e74705SXin Li // CHECK:   [[VABS_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
1443*67e74705SXin Li // CHECK:   [[VABS1_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.abs.v8i16(<8 x i16> [[VABS_I]]) #2
1444*67e74705SXin Li // CHECK:   ret <8 x i16> [[VABS1_I]]
test_vabsq_s16(int16x8_t a)1445*67e74705SXin Li int16x8_t test_vabsq_s16(int16x8_t a) {
1446*67e74705SXin Li   return vabsq_s16(a);
1447*67e74705SXin Li }
1448*67e74705SXin Li 
1449*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vabs_s32(<2 x i32> %a) #0 {
1450*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
1451*67e74705SXin Li // CHECK:   [[VABS_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
1452*67e74705SXin Li // CHECK:   [[VABS1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.abs.v2i32(<2 x i32> [[VABS_I]]) #2
1453*67e74705SXin Li // CHECK:   ret <2 x i32> [[VABS1_I]]
test_vabs_s32(int32x2_t a)1454*67e74705SXin Li int32x2_t test_vabs_s32(int32x2_t a) {
1455*67e74705SXin Li   return vabs_s32(a);
1456*67e74705SXin Li }
1457*67e74705SXin Li 
1458*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vabsq_s32(<4 x i32> %a) #0 {
1459*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1460*67e74705SXin Li // CHECK:   [[VABS_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
1461*67e74705SXin Li // CHECK:   [[VABS1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.abs.v4i32(<4 x i32> [[VABS_I]]) #2
1462*67e74705SXin Li // CHECK:   ret <4 x i32> [[VABS1_I]]
test_vabsq_s32(int32x4_t a)1463*67e74705SXin Li int32x4_t test_vabsq_s32(int32x4_t a) {
1464*67e74705SXin Li   return vabsq_s32(a);
1465*67e74705SXin Li }
1466*67e74705SXin Li 
1467*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vabsq_s64(<2 x i64> %a) #0 {
1468*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
1469*67e74705SXin Li // CHECK:   [[VABS_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
1470*67e74705SXin Li // CHECK:   [[VABS1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.abs.v2i64(<2 x i64> [[VABS_I]]) #2
1471*67e74705SXin Li // CHECK:   ret <2 x i64> [[VABS1_I]]
test_vabsq_s64(int64x2_t a)1472*67e74705SXin Li int64x2_t test_vabsq_s64(int64x2_t a) {
1473*67e74705SXin Li   return vabsq_s64(a);
1474*67e74705SXin Li }
1475*67e74705SXin Li 
1476*67e74705SXin Li // CHECK-LABEL: define <2 x float> @test_vabs_f32(<2 x float> %a) #0 {
1477*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
1478*67e74705SXin Li // CHECK:   [[VABS_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
1479*67e74705SXin Li // CHECK:   [[VABS1_I:%.*]] = call <2 x float> @llvm.fabs.v2f32(<2 x float> [[VABS_I]]) #2
1480*67e74705SXin Li // CHECK:   ret <2 x float> [[VABS1_I]]
test_vabs_f32(float32x2_t a)1481*67e74705SXin Li float32x2_t test_vabs_f32(float32x2_t a) {
1482*67e74705SXin Li   return vabs_f32(a);
1483*67e74705SXin Li }
1484*67e74705SXin Li 
1485*67e74705SXin Li // CHECK-LABEL: define <4 x float> @test_vabsq_f32(<4 x float> %a) #0 {
1486*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
1487*67e74705SXin Li // CHECK:   [[VABS_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
1488*67e74705SXin Li // CHECK:   [[VABS1_I:%.*]] = call <4 x float> @llvm.fabs.v4f32(<4 x float> [[VABS_I]]) #2
1489*67e74705SXin Li // CHECK:   ret <4 x float> [[VABS1_I]]
test_vabsq_f32(float32x4_t a)1490*67e74705SXin Li float32x4_t test_vabsq_f32(float32x4_t a) {
1491*67e74705SXin Li   return vabsq_f32(a);
1492*67e74705SXin Li }
1493*67e74705SXin Li 
1494*67e74705SXin Li // CHECK-LABEL: define <2 x double> @test_vabsq_f64(<2 x double> %a) #0 {
1495*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
1496*67e74705SXin Li // CHECK:   [[VABS_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
1497*67e74705SXin Li // CHECK:   [[VABS1_I:%.*]] = call <2 x double> @llvm.fabs.v2f64(<2 x double> [[VABS_I]]) #2
1498*67e74705SXin Li // CHECK:   ret <2 x double> [[VABS1_I]]
test_vabsq_f64(float64x2_t a)1499*67e74705SXin Li float64x2_t test_vabsq_f64(float64x2_t a) {
1500*67e74705SXin Li   return vabsq_f64(a);
1501*67e74705SXin Li }
1502*67e74705SXin Li 
1503*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vuqadd_s8(<8 x i8> %a, <8 x i8> %b) #0 {
1504*67e74705SXin Li // CHECK:   [[VUQADD_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.suqadd.v8i8(<8 x i8> %a, <8 x i8> %b) #2
1505*67e74705SXin Li // CHECK:   ret <8 x i8> [[VUQADD_I]]
test_vuqadd_s8(int8x8_t a,int8x8_t b)1506*67e74705SXin Li int8x8_t test_vuqadd_s8(int8x8_t a, int8x8_t b) {
1507*67e74705SXin Li   return vuqadd_s8(a, b);
1508*67e74705SXin Li }
1509*67e74705SXin Li 
1510*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vuqaddq_s8(<16 x i8> %a, <16 x i8> %b) #0 {
1511*67e74705SXin Li // CHECK:   [[VUQADD_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.suqadd.v16i8(<16 x i8> %a, <16 x i8> %b) #2
1512*67e74705SXin Li // CHECK:   ret <16 x i8> [[VUQADD_I]]
test_vuqaddq_s8(int8x16_t a,int8x16_t b)1513*67e74705SXin Li int8x16_t test_vuqaddq_s8(int8x16_t a, int8x16_t b) {
1514*67e74705SXin Li   return vuqaddq_s8(a, b);
1515*67e74705SXin Li }
1516*67e74705SXin Li 
1517*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vuqadd_s16(<4 x i16> %a, <4 x i16> %b) #0 {
1518*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
1519*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <4 x i16> %b to <8 x i8>
1520*67e74705SXin Li // CHECK:   [[VUQADD_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
1521*67e74705SXin Li // CHECK:   [[VUQADD1_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <4 x i16>
1522*67e74705SXin Li // CHECK:   [[VUQADD2_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.suqadd.v4i16(<4 x i16> [[VUQADD_I]], <4 x i16> [[VUQADD1_I]]) #2
1523*67e74705SXin Li // CHECK:   ret <4 x i16> [[VUQADD2_I]]
test_vuqadd_s16(int16x4_t a,int16x4_t b)1524*67e74705SXin Li int16x4_t test_vuqadd_s16(int16x4_t a, int16x4_t b) {
1525*67e74705SXin Li   return vuqadd_s16(a, b);
1526*67e74705SXin Li }
1527*67e74705SXin Li 
1528*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vuqaddq_s16(<8 x i16> %a, <8 x i16> %b) #0 {
1529*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1530*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i16> %b to <16 x i8>
1531*67e74705SXin Li // CHECK:   [[VUQADD_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
1532*67e74705SXin Li // CHECK:   [[VUQADD1_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <8 x i16>
1533*67e74705SXin Li // CHECK:   [[VUQADD2_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.suqadd.v8i16(<8 x i16> [[VUQADD_I]], <8 x i16> [[VUQADD1_I]]) #2
1534*67e74705SXin Li // CHECK:   ret <8 x i16> [[VUQADD2_I]]
test_vuqaddq_s16(int16x8_t a,int16x8_t b)1535*67e74705SXin Li int16x8_t test_vuqaddq_s16(int16x8_t a, int16x8_t b) {
1536*67e74705SXin Li   return vuqaddq_s16(a, b);
1537*67e74705SXin Li }
1538*67e74705SXin Li 
1539*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vuqadd_s32(<2 x i32> %a, <2 x i32> %b) #0 {
1540*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
1541*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <2 x i32> %b to <8 x i8>
1542*67e74705SXin Li // CHECK:   [[VUQADD_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
1543*67e74705SXin Li // CHECK:   [[VUQADD1_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x i32>
1544*67e74705SXin Li // CHECK:   [[VUQADD2_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.suqadd.v2i32(<2 x i32> [[VUQADD_I]], <2 x i32> [[VUQADD1_I]]) #2
1545*67e74705SXin Li // CHECK:   ret <2 x i32> [[VUQADD2_I]]
test_vuqadd_s32(int32x2_t a,int32x2_t b)1546*67e74705SXin Li int32x2_t test_vuqadd_s32(int32x2_t a, int32x2_t b) {
1547*67e74705SXin Li   return vuqadd_s32(a, b);
1548*67e74705SXin Li }
1549*67e74705SXin Li 
1550*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vuqaddq_s32(<4 x i32> %a, <4 x i32> %b) #0 {
1551*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1552*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <4 x i32> %b to <16 x i8>
1553*67e74705SXin Li // CHECK:   [[VUQADD_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
1554*67e74705SXin Li // CHECK:   [[VUQADD1_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x i32>
1555*67e74705SXin Li // CHECK:   [[VUQADD2_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.suqadd.v4i32(<4 x i32> [[VUQADD_I]], <4 x i32> [[VUQADD1_I]]) #2
1556*67e74705SXin Li // CHECK:   ret <4 x i32> [[VUQADD2_I]]
test_vuqaddq_s32(int32x4_t a,int32x4_t b)1557*67e74705SXin Li int32x4_t test_vuqaddq_s32(int32x4_t a, int32x4_t b) {
1558*67e74705SXin Li   return vuqaddq_s32(a, b);
1559*67e74705SXin Li }
1560*67e74705SXin Li 
1561*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vuqaddq_s64(<2 x i64> %a, <2 x i64> %b) #0 {
1562*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
1563*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <2 x i64> %b to <16 x i8>
1564*67e74705SXin Li // CHECK:   [[VUQADD_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
1565*67e74705SXin Li // CHECK:   [[VUQADD1_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x i64>
1566*67e74705SXin Li // CHECK:   [[VUQADD2_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.suqadd.v2i64(<2 x i64> [[VUQADD_I]], <2 x i64> [[VUQADD1_I]]) #2
1567*67e74705SXin Li // CHECK:   ret <2 x i64> [[VUQADD2_I]]
test_vuqaddq_s64(int64x2_t a,int64x2_t b)1568*67e74705SXin Li int64x2_t test_vuqaddq_s64(int64x2_t a, int64x2_t b) {
1569*67e74705SXin Li   return vuqaddq_s64(a, b);
1570*67e74705SXin Li }
1571*67e74705SXin Li 
1572*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vcls_s8(<8 x i8> %a) #0 {
1573*67e74705SXin Li // CHECK:   [[VCLS_V_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.cls.v8i8(<8 x i8> %a) #2
1574*67e74705SXin Li // CHECK:   ret <8 x i8> [[VCLS_V_I]]
test_vcls_s8(int8x8_t a)1575*67e74705SXin Li int8x8_t test_vcls_s8(int8x8_t a) {
1576*67e74705SXin Li   return vcls_s8(a);
1577*67e74705SXin Li }
1578*67e74705SXin Li 
1579*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vclsq_s8(<16 x i8> %a) #0 {
1580*67e74705SXin Li // CHECK:   [[VCLSQ_V_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.cls.v16i8(<16 x i8> %a) #2
1581*67e74705SXin Li // CHECK:   ret <16 x i8> [[VCLSQ_V_I]]
test_vclsq_s8(int8x16_t a)1582*67e74705SXin Li int8x16_t test_vclsq_s8(int8x16_t a) {
1583*67e74705SXin Li   return vclsq_s8(a);
1584*67e74705SXin Li }
1585*67e74705SXin Li 
1586*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vcls_s16(<4 x i16> %a) #0 {
1587*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
1588*67e74705SXin Li // CHECK:   [[VCLS_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
1589*67e74705SXin Li // CHECK:   [[VCLS_V1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.cls.v4i16(<4 x i16> [[VCLS_V_I]]) #2
1590*67e74705SXin Li // CHECK:   [[VCLS_V2_I:%.*]] = bitcast <4 x i16> [[VCLS_V1_I]] to <8 x i8>
1591*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VCLS_V2_I]] to <4 x i16>
1592*67e74705SXin Li // CHECK:   ret <4 x i16> [[TMP1]]
test_vcls_s16(int16x4_t a)1593*67e74705SXin Li int16x4_t test_vcls_s16(int16x4_t a) {
1594*67e74705SXin Li   return vcls_s16(a);
1595*67e74705SXin Li }
1596*67e74705SXin Li 
1597*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vclsq_s16(<8 x i16> %a) #0 {
1598*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1599*67e74705SXin Li // CHECK:   [[VCLSQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
1600*67e74705SXin Li // CHECK:   [[VCLSQ_V1_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.cls.v8i16(<8 x i16> [[VCLSQ_V_I]]) #2
1601*67e74705SXin Li // CHECK:   [[VCLSQ_V2_I:%.*]] = bitcast <8 x i16> [[VCLSQ_V1_I]] to <16 x i8>
1602*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[VCLSQ_V2_I]] to <8 x i16>
1603*67e74705SXin Li // CHECK:   ret <8 x i16> [[TMP1]]
test_vclsq_s16(int16x8_t a)1604*67e74705SXin Li int16x8_t test_vclsq_s16(int16x8_t a) {
1605*67e74705SXin Li   return vclsq_s16(a);
1606*67e74705SXin Li }
1607*67e74705SXin Li 
1608*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vcls_s32(<2 x i32> %a) #0 {
1609*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
1610*67e74705SXin Li // CHECK:   [[VCLS_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
1611*67e74705SXin Li // CHECK:   [[VCLS_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.cls.v2i32(<2 x i32> [[VCLS_V_I]]) #2
1612*67e74705SXin Li // CHECK:   [[VCLS_V2_I:%.*]] = bitcast <2 x i32> [[VCLS_V1_I]] to <8 x i8>
1613*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VCLS_V2_I]] to <2 x i32>
1614*67e74705SXin Li // CHECK:   ret <2 x i32> [[TMP1]]
test_vcls_s32(int32x2_t a)1615*67e74705SXin Li int32x2_t test_vcls_s32(int32x2_t a) {
1616*67e74705SXin Li   return vcls_s32(a);
1617*67e74705SXin Li }
1618*67e74705SXin Li 
1619*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vclsq_s32(<4 x i32> %a) #0 {
1620*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1621*67e74705SXin Li // CHECK:   [[VCLSQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
1622*67e74705SXin Li // CHECK:   [[VCLSQ_V1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.cls.v4i32(<4 x i32> [[VCLSQ_V_I]]) #2
1623*67e74705SXin Li // CHECK:   [[VCLSQ_V2_I:%.*]] = bitcast <4 x i32> [[VCLSQ_V1_I]] to <16 x i8>
1624*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[VCLSQ_V2_I]] to <4 x i32>
1625*67e74705SXin Li // CHECK:   ret <4 x i32> [[TMP1]]
test_vclsq_s32(int32x4_t a)1626*67e74705SXin Li int32x4_t test_vclsq_s32(int32x4_t a) {
1627*67e74705SXin Li   return vclsq_s32(a);
1628*67e74705SXin Li }
1629*67e74705SXin Li 
1630*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vclz_s8(<8 x i8> %a) #0 {
1631*67e74705SXin Li // CHECK:   [[VCLZ_V_I:%.*]] = call <8 x i8> @llvm.ctlz.v8i8(<8 x i8> %a, i1 false) #2
1632*67e74705SXin Li // CHECK:   ret <8 x i8> [[VCLZ_V_I]]
test_vclz_s8(int8x8_t a)1633*67e74705SXin Li int8x8_t test_vclz_s8(int8x8_t a) {
1634*67e74705SXin Li   return vclz_s8(a);
1635*67e74705SXin Li }
1636*67e74705SXin Li 
1637*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vclzq_s8(<16 x i8> %a) #0 {
1638*67e74705SXin Li // CHECK:   [[VCLZQ_V_I:%.*]] = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false) #2
1639*67e74705SXin Li // CHECK:   ret <16 x i8> [[VCLZQ_V_I]]
test_vclzq_s8(int8x16_t a)1640*67e74705SXin Li int8x16_t test_vclzq_s8(int8x16_t a) {
1641*67e74705SXin Li   return vclzq_s8(a);
1642*67e74705SXin Li }
1643*67e74705SXin Li 
1644*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vclz_s16(<4 x i16> %a) #0 {
1645*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
1646*67e74705SXin Li // CHECK:   [[VCLZ_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
1647*67e74705SXin Li // CHECK:   [[VCLZ_V1_I:%.*]] = call <4 x i16> @llvm.ctlz.v4i16(<4 x i16> [[VCLZ_V_I]], i1 false) #2
1648*67e74705SXin Li // CHECK:   [[VCLZ_V2_I:%.*]] = bitcast <4 x i16> [[VCLZ_V1_I]] to <8 x i8>
1649*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VCLZ_V2_I]] to <4 x i16>
1650*67e74705SXin Li // CHECK:   ret <4 x i16> [[TMP1]]
test_vclz_s16(int16x4_t a)1651*67e74705SXin Li int16x4_t test_vclz_s16(int16x4_t a) {
1652*67e74705SXin Li   return vclz_s16(a);
1653*67e74705SXin Li }
1654*67e74705SXin Li 
1655*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vclzq_s16(<8 x i16> %a) #0 {
1656*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1657*67e74705SXin Li // CHECK:   [[VCLZQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
1658*67e74705SXin Li // CHECK:   [[VCLZQ_V1_I:%.*]] = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> [[VCLZQ_V_I]], i1 false) #2
1659*67e74705SXin Li // CHECK:   [[VCLZQ_V2_I:%.*]] = bitcast <8 x i16> [[VCLZQ_V1_I]] to <16 x i8>
1660*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[VCLZQ_V2_I]] to <8 x i16>
1661*67e74705SXin Li // CHECK:   ret <8 x i16> [[TMP1]]
test_vclzq_s16(int16x8_t a)1662*67e74705SXin Li int16x8_t test_vclzq_s16(int16x8_t a) {
1663*67e74705SXin Li   return vclzq_s16(a);
1664*67e74705SXin Li }
1665*67e74705SXin Li 
1666*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vclz_s32(<2 x i32> %a) #0 {
1667*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
1668*67e74705SXin Li // CHECK:   [[VCLZ_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
1669*67e74705SXin Li // CHECK:   [[VCLZ_V1_I:%.*]] = call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> [[VCLZ_V_I]], i1 false) #2
1670*67e74705SXin Li // CHECK:   [[VCLZ_V2_I:%.*]] = bitcast <2 x i32> [[VCLZ_V1_I]] to <8 x i8>
1671*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VCLZ_V2_I]] to <2 x i32>
1672*67e74705SXin Li // CHECK:   ret <2 x i32> [[TMP1]]
test_vclz_s32(int32x2_t a)1673*67e74705SXin Li int32x2_t test_vclz_s32(int32x2_t a) {
1674*67e74705SXin Li   return vclz_s32(a);
1675*67e74705SXin Li }
1676*67e74705SXin Li 
1677*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vclzq_s32(<4 x i32> %a) #0 {
1678*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1679*67e74705SXin Li // CHECK:   [[VCLZQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
1680*67e74705SXin Li // CHECK:   [[VCLZQ_V1_I:%.*]] = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> [[VCLZQ_V_I]], i1 false) #2
1681*67e74705SXin Li // CHECK:   [[VCLZQ_V2_I:%.*]] = bitcast <4 x i32> [[VCLZQ_V1_I]] to <16 x i8>
1682*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[VCLZQ_V2_I]] to <4 x i32>
1683*67e74705SXin Li // CHECK:   ret <4 x i32> [[TMP1]]
test_vclzq_s32(int32x4_t a)1684*67e74705SXin Li int32x4_t test_vclzq_s32(int32x4_t a) {
1685*67e74705SXin Li   return vclzq_s32(a);
1686*67e74705SXin Li }
1687*67e74705SXin Li 
1688*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vclz_u8(<8 x i8> %a) #0 {
1689*67e74705SXin Li // CHECK:   [[VCLZ_V_I:%.*]] = call <8 x i8> @llvm.ctlz.v8i8(<8 x i8> %a, i1 false) #2
1690*67e74705SXin Li // CHECK:   ret <8 x i8> [[VCLZ_V_I]]
test_vclz_u8(uint8x8_t a)1691*67e74705SXin Li uint8x8_t test_vclz_u8(uint8x8_t a) {
1692*67e74705SXin Li   return vclz_u8(a);
1693*67e74705SXin Li }
1694*67e74705SXin Li 
1695*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vclzq_u8(<16 x i8> %a) #0 {
1696*67e74705SXin Li // CHECK:   [[VCLZQ_V_I:%.*]] = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false) #2
1697*67e74705SXin Li // CHECK:   ret <16 x i8> [[VCLZQ_V_I]]
test_vclzq_u8(uint8x16_t a)1698*67e74705SXin Li uint8x16_t test_vclzq_u8(uint8x16_t a) {
1699*67e74705SXin Li   return vclzq_u8(a);
1700*67e74705SXin Li }
1701*67e74705SXin Li 
1702*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vclz_u16(<4 x i16> %a) #0 {
1703*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
1704*67e74705SXin Li // CHECK:   [[VCLZ_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
1705*67e74705SXin Li // CHECK:   [[VCLZ_V1_I:%.*]] = call <4 x i16> @llvm.ctlz.v4i16(<4 x i16> [[VCLZ_V_I]], i1 false) #2
1706*67e74705SXin Li // CHECK:   [[VCLZ_V2_I:%.*]] = bitcast <4 x i16> [[VCLZ_V1_I]] to <8 x i8>
1707*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VCLZ_V2_I]] to <4 x i16>
1708*67e74705SXin Li // CHECK:   ret <4 x i16> [[TMP1]]
test_vclz_u16(uint16x4_t a)1709*67e74705SXin Li uint16x4_t test_vclz_u16(uint16x4_t a) {
1710*67e74705SXin Li   return vclz_u16(a);
1711*67e74705SXin Li }
1712*67e74705SXin Li 
1713*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vclzq_u16(<8 x i16> %a) #0 {
1714*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1715*67e74705SXin Li // CHECK:   [[VCLZQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
1716*67e74705SXin Li // CHECK:   [[VCLZQ_V1_I:%.*]] = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> [[VCLZQ_V_I]], i1 false) #2
1717*67e74705SXin Li // CHECK:   [[VCLZQ_V2_I:%.*]] = bitcast <8 x i16> [[VCLZQ_V1_I]] to <16 x i8>
1718*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[VCLZQ_V2_I]] to <8 x i16>
1719*67e74705SXin Li // CHECK:   ret <8 x i16> [[TMP1]]
test_vclzq_u16(uint16x8_t a)1720*67e74705SXin Li uint16x8_t test_vclzq_u16(uint16x8_t a) {
1721*67e74705SXin Li   return vclzq_u16(a);
1722*67e74705SXin Li }
1723*67e74705SXin Li 
1724*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vclz_u32(<2 x i32> %a) #0 {
1725*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
1726*67e74705SXin Li // CHECK:   [[VCLZ_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
1727*67e74705SXin Li // CHECK:   [[VCLZ_V1_I:%.*]] = call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> [[VCLZ_V_I]], i1 false) #2
1728*67e74705SXin Li // CHECK:   [[VCLZ_V2_I:%.*]] = bitcast <2 x i32> [[VCLZ_V1_I]] to <8 x i8>
1729*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VCLZ_V2_I]] to <2 x i32>
1730*67e74705SXin Li // CHECK:   ret <2 x i32> [[TMP1]]
test_vclz_u32(uint32x2_t a)1731*67e74705SXin Li uint32x2_t test_vclz_u32(uint32x2_t a) {
1732*67e74705SXin Li   return vclz_u32(a);
1733*67e74705SXin Li }
1734*67e74705SXin Li 
1735*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vclzq_u32(<4 x i32> %a) #0 {
1736*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1737*67e74705SXin Li // CHECK:   [[VCLZQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
1738*67e74705SXin Li // CHECK:   [[VCLZQ_V1_I:%.*]] = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> [[VCLZQ_V_I]], i1 false) #2
1739*67e74705SXin Li // CHECK:   [[VCLZQ_V2_I:%.*]] = bitcast <4 x i32> [[VCLZQ_V1_I]] to <16 x i8>
1740*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[VCLZQ_V2_I]] to <4 x i32>
1741*67e74705SXin Li // CHECK:   ret <4 x i32> [[TMP1]]
test_vclzq_u32(uint32x4_t a)1742*67e74705SXin Li uint32x4_t test_vclzq_u32(uint32x4_t a) {
1743*67e74705SXin Li   return vclzq_u32(a);
1744*67e74705SXin Li }
1745*67e74705SXin Li 
1746*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vcnt_s8(<8 x i8> %a) #0 {
1747*67e74705SXin Li // CHECK:   [[VCNT_V_I:%.*]] = call <8 x i8> @llvm.ctpop.v8i8(<8 x i8> %a) #2
1748*67e74705SXin Li // CHECK:   ret <8 x i8> [[VCNT_V_I]]
test_vcnt_s8(int8x8_t a)1749*67e74705SXin Li int8x8_t test_vcnt_s8(int8x8_t a) {
1750*67e74705SXin Li   return vcnt_s8(a);
1751*67e74705SXin Li }
1752*67e74705SXin Li 
1753*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vcntq_s8(<16 x i8> %a) #0 {
1754*67e74705SXin Li // CHECK:   [[VCNTQ_V_I:%.*]] = call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %a) #2
1755*67e74705SXin Li // CHECK:   ret <16 x i8> [[VCNTQ_V_I]]
test_vcntq_s8(int8x16_t a)1756*67e74705SXin Li int8x16_t test_vcntq_s8(int8x16_t a) {
1757*67e74705SXin Li   return vcntq_s8(a);
1758*67e74705SXin Li }
1759*67e74705SXin Li 
1760*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vcnt_u8(<8 x i8> %a) #0 {
1761*67e74705SXin Li // CHECK:   [[VCNT_V_I:%.*]] = call <8 x i8> @llvm.ctpop.v8i8(<8 x i8> %a) #2
1762*67e74705SXin Li // CHECK:   ret <8 x i8> [[VCNT_V_I]]
test_vcnt_u8(uint8x8_t a)1763*67e74705SXin Li uint8x8_t test_vcnt_u8(uint8x8_t a) {
1764*67e74705SXin Li   return vcnt_u8(a);
1765*67e74705SXin Li }
1766*67e74705SXin Li 
1767*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vcntq_u8(<16 x i8> %a) #0 {
1768*67e74705SXin Li // CHECK:   [[VCNTQ_V_I:%.*]] = call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %a) #2
1769*67e74705SXin Li // CHECK:   ret <16 x i8> [[VCNTQ_V_I]]
test_vcntq_u8(uint8x16_t a)1770*67e74705SXin Li uint8x16_t test_vcntq_u8(uint8x16_t a) {
1771*67e74705SXin Li   return vcntq_u8(a);
1772*67e74705SXin Li }
1773*67e74705SXin Li 
1774*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vcnt_p8(<8 x i8> %a) #0 {
1775*67e74705SXin Li // CHECK:   [[VCNT_V_I:%.*]] = call <8 x i8> @llvm.ctpop.v8i8(<8 x i8> %a) #2
1776*67e74705SXin Li // CHECK:   ret <8 x i8> [[VCNT_V_I]]
test_vcnt_p8(poly8x8_t a)1777*67e74705SXin Li poly8x8_t test_vcnt_p8(poly8x8_t a) {
1778*67e74705SXin Li   return vcnt_p8(a);
1779*67e74705SXin Li }
1780*67e74705SXin Li 
1781*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vcntq_p8(<16 x i8> %a) #0 {
1782*67e74705SXin Li // CHECK:   [[VCNTQ_V_I:%.*]] = call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %a) #2
1783*67e74705SXin Li // CHECK:   ret <16 x i8> [[VCNTQ_V_I]]
test_vcntq_p8(poly8x16_t a)1784*67e74705SXin Li poly8x16_t test_vcntq_p8(poly8x16_t a) {
1785*67e74705SXin Li   return vcntq_p8(a);
1786*67e74705SXin Li }
1787*67e74705SXin Li 
1788*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vmvn_s8(<8 x i8> %a) #0 {
1789*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <8 x i8> %a, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
1790*67e74705SXin Li // CHECK:   ret <8 x i8> [[NEG_I]]
test_vmvn_s8(int8x8_t a)1791*67e74705SXin Li int8x8_t test_vmvn_s8(int8x8_t a) {
1792*67e74705SXin Li   return vmvn_s8(a);
1793*67e74705SXin Li }
1794*67e74705SXin Li 
1795*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vmvnq_s8(<16 x i8> %a) #0 {
1796*67e74705SXin Li // 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>
1797*67e74705SXin Li // CHECK:   ret <16 x i8> [[NEG_I]]
test_vmvnq_s8(int8x16_t a)1798*67e74705SXin Li int8x16_t test_vmvnq_s8(int8x16_t a) {
1799*67e74705SXin Li   return vmvnq_s8(a);
1800*67e74705SXin Li }
1801*67e74705SXin Li 
1802*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vmvn_s16(<4 x i16> %a) #0 {
1803*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <4 x i16> %a, <i16 -1, i16 -1, i16 -1, i16 -1>
1804*67e74705SXin Li // CHECK:   ret <4 x i16> [[NEG_I]]
test_vmvn_s16(int16x4_t a)1805*67e74705SXin Li int16x4_t test_vmvn_s16(int16x4_t a) {
1806*67e74705SXin Li   return vmvn_s16(a);
1807*67e74705SXin Li }
1808*67e74705SXin Li 
1809*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vmvnq_s16(<8 x i16> %a) #0 {
1810*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <8 x i16> %a, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
1811*67e74705SXin Li // CHECK:   ret <8 x i16> [[NEG_I]]
test_vmvnq_s16(int16x8_t a)1812*67e74705SXin Li int16x8_t test_vmvnq_s16(int16x8_t a) {
1813*67e74705SXin Li   return vmvnq_s16(a);
1814*67e74705SXin Li }
1815*67e74705SXin Li 
1816*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vmvn_s32(<2 x i32> %a) #0 {
1817*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <2 x i32> %a, <i32 -1, i32 -1>
1818*67e74705SXin Li // CHECK:   ret <2 x i32> [[NEG_I]]
test_vmvn_s32(int32x2_t a)1819*67e74705SXin Li int32x2_t test_vmvn_s32(int32x2_t a) {
1820*67e74705SXin Li   return vmvn_s32(a);
1821*67e74705SXin Li }
1822*67e74705SXin Li 
1823*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vmvnq_s32(<4 x i32> %a) #0 {
1824*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <4 x i32> %a, <i32 -1, i32 -1, i32 -1, i32 -1>
1825*67e74705SXin Li // CHECK:   ret <4 x i32> [[NEG_I]]
test_vmvnq_s32(int32x4_t a)1826*67e74705SXin Li int32x4_t test_vmvnq_s32(int32x4_t a) {
1827*67e74705SXin Li   return vmvnq_s32(a);
1828*67e74705SXin Li }
1829*67e74705SXin Li 
1830*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vmvn_u8(<8 x i8> %a) #0 {
1831*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <8 x i8> %a, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
1832*67e74705SXin Li // CHECK:   ret <8 x i8> [[NEG_I]]
test_vmvn_u8(uint8x8_t a)1833*67e74705SXin Li uint8x8_t test_vmvn_u8(uint8x8_t a) {
1834*67e74705SXin Li   return vmvn_u8(a);
1835*67e74705SXin Li }
1836*67e74705SXin Li 
1837*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vmvnq_u8(<16 x i8> %a) #0 {
1838*67e74705SXin Li // 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>
1839*67e74705SXin Li // CHECK:   ret <16 x i8> [[NEG_I]]
test_vmvnq_u8(uint8x16_t a)1840*67e74705SXin Li uint8x16_t test_vmvnq_u8(uint8x16_t a) {
1841*67e74705SXin Li   return vmvnq_u8(a);
1842*67e74705SXin Li }
1843*67e74705SXin Li 
1844*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vmvn_u16(<4 x i16> %a) #0 {
1845*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <4 x i16> %a, <i16 -1, i16 -1, i16 -1, i16 -1>
1846*67e74705SXin Li // CHECK:   ret <4 x i16> [[NEG_I]]
test_vmvn_u16(uint16x4_t a)1847*67e74705SXin Li uint16x4_t test_vmvn_u16(uint16x4_t a) {
1848*67e74705SXin Li   return vmvn_u16(a);
1849*67e74705SXin Li }
1850*67e74705SXin Li 
1851*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vmvnq_u16(<8 x i16> %a) #0 {
1852*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <8 x i16> %a, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
1853*67e74705SXin Li // CHECK:   ret <8 x i16> [[NEG_I]]
test_vmvnq_u16(uint16x8_t a)1854*67e74705SXin Li uint16x8_t test_vmvnq_u16(uint16x8_t a) {
1855*67e74705SXin Li   return vmvnq_u16(a);
1856*67e74705SXin Li }
1857*67e74705SXin Li 
1858*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vmvn_u32(<2 x i32> %a) #0 {
1859*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <2 x i32> %a, <i32 -1, i32 -1>
1860*67e74705SXin Li // CHECK:   ret <2 x i32> [[NEG_I]]
test_vmvn_u32(uint32x2_t a)1861*67e74705SXin Li uint32x2_t test_vmvn_u32(uint32x2_t a) {
1862*67e74705SXin Li   return vmvn_u32(a);
1863*67e74705SXin Li }
1864*67e74705SXin Li 
1865*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vmvnq_u32(<4 x i32> %a) #0 {
1866*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <4 x i32> %a, <i32 -1, i32 -1, i32 -1, i32 -1>
1867*67e74705SXin Li // CHECK:   ret <4 x i32> [[NEG_I]]
test_vmvnq_u32(uint32x4_t a)1868*67e74705SXin Li uint32x4_t test_vmvnq_u32(uint32x4_t a) {
1869*67e74705SXin Li   return vmvnq_u32(a);
1870*67e74705SXin Li }
1871*67e74705SXin Li 
1872*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vmvn_p8(<8 x i8> %a) #0 {
1873*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <8 x i8> %a, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
1874*67e74705SXin Li // CHECK:   ret <8 x i8> [[NEG_I]]
test_vmvn_p8(poly8x8_t a)1875*67e74705SXin Li poly8x8_t test_vmvn_p8(poly8x8_t a) {
1876*67e74705SXin Li   return vmvn_p8(a);
1877*67e74705SXin Li }
1878*67e74705SXin Li 
1879*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vmvnq_p8(<16 x i8> %a) #0 {
1880*67e74705SXin Li // 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>
1881*67e74705SXin Li // CHECK:   ret <16 x i8> [[NEG_I]]
test_vmvnq_p8(poly8x16_t a)1882*67e74705SXin Li poly8x16_t test_vmvnq_p8(poly8x16_t a) {
1883*67e74705SXin Li   return vmvnq_p8(a);
1884*67e74705SXin Li }
1885*67e74705SXin Li 
1886*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vrbit_s8(<8 x i8> %a) #0 {
1887*67e74705SXin Li // CHECK:   [[VRBIT_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.rbit.v8i8(<8 x i8> %a) #2
1888*67e74705SXin Li // CHECK:   ret <8 x i8> [[VRBIT_I]]
test_vrbit_s8(int8x8_t a)1889*67e74705SXin Li int8x8_t test_vrbit_s8(int8x8_t a) {
1890*67e74705SXin Li   return vrbit_s8(a);
1891*67e74705SXin Li }
1892*67e74705SXin Li 
1893*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vrbitq_s8(<16 x i8> %a) #0 {
1894*67e74705SXin Li // CHECK:   [[VRBIT_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.rbit.v16i8(<16 x i8> %a) #2
1895*67e74705SXin Li // CHECK:   ret <16 x i8> [[VRBIT_I]]
test_vrbitq_s8(int8x16_t a)1896*67e74705SXin Li int8x16_t test_vrbitq_s8(int8x16_t a) {
1897*67e74705SXin Li   return vrbitq_s8(a);
1898*67e74705SXin Li }
1899*67e74705SXin Li 
1900*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vrbit_u8(<8 x i8> %a) #0 {
1901*67e74705SXin Li // CHECK:   [[VRBIT_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.rbit.v8i8(<8 x i8> %a) #2
1902*67e74705SXin Li // CHECK:   ret <8 x i8> [[VRBIT_I]]
test_vrbit_u8(uint8x8_t a)1903*67e74705SXin Li uint8x8_t test_vrbit_u8(uint8x8_t a) {
1904*67e74705SXin Li   return vrbit_u8(a);
1905*67e74705SXin Li }
1906*67e74705SXin Li 
1907*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vrbitq_u8(<16 x i8> %a) #0 {
1908*67e74705SXin Li // CHECK:   [[VRBIT_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.rbit.v16i8(<16 x i8> %a) #2
1909*67e74705SXin Li // CHECK:   ret <16 x i8> [[VRBIT_I]]
test_vrbitq_u8(uint8x16_t a)1910*67e74705SXin Li uint8x16_t test_vrbitq_u8(uint8x16_t a) {
1911*67e74705SXin Li   return vrbitq_u8(a);
1912*67e74705SXin Li }
1913*67e74705SXin Li 
1914*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vrbit_p8(<8 x i8> %a) #0 {
1915*67e74705SXin Li // CHECK:   [[VRBIT_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.rbit.v8i8(<8 x i8> %a) #2
1916*67e74705SXin Li // CHECK:   ret <8 x i8> [[VRBIT_I]]
test_vrbit_p8(poly8x8_t a)1917*67e74705SXin Li poly8x8_t test_vrbit_p8(poly8x8_t a) {
1918*67e74705SXin Li   return vrbit_p8(a);
1919*67e74705SXin Li }
1920*67e74705SXin Li 
1921*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vrbitq_p8(<16 x i8> %a) #0 {
1922*67e74705SXin Li // CHECK:   [[VRBIT_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.rbit.v16i8(<16 x i8> %a) #2
1923*67e74705SXin Li // CHECK:   ret <16 x i8> [[VRBIT_I]]
test_vrbitq_p8(poly8x16_t a)1924*67e74705SXin Li poly8x16_t test_vrbitq_p8(poly8x16_t a) {
1925*67e74705SXin Li   return vrbitq_p8(a);
1926*67e74705SXin Li }
1927*67e74705SXin Li 
1928*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vmovn_s16(<8 x i16> %a) #0 {
1929*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1930*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
1931*67e74705SXin Li // CHECK:   [[VMOVN_I:%.*]] = trunc <8 x i16> [[TMP1]] to <8 x i8>
1932*67e74705SXin Li // CHECK:   ret <8 x i8> [[VMOVN_I]]
test_vmovn_s16(int16x8_t a)1933*67e74705SXin Li int8x8_t test_vmovn_s16(int16x8_t a) {
1934*67e74705SXin Li   return vmovn_s16(a);
1935*67e74705SXin Li }
1936*67e74705SXin Li 
1937*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vmovn_s32(<4 x i32> %a) #0 {
1938*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1939*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
1940*67e74705SXin Li // CHECK:   [[VMOVN_I:%.*]] = trunc <4 x i32> [[TMP1]] to <4 x i16>
1941*67e74705SXin Li // CHECK:   ret <4 x i16> [[VMOVN_I]]
test_vmovn_s32(int32x4_t a)1942*67e74705SXin Li int16x4_t test_vmovn_s32(int32x4_t a) {
1943*67e74705SXin Li   return vmovn_s32(a);
1944*67e74705SXin Li }
1945*67e74705SXin Li 
1946*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vmovn_s64(<2 x i64> %a) #0 {
1947*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
1948*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
1949*67e74705SXin Li // CHECK:   [[VMOVN_I:%.*]] = trunc <2 x i64> [[TMP1]] to <2 x i32>
1950*67e74705SXin Li // CHECK:   ret <2 x i32> [[VMOVN_I]]
test_vmovn_s64(int64x2_t a)1951*67e74705SXin Li int32x2_t test_vmovn_s64(int64x2_t a) {
1952*67e74705SXin Li   return vmovn_s64(a);
1953*67e74705SXin Li }
1954*67e74705SXin Li 
1955*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vmovn_u16(<8 x i16> %a) #0 {
1956*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1957*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
1958*67e74705SXin Li // CHECK:   [[VMOVN_I:%.*]] = trunc <8 x i16> [[TMP1]] to <8 x i8>
1959*67e74705SXin Li // CHECK:   ret <8 x i8> [[VMOVN_I]]
test_vmovn_u16(uint16x8_t a)1960*67e74705SXin Li uint8x8_t test_vmovn_u16(uint16x8_t a) {
1961*67e74705SXin Li   return vmovn_u16(a);
1962*67e74705SXin Li }
1963*67e74705SXin Li 
1964*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vmovn_u32(<4 x i32> %a) #0 {
1965*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1966*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
1967*67e74705SXin Li // CHECK:   [[VMOVN_I:%.*]] = trunc <4 x i32> [[TMP1]] to <4 x i16>
1968*67e74705SXin Li // CHECK:   ret <4 x i16> [[VMOVN_I]]
test_vmovn_u32(uint32x4_t a)1969*67e74705SXin Li uint16x4_t test_vmovn_u32(uint32x4_t a) {
1970*67e74705SXin Li   return vmovn_u32(a);
1971*67e74705SXin Li }
1972*67e74705SXin Li 
1973*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vmovn_u64(<2 x i64> %a) #0 {
1974*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
1975*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
1976*67e74705SXin Li // CHECK:   [[VMOVN_I:%.*]] = trunc <2 x i64> [[TMP1]] to <2 x i32>
1977*67e74705SXin Li // CHECK:   ret <2 x i32> [[VMOVN_I]]
test_vmovn_u64(uint64x2_t a)1978*67e74705SXin Li uint32x2_t test_vmovn_u64(uint64x2_t a) {
1979*67e74705SXin Li   return vmovn_u64(a);
1980*67e74705SXin Li }
1981*67e74705SXin Li 
1982*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vmovn_high_s16(<8 x i8> %a, <8 x i16> %b) #0 {
1983*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %b to <16 x i8>
1984*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
1985*67e74705SXin Li // CHECK:   [[VMOVN_I_I:%.*]] = trunc <8 x i16> [[TMP1]] to <8 x i8>
1986*67e74705SXin Li // 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>
1987*67e74705SXin Li // CHECK:   ret <16 x i8> [[SHUFFLE_I_I]]
test_vmovn_high_s16(int8x8_t a,int16x8_t b)1988*67e74705SXin Li int8x16_t test_vmovn_high_s16(int8x8_t a, int16x8_t b) {
1989*67e74705SXin Li   return vmovn_high_s16(a, b);
1990*67e74705SXin Li }
1991*67e74705SXin Li 
1992*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vmovn_high_s32(<4 x i16> %a, <4 x i32> %b) #0 {
1993*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %b to <16 x i8>
1994*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
1995*67e74705SXin Li // CHECK:   [[VMOVN_I_I:%.*]] = trunc <4 x i32> [[TMP1]] to <4 x i16>
1996*67e74705SXin Li // 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>
1997*67e74705SXin Li // CHECK:   ret <8 x i16> [[SHUFFLE_I_I]]
test_vmovn_high_s32(int16x4_t a,int32x4_t b)1998*67e74705SXin Li int16x8_t test_vmovn_high_s32(int16x4_t a, int32x4_t b) {
1999*67e74705SXin Li   return vmovn_high_s32(a, b);
2000*67e74705SXin Li }
2001*67e74705SXin Li 
2002*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vmovn_high_s64(<2 x i32> %a, <2 x i64> %b) #0 {
2003*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %b to <16 x i8>
2004*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
2005*67e74705SXin Li // CHECK:   [[VMOVN_I_I:%.*]] = trunc <2 x i64> [[TMP1]] to <2 x i32>
2006*67e74705SXin Li // 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>
2007*67e74705SXin Li // CHECK:   ret <4 x i32> [[SHUFFLE_I_I]]
test_vmovn_high_s64(int32x2_t a,int64x2_t b)2008*67e74705SXin Li int32x4_t test_vmovn_high_s64(int32x2_t a, int64x2_t b) {
2009*67e74705SXin Li   return vmovn_high_s64(a, b);
2010*67e74705SXin Li }
2011*67e74705SXin Li 
2012*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vmovn_high_u16(<8 x i8> %a, <8 x i16> %b) #0 {
2013*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %b to <16 x i8>
2014*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
2015*67e74705SXin Li // CHECK:   [[VMOVN_I_I:%.*]] = trunc <8 x i16> [[TMP1]] to <8 x i8>
2016*67e74705SXin Li // 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>
2017*67e74705SXin Li // CHECK:   ret <16 x i8> [[SHUFFLE_I_I]]
test_vmovn_high_u16(int8x8_t a,int16x8_t b)2018*67e74705SXin Li int8x16_t test_vmovn_high_u16(int8x8_t a, int16x8_t b) {
2019*67e74705SXin Li   return vmovn_high_u16(a, b);
2020*67e74705SXin Li }
2021*67e74705SXin Li 
2022*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vmovn_high_u32(<4 x i16> %a, <4 x i32> %b) #0 {
2023*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %b to <16 x i8>
2024*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
2025*67e74705SXin Li // CHECK:   [[VMOVN_I_I:%.*]] = trunc <4 x i32> [[TMP1]] to <4 x i16>
2026*67e74705SXin Li // 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>
2027*67e74705SXin Li // CHECK:   ret <8 x i16> [[SHUFFLE_I_I]]
test_vmovn_high_u32(int16x4_t a,int32x4_t b)2028*67e74705SXin Li int16x8_t test_vmovn_high_u32(int16x4_t a, int32x4_t b) {
2029*67e74705SXin Li   return vmovn_high_u32(a, b);
2030*67e74705SXin Li }
2031*67e74705SXin Li 
2032*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vmovn_high_u64(<2 x i32> %a, <2 x i64> %b) #0 {
2033*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %b to <16 x i8>
2034*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
2035*67e74705SXin Li // CHECK:   [[VMOVN_I_I:%.*]] = trunc <2 x i64> [[TMP1]] to <2 x i32>
2036*67e74705SXin Li // 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>
2037*67e74705SXin Li // CHECK:   ret <4 x i32> [[SHUFFLE_I_I]]
test_vmovn_high_u64(int32x2_t a,int64x2_t b)2038*67e74705SXin Li int32x4_t test_vmovn_high_u64(int32x2_t a, int64x2_t b) {
2039*67e74705SXin Li   return vmovn_high_u64(a, b);
2040*67e74705SXin Li }
2041*67e74705SXin Li 
2042*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vqmovun_s16(<8 x i16> %a) #0 {
2043*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
2044*67e74705SXin Li // CHECK:   [[VQMOVUN_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
2045*67e74705SXin Li // CHECK:   [[VQMOVUN_V1_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqxtun.v8i8(<8 x i16> [[VQMOVUN_V_I]]) #2
2046*67e74705SXin Li // CHECK:   ret <8 x i8> [[VQMOVUN_V1_I]]
test_vqmovun_s16(int16x8_t a)2047*67e74705SXin Li int8x8_t test_vqmovun_s16(int16x8_t a) {
2048*67e74705SXin Li   return vqmovun_s16(a);
2049*67e74705SXin Li }
2050*67e74705SXin Li 
2051*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vqmovun_s32(<4 x i32> %a) #0 {
2052*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
2053*67e74705SXin Li // CHECK:   [[VQMOVUN_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
2054*67e74705SXin Li // CHECK:   [[VQMOVUN_V1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqxtun.v4i16(<4 x i32> [[VQMOVUN_V_I]]) #2
2055*67e74705SXin Li // CHECK:   [[VQMOVUN_V2_I:%.*]] = bitcast <4 x i16> [[VQMOVUN_V1_I]] to <8 x i8>
2056*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVUN_V2_I]] to <4 x i16>
2057*67e74705SXin Li // CHECK:   ret <4 x i16> [[TMP1]]
test_vqmovun_s32(int32x4_t a)2058*67e74705SXin Li int16x4_t test_vqmovun_s32(int32x4_t a) {
2059*67e74705SXin Li   return vqmovun_s32(a);
2060*67e74705SXin Li }
2061*67e74705SXin Li 
2062*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vqmovun_s64(<2 x i64> %a) #0 {
2063*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
2064*67e74705SXin Li // CHECK:   [[VQMOVUN_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
2065*67e74705SXin Li // CHECK:   [[VQMOVUN_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqxtun.v2i32(<2 x i64> [[VQMOVUN_V_I]]) #2
2066*67e74705SXin Li // CHECK:   [[VQMOVUN_V2_I:%.*]] = bitcast <2 x i32> [[VQMOVUN_V1_I]] to <8 x i8>
2067*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVUN_V2_I]] to <2 x i32>
2068*67e74705SXin Li // CHECK:   ret <2 x i32> [[TMP1]]
test_vqmovun_s64(int64x2_t a)2069*67e74705SXin Li int32x2_t test_vqmovun_s64(int64x2_t a) {
2070*67e74705SXin Li   return vqmovun_s64(a);
2071*67e74705SXin Li }
2072*67e74705SXin Li 
2073*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vqmovun_high_s16(<8 x i8> %a, <8 x i16> %b) #0 {
2074*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %b to <16 x i8>
2075*67e74705SXin Li // CHECK:   [[VQMOVUN_V_I_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
2076*67e74705SXin Li // CHECK:   [[VQMOVUN_V1_I_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqxtun.v8i8(<8 x i16> [[VQMOVUN_V_I_I]]) #2
2077*67e74705SXin Li // 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>
2078*67e74705SXin Li // CHECK:   ret <16 x i8> [[SHUFFLE_I_I]]
test_vqmovun_high_s16(int8x8_t a,int16x8_t b)2079*67e74705SXin Li int8x16_t test_vqmovun_high_s16(int8x8_t a, int16x8_t b) {
2080*67e74705SXin Li   return vqmovun_high_s16(a, b);
2081*67e74705SXin Li }
2082*67e74705SXin Li 
2083*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vqmovun_high_s32(<4 x i16> %a, <4 x i32> %b) #0 {
2084*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %b to <16 x i8>
2085*67e74705SXin Li // CHECK:   [[VQMOVUN_V_I_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
2086*67e74705SXin Li // CHECK:   [[VQMOVUN_V1_I_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqxtun.v4i16(<4 x i32> [[VQMOVUN_V_I_I]]) #2
2087*67e74705SXin Li // CHECK:   [[VQMOVUN_V2_I_I:%.*]] = bitcast <4 x i16> [[VQMOVUN_V1_I_I]] to <8 x i8>
2088*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVUN_V2_I_I]] to <4 x i16>
2089*67e74705SXin Li // CHECK:   [[SHUFFLE_I_I:%.*]] = shufflevector <4 x i16> %a, <4 x i16> [[TMP1]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
2090*67e74705SXin Li // CHECK:   ret <8 x i16> [[SHUFFLE_I_I]]
test_vqmovun_high_s32(int16x4_t a,int32x4_t b)2091*67e74705SXin Li int16x8_t test_vqmovun_high_s32(int16x4_t a, int32x4_t b) {
2092*67e74705SXin Li   return vqmovun_high_s32(a, b);
2093*67e74705SXin Li }
2094*67e74705SXin Li 
2095*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vqmovun_high_s64(<2 x i32> %a, <2 x i64> %b) #0 {
2096*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %b to <16 x i8>
2097*67e74705SXin Li // CHECK:   [[VQMOVUN_V_I_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
2098*67e74705SXin Li // CHECK:   [[VQMOVUN_V1_I_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqxtun.v2i32(<2 x i64> [[VQMOVUN_V_I_I]]) #2
2099*67e74705SXin Li // CHECK:   [[VQMOVUN_V2_I_I:%.*]] = bitcast <2 x i32> [[VQMOVUN_V1_I_I]] to <8 x i8>
2100*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVUN_V2_I_I]] to <2 x i32>
2101*67e74705SXin Li // CHECK:   [[SHUFFLE_I_I:%.*]] = shufflevector <2 x i32> %a, <2 x i32> [[TMP1]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
2102*67e74705SXin Li // CHECK:   ret <4 x i32> [[SHUFFLE_I_I]]
test_vqmovun_high_s64(int32x2_t a,int64x2_t b)2103*67e74705SXin Li int32x4_t test_vqmovun_high_s64(int32x2_t a, int64x2_t b) {
2104*67e74705SXin Li   return vqmovun_high_s64(a, b);
2105*67e74705SXin Li }
2106*67e74705SXin Li 
2107*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vqmovn_s16(<8 x i16> %a) #0 {
2108*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
2109*67e74705SXin Li // CHECK:   [[VQMOVN_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
2110*67e74705SXin Li // CHECK:   [[VQMOVN_V1_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqxtn.v8i8(<8 x i16> [[VQMOVN_V_I]]) #2
2111*67e74705SXin Li // CHECK:   ret <8 x i8> [[VQMOVN_V1_I]]
test_vqmovn_s16(int16x8_t a)2112*67e74705SXin Li int8x8_t test_vqmovn_s16(int16x8_t a) {
2113*67e74705SXin Li   return vqmovn_s16(a);
2114*67e74705SXin Li }
2115*67e74705SXin Li 
2116*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vqmovn_s32(<4 x i32> %a) #0 {
2117*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
2118*67e74705SXin Li // CHECK:   [[VQMOVN_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
2119*67e74705SXin Li // CHECK:   [[VQMOVN_V1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqxtn.v4i16(<4 x i32> [[VQMOVN_V_I]]) #2
2120*67e74705SXin Li // CHECK:   [[VQMOVN_V2_I:%.*]] = bitcast <4 x i16> [[VQMOVN_V1_I]] to <8 x i8>
2121*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVN_V2_I]] to <4 x i16>
2122*67e74705SXin Li // CHECK:   ret <4 x i16> [[TMP1]]
test_vqmovn_s32(int32x4_t a)2123*67e74705SXin Li int16x4_t test_vqmovn_s32(int32x4_t a) {
2124*67e74705SXin Li   return vqmovn_s32(a);
2125*67e74705SXin Li }
2126*67e74705SXin Li 
2127*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vqmovn_s64(<2 x i64> %a) #0 {
2128*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
2129*67e74705SXin Li // CHECK:   [[VQMOVN_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
2130*67e74705SXin Li // CHECK:   [[VQMOVN_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqxtn.v2i32(<2 x i64> [[VQMOVN_V_I]]) #2
2131*67e74705SXin Li // CHECK:   [[VQMOVN_V2_I:%.*]] = bitcast <2 x i32> [[VQMOVN_V1_I]] to <8 x i8>
2132*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVN_V2_I]] to <2 x i32>
2133*67e74705SXin Li // CHECK:   ret <2 x i32> [[TMP1]]
test_vqmovn_s64(int64x2_t a)2134*67e74705SXin Li int32x2_t test_vqmovn_s64(int64x2_t a) {
2135*67e74705SXin Li   return vqmovn_s64(a);
2136*67e74705SXin Li }
2137*67e74705SXin Li 
2138*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vqmovn_high_s16(<8 x i8> %a, <8 x i16> %b) #0 {
2139*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %b to <16 x i8>
2140*67e74705SXin Li // CHECK:   [[VQMOVN_V_I_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
2141*67e74705SXin Li // CHECK:   [[VQMOVN_V1_I_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqxtn.v8i8(<8 x i16> [[VQMOVN_V_I_I]]) #2
2142*67e74705SXin Li // 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>
2143*67e74705SXin Li // CHECK:   ret <16 x i8> [[SHUFFLE_I_I]]
test_vqmovn_high_s16(int8x8_t a,int16x8_t b)2144*67e74705SXin Li int8x16_t test_vqmovn_high_s16(int8x8_t a, int16x8_t b) {
2145*67e74705SXin Li   return vqmovn_high_s16(a, b);
2146*67e74705SXin Li }
2147*67e74705SXin Li 
2148*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vqmovn_high_s32(<4 x i16> %a, <4 x i32> %b) #0 {
2149*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %b to <16 x i8>
2150*67e74705SXin Li // CHECK:   [[VQMOVN_V_I_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
2151*67e74705SXin Li // CHECK:   [[VQMOVN_V1_I_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqxtn.v4i16(<4 x i32> [[VQMOVN_V_I_I]]) #2
2152*67e74705SXin Li // CHECK:   [[VQMOVN_V2_I_I:%.*]] = bitcast <4 x i16> [[VQMOVN_V1_I_I]] to <8 x i8>
2153*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVN_V2_I_I]] to <4 x i16>
2154*67e74705SXin Li // CHECK:   [[SHUFFLE_I_I:%.*]] = shufflevector <4 x i16> %a, <4 x i16> [[TMP1]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
2155*67e74705SXin Li // CHECK:   ret <8 x i16> [[SHUFFLE_I_I]]
test_vqmovn_high_s32(int16x4_t a,int32x4_t b)2156*67e74705SXin Li int16x8_t test_vqmovn_high_s32(int16x4_t a, int32x4_t b) {
2157*67e74705SXin Li   return vqmovn_high_s32(a, b);
2158*67e74705SXin Li }
2159*67e74705SXin Li 
2160*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vqmovn_high_s64(<2 x i32> %a, <2 x i64> %b) #0 {
2161*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %b to <16 x i8>
2162*67e74705SXin Li // CHECK:   [[VQMOVN_V_I_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
2163*67e74705SXin Li // CHECK:   [[VQMOVN_V1_I_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqxtn.v2i32(<2 x i64> [[VQMOVN_V_I_I]]) #2
2164*67e74705SXin Li // CHECK:   [[VQMOVN_V2_I_I:%.*]] = bitcast <2 x i32> [[VQMOVN_V1_I_I]] to <8 x i8>
2165*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVN_V2_I_I]] to <2 x i32>
2166*67e74705SXin Li // CHECK:   [[SHUFFLE_I_I:%.*]] = shufflevector <2 x i32> %a, <2 x i32> [[TMP1]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
2167*67e74705SXin Li // CHECK:   ret <4 x i32> [[SHUFFLE_I_I]]
test_vqmovn_high_s64(int32x2_t a,int64x2_t b)2168*67e74705SXin Li int32x4_t test_vqmovn_high_s64(int32x2_t a, int64x2_t b) {
2169*67e74705SXin Li   return vqmovn_high_s64(a, b);
2170*67e74705SXin Li }
2171*67e74705SXin Li 
2172*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vqmovn_u16(<8 x i16> %a) #0 {
2173*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
2174*67e74705SXin Li // CHECK:   [[VQMOVN_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
2175*67e74705SXin Li // CHECK:   [[VQMOVN_V1_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqxtn.v8i8(<8 x i16> [[VQMOVN_V_I]]) #2
2176*67e74705SXin Li // CHECK:   ret <8 x i8> [[VQMOVN_V1_I]]
test_vqmovn_u16(uint16x8_t a)2177*67e74705SXin Li uint8x8_t test_vqmovn_u16(uint16x8_t a) {
2178*67e74705SXin Li   return vqmovn_u16(a);
2179*67e74705SXin Li }
2180*67e74705SXin Li 
2181*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vqmovn_u32(<4 x i32> %a) #0 {
2182*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
2183*67e74705SXin Li // CHECK:   [[VQMOVN_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
2184*67e74705SXin Li // CHECK:   [[VQMOVN_V1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqxtn.v4i16(<4 x i32> [[VQMOVN_V_I]]) #2
2185*67e74705SXin Li // CHECK:   [[VQMOVN_V2_I:%.*]] = bitcast <4 x i16> [[VQMOVN_V1_I]] to <8 x i8>
2186*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVN_V2_I]] to <4 x i16>
2187*67e74705SXin Li // CHECK:   ret <4 x i16> [[TMP1]]
test_vqmovn_u32(uint32x4_t a)2188*67e74705SXin Li uint16x4_t test_vqmovn_u32(uint32x4_t a) {
2189*67e74705SXin Li   return vqmovn_u32(a);
2190*67e74705SXin Li }
2191*67e74705SXin Li 
2192*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vqmovn_u64(<2 x i64> %a) #0 {
2193*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
2194*67e74705SXin Li // CHECK:   [[VQMOVN_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
2195*67e74705SXin Li // CHECK:   [[VQMOVN_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqxtn.v2i32(<2 x i64> [[VQMOVN_V_I]]) #2
2196*67e74705SXin Li // CHECK:   [[VQMOVN_V2_I:%.*]] = bitcast <2 x i32> [[VQMOVN_V1_I]] to <8 x i8>
2197*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVN_V2_I]] to <2 x i32>
2198*67e74705SXin Li // CHECK:   ret <2 x i32> [[TMP1]]
test_vqmovn_u64(uint64x2_t a)2199*67e74705SXin Li uint32x2_t test_vqmovn_u64(uint64x2_t a) {
2200*67e74705SXin Li   return vqmovn_u64(a);
2201*67e74705SXin Li }
2202*67e74705SXin Li 
2203*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vqmovn_high_u16(<8 x i8> %a, <8 x i16> %b) #0 {
2204*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %b to <16 x i8>
2205*67e74705SXin Li // CHECK:   [[VQMOVN_V_I_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
2206*67e74705SXin Li // CHECK:   [[VQMOVN_V1_I_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqxtn.v8i8(<8 x i16> [[VQMOVN_V_I_I]]) #2
2207*67e74705SXin Li // 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>
2208*67e74705SXin Li // CHECK:   ret <16 x i8> [[SHUFFLE_I_I]]
test_vqmovn_high_u16(uint8x8_t a,uint16x8_t b)2209*67e74705SXin Li uint8x16_t test_vqmovn_high_u16(uint8x8_t a, uint16x8_t b) {
2210*67e74705SXin Li   return vqmovn_high_u16(a, b);
2211*67e74705SXin Li }
2212*67e74705SXin Li 
2213*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vqmovn_high_u32(<4 x i16> %a, <4 x i32> %b) #0 {
2214*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %b to <16 x i8>
2215*67e74705SXin Li // CHECK:   [[VQMOVN_V_I_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
2216*67e74705SXin Li // CHECK:   [[VQMOVN_V1_I_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqxtn.v4i16(<4 x i32> [[VQMOVN_V_I_I]]) #2
2217*67e74705SXin Li // CHECK:   [[VQMOVN_V2_I_I:%.*]] = bitcast <4 x i16> [[VQMOVN_V1_I_I]] to <8 x i8>
2218*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVN_V2_I_I]] to <4 x i16>
2219*67e74705SXin Li // CHECK:   [[SHUFFLE_I_I:%.*]] = shufflevector <4 x i16> %a, <4 x i16> [[TMP1]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
2220*67e74705SXin Li // CHECK:   ret <8 x i16> [[SHUFFLE_I_I]]
test_vqmovn_high_u32(uint16x4_t a,uint32x4_t b)2221*67e74705SXin Li uint16x8_t test_vqmovn_high_u32(uint16x4_t a, uint32x4_t b) {
2222*67e74705SXin Li   return vqmovn_high_u32(a, b);
2223*67e74705SXin Li }
2224*67e74705SXin Li 
2225*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vqmovn_high_u64(<2 x i32> %a, <2 x i64> %b) #0 {
2226*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %b to <16 x i8>
2227*67e74705SXin Li // CHECK:   [[VQMOVN_V_I_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
2228*67e74705SXin Li // CHECK:   [[VQMOVN_V1_I_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqxtn.v2i32(<2 x i64> [[VQMOVN_V_I_I]]) #2
2229*67e74705SXin Li // CHECK:   [[VQMOVN_V2_I_I:%.*]] = bitcast <2 x i32> [[VQMOVN_V1_I_I]] to <8 x i8>
2230*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVN_V2_I_I]] to <2 x i32>
2231*67e74705SXin Li // CHECK:   [[SHUFFLE_I_I:%.*]] = shufflevector <2 x i32> %a, <2 x i32> [[TMP1]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
2232*67e74705SXin Li // CHECK:   ret <4 x i32> [[SHUFFLE_I_I]]
test_vqmovn_high_u64(uint32x2_t a,uint64x2_t b)2233*67e74705SXin Li uint32x4_t test_vqmovn_high_u64(uint32x2_t a, uint64x2_t b) {
2234*67e74705SXin Li   return vqmovn_high_u64(a, b);
2235*67e74705SXin Li }
2236*67e74705SXin Li 
2237*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vshll_n_s8(<8 x i8> %a) #0 {
2238*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = sext <8 x i8> %a to <8 x i16>
2239*67e74705SXin Li // CHECK:   [[VSHLL_N:%.*]] = shl <8 x i16> [[TMP0]], <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
2240*67e74705SXin Li // CHECK:   ret <8 x i16> [[VSHLL_N]]
test_vshll_n_s8(int8x8_t a)2241*67e74705SXin Li int16x8_t test_vshll_n_s8(int8x8_t a) {
2242*67e74705SXin Li   return vshll_n_s8(a, 8);
2243*67e74705SXin Li }
2244*67e74705SXin Li 
2245*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vshll_n_s16(<4 x i16> %a) #0 {
2246*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
2247*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
2248*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = sext <4 x i16> [[TMP1]] to <4 x i32>
2249*67e74705SXin Li // CHECK:   [[VSHLL_N:%.*]] = shl <4 x i32> [[TMP2]], <i32 16, i32 16, i32 16, i32 16>
2250*67e74705SXin Li // CHECK:   ret <4 x i32> [[VSHLL_N]]
test_vshll_n_s16(int16x4_t a)2251*67e74705SXin Li int32x4_t test_vshll_n_s16(int16x4_t a) {
2252*67e74705SXin Li   return vshll_n_s16(a, 16);
2253*67e74705SXin Li }
2254*67e74705SXin Li 
2255*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vshll_n_s32(<2 x i32> %a) #0 {
2256*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
2257*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
2258*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = sext <2 x i32> [[TMP1]] to <2 x i64>
2259*67e74705SXin Li // CHECK:   [[VSHLL_N:%.*]] = shl <2 x i64> [[TMP2]], <i64 32, i64 32>
2260*67e74705SXin Li // CHECK:   ret <2 x i64> [[VSHLL_N]]
test_vshll_n_s32(int32x2_t a)2261*67e74705SXin Li int64x2_t test_vshll_n_s32(int32x2_t a) {
2262*67e74705SXin Li   return vshll_n_s32(a, 32);
2263*67e74705SXin Li }
2264*67e74705SXin Li 
2265*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vshll_n_u8(<8 x i8> %a) #0 {
2266*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = zext <8 x i8> %a to <8 x i16>
2267*67e74705SXin Li // CHECK:   [[VSHLL_N:%.*]] = shl <8 x i16> [[TMP0]], <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
2268*67e74705SXin Li // CHECK:   ret <8 x i16> [[VSHLL_N]]
test_vshll_n_u8(uint8x8_t a)2269*67e74705SXin Li uint16x8_t test_vshll_n_u8(uint8x8_t a) {
2270*67e74705SXin Li   return vshll_n_u8(a, 8);
2271*67e74705SXin Li }
2272*67e74705SXin Li 
2273*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vshll_n_u16(<4 x i16> %a) #0 {
2274*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
2275*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
2276*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = zext <4 x i16> [[TMP1]] to <4 x i32>
2277*67e74705SXin Li // CHECK:   [[VSHLL_N:%.*]] = shl <4 x i32> [[TMP2]], <i32 16, i32 16, i32 16, i32 16>
2278*67e74705SXin Li // CHECK:   ret <4 x i32> [[VSHLL_N]]
test_vshll_n_u16(uint16x4_t a)2279*67e74705SXin Li uint32x4_t test_vshll_n_u16(uint16x4_t a) {
2280*67e74705SXin Li   return vshll_n_u16(a, 16);
2281*67e74705SXin Li }
2282*67e74705SXin Li 
2283*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vshll_n_u32(<2 x i32> %a) #0 {
2284*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
2285*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
2286*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = zext <2 x i32> [[TMP1]] to <2 x i64>
2287*67e74705SXin Li // CHECK:   [[VSHLL_N:%.*]] = shl <2 x i64> [[TMP2]], <i64 32, i64 32>
2288*67e74705SXin Li // CHECK:   ret <2 x i64> [[VSHLL_N]]
test_vshll_n_u32(uint32x2_t a)2289*67e74705SXin Li uint64x2_t test_vshll_n_u32(uint32x2_t a) {
2290*67e74705SXin Li   return vshll_n_u32(a, 32);
2291*67e74705SXin Li }
2292*67e74705SXin Li 
2293*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vshll_high_n_s8(<16 x i8> %a) #0 {
2294*67e74705SXin Li // 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>
2295*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = sext <8 x i8> [[SHUFFLE_I]] to <8 x i16>
2296*67e74705SXin Li // CHECK:   [[VSHLL_N:%.*]] = shl <8 x i16> [[TMP0]], <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
2297*67e74705SXin Li // CHECK:   ret <8 x i16> [[VSHLL_N]]
test_vshll_high_n_s8(int8x16_t a)2298*67e74705SXin Li int16x8_t test_vshll_high_n_s8(int8x16_t a) {
2299*67e74705SXin Li   return vshll_high_n_s8(a, 8);
2300*67e74705SXin Li }
2301*67e74705SXin Li 
2302*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vshll_high_n_s16(<8 x i16> %a) #0 {
2303*67e74705SXin Li // CHECK:   [[SHUFFLE_I:%.*]] = shufflevector <8 x i16> %a, <8 x i16> %a, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
2304*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> [[SHUFFLE_I]] to <8 x i8>
2305*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
2306*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = sext <4 x i16> [[TMP1]] to <4 x i32>
2307*67e74705SXin Li // CHECK:   [[VSHLL_N:%.*]] = shl <4 x i32> [[TMP2]], <i32 16, i32 16, i32 16, i32 16>
2308*67e74705SXin Li // CHECK:   ret <4 x i32> [[VSHLL_N]]
test_vshll_high_n_s16(int16x8_t a)2309*67e74705SXin Li int32x4_t test_vshll_high_n_s16(int16x8_t a) {
2310*67e74705SXin Li   return vshll_high_n_s16(a, 16);
2311*67e74705SXin Li }
2312*67e74705SXin Li 
2313*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vshll_high_n_s32(<4 x i32> %a) #0 {
2314*67e74705SXin Li // CHECK:   [[SHUFFLE_I:%.*]] = shufflevector <4 x i32> %a, <4 x i32> %a, <2 x i32> <i32 2, i32 3>
2315*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> [[SHUFFLE_I]] to <8 x i8>
2316*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
2317*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = sext <2 x i32> [[TMP1]] to <2 x i64>
2318*67e74705SXin Li // CHECK:   [[VSHLL_N:%.*]] = shl <2 x i64> [[TMP2]], <i64 32, i64 32>
2319*67e74705SXin Li // CHECK:   ret <2 x i64> [[VSHLL_N]]
test_vshll_high_n_s32(int32x4_t a)2320*67e74705SXin Li int64x2_t test_vshll_high_n_s32(int32x4_t a) {
2321*67e74705SXin Li   return vshll_high_n_s32(a, 32);
2322*67e74705SXin Li }
2323*67e74705SXin Li 
2324*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vshll_high_n_u8(<16 x i8> %a) #0 {
2325*67e74705SXin Li // 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>
2326*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = zext <8 x i8> [[SHUFFLE_I]] to <8 x i16>
2327*67e74705SXin Li // CHECK:   [[VSHLL_N:%.*]] = shl <8 x i16> [[TMP0]], <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
2328*67e74705SXin Li // CHECK:   ret <8 x i16> [[VSHLL_N]]
test_vshll_high_n_u8(uint8x16_t a)2329*67e74705SXin Li uint16x8_t test_vshll_high_n_u8(uint8x16_t a) {
2330*67e74705SXin Li   return vshll_high_n_u8(a, 8);
2331*67e74705SXin Li }
2332*67e74705SXin Li 
2333*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vshll_high_n_u16(<8 x i16> %a) #0 {
2334*67e74705SXin Li // CHECK:   [[SHUFFLE_I:%.*]] = shufflevector <8 x i16> %a, <8 x i16> %a, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
2335*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> [[SHUFFLE_I]] to <8 x i8>
2336*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
2337*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = zext <4 x i16> [[TMP1]] to <4 x i32>
2338*67e74705SXin Li // CHECK:   [[VSHLL_N:%.*]] = shl <4 x i32> [[TMP2]], <i32 16, i32 16, i32 16, i32 16>
2339*67e74705SXin Li // CHECK:   ret <4 x i32> [[VSHLL_N]]
test_vshll_high_n_u16(uint16x8_t a)2340*67e74705SXin Li uint32x4_t test_vshll_high_n_u16(uint16x8_t a) {
2341*67e74705SXin Li   return vshll_high_n_u16(a, 16);
2342*67e74705SXin Li }
2343*67e74705SXin Li 
2344*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vshll_high_n_u32(<4 x i32> %a) #0 {
2345*67e74705SXin Li // CHECK:   [[SHUFFLE_I:%.*]] = shufflevector <4 x i32> %a, <4 x i32> %a, <2 x i32> <i32 2, i32 3>
2346*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> [[SHUFFLE_I]] to <8 x i8>
2347*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
2348*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = zext <2 x i32> [[TMP1]] to <2 x i64>
2349*67e74705SXin Li // CHECK:   [[VSHLL_N:%.*]] = shl <2 x i64> [[TMP2]], <i64 32, i64 32>
2350*67e74705SXin Li // CHECK:   ret <2 x i64> [[VSHLL_N]]
test_vshll_high_n_u32(uint32x4_t a)2351*67e74705SXin Li uint64x2_t test_vshll_high_n_u32(uint32x4_t a) {
2352*67e74705SXin Li   return vshll_high_n_u32(a, 32);
2353*67e74705SXin Li }
2354*67e74705SXin Li 
2355*67e74705SXin Li // CHECK-LABEL: define <4 x half> @test_vcvt_f16_f32(<4 x float> %a) #0 {
2356*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2357*67e74705SXin Li // CHECK:   [[VCVT_F16_F32_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
2358*67e74705SXin Li // CHECK:   [[VCVT_F16_F321_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.vcvtfp2hf(<4 x float> [[VCVT_F16_F32_I]]) #2
2359*67e74705SXin Li // CHECK:   [[VCVT_F16_F322_I:%.*]] = bitcast <4 x i16> [[VCVT_F16_F321_I]] to <8 x i8>
2360*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VCVT_F16_F322_I]] to <4 x half>
2361*67e74705SXin Li // CHECK:   ret <4 x half> [[TMP1]]
test_vcvt_f16_f32(float32x4_t a)2362*67e74705SXin Li float16x4_t test_vcvt_f16_f32(float32x4_t a) {
2363*67e74705SXin Li   return vcvt_f16_f32(a);
2364*67e74705SXin Li }
2365*67e74705SXin Li 
2366*67e74705SXin Li // CHECK-LABEL: define <8 x half> @test_vcvt_high_f16_f32(<4 x half> %a, <4 x float> %b) #0 {
2367*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %b to <16 x i8>
2368*67e74705SXin Li // CHECK:   [[VCVT_F16_F32_I_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
2369*67e74705SXin Li // CHECK:   [[VCVT_F16_F321_I_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.vcvtfp2hf(<4 x float> [[VCVT_F16_F32_I_I]]) #2
2370*67e74705SXin Li // CHECK:   [[VCVT_F16_F322_I_I:%.*]] = bitcast <4 x i16> [[VCVT_F16_F321_I_I]] to <8 x i8>
2371*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[VCVT_F16_F322_I_I]] to <4 x half>
2372*67e74705SXin Li // 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>
2373*67e74705SXin Li // CHECK:   ret <8 x half> [[SHUFFLE_I_I]]
test_vcvt_high_f16_f32(float16x4_t a,float32x4_t b)2374*67e74705SXin Li float16x8_t test_vcvt_high_f16_f32(float16x4_t a, float32x4_t b) {
2375*67e74705SXin Li   return vcvt_high_f16_f32(a, b);
2376*67e74705SXin Li }
2377*67e74705SXin Li 
2378*67e74705SXin Li // CHECK-LABEL: define <2 x float> @test_vcvt_f32_f64(<2 x double> %a) #0 {
2379*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2380*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2381*67e74705SXin Li // CHECK:   [[VCVT_I:%.*]] = fptrunc <2 x double> [[TMP1]] to <2 x float>
2382*67e74705SXin Li // CHECK:   ret <2 x float> [[VCVT_I]]
test_vcvt_f32_f64(float64x2_t a)2383*67e74705SXin Li float32x2_t test_vcvt_f32_f64(float64x2_t a) {
2384*67e74705SXin Li   return vcvt_f32_f64(a);
2385*67e74705SXin Li }
2386*67e74705SXin Li 
2387*67e74705SXin Li // CHECK-LABEL: define <4 x float> @test_vcvt_high_f32_f64(<2 x float> %a, <2 x double> %b) #0 {
2388*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %b to <16 x i8>
2389*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2390*67e74705SXin Li // CHECK:   [[VCVT_I_I:%.*]] = fptrunc <2 x double> [[TMP1]] to <2 x float>
2391*67e74705SXin Li // 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>
2392*67e74705SXin Li // CHECK:   ret <4 x float> [[SHUFFLE_I_I]]
test_vcvt_high_f32_f64(float32x2_t a,float64x2_t b)2393*67e74705SXin Li float32x4_t test_vcvt_high_f32_f64(float32x2_t a, float64x2_t b) {
2394*67e74705SXin Li   return vcvt_high_f32_f64(a, b);
2395*67e74705SXin Li }
2396*67e74705SXin Li 
2397*67e74705SXin Li // CHECK-LABEL: define <2 x float> @test_vcvtx_f32_f64(<2 x double> %a) #0 {
2398*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2399*67e74705SXin Li // CHECK:   [[VCVTX_F32_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2400*67e74705SXin Li // CHECK:   [[VCVTX_F32_V1_I:%.*]] = call <2 x float> @llvm.aarch64.neon.fcvtxn.v2f32.v2f64(<2 x double> [[VCVTX_F32_V_I]]) #2
2401*67e74705SXin Li // CHECK:   ret <2 x float> [[VCVTX_F32_V1_I]]
test_vcvtx_f32_f64(float64x2_t a)2402*67e74705SXin Li float32x2_t test_vcvtx_f32_f64(float64x2_t a) {
2403*67e74705SXin Li   return vcvtx_f32_f64(a);
2404*67e74705SXin Li }
2405*67e74705SXin Li 
2406*67e74705SXin Li // CHECK-LABEL: define <4 x float> @test_vcvtx_high_f32_f64(<2 x float> %a, <2 x double> %b) #0 {
2407*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %b to <16 x i8>
2408*67e74705SXin Li // CHECK:   [[VCVTX_F32_V_I_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2409*67e74705SXin Li // CHECK:   [[VCVTX_F32_V1_I_I:%.*]] = call <2 x float> @llvm.aarch64.neon.fcvtxn.v2f32.v2f64(<2 x double> [[VCVTX_F32_V_I_I]]) #2
2410*67e74705SXin Li // 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>
2411*67e74705SXin Li // CHECK:   ret <4 x float> [[SHUFFLE_I_I]]
test_vcvtx_high_f32_f64(float32x2_t a,float64x2_t b)2412*67e74705SXin Li float32x4_t test_vcvtx_high_f32_f64(float32x2_t a, float64x2_t b) {
2413*67e74705SXin Li   return vcvtx_high_f32_f64(a, b);
2414*67e74705SXin Li }
2415*67e74705SXin Li 
2416*67e74705SXin Li // CHECK-LABEL: define <4 x float> @test_vcvt_f32_f16(<4 x half> %a) #0 {
2417*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x half> %a to <8 x i8>
2418*67e74705SXin Li // CHECK:   [[VCVT_F32_F16_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
2419*67e74705SXin Li // CHECK:   [[VCVT_F32_F161_I:%.*]] = call <4 x float> @llvm.aarch64.neon.vcvthf2fp(<4 x i16> [[VCVT_F32_F16_I]]) #2
2420*67e74705SXin Li // CHECK:   [[VCVT_F32_F162_I:%.*]] = bitcast <4 x float> [[VCVT_F32_F161_I]] to <16 x i8>
2421*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[VCVT_F32_F162_I]] to <4 x float>
2422*67e74705SXin Li // CHECK:   ret <4 x float> [[TMP1]]
test_vcvt_f32_f16(float16x4_t a)2423*67e74705SXin Li float32x4_t test_vcvt_f32_f16(float16x4_t a) {
2424*67e74705SXin Li   return vcvt_f32_f16(a);
2425*67e74705SXin Li }
2426*67e74705SXin Li 
2427*67e74705SXin Li // CHECK-LABEL: define <4 x float> @test_vcvt_high_f32_f16(<8 x half> %a) #0 {
2428*67e74705SXin Li // CHECK:   [[SHUFFLE_I_I:%.*]] = shufflevector <8 x half> %a, <8 x half> %a, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
2429*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x half> [[SHUFFLE_I_I]] to <8 x i8>
2430*67e74705SXin Li // CHECK:   [[VCVT_F32_F16_I_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
2431*67e74705SXin Li // CHECK:   [[VCVT_F32_F161_I_I:%.*]] = call <4 x float> @llvm.aarch64.neon.vcvthf2fp(<4 x i16> [[VCVT_F32_F16_I_I]]) #2
2432*67e74705SXin Li // CHECK:   [[VCVT_F32_F162_I_I:%.*]] = bitcast <4 x float> [[VCVT_F32_F161_I_I]] to <16 x i8>
2433*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[VCVT_F32_F162_I_I]] to <4 x float>
2434*67e74705SXin Li // CHECK:   ret <4 x float> [[TMP1]]
test_vcvt_high_f32_f16(float16x8_t a)2435*67e74705SXin Li float32x4_t test_vcvt_high_f32_f16(float16x8_t a) {
2436*67e74705SXin Li   return vcvt_high_f32_f16(a);
2437*67e74705SXin Li }
2438*67e74705SXin Li 
2439*67e74705SXin Li // CHECK-LABEL: define <2 x double> @test_vcvt_f64_f32(<2 x float> %a) #0 {
2440*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2441*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
2442*67e74705SXin Li // CHECK:   [[VCVT_I:%.*]] = fpext <2 x float> [[TMP1]] to <2 x double>
2443*67e74705SXin Li // CHECK:   ret <2 x double> [[VCVT_I]]
test_vcvt_f64_f32(float32x2_t a)2444*67e74705SXin Li float64x2_t test_vcvt_f64_f32(float32x2_t a) {
2445*67e74705SXin Li   return vcvt_f64_f32(a);
2446*67e74705SXin Li }
2447*67e74705SXin Li 
2448*67e74705SXin Li // CHECK-LABEL: define <2 x double> @test_vcvt_high_f64_f32(<4 x float> %a) #0 {
2449*67e74705SXin Li // CHECK:   [[SHUFFLE_I_I:%.*]] = shufflevector <4 x float> %a, <4 x float> %a, <2 x i32> <i32 2, i32 3>
2450*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> [[SHUFFLE_I_I]] to <8 x i8>
2451*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
2452*67e74705SXin Li // CHECK:   [[VCVT_I_I:%.*]] = fpext <2 x float> [[TMP1]] to <2 x double>
2453*67e74705SXin Li // CHECK:   ret <2 x double> [[VCVT_I_I]]
test_vcvt_high_f64_f32(float32x4_t a)2454*67e74705SXin Li float64x2_t test_vcvt_high_f64_f32(float32x4_t a) {
2455*67e74705SXin Li   return vcvt_high_f64_f32(a);
2456*67e74705SXin Li }
2457*67e74705SXin Li 
2458*67e74705SXin Li // CHECK-LABEL: define <2 x float> @test_vrndn_f32(<2 x float> %a) #0 {
2459*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2460*67e74705SXin Li // CHECK:   [[VRNDN_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
2461*67e74705SXin Li // CHECK:   [[VRNDN1_I:%.*]] = call <2 x float> @llvm.aarch64.neon.frintn.v2f32(<2 x float> [[VRNDN_I]]) #2
2462*67e74705SXin Li // CHECK:   ret <2 x float> [[VRNDN1_I]]
test_vrndn_f32(float32x2_t a)2463*67e74705SXin Li float32x2_t test_vrndn_f32(float32x2_t a) {
2464*67e74705SXin Li   return vrndn_f32(a);
2465*67e74705SXin Li }
2466*67e74705SXin Li 
2467*67e74705SXin Li // CHECK-LABEL: define <4 x float> @test_vrndnq_f32(<4 x float> %a) #0 {
2468*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2469*67e74705SXin Li // CHECK:   [[VRNDN_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
2470*67e74705SXin Li // CHECK:   [[VRNDN1_I:%.*]] = call <4 x float> @llvm.aarch64.neon.frintn.v4f32(<4 x float> [[VRNDN_I]]) #2
2471*67e74705SXin Li // CHECK:   ret <4 x float> [[VRNDN1_I]]
test_vrndnq_f32(float32x4_t a)2472*67e74705SXin Li float32x4_t test_vrndnq_f32(float32x4_t a) {
2473*67e74705SXin Li   return vrndnq_f32(a);
2474*67e74705SXin Li }
2475*67e74705SXin Li 
2476*67e74705SXin Li // CHECK-LABEL: define <2 x double> @test_vrndnq_f64(<2 x double> %a) #0 {
2477*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2478*67e74705SXin Li // CHECK:   [[VRNDN_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2479*67e74705SXin Li // CHECK:   [[VRNDN1_I:%.*]] = call <2 x double> @llvm.aarch64.neon.frintn.v2f64(<2 x double> [[VRNDN_I]]) #2
2480*67e74705SXin Li // CHECK:   ret <2 x double> [[VRNDN1_I]]
test_vrndnq_f64(float64x2_t a)2481*67e74705SXin Li float64x2_t test_vrndnq_f64(float64x2_t a) {
2482*67e74705SXin Li   return vrndnq_f64(a);
2483*67e74705SXin Li }
2484*67e74705SXin Li 
2485*67e74705SXin Li // CHECK-LABEL: define <2 x float> @test_vrnda_f32(<2 x float> %a) #0 {
2486*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2487*67e74705SXin Li // CHECK:   [[VRNDA_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
2488*67e74705SXin Li // CHECK:   [[VRNDA1_I:%.*]] = call <2 x float> @llvm.round.v2f32(<2 x float> [[VRNDA_I]]) #2
2489*67e74705SXin Li // CHECK:   ret <2 x float> [[VRNDA1_I]]
test_vrnda_f32(float32x2_t a)2490*67e74705SXin Li float32x2_t test_vrnda_f32(float32x2_t a) {
2491*67e74705SXin Li   return vrnda_f32(a);
2492*67e74705SXin Li }
2493*67e74705SXin Li 
2494*67e74705SXin Li // CHECK-LABEL: define <4 x float> @test_vrndaq_f32(<4 x float> %a) #0 {
2495*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2496*67e74705SXin Li // CHECK:   [[VRNDA_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
2497*67e74705SXin Li // CHECK:   [[VRNDA1_I:%.*]] = call <4 x float> @llvm.round.v4f32(<4 x float> [[VRNDA_I]]) #2
2498*67e74705SXin Li // CHECK:   ret <4 x float> [[VRNDA1_I]]
test_vrndaq_f32(float32x4_t a)2499*67e74705SXin Li float32x4_t test_vrndaq_f32(float32x4_t a) {
2500*67e74705SXin Li   return vrndaq_f32(a);
2501*67e74705SXin Li }
2502*67e74705SXin Li 
2503*67e74705SXin Li // CHECK-LABEL: define <2 x double> @test_vrndaq_f64(<2 x double> %a) #0 {
2504*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2505*67e74705SXin Li // CHECK:   [[VRNDA_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2506*67e74705SXin Li // CHECK:   [[VRNDA1_I:%.*]] = call <2 x double> @llvm.round.v2f64(<2 x double> [[VRNDA_I]]) #2
2507*67e74705SXin Li // CHECK:   ret <2 x double> [[VRNDA1_I]]
test_vrndaq_f64(float64x2_t a)2508*67e74705SXin Li float64x2_t test_vrndaq_f64(float64x2_t a) {
2509*67e74705SXin Li   return vrndaq_f64(a);
2510*67e74705SXin Li }
2511*67e74705SXin Li 
2512*67e74705SXin Li // CHECK-LABEL: define <2 x float> @test_vrndp_f32(<2 x float> %a) #0 {
2513*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2514*67e74705SXin Li // CHECK:   [[VRNDP_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
2515*67e74705SXin Li // CHECK:   [[VRNDP1_I:%.*]] = call <2 x float> @llvm.ceil.v2f32(<2 x float> [[VRNDP_I]]) #2
2516*67e74705SXin Li // CHECK:   ret <2 x float> [[VRNDP1_I]]
test_vrndp_f32(float32x2_t a)2517*67e74705SXin Li float32x2_t test_vrndp_f32(float32x2_t a) {
2518*67e74705SXin Li   return vrndp_f32(a);
2519*67e74705SXin Li }
2520*67e74705SXin Li 
2521*67e74705SXin Li // CHECK-LABEL: define <4 x float> @test_vrndpq_f32(<4 x float> %a) #0 {
2522*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2523*67e74705SXin Li // CHECK:   [[VRNDP_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
2524*67e74705SXin Li // CHECK:   [[VRNDP1_I:%.*]] = call <4 x float> @llvm.ceil.v4f32(<4 x float> [[VRNDP_I]]) #2
2525*67e74705SXin Li // CHECK:   ret <4 x float> [[VRNDP1_I]]
test_vrndpq_f32(float32x4_t a)2526*67e74705SXin Li float32x4_t test_vrndpq_f32(float32x4_t a) {
2527*67e74705SXin Li   return vrndpq_f32(a);
2528*67e74705SXin Li }
2529*67e74705SXin Li 
2530*67e74705SXin Li // CHECK-LABEL: define <2 x double> @test_vrndpq_f64(<2 x double> %a) #0 {
2531*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2532*67e74705SXin Li // CHECK:   [[VRNDP_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2533*67e74705SXin Li // CHECK:   [[VRNDP1_I:%.*]] = call <2 x double> @llvm.ceil.v2f64(<2 x double> [[VRNDP_I]]) #2
2534*67e74705SXin Li // CHECK:   ret <2 x double> [[VRNDP1_I]]
test_vrndpq_f64(float64x2_t a)2535*67e74705SXin Li float64x2_t test_vrndpq_f64(float64x2_t a) {
2536*67e74705SXin Li   return vrndpq_f64(a);
2537*67e74705SXin Li }
2538*67e74705SXin Li 
2539*67e74705SXin Li // CHECK-LABEL: define <2 x float> @test_vrndm_f32(<2 x float> %a) #0 {
2540*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2541*67e74705SXin Li // CHECK:   [[VRNDM_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
2542*67e74705SXin Li // CHECK:   [[VRNDM1_I:%.*]] = call <2 x float> @llvm.floor.v2f32(<2 x float> [[VRNDM_I]]) #2
2543*67e74705SXin Li // CHECK:   ret <2 x float> [[VRNDM1_I]]
test_vrndm_f32(float32x2_t a)2544*67e74705SXin Li float32x2_t test_vrndm_f32(float32x2_t a) {
2545*67e74705SXin Li   return vrndm_f32(a);
2546*67e74705SXin Li }
2547*67e74705SXin Li 
2548*67e74705SXin Li // CHECK-LABEL: define <4 x float> @test_vrndmq_f32(<4 x float> %a) #0 {
2549*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2550*67e74705SXin Li // CHECK:   [[VRNDM_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
2551*67e74705SXin Li // CHECK:   [[VRNDM1_I:%.*]] = call <4 x float> @llvm.floor.v4f32(<4 x float> [[VRNDM_I]]) #2
2552*67e74705SXin Li // CHECK:   ret <4 x float> [[VRNDM1_I]]
test_vrndmq_f32(float32x4_t a)2553*67e74705SXin Li float32x4_t test_vrndmq_f32(float32x4_t a) {
2554*67e74705SXin Li   return vrndmq_f32(a);
2555*67e74705SXin Li }
2556*67e74705SXin Li 
2557*67e74705SXin Li // CHECK-LABEL: define <2 x double> @test_vrndmq_f64(<2 x double> %a) #0 {
2558*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2559*67e74705SXin Li // CHECK:   [[VRNDM_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2560*67e74705SXin Li // CHECK:   [[VRNDM1_I:%.*]] = call <2 x double> @llvm.floor.v2f64(<2 x double> [[VRNDM_I]]) #2
2561*67e74705SXin Li // CHECK:   ret <2 x double> [[VRNDM1_I]]
test_vrndmq_f64(float64x2_t a)2562*67e74705SXin Li float64x2_t test_vrndmq_f64(float64x2_t a) {
2563*67e74705SXin Li   return vrndmq_f64(a);
2564*67e74705SXin Li }
2565*67e74705SXin Li 
2566*67e74705SXin Li // CHECK-LABEL: define <2 x float> @test_vrndx_f32(<2 x float> %a) #0 {
2567*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2568*67e74705SXin Li // CHECK:   [[VRNDX_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
2569*67e74705SXin Li // CHECK:   [[VRNDX1_I:%.*]] = call <2 x float> @llvm.rint.v2f32(<2 x float> [[VRNDX_I]]) #2
2570*67e74705SXin Li // CHECK:   ret <2 x float> [[VRNDX1_I]]
test_vrndx_f32(float32x2_t a)2571*67e74705SXin Li float32x2_t test_vrndx_f32(float32x2_t a) {
2572*67e74705SXin Li   return vrndx_f32(a);
2573*67e74705SXin Li }
2574*67e74705SXin Li 
2575*67e74705SXin Li // CHECK-LABEL: define <4 x float> @test_vrndxq_f32(<4 x float> %a) #0 {
2576*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2577*67e74705SXin Li // CHECK:   [[VRNDX_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
2578*67e74705SXin Li // CHECK:   [[VRNDX1_I:%.*]] = call <4 x float> @llvm.rint.v4f32(<4 x float> [[VRNDX_I]]) #2
2579*67e74705SXin Li // CHECK:   ret <4 x float> [[VRNDX1_I]]
test_vrndxq_f32(float32x4_t a)2580*67e74705SXin Li float32x4_t test_vrndxq_f32(float32x4_t a) {
2581*67e74705SXin Li   return vrndxq_f32(a);
2582*67e74705SXin Li }
2583*67e74705SXin Li 
2584*67e74705SXin Li // CHECK-LABEL: define <2 x double> @test_vrndxq_f64(<2 x double> %a) #0 {
2585*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2586*67e74705SXin Li // CHECK:   [[VRNDX_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2587*67e74705SXin Li // CHECK:   [[VRNDX1_I:%.*]] = call <2 x double> @llvm.rint.v2f64(<2 x double> [[VRNDX_I]]) #2
2588*67e74705SXin Li // CHECK:   ret <2 x double> [[VRNDX1_I]]
test_vrndxq_f64(float64x2_t a)2589*67e74705SXin Li float64x2_t test_vrndxq_f64(float64x2_t a) {
2590*67e74705SXin Li   return vrndxq_f64(a);
2591*67e74705SXin Li }
2592*67e74705SXin Li 
2593*67e74705SXin Li // CHECK-LABEL: define <2 x float> @test_vrnd_f32(<2 x float> %a) #0 {
2594*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2595*67e74705SXin Li // CHECK:   [[VRNDZ_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
2596*67e74705SXin Li // CHECK:   [[VRNDZ1_I:%.*]] = call <2 x float> @llvm.trunc.v2f32(<2 x float> [[VRNDZ_I]]) #2
2597*67e74705SXin Li // CHECK:   ret <2 x float> [[VRNDZ1_I]]
test_vrnd_f32(float32x2_t a)2598*67e74705SXin Li float32x2_t test_vrnd_f32(float32x2_t a) {
2599*67e74705SXin Li   return vrnd_f32(a);
2600*67e74705SXin Li }
2601*67e74705SXin Li 
2602*67e74705SXin Li // CHECK-LABEL: define <4 x float> @test_vrndq_f32(<4 x float> %a) #0 {
2603*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2604*67e74705SXin Li // CHECK:   [[VRNDZ_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
2605*67e74705SXin Li // CHECK:   [[VRNDZ1_I:%.*]] = call <4 x float> @llvm.trunc.v4f32(<4 x float> [[VRNDZ_I]]) #2
2606*67e74705SXin Li // CHECK:   ret <4 x float> [[VRNDZ1_I]]
test_vrndq_f32(float32x4_t a)2607*67e74705SXin Li float32x4_t test_vrndq_f32(float32x4_t a) {
2608*67e74705SXin Li   return vrndq_f32(a);
2609*67e74705SXin Li }
2610*67e74705SXin Li 
2611*67e74705SXin Li // CHECK-LABEL: define <2 x double> @test_vrndq_f64(<2 x double> %a) #0 {
2612*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2613*67e74705SXin Li // CHECK:   [[VRNDZ_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2614*67e74705SXin Li // CHECK:   [[VRNDZ1_I:%.*]] = call <2 x double> @llvm.trunc.v2f64(<2 x double> [[VRNDZ_I]]) #2
2615*67e74705SXin Li // CHECK:   ret <2 x double> [[VRNDZ1_I]]
test_vrndq_f64(float64x2_t a)2616*67e74705SXin Li float64x2_t test_vrndq_f64(float64x2_t a) {
2617*67e74705SXin Li   return vrndq_f64(a);
2618*67e74705SXin Li }
2619*67e74705SXin Li 
2620*67e74705SXin Li // CHECK-LABEL: define <2 x float> @test_vrndi_f32(<2 x float> %a) #0 {
2621*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2622*67e74705SXin Li // CHECK:   [[VRNDI_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
2623*67e74705SXin Li // CHECK:   [[VRNDI1_I:%.*]] = call <2 x float> @llvm.nearbyint.v2f32(<2 x float> [[VRNDI_I]]) #2
2624*67e74705SXin Li // CHECK:   ret <2 x float> [[VRNDI1_I]]
test_vrndi_f32(float32x2_t a)2625*67e74705SXin Li float32x2_t test_vrndi_f32(float32x2_t a) {
2626*67e74705SXin Li   return vrndi_f32(a);
2627*67e74705SXin Li }
2628*67e74705SXin Li 
2629*67e74705SXin Li // CHECK-LABEL: define <4 x float> @test_vrndiq_f32(<4 x float> %a) #0 {
2630*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2631*67e74705SXin Li // CHECK:   [[VRNDI_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
2632*67e74705SXin Li // CHECK:   [[VRNDI1_I:%.*]] = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> [[VRNDI_I]]) #2
2633*67e74705SXin Li // CHECK:   ret <4 x float> [[VRNDI1_I]]
test_vrndiq_f32(float32x4_t a)2634*67e74705SXin Li float32x4_t test_vrndiq_f32(float32x4_t a) {
2635*67e74705SXin Li   return vrndiq_f32(a);
2636*67e74705SXin Li }
2637*67e74705SXin Li 
2638*67e74705SXin Li // CHECK-LABEL: define <2 x double> @test_vrndiq_f64(<2 x double> %a) #0 {
2639*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2640*67e74705SXin Li // CHECK:   [[VRNDI_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2641*67e74705SXin Li // CHECK:   [[VRNDI1_I:%.*]] = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> [[VRNDI_I]]) #2
2642*67e74705SXin Li // CHECK:   ret <2 x double> [[VRNDI1_I]]
test_vrndiq_f64(float64x2_t a)2643*67e74705SXin Li float64x2_t test_vrndiq_f64(float64x2_t a) {
2644*67e74705SXin Li   return vrndiq_f64(a);
2645*67e74705SXin Li }
2646*67e74705SXin Li 
2647*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vcvt_s32_f32(<2 x float> %a) #0 {
2648*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2649*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
2650*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fptosi <2 x float> [[TMP1]] to <2 x i32>
2651*67e74705SXin Li // CHECK:   ret <2 x i32> [[TMP2]]
test_vcvt_s32_f32(float32x2_t a)2652*67e74705SXin Li int32x2_t test_vcvt_s32_f32(float32x2_t a) {
2653*67e74705SXin Li   return vcvt_s32_f32(a);
2654*67e74705SXin Li }
2655*67e74705SXin Li 
2656*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vcvtq_s32_f32(<4 x float> %a) #0 {
2657*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2658*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
2659*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fptosi <4 x float> [[TMP1]] to <4 x i32>
2660*67e74705SXin Li // CHECK:   ret <4 x i32> [[TMP2]]
test_vcvtq_s32_f32(float32x4_t a)2661*67e74705SXin Li int32x4_t test_vcvtq_s32_f32(float32x4_t a) {
2662*67e74705SXin Li   return vcvtq_s32_f32(a);
2663*67e74705SXin Li }
2664*67e74705SXin Li 
2665*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vcvtq_s64_f64(<2 x double> %a) #0 {
2666*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2667*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2668*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fptosi <2 x double> [[TMP1]] to <2 x i64>
2669*67e74705SXin Li // CHECK:   ret <2 x i64> [[TMP2]]
test_vcvtq_s64_f64(float64x2_t a)2670*67e74705SXin Li int64x2_t test_vcvtq_s64_f64(float64x2_t a) {
2671*67e74705SXin Li   return vcvtq_s64_f64(a);
2672*67e74705SXin Li }
2673*67e74705SXin Li 
2674*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vcvt_u32_f32(<2 x float> %a) #0 {
2675*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2676*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
2677*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fptoui <2 x float> [[TMP1]] to <2 x i32>
2678*67e74705SXin Li // CHECK:   ret <2 x i32> [[TMP2]]
test_vcvt_u32_f32(float32x2_t a)2679*67e74705SXin Li uint32x2_t test_vcvt_u32_f32(float32x2_t a) {
2680*67e74705SXin Li   return vcvt_u32_f32(a);
2681*67e74705SXin Li }
2682*67e74705SXin Li 
2683*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vcvtq_u32_f32(<4 x float> %a) #0 {
2684*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2685*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
2686*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fptoui <4 x float> [[TMP1]] to <4 x i32>
2687*67e74705SXin Li // CHECK:   ret <4 x i32> [[TMP2]]
test_vcvtq_u32_f32(float32x4_t a)2688*67e74705SXin Li uint32x4_t test_vcvtq_u32_f32(float32x4_t a) {
2689*67e74705SXin Li   return vcvtq_u32_f32(a);
2690*67e74705SXin Li }
2691*67e74705SXin Li 
2692*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vcvtq_u64_f64(<2 x double> %a) #0 {
2693*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2694*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2695*67e74705SXin Li // CHECK:   [[TMP2:%.*]] = fptoui <2 x double> [[TMP1]] to <2 x i64>
2696*67e74705SXin Li // CHECK:   ret <2 x i64> [[TMP2]]
test_vcvtq_u64_f64(float64x2_t a)2697*67e74705SXin Li uint64x2_t test_vcvtq_u64_f64(float64x2_t a) {
2698*67e74705SXin Li   return vcvtq_u64_f64(a);
2699*67e74705SXin Li }
2700*67e74705SXin Li 
2701*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vcvtn_s32_f32(<2 x float> %a) #0 {
2702*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2703*67e74705SXin Li // CHECK:   [[VCVTN_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
2704*67e74705SXin Li // CHECK:   [[VCVTN1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtns.v2i32.v2f32(<2 x float> [[VCVTN_I]]) #2
2705*67e74705SXin Li // CHECK:   ret <2 x i32> [[VCVTN1_I]]
test_vcvtn_s32_f32(float32x2_t a)2706*67e74705SXin Li int32x2_t test_vcvtn_s32_f32(float32x2_t a) {
2707*67e74705SXin Li   return vcvtn_s32_f32(a);
2708*67e74705SXin Li }
2709*67e74705SXin Li 
2710*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vcvtnq_s32_f32(<4 x float> %a) #0 {
2711*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2712*67e74705SXin Li // CHECK:   [[VCVTN_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
2713*67e74705SXin Li // CHECK:   [[VCVTN1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtns.v4i32.v4f32(<4 x float> [[VCVTN_I]]) #2
2714*67e74705SXin Li // CHECK:   ret <4 x i32> [[VCVTN1_I]]
test_vcvtnq_s32_f32(float32x4_t a)2715*67e74705SXin Li int32x4_t test_vcvtnq_s32_f32(float32x4_t a) {
2716*67e74705SXin Li   return vcvtnq_s32_f32(a);
2717*67e74705SXin Li }
2718*67e74705SXin Li 
2719*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vcvtnq_s64_f64(<2 x double> %a) #0 {
2720*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2721*67e74705SXin Li // CHECK:   [[VCVTN_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2722*67e74705SXin Li // CHECK:   [[VCVTN1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtns.v2i64.v2f64(<2 x double> [[VCVTN_I]]) #2
2723*67e74705SXin Li // CHECK:   ret <2 x i64> [[VCVTN1_I]]
test_vcvtnq_s64_f64(float64x2_t a)2724*67e74705SXin Li int64x2_t test_vcvtnq_s64_f64(float64x2_t a) {
2725*67e74705SXin Li   return vcvtnq_s64_f64(a);
2726*67e74705SXin Li }
2727*67e74705SXin Li 
2728*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vcvtn_u32_f32(<2 x float> %a) #0 {
2729*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2730*67e74705SXin Li // CHECK:   [[VCVTN_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
2731*67e74705SXin Li // CHECK:   [[VCVTN1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtnu.v2i32.v2f32(<2 x float> [[VCVTN_I]]) #2
2732*67e74705SXin Li // CHECK:   ret <2 x i32> [[VCVTN1_I]]
test_vcvtn_u32_f32(float32x2_t a)2733*67e74705SXin Li uint32x2_t test_vcvtn_u32_f32(float32x2_t a) {
2734*67e74705SXin Li   return vcvtn_u32_f32(a);
2735*67e74705SXin Li }
2736*67e74705SXin Li 
2737*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vcvtnq_u32_f32(<4 x float> %a) #0 {
2738*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2739*67e74705SXin Li // CHECK:   [[VCVTN_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
2740*67e74705SXin Li // CHECK:   [[VCVTN1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtnu.v4i32.v4f32(<4 x float> [[VCVTN_I]]) #2
2741*67e74705SXin Li // CHECK:   ret <4 x i32> [[VCVTN1_I]]
test_vcvtnq_u32_f32(float32x4_t a)2742*67e74705SXin Li uint32x4_t test_vcvtnq_u32_f32(float32x4_t a) {
2743*67e74705SXin Li   return vcvtnq_u32_f32(a);
2744*67e74705SXin Li }
2745*67e74705SXin Li 
2746*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vcvtnq_u64_f64(<2 x double> %a) #0 {
2747*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2748*67e74705SXin Li // CHECK:   [[VCVTN_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2749*67e74705SXin Li // CHECK:   [[VCVTN1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtnu.v2i64.v2f64(<2 x double> [[VCVTN_I]]) #2
2750*67e74705SXin Li // CHECK:   ret <2 x i64> [[VCVTN1_I]]
test_vcvtnq_u64_f64(float64x2_t a)2751*67e74705SXin Li uint64x2_t test_vcvtnq_u64_f64(float64x2_t a) {
2752*67e74705SXin Li   return vcvtnq_u64_f64(a);
2753*67e74705SXin Li }
2754*67e74705SXin Li 
2755*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vcvtp_s32_f32(<2 x float> %a) #0 {
2756*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2757*67e74705SXin Li // CHECK:   [[VCVTP_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
2758*67e74705SXin Li // CHECK:   [[VCVTP1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtps.v2i32.v2f32(<2 x float> [[VCVTP_I]]) #2
2759*67e74705SXin Li // CHECK:   ret <2 x i32> [[VCVTP1_I]]
test_vcvtp_s32_f32(float32x2_t a)2760*67e74705SXin Li int32x2_t test_vcvtp_s32_f32(float32x2_t a) {
2761*67e74705SXin Li   return vcvtp_s32_f32(a);
2762*67e74705SXin Li }
2763*67e74705SXin Li 
2764*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vcvtpq_s32_f32(<4 x float> %a) #0 {
2765*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2766*67e74705SXin Li // CHECK:   [[VCVTP_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
2767*67e74705SXin Li // CHECK:   [[VCVTP1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtps.v4i32.v4f32(<4 x float> [[VCVTP_I]]) #2
2768*67e74705SXin Li // CHECK:   ret <4 x i32> [[VCVTP1_I]]
test_vcvtpq_s32_f32(float32x4_t a)2769*67e74705SXin Li int32x4_t test_vcvtpq_s32_f32(float32x4_t a) {
2770*67e74705SXin Li   return vcvtpq_s32_f32(a);
2771*67e74705SXin Li }
2772*67e74705SXin Li 
2773*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vcvtpq_s64_f64(<2 x double> %a) #0 {
2774*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2775*67e74705SXin Li // CHECK:   [[VCVTP_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2776*67e74705SXin Li // CHECK:   [[VCVTP1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtps.v2i64.v2f64(<2 x double> [[VCVTP_I]]) #2
2777*67e74705SXin Li // CHECK:   ret <2 x i64> [[VCVTP1_I]]
test_vcvtpq_s64_f64(float64x2_t a)2778*67e74705SXin Li int64x2_t test_vcvtpq_s64_f64(float64x2_t a) {
2779*67e74705SXin Li   return vcvtpq_s64_f64(a);
2780*67e74705SXin Li }
2781*67e74705SXin Li 
2782*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vcvtp_u32_f32(<2 x float> %a) #0 {
2783*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2784*67e74705SXin Li // CHECK:   [[VCVTP_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
2785*67e74705SXin Li // CHECK:   [[VCVTP1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtpu.v2i32.v2f32(<2 x float> [[VCVTP_I]]) #2
2786*67e74705SXin Li // CHECK:   ret <2 x i32> [[VCVTP1_I]]
test_vcvtp_u32_f32(float32x2_t a)2787*67e74705SXin Li uint32x2_t test_vcvtp_u32_f32(float32x2_t a) {
2788*67e74705SXin Li   return vcvtp_u32_f32(a);
2789*67e74705SXin Li }
2790*67e74705SXin Li 
2791*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vcvtpq_u32_f32(<4 x float> %a) #0 {
2792*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2793*67e74705SXin Li // CHECK:   [[VCVTP_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
2794*67e74705SXin Li // CHECK:   [[VCVTP1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtpu.v4i32.v4f32(<4 x float> [[VCVTP_I]]) #2
2795*67e74705SXin Li // CHECK:   ret <4 x i32> [[VCVTP1_I]]
test_vcvtpq_u32_f32(float32x4_t a)2796*67e74705SXin Li uint32x4_t test_vcvtpq_u32_f32(float32x4_t a) {
2797*67e74705SXin Li   return vcvtpq_u32_f32(a);
2798*67e74705SXin Li }
2799*67e74705SXin Li 
2800*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vcvtpq_u64_f64(<2 x double> %a) #0 {
2801*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2802*67e74705SXin Li // CHECK:   [[VCVTP_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2803*67e74705SXin Li // CHECK:   [[VCVTP1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtpu.v2i64.v2f64(<2 x double> [[VCVTP_I]]) #2
2804*67e74705SXin Li // CHECK:   ret <2 x i64> [[VCVTP1_I]]
test_vcvtpq_u64_f64(float64x2_t a)2805*67e74705SXin Li uint64x2_t test_vcvtpq_u64_f64(float64x2_t a) {
2806*67e74705SXin Li   return vcvtpq_u64_f64(a);
2807*67e74705SXin Li }
2808*67e74705SXin Li 
2809*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vcvtm_s32_f32(<2 x float> %a) #0 {
2810*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2811*67e74705SXin Li // CHECK:   [[VCVTM_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
2812*67e74705SXin Li // CHECK:   [[VCVTM1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtms.v2i32.v2f32(<2 x float> [[VCVTM_I]]) #2
2813*67e74705SXin Li // CHECK:   ret <2 x i32> [[VCVTM1_I]]
test_vcvtm_s32_f32(float32x2_t a)2814*67e74705SXin Li int32x2_t test_vcvtm_s32_f32(float32x2_t a) {
2815*67e74705SXin Li   return vcvtm_s32_f32(a);
2816*67e74705SXin Li }
2817*67e74705SXin Li 
2818*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vcvtmq_s32_f32(<4 x float> %a) #0 {
2819*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2820*67e74705SXin Li // CHECK:   [[VCVTM_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
2821*67e74705SXin Li // CHECK:   [[VCVTM1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtms.v4i32.v4f32(<4 x float> [[VCVTM_I]]) #2
2822*67e74705SXin Li // CHECK:   ret <4 x i32> [[VCVTM1_I]]
test_vcvtmq_s32_f32(float32x4_t a)2823*67e74705SXin Li int32x4_t test_vcvtmq_s32_f32(float32x4_t a) {
2824*67e74705SXin Li   return vcvtmq_s32_f32(a);
2825*67e74705SXin Li }
2826*67e74705SXin Li 
2827*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vcvtmq_s64_f64(<2 x double> %a) #0 {
2828*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2829*67e74705SXin Li // CHECK:   [[VCVTM_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2830*67e74705SXin Li // CHECK:   [[VCVTM1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtms.v2i64.v2f64(<2 x double> [[VCVTM_I]]) #2
2831*67e74705SXin Li // CHECK:   ret <2 x i64> [[VCVTM1_I]]
test_vcvtmq_s64_f64(float64x2_t a)2832*67e74705SXin Li int64x2_t test_vcvtmq_s64_f64(float64x2_t a) {
2833*67e74705SXin Li   return vcvtmq_s64_f64(a);
2834*67e74705SXin Li }
2835*67e74705SXin Li 
2836*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vcvtm_u32_f32(<2 x float> %a) #0 {
2837*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2838*67e74705SXin Li // CHECK:   [[VCVTM_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
2839*67e74705SXin Li // CHECK:   [[VCVTM1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtmu.v2i32.v2f32(<2 x float> [[VCVTM_I]]) #2
2840*67e74705SXin Li // CHECK:   ret <2 x i32> [[VCVTM1_I]]
test_vcvtm_u32_f32(float32x2_t a)2841*67e74705SXin Li uint32x2_t test_vcvtm_u32_f32(float32x2_t a) {
2842*67e74705SXin Li   return vcvtm_u32_f32(a);
2843*67e74705SXin Li }
2844*67e74705SXin Li 
2845*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vcvtmq_u32_f32(<4 x float> %a) #0 {
2846*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2847*67e74705SXin Li // CHECK:   [[VCVTM_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
2848*67e74705SXin Li // CHECK:   [[VCVTM1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtmu.v4i32.v4f32(<4 x float> [[VCVTM_I]]) #2
2849*67e74705SXin Li // CHECK:   ret <4 x i32> [[VCVTM1_I]]
test_vcvtmq_u32_f32(float32x4_t a)2850*67e74705SXin Li uint32x4_t test_vcvtmq_u32_f32(float32x4_t a) {
2851*67e74705SXin Li   return vcvtmq_u32_f32(a);
2852*67e74705SXin Li }
2853*67e74705SXin Li 
2854*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vcvtmq_u64_f64(<2 x double> %a) #0 {
2855*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2856*67e74705SXin Li // CHECK:   [[VCVTM_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2857*67e74705SXin Li // CHECK:   [[VCVTM1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtmu.v2i64.v2f64(<2 x double> [[VCVTM_I]]) #2
2858*67e74705SXin Li // CHECK:   ret <2 x i64> [[VCVTM1_I]]
test_vcvtmq_u64_f64(float64x2_t a)2859*67e74705SXin Li uint64x2_t test_vcvtmq_u64_f64(float64x2_t a) {
2860*67e74705SXin Li   return vcvtmq_u64_f64(a);
2861*67e74705SXin Li }
2862*67e74705SXin Li 
2863*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vcvta_s32_f32(<2 x float> %a) #0 {
2864*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2865*67e74705SXin Li // CHECK:   [[VCVTA_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
2866*67e74705SXin Li // CHECK:   [[VCVTA1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtas.v2i32.v2f32(<2 x float> [[VCVTA_I]]) #2
2867*67e74705SXin Li // CHECK:   ret <2 x i32> [[VCVTA1_I]]
test_vcvta_s32_f32(float32x2_t a)2868*67e74705SXin Li int32x2_t test_vcvta_s32_f32(float32x2_t a) {
2869*67e74705SXin Li   return vcvta_s32_f32(a);
2870*67e74705SXin Li }
2871*67e74705SXin Li 
2872*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vcvtaq_s32_f32(<4 x float> %a) #0 {
2873*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2874*67e74705SXin Li // CHECK:   [[VCVTA_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
2875*67e74705SXin Li // CHECK:   [[VCVTA1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtas.v4i32.v4f32(<4 x float> [[VCVTA_I]]) #2
2876*67e74705SXin Li // CHECK:   ret <4 x i32> [[VCVTA1_I]]
test_vcvtaq_s32_f32(float32x4_t a)2877*67e74705SXin Li int32x4_t test_vcvtaq_s32_f32(float32x4_t a) {
2878*67e74705SXin Li   return vcvtaq_s32_f32(a);
2879*67e74705SXin Li }
2880*67e74705SXin Li 
2881*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vcvtaq_s64_f64(<2 x double> %a) #0 {
2882*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2883*67e74705SXin Li // CHECK:   [[VCVTA_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2884*67e74705SXin Li // CHECK:   [[VCVTA1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtas.v2i64.v2f64(<2 x double> [[VCVTA_I]]) #2
2885*67e74705SXin Li // CHECK:   ret <2 x i64> [[VCVTA1_I]]
test_vcvtaq_s64_f64(float64x2_t a)2886*67e74705SXin Li int64x2_t test_vcvtaq_s64_f64(float64x2_t a) {
2887*67e74705SXin Li   return vcvtaq_s64_f64(a);
2888*67e74705SXin Li }
2889*67e74705SXin Li 
2890*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vcvta_u32_f32(<2 x float> %a) #0 {
2891*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2892*67e74705SXin Li // CHECK:   [[VCVTA_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
2893*67e74705SXin Li // CHECK:   [[VCVTA1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtau.v2i32.v2f32(<2 x float> [[VCVTA_I]]) #2
2894*67e74705SXin Li // CHECK:   ret <2 x i32> [[VCVTA1_I]]
test_vcvta_u32_f32(float32x2_t a)2895*67e74705SXin Li uint32x2_t test_vcvta_u32_f32(float32x2_t a) {
2896*67e74705SXin Li   return vcvta_u32_f32(a);
2897*67e74705SXin Li }
2898*67e74705SXin Li 
2899*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vcvtaq_u32_f32(<4 x float> %a) #0 {
2900*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2901*67e74705SXin Li // CHECK:   [[VCVTA_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
2902*67e74705SXin Li // CHECK:   [[VCVTA1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtau.v4i32.v4f32(<4 x float> [[VCVTA_I]]) #2
2903*67e74705SXin Li // CHECK:   ret <4 x i32> [[VCVTA1_I]]
test_vcvtaq_u32_f32(float32x4_t a)2904*67e74705SXin Li uint32x4_t test_vcvtaq_u32_f32(float32x4_t a) {
2905*67e74705SXin Li   return vcvtaq_u32_f32(a);
2906*67e74705SXin Li }
2907*67e74705SXin Li 
2908*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vcvtaq_u64_f64(<2 x double> %a) #0 {
2909*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2910*67e74705SXin Li // CHECK:   [[VCVTA_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2911*67e74705SXin Li // CHECK:   [[VCVTA1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtau.v2i64.v2f64(<2 x double> [[VCVTA_I]]) #2
2912*67e74705SXin Li // CHECK:   ret <2 x i64> [[VCVTA1_I]]
test_vcvtaq_u64_f64(float64x2_t a)2913*67e74705SXin Li uint64x2_t test_vcvtaq_u64_f64(float64x2_t a) {
2914*67e74705SXin Li   return vcvtaq_u64_f64(a);
2915*67e74705SXin Li }
2916*67e74705SXin Li 
2917*67e74705SXin Li // CHECK-LABEL: define <2 x float> @test_vrsqrte_f32(<2 x float> %a) #0 {
2918*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2919*67e74705SXin Li // CHECK:   [[VRSQRTE_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
2920*67e74705SXin Li // CHECK:   [[VRSQRTE_V1_I:%.*]] = call <2 x float> @llvm.aarch64.neon.frsqrte.v2f32(<2 x float> [[VRSQRTE_V_I]]) #2
2921*67e74705SXin Li // CHECK:   ret <2 x float> [[VRSQRTE_V1_I]]
test_vrsqrte_f32(float32x2_t a)2922*67e74705SXin Li float32x2_t test_vrsqrte_f32(float32x2_t a) {
2923*67e74705SXin Li   return vrsqrte_f32(a);
2924*67e74705SXin Li }
2925*67e74705SXin Li 
2926*67e74705SXin Li // CHECK-LABEL: define <4 x float> @test_vrsqrteq_f32(<4 x float> %a) #0 {
2927*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2928*67e74705SXin Li // CHECK:   [[VRSQRTEQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
2929*67e74705SXin Li // CHECK:   [[VRSQRTEQ_V1_I:%.*]] = call <4 x float> @llvm.aarch64.neon.frsqrte.v4f32(<4 x float> [[VRSQRTEQ_V_I]]) #2
2930*67e74705SXin Li // CHECK:   ret <4 x float> [[VRSQRTEQ_V1_I]]
test_vrsqrteq_f32(float32x4_t a)2931*67e74705SXin Li float32x4_t test_vrsqrteq_f32(float32x4_t a) {
2932*67e74705SXin Li   return vrsqrteq_f32(a);
2933*67e74705SXin Li }
2934*67e74705SXin Li 
2935*67e74705SXin Li // CHECK-LABEL: define <2 x double> @test_vrsqrteq_f64(<2 x double> %a) #0 {
2936*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2937*67e74705SXin Li // CHECK:   [[VRSQRTEQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2938*67e74705SXin Li // CHECK:   [[VRSQRTEQ_V1_I:%.*]] = call <2 x double> @llvm.aarch64.neon.frsqrte.v2f64(<2 x double> [[VRSQRTEQ_V_I]]) #2
2939*67e74705SXin Li // CHECK:   ret <2 x double> [[VRSQRTEQ_V1_I]]
test_vrsqrteq_f64(float64x2_t a)2940*67e74705SXin Li float64x2_t test_vrsqrteq_f64(float64x2_t a) {
2941*67e74705SXin Li   return vrsqrteq_f64(a);
2942*67e74705SXin Li }
2943*67e74705SXin Li 
2944*67e74705SXin Li // CHECK-LABEL: define <2 x float> @test_vrecpe_f32(<2 x float> %a) #0 {
2945*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2946*67e74705SXin Li // CHECK:   [[VRECPE_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
2947*67e74705SXin Li // CHECK:   [[VRECPE_V1_I:%.*]] = call <2 x float> @llvm.aarch64.neon.frecpe.v2f32(<2 x float> [[VRECPE_V_I]]) #2
2948*67e74705SXin Li // CHECK:   ret <2 x float> [[VRECPE_V1_I]]
test_vrecpe_f32(float32x2_t a)2949*67e74705SXin Li float32x2_t test_vrecpe_f32(float32x2_t a) {
2950*67e74705SXin Li   return vrecpe_f32(a);
2951*67e74705SXin Li }
2952*67e74705SXin Li 
2953*67e74705SXin Li // CHECK-LABEL: define <4 x float> @test_vrecpeq_f32(<4 x float> %a) #0 {
2954*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
2955*67e74705SXin Li // CHECK:   [[VRECPEQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
2956*67e74705SXin Li // CHECK:   [[VRECPEQ_V1_I:%.*]] = call <4 x float> @llvm.aarch64.neon.frecpe.v4f32(<4 x float> [[VRECPEQ_V_I]]) #2
2957*67e74705SXin Li // CHECK:   ret <4 x float> [[VRECPEQ_V1_I]]
test_vrecpeq_f32(float32x4_t a)2958*67e74705SXin Li float32x4_t test_vrecpeq_f32(float32x4_t a) {
2959*67e74705SXin Li   return vrecpeq_f32(a);
2960*67e74705SXin Li }
2961*67e74705SXin Li 
2962*67e74705SXin Li // CHECK-LABEL: define <2 x double> @test_vrecpeq_f64(<2 x double> %a) #0 {
2963*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
2964*67e74705SXin Li // CHECK:   [[VRECPEQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
2965*67e74705SXin Li // CHECK:   [[VRECPEQ_V1_I:%.*]] = call <2 x double> @llvm.aarch64.neon.frecpe.v2f64(<2 x double> [[VRECPEQ_V_I]]) #2
2966*67e74705SXin Li // CHECK:   ret <2 x double> [[VRECPEQ_V1_I]]
test_vrecpeq_f64(float64x2_t a)2967*67e74705SXin Li float64x2_t test_vrecpeq_f64(float64x2_t a) {
2968*67e74705SXin Li   return vrecpeq_f64(a);
2969*67e74705SXin Li }
2970*67e74705SXin Li 
2971*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vrecpe_u32(<2 x i32> %a) #0 {
2972*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
2973*67e74705SXin Li // CHECK:   [[VRECPE_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
2974*67e74705SXin Li // CHECK:   [[VRECPE_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.urecpe.v2i32(<2 x i32> [[VRECPE_V_I]]) #2
2975*67e74705SXin Li // CHECK:   ret <2 x i32> [[VRECPE_V1_I]]
test_vrecpe_u32(uint32x2_t a)2976*67e74705SXin Li uint32x2_t test_vrecpe_u32(uint32x2_t a) {
2977*67e74705SXin Li   return vrecpe_u32(a);
2978*67e74705SXin Li }
2979*67e74705SXin Li 
2980*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vrecpeq_u32(<4 x i32> %a) #0 {
2981*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
2982*67e74705SXin Li // CHECK:   [[VRECPEQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
2983*67e74705SXin Li // CHECK:   [[VRECPEQ_V1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.urecpe.v4i32(<4 x i32> [[VRECPEQ_V_I]]) #2
2984*67e74705SXin Li // CHECK:   ret <4 x i32> [[VRECPEQ_V1_I]]
test_vrecpeq_u32(uint32x4_t a)2985*67e74705SXin Li uint32x4_t test_vrecpeq_u32(uint32x4_t a) {
2986*67e74705SXin Li   return vrecpeq_u32(a);
2987*67e74705SXin Li }
2988*67e74705SXin Li 
2989*67e74705SXin Li // CHECK-LABEL: define <2 x float> @test_vsqrt_f32(<2 x float> %a) #0 {
2990*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8>
2991*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float>
2992*67e74705SXin Li // CHECK:   [[VSQRT_I:%.*]] = call <2 x float> @llvm.sqrt.v2f32(<2 x float> [[TMP1]]) #2
2993*67e74705SXin Li // CHECK:   ret <2 x float> [[VSQRT_I]]
test_vsqrt_f32(float32x2_t a)2994*67e74705SXin Li float32x2_t test_vsqrt_f32(float32x2_t a) {
2995*67e74705SXin Li   return vsqrt_f32(a);
2996*67e74705SXin Li }
2997*67e74705SXin Li 
2998*67e74705SXin Li // CHECK-LABEL: define <4 x float> @test_vsqrtq_f32(<4 x float> %a) #0 {
2999*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
3000*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
3001*67e74705SXin Li // CHECK:   [[VSQRT_I:%.*]] = call <4 x float> @llvm.sqrt.v4f32(<4 x float> [[TMP1]]) #2
3002*67e74705SXin Li // CHECK:   ret <4 x float> [[VSQRT_I]]
test_vsqrtq_f32(float32x4_t a)3003*67e74705SXin Li float32x4_t test_vsqrtq_f32(float32x4_t a) {
3004*67e74705SXin Li   return vsqrtq_f32(a);
3005*67e74705SXin Li }
3006*67e74705SXin Li 
3007*67e74705SXin Li // CHECK-LABEL: define <2 x double> @test_vsqrtq_f64(<2 x double> %a) #0 {
3008*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8>
3009*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double>
3010*67e74705SXin Li // CHECK:   [[VSQRT_I:%.*]] = call <2 x double> @llvm.sqrt.v2f64(<2 x double> [[TMP1]]) #2
3011*67e74705SXin Li // CHECK:   ret <2 x double> [[VSQRT_I]]
test_vsqrtq_f64(float64x2_t a)3012*67e74705SXin Li float64x2_t test_vsqrtq_f64(float64x2_t a) {
3013*67e74705SXin Li   return vsqrtq_f64(a);
3014*67e74705SXin Li }
3015*67e74705SXin Li 
3016*67e74705SXin Li // CHECK-LABEL: define <2 x float> @test_vcvt_f32_s32(<2 x i32> %a) #0 {
3017*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
3018*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
3019*67e74705SXin Li // CHECK:   [[VCVT_I:%.*]] = sitofp <2 x i32> [[TMP1]] to <2 x float>
3020*67e74705SXin Li // CHECK:   ret <2 x float> [[VCVT_I]]
test_vcvt_f32_s32(int32x2_t a)3021*67e74705SXin Li float32x2_t test_vcvt_f32_s32(int32x2_t a) {
3022*67e74705SXin Li   return vcvt_f32_s32(a);
3023*67e74705SXin Li }
3024*67e74705SXin Li 
3025*67e74705SXin Li // CHECK-LABEL: define <2 x float> @test_vcvt_f32_u32(<2 x i32> %a) #0 {
3026*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
3027*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
3028*67e74705SXin Li // CHECK:   [[VCVT_I:%.*]] = uitofp <2 x i32> [[TMP1]] to <2 x float>
3029*67e74705SXin Li // CHECK:   ret <2 x float> [[VCVT_I]]
test_vcvt_f32_u32(uint32x2_t a)3030*67e74705SXin Li float32x2_t test_vcvt_f32_u32(uint32x2_t a) {
3031*67e74705SXin Li   return vcvt_f32_u32(a);
3032*67e74705SXin Li }
3033*67e74705SXin Li 
3034*67e74705SXin Li // CHECK-LABEL: define <4 x float> @test_vcvtq_f32_s32(<4 x i32> %a) #0 {
3035*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
3036*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
3037*67e74705SXin Li // CHECK:   [[VCVT_I:%.*]] = sitofp <4 x i32> [[TMP1]] to <4 x float>
3038*67e74705SXin Li // CHECK:   ret <4 x float> [[VCVT_I]]
test_vcvtq_f32_s32(int32x4_t a)3039*67e74705SXin Li float32x4_t test_vcvtq_f32_s32(int32x4_t a) {
3040*67e74705SXin Li   return vcvtq_f32_s32(a);
3041*67e74705SXin Li }
3042*67e74705SXin Li 
3043*67e74705SXin Li // CHECK-LABEL: define <4 x float> @test_vcvtq_f32_u32(<4 x i32> %a) #0 {
3044*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
3045*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
3046*67e74705SXin Li // CHECK:   [[VCVT_I:%.*]] = uitofp <4 x i32> [[TMP1]] to <4 x float>
3047*67e74705SXin Li // CHECK:   ret <4 x float> [[VCVT_I]]
test_vcvtq_f32_u32(uint32x4_t a)3048*67e74705SXin Li float32x4_t test_vcvtq_f32_u32(uint32x4_t a) {
3049*67e74705SXin Li   return vcvtq_f32_u32(a);
3050*67e74705SXin Li }
3051*67e74705SXin Li 
3052*67e74705SXin Li // CHECK-LABEL: define <2 x double> @test_vcvtq_f64_s64(<2 x i64> %a) #0 {
3053*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
3054*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
3055*67e74705SXin Li // CHECK:   [[VCVT_I:%.*]] = sitofp <2 x i64> [[TMP1]] to <2 x double>
3056*67e74705SXin Li // CHECK:   ret <2 x double> [[VCVT_I]]
test_vcvtq_f64_s64(int64x2_t a)3057*67e74705SXin Li float64x2_t test_vcvtq_f64_s64(int64x2_t a) {
3058*67e74705SXin Li   return vcvtq_f64_s64(a);
3059*67e74705SXin Li }
3060*67e74705SXin Li 
3061*67e74705SXin Li // CHECK-LABEL: define <2 x double> @test_vcvtq_f64_u64(<2 x i64> %a) #0 {
3062*67e74705SXin Li // CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
3063*67e74705SXin Li // CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
3064*67e74705SXin Li // CHECK:   [[VCVT_I:%.*]] = uitofp <2 x i64> [[TMP1]] to <2 x double>
3065*67e74705SXin Li // CHECK:   ret <2 x double> [[VCVT_I]]
test_vcvtq_f64_u64(uint64x2_t a)3066*67e74705SXin Li float64x2_t test_vcvtq_f64_u64(uint64x2_t a) {
3067*67e74705SXin Li   return vcvtq_f64_u64(a);
3068*67e74705SXin Li }
3069