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