xref: /aosp_15_r20/external/clang/test/CodeGen/aarch64-neon-3v.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon -emit-llvm -o - %s | opt -S -mem2reg | FileCheck %s
2*67e74705SXin Li 
3*67e74705SXin Li // Test new aarch64 intrinsics and types
4*67e74705SXin Li 
5*67e74705SXin Li #include <arm_neon.h>
6*67e74705SXin Li 
7*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vand_s8(<8 x i8> %a, <8 x i8> %b) #0 {
8*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <8 x i8> %a, %b
9*67e74705SXin Li // CHECK:   ret <8 x i8> [[AND_I]]
test_vand_s8(int8x8_t a,int8x8_t b)10*67e74705SXin Li int8x8_t test_vand_s8(int8x8_t a, int8x8_t b) {
11*67e74705SXin Li   return vand_s8(a, b);
12*67e74705SXin Li }
13*67e74705SXin Li 
14*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vandq_s8(<16 x i8> %a, <16 x i8> %b) #0 {
15*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <16 x i8> %a, %b
16*67e74705SXin Li // CHECK:   ret <16 x i8> [[AND_I]]
test_vandq_s8(int8x16_t a,int8x16_t b)17*67e74705SXin Li int8x16_t test_vandq_s8(int8x16_t a, int8x16_t b) {
18*67e74705SXin Li   return vandq_s8(a, b);
19*67e74705SXin Li }
20*67e74705SXin Li 
21*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vand_s16(<4 x i16> %a, <4 x i16> %b) #0 {
22*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <4 x i16> %a, %b
23*67e74705SXin Li // CHECK:   ret <4 x i16> [[AND_I]]
test_vand_s16(int16x4_t a,int16x4_t b)24*67e74705SXin Li int16x4_t test_vand_s16(int16x4_t a, int16x4_t b) {
25*67e74705SXin Li   return vand_s16(a, b);
26*67e74705SXin Li }
27*67e74705SXin Li 
28*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vandq_s16(<8 x i16> %a, <8 x i16> %b) #0 {
29*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <8 x i16> %a, %b
30*67e74705SXin Li // CHECK:   ret <8 x i16> [[AND_I]]
test_vandq_s16(int16x8_t a,int16x8_t b)31*67e74705SXin Li int16x8_t test_vandq_s16(int16x8_t a, int16x8_t b) {
32*67e74705SXin Li   return vandq_s16(a, b);
33*67e74705SXin Li }
34*67e74705SXin Li 
35*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vand_s32(<2 x i32> %a, <2 x i32> %b) #0 {
36*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <2 x i32> %a, %b
37*67e74705SXin Li // CHECK:   ret <2 x i32> [[AND_I]]
test_vand_s32(int32x2_t a,int32x2_t b)38*67e74705SXin Li int32x2_t test_vand_s32(int32x2_t a, int32x2_t b) {
39*67e74705SXin Li   return vand_s32(a, b);
40*67e74705SXin Li }
41*67e74705SXin Li 
42*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vandq_s32(<4 x i32> %a, <4 x i32> %b) #0 {
43*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <4 x i32> %a, %b
44*67e74705SXin Li // CHECK:   ret <4 x i32> [[AND_I]]
test_vandq_s32(int32x4_t a,int32x4_t b)45*67e74705SXin Li int32x4_t test_vandq_s32(int32x4_t a, int32x4_t b) {
46*67e74705SXin Li   return vandq_s32(a, b);
47*67e74705SXin Li }
48*67e74705SXin Li 
49*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vand_s64(<1 x i64> %a, <1 x i64> %b) #0 {
50*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <1 x i64> %a, %b
51*67e74705SXin Li // CHECK:   ret <1 x i64> [[AND_I]]
test_vand_s64(int64x1_t a,int64x1_t b)52*67e74705SXin Li int64x1_t test_vand_s64(int64x1_t a, int64x1_t b) {
53*67e74705SXin Li   return vand_s64(a, b);
54*67e74705SXin Li }
55*67e74705SXin Li 
56*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vandq_s64(<2 x i64> %a, <2 x i64> %b) #0 {
57*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <2 x i64> %a, %b
58*67e74705SXin Li // CHECK:   ret <2 x i64> [[AND_I]]
test_vandq_s64(int64x2_t a,int64x2_t b)59*67e74705SXin Li int64x2_t test_vandq_s64(int64x2_t a, int64x2_t b) {
60*67e74705SXin Li   return vandq_s64(a, b);
61*67e74705SXin Li }
62*67e74705SXin Li 
63*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vand_u8(<8 x i8> %a, <8 x i8> %b) #0 {
64*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <8 x i8> %a, %b
65*67e74705SXin Li // CHECK:   ret <8 x i8> [[AND_I]]
test_vand_u8(uint8x8_t a,uint8x8_t b)66*67e74705SXin Li uint8x8_t test_vand_u8(uint8x8_t a, uint8x8_t b) {
67*67e74705SXin Li   return vand_u8(a, b);
68*67e74705SXin Li }
69*67e74705SXin Li 
70*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vandq_u8(<16 x i8> %a, <16 x i8> %b) #0 {
71*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <16 x i8> %a, %b
72*67e74705SXin Li // CHECK:   ret <16 x i8> [[AND_I]]
test_vandq_u8(uint8x16_t a,uint8x16_t b)73*67e74705SXin Li uint8x16_t test_vandq_u8(uint8x16_t a, uint8x16_t b) {
74*67e74705SXin Li   return vandq_u8(a, b);
75*67e74705SXin Li }
76*67e74705SXin Li 
77*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vand_u16(<4 x i16> %a, <4 x i16> %b) #0 {
78*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <4 x i16> %a, %b
79*67e74705SXin Li // CHECK:   ret <4 x i16> [[AND_I]]
test_vand_u16(uint16x4_t a,uint16x4_t b)80*67e74705SXin Li uint16x4_t test_vand_u16(uint16x4_t a, uint16x4_t b) {
81*67e74705SXin Li   return vand_u16(a, b);
82*67e74705SXin Li }
83*67e74705SXin Li 
84*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vandq_u16(<8 x i16> %a, <8 x i16> %b) #0 {
85*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <8 x i16> %a, %b
86*67e74705SXin Li // CHECK:   ret <8 x i16> [[AND_I]]
test_vandq_u16(uint16x8_t a,uint16x8_t b)87*67e74705SXin Li uint16x8_t test_vandq_u16(uint16x8_t a, uint16x8_t b) {
88*67e74705SXin Li   return vandq_u16(a, b);
89*67e74705SXin Li }
90*67e74705SXin Li 
91*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vand_u32(<2 x i32> %a, <2 x i32> %b) #0 {
92*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <2 x i32> %a, %b
93*67e74705SXin Li // CHECK:   ret <2 x i32> [[AND_I]]
test_vand_u32(uint32x2_t a,uint32x2_t b)94*67e74705SXin Li uint32x2_t test_vand_u32(uint32x2_t a, uint32x2_t b) {
95*67e74705SXin Li   return vand_u32(a, b);
96*67e74705SXin Li }
97*67e74705SXin Li 
98*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vandq_u32(<4 x i32> %a, <4 x i32> %b) #0 {
99*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <4 x i32> %a, %b
100*67e74705SXin Li // CHECK:   ret <4 x i32> [[AND_I]]
test_vandq_u32(uint32x4_t a,uint32x4_t b)101*67e74705SXin Li uint32x4_t test_vandq_u32(uint32x4_t a, uint32x4_t b) {
102*67e74705SXin Li   return vandq_u32(a, b);
103*67e74705SXin Li }
104*67e74705SXin Li 
105*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vand_u64(<1 x i64> %a, <1 x i64> %b) #0 {
106*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <1 x i64> %a, %b
107*67e74705SXin Li // CHECK:   ret <1 x i64> [[AND_I]]
test_vand_u64(uint64x1_t a,uint64x1_t b)108*67e74705SXin Li uint64x1_t test_vand_u64(uint64x1_t a, uint64x1_t b) {
109*67e74705SXin Li   return vand_u64(a, b);
110*67e74705SXin Li }
111*67e74705SXin Li 
112*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vandq_u64(<2 x i64> %a, <2 x i64> %b) #0 {
113*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <2 x i64> %a, %b
114*67e74705SXin Li // CHECK:   ret <2 x i64> [[AND_I]]
test_vandq_u64(uint64x2_t a,uint64x2_t b)115*67e74705SXin Li uint64x2_t test_vandq_u64(uint64x2_t a, uint64x2_t b) {
116*67e74705SXin Li   return vandq_u64(a, b);
117*67e74705SXin Li }
118*67e74705SXin Li 
119*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vorr_s8(<8 x i8> %a, <8 x i8> %b) #0 {
120*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <8 x i8> %a, %b
121*67e74705SXin Li // CHECK:   ret <8 x i8> [[OR_I]]
test_vorr_s8(int8x8_t a,int8x8_t b)122*67e74705SXin Li int8x8_t test_vorr_s8(int8x8_t a, int8x8_t b) {
123*67e74705SXin Li   return vorr_s8(a, b);
124*67e74705SXin Li }
125*67e74705SXin Li 
126*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vorrq_s8(<16 x i8> %a, <16 x i8> %b) #0 {
127*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <16 x i8> %a, %b
128*67e74705SXin Li // CHECK:   ret <16 x i8> [[OR_I]]
test_vorrq_s8(int8x16_t a,int8x16_t b)129*67e74705SXin Li int8x16_t test_vorrq_s8(int8x16_t a, int8x16_t b) {
130*67e74705SXin Li   return vorrq_s8(a, b);
131*67e74705SXin Li }
132*67e74705SXin Li 
133*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vorr_s16(<4 x i16> %a, <4 x i16> %b) #0 {
134*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <4 x i16> %a, %b
135*67e74705SXin Li // CHECK:   ret <4 x i16> [[OR_I]]
test_vorr_s16(int16x4_t a,int16x4_t b)136*67e74705SXin Li int16x4_t test_vorr_s16(int16x4_t a, int16x4_t b) {
137*67e74705SXin Li   return vorr_s16(a, b);
138*67e74705SXin Li }
139*67e74705SXin Li 
140*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vorrq_s16(<8 x i16> %a, <8 x i16> %b) #0 {
141*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <8 x i16> %a, %b
142*67e74705SXin Li // CHECK:   ret <8 x i16> [[OR_I]]
test_vorrq_s16(int16x8_t a,int16x8_t b)143*67e74705SXin Li int16x8_t test_vorrq_s16(int16x8_t a, int16x8_t b) {
144*67e74705SXin Li   return vorrq_s16(a, b);
145*67e74705SXin Li }
146*67e74705SXin Li 
147*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vorr_s32(<2 x i32> %a, <2 x i32> %b) #0 {
148*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <2 x i32> %a, %b
149*67e74705SXin Li // CHECK:   ret <2 x i32> [[OR_I]]
test_vorr_s32(int32x2_t a,int32x2_t b)150*67e74705SXin Li int32x2_t test_vorr_s32(int32x2_t a, int32x2_t b) {
151*67e74705SXin Li   return vorr_s32(a, b);
152*67e74705SXin Li }
153*67e74705SXin Li 
154*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vorrq_s32(<4 x i32> %a, <4 x i32> %b) #0 {
155*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <4 x i32> %a, %b
156*67e74705SXin Li // CHECK:   ret <4 x i32> [[OR_I]]
test_vorrq_s32(int32x4_t a,int32x4_t b)157*67e74705SXin Li int32x4_t test_vorrq_s32(int32x4_t a, int32x4_t b) {
158*67e74705SXin Li   return vorrq_s32(a, b);
159*67e74705SXin Li }
160*67e74705SXin Li 
161*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vorr_s64(<1 x i64> %a, <1 x i64> %b) #0 {
162*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <1 x i64> %a, %b
163*67e74705SXin Li // CHECK:   ret <1 x i64> [[OR_I]]
test_vorr_s64(int64x1_t a,int64x1_t b)164*67e74705SXin Li int64x1_t test_vorr_s64(int64x1_t a, int64x1_t b) {
165*67e74705SXin Li   return vorr_s64(a, b);
166*67e74705SXin Li }
167*67e74705SXin Li 
168*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vorrq_s64(<2 x i64> %a, <2 x i64> %b) #0 {
169*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <2 x i64> %a, %b
170*67e74705SXin Li // CHECK:   ret <2 x i64> [[OR_I]]
test_vorrq_s64(int64x2_t a,int64x2_t b)171*67e74705SXin Li int64x2_t test_vorrq_s64(int64x2_t a, int64x2_t b) {
172*67e74705SXin Li   return vorrq_s64(a, b);
173*67e74705SXin Li }
174*67e74705SXin Li 
175*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vorr_u8(<8 x i8> %a, <8 x i8> %b) #0 {
176*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <8 x i8> %a, %b
177*67e74705SXin Li // CHECK:   ret <8 x i8> [[OR_I]]
test_vorr_u8(uint8x8_t a,uint8x8_t b)178*67e74705SXin Li uint8x8_t test_vorr_u8(uint8x8_t a, uint8x8_t b) {
179*67e74705SXin Li   return vorr_u8(a, b);
180*67e74705SXin Li }
181*67e74705SXin Li 
182*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vorrq_u8(<16 x i8> %a, <16 x i8> %b) #0 {
183*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <16 x i8> %a, %b
184*67e74705SXin Li // CHECK:   ret <16 x i8> [[OR_I]]
test_vorrq_u8(uint8x16_t a,uint8x16_t b)185*67e74705SXin Li uint8x16_t test_vorrq_u8(uint8x16_t a, uint8x16_t b) {
186*67e74705SXin Li   return vorrq_u8(a, b);
187*67e74705SXin Li }
188*67e74705SXin Li 
189*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vorr_u16(<4 x i16> %a, <4 x i16> %b) #0 {
190*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <4 x i16> %a, %b
191*67e74705SXin Li // CHECK:   ret <4 x i16> [[OR_I]]
test_vorr_u16(uint16x4_t a,uint16x4_t b)192*67e74705SXin Li uint16x4_t test_vorr_u16(uint16x4_t a, uint16x4_t b) {
193*67e74705SXin Li   return vorr_u16(a, b);
194*67e74705SXin Li }
195*67e74705SXin Li 
196*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vorrq_u16(<8 x i16> %a, <8 x i16> %b) #0 {
197*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <8 x i16> %a, %b
198*67e74705SXin Li // CHECK:   ret <8 x i16> [[OR_I]]
test_vorrq_u16(uint16x8_t a,uint16x8_t b)199*67e74705SXin Li uint16x8_t test_vorrq_u16(uint16x8_t a, uint16x8_t b) {
200*67e74705SXin Li   return vorrq_u16(a, b);
201*67e74705SXin Li }
202*67e74705SXin Li 
203*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vorr_u32(<2 x i32> %a, <2 x i32> %b) #0 {
204*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <2 x i32> %a, %b
205*67e74705SXin Li // CHECK:   ret <2 x i32> [[OR_I]]
test_vorr_u32(uint32x2_t a,uint32x2_t b)206*67e74705SXin Li uint32x2_t test_vorr_u32(uint32x2_t a, uint32x2_t b) {
207*67e74705SXin Li   return vorr_u32(a, b);
208*67e74705SXin Li }
209*67e74705SXin Li 
210*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vorrq_u32(<4 x i32> %a, <4 x i32> %b) #0 {
211*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <4 x i32> %a, %b
212*67e74705SXin Li // CHECK:   ret <4 x i32> [[OR_I]]
test_vorrq_u32(uint32x4_t a,uint32x4_t b)213*67e74705SXin Li uint32x4_t test_vorrq_u32(uint32x4_t a, uint32x4_t b) {
214*67e74705SXin Li   return vorrq_u32(a, b);
215*67e74705SXin Li }
216*67e74705SXin Li 
217*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vorr_u64(<1 x i64> %a, <1 x i64> %b) #0 {
218*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <1 x i64> %a, %b
219*67e74705SXin Li // CHECK:   ret <1 x i64> [[OR_I]]
test_vorr_u64(uint64x1_t a,uint64x1_t b)220*67e74705SXin Li uint64x1_t test_vorr_u64(uint64x1_t a, uint64x1_t b) {
221*67e74705SXin Li   return vorr_u64(a, b);
222*67e74705SXin Li }
223*67e74705SXin Li 
224*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vorrq_u64(<2 x i64> %a, <2 x i64> %b) #0 {
225*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <2 x i64> %a, %b
226*67e74705SXin Li // CHECK:   ret <2 x i64> [[OR_I]]
test_vorrq_u64(uint64x2_t a,uint64x2_t b)227*67e74705SXin Li uint64x2_t test_vorrq_u64(uint64x2_t a, uint64x2_t b) {
228*67e74705SXin Li   return vorrq_u64(a, b);
229*67e74705SXin Li }
230*67e74705SXin Li 
231*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_veor_s8(<8 x i8> %a, <8 x i8> %b) #0 {
232*67e74705SXin Li // CHECK:   [[XOR_I:%.*]] = xor <8 x i8> %a, %b
233*67e74705SXin Li // CHECK:   ret <8 x i8> [[XOR_I]]
test_veor_s8(int8x8_t a,int8x8_t b)234*67e74705SXin Li int8x8_t test_veor_s8(int8x8_t a, int8x8_t b) {
235*67e74705SXin Li   return veor_s8(a, b);
236*67e74705SXin Li }
237*67e74705SXin Li 
238*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_veorq_s8(<16 x i8> %a, <16 x i8> %b) #0 {
239*67e74705SXin Li // CHECK:   [[XOR_I:%.*]] = xor <16 x i8> %a, %b
240*67e74705SXin Li // CHECK:   ret <16 x i8> [[XOR_I]]
test_veorq_s8(int8x16_t a,int8x16_t b)241*67e74705SXin Li int8x16_t test_veorq_s8(int8x16_t a, int8x16_t b) {
242*67e74705SXin Li   return veorq_s8(a, b);
243*67e74705SXin Li }
244*67e74705SXin Li 
245*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_veor_s16(<4 x i16> %a, <4 x i16> %b) #0 {
246*67e74705SXin Li // CHECK:   [[XOR_I:%.*]] = xor <4 x i16> %a, %b
247*67e74705SXin Li // CHECK:   ret <4 x i16> [[XOR_I]]
test_veor_s16(int16x4_t a,int16x4_t b)248*67e74705SXin Li int16x4_t test_veor_s16(int16x4_t a, int16x4_t b) {
249*67e74705SXin Li   return veor_s16(a, b);
250*67e74705SXin Li }
251*67e74705SXin Li 
252*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_veorq_s16(<8 x i16> %a, <8 x i16> %b) #0 {
253*67e74705SXin Li // CHECK:   [[XOR_I:%.*]] = xor <8 x i16> %a, %b
254*67e74705SXin Li // CHECK:   ret <8 x i16> [[XOR_I]]
test_veorq_s16(int16x8_t a,int16x8_t b)255*67e74705SXin Li int16x8_t test_veorq_s16(int16x8_t a, int16x8_t b) {
256*67e74705SXin Li   return veorq_s16(a, b);
257*67e74705SXin Li }
258*67e74705SXin Li 
259*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_veor_s32(<2 x i32> %a, <2 x i32> %b) #0 {
260*67e74705SXin Li // CHECK:   [[XOR_I:%.*]] = xor <2 x i32> %a, %b
261*67e74705SXin Li // CHECK:   ret <2 x i32> [[XOR_I]]
test_veor_s32(int32x2_t a,int32x2_t b)262*67e74705SXin Li int32x2_t test_veor_s32(int32x2_t a, int32x2_t b) {
263*67e74705SXin Li   return veor_s32(a, b);
264*67e74705SXin Li }
265*67e74705SXin Li 
266*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_veorq_s32(<4 x i32> %a, <4 x i32> %b) #0 {
267*67e74705SXin Li // CHECK:   [[XOR_I:%.*]] = xor <4 x i32> %a, %b
268*67e74705SXin Li // CHECK:   ret <4 x i32> [[XOR_I]]
test_veorq_s32(int32x4_t a,int32x4_t b)269*67e74705SXin Li int32x4_t test_veorq_s32(int32x4_t a, int32x4_t b) {
270*67e74705SXin Li   return veorq_s32(a, b);
271*67e74705SXin Li }
272*67e74705SXin Li 
273*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_veor_s64(<1 x i64> %a, <1 x i64> %b) #0 {
274*67e74705SXin Li // CHECK:   [[XOR_I:%.*]] = xor <1 x i64> %a, %b
275*67e74705SXin Li // CHECK:   ret <1 x i64> [[XOR_I]]
test_veor_s64(int64x1_t a,int64x1_t b)276*67e74705SXin Li int64x1_t test_veor_s64(int64x1_t a, int64x1_t b) {
277*67e74705SXin Li   return veor_s64(a, b);
278*67e74705SXin Li }
279*67e74705SXin Li 
280*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_veorq_s64(<2 x i64> %a, <2 x i64> %b) #0 {
281*67e74705SXin Li // CHECK:   [[XOR_I:%.*]] = xor <2 x i64> %a, %b
282*67e74705SXin Li // CHECK:   ret <2 x i64> [[XOR_I]]
test_veorq_s64(int64x2_t a,int64x2_t b)283*67e74705SXin Li int64x2_t test_veorq_s64(int64x2_t a, int64x2_t b) {
284*67e74705SXin Li   return veorq_s64(a, b);
285*67e74705SXin Li }
286*67e74705SXin Li 
287*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_veor_u8(<8 x i8> %a, <8 x i8> %b) #0 {
288*67e74705SXin Li // CHECK:   [[XOR_I:%.*]] = xor <8 x i8> %a, %b
289*67e74705SXin Li // CHECK:   ret <8 x i8> [[XOR_I]]
test_veor_u8(uint8x8_t a,uint8x8_t b)290*67e74705SXin Li uint8x8_t test_veor_u8(uint8x8_t a, uint8x8_t b) {
291*67e74705SXin Li   return veor_u8(a, b);
292*67e74705SXin Li }
293*67e74705SXin Li 
294*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_veorq_u8(<16 x i8> %a, <16 x i8> %b) #0 {
295*67e74705SXin Li // CHECK:   [[XOR_I:%.*]] = xor <16 x i8> %a, %b
296*67e74705SXin Li // CHECK:   ret <16 x i8> [[XOR_I]]
test_veorq_u8(uint8x16_t a,uint8x16_t b)297*67e74705SXin Li uint8x16_t test_veorq_u8(uint8x16_t a, uint8x16_t b) {
298*67e74705SXin Li   return veorq_u8(a, b);
299*67e74705SXin Li }
300*67e74705SXin Li 
301*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_veor_u16(<4 x i16> %a, <4 x i16> %b) #0 {
302*67e74705SXin Li // CHECK:   [[XOR_I:%.*]] = xor <4 x i16> %a, %b
303*67e74705SXin Li // CHECK:   ret <4 x i16> [[XOR_I]]
test_veor_u16(uint16x4_t a,uint16x4_t b)304*67e74705SXin Li uint16x4_t test_veor_u16(uint16x4_t a, uint16x4_t b) {
305*67e74705SXin Li   return veor_u16(a, b);
306*67e74705SXin Li }
307*67e74705SXin Li 
308*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_veorq_u16(<8 x i16> %a, <8 x i16> %b) #0 {
309*67e74705SXin Li // CHECK:   [[XOR_I:%.*]] = xor <8 x i16> %a, %b
310*67e74705SXin Li // CHECK:   ret <8 x i16> [[XOR_I]]
test_veorq_u16(uint16x8_t a,uint16x8_t b)311*67e74705SXin Li uint16x8_t test_veorq_u16(uint16x8_t a, uint16x8_t b) {
312*67e74705SXin Li   return veorq_u16(a, b);
313*67e74705SXin Li }
314*67e74705SXin Li 
315*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_veor_u32(<2 x i32> %a, <2 x i32> %b) #0 {
316*67e74705SXin Li // CHECK:   [[XOR_I:%.*]] = xor <2 x i32> %a, %b
317*67e74705SXin Li // CHECK:   ret <2 x i32> [[XOR_I]]
test_veor_u32(uint32x2_t a,uint32x2_t b)318*67e74705SXin Li uint32x2_t test_veor_u32(uint32x2_t a, uint32x2_t b) {
319*67e74705SXin Li   return veor_u32(a, b);
320*67e74705SXin Li }
321*67e74705SXin Li 
322*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_veorq_u32(<4 x i32> %a, <4 x i32> %b) #0 {
323*67e74705SXin Li // CHECK:   [[XOR_I:%.*]] = xor <4 x i32> %a, %b
324*67e74705SXin Li // CHECK:   ret <4 x i32> [[XOR_I]]
test_veorq_u32(uint32x4_t a,uint32x4_t b)325*67e74705SXin Li uint32x4_t test_veorq_u32(uint32x4_t a, uint32x4_t b) {
326*67e74705SXin Li   return veorq_u32(a, b);
327*67e74705SXin Li }
328*67e74705SXin Li 
329*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_veor_u64(<1 x i64> %a, <1 x i64> %b) #0 {
330*67e74705SXin Li // CHECK:   [[XOR_I:%.*]] = xor <1 x i64> %a, %b
331*67e74705SXin Li // CHECK:   ret <1 x i64> [[XOR_I]]
test_veor_u64(uint64x1_t a,uint64x1_t b)332*67e74705SXin Li uint64x1_t test_veor_u64(uint64x1_t a, uint64x1_t b) {
333*67e74705SXin Li   return veor_u64(a, b);
334*67e74705SXin Li }
335*67e74705SXin Li 
336*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_veorq_u64(<2 x i64> %a, <2 x i64> %b) #0 {
337*67e74705SXin Li // CHECK:   [[XOR_I:%.*]] = xor <2 x i64> %a, %b
338*67e74705SXin Li // CHECK:   ret <2 x i64> [[XOR_I]]
test_veorq_u64(uint64x2_t a,uint64x2_t b)339*67e74705SXin Li uint64x2_t test_veorq_u64(uint64x2_t a, uint64x2_t b) {
340*67e74705SXin Li   return veorq_u64(a, b);
341*67e74705SXin Li }
342*67e74705SXin Li 
343*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vbic_s8(<8 x i8> %a, <8 x i8> %b) #0 {
344*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <8 x i8> %b, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
345*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <8 x i8> %a, [[NEG_I]]
346*67e74705SXin Li // CHECK:   ret <8 x i8> [[AND_I]]
test_vbic_s8(int8x8_t a,int8x8_t b)347*67e74705SXin Li int8x8_t test_vbic_s8(int8x8_t a, int8x8_t b) {
348*67e74705SXin Li   return vbic_s8(a, b);
349*67e74705SXin Li }
350*67e74705SXin Li 
351*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vbicq_s8(<16 x i8> %a, <16 x i8> %b) #0 {
352*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <16 x i8> %b, <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>
353*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <16 x i8> %a, [[NEG_I]]
354*67e74705SXin Li // CHECK:   ret <16 x i8> [[AND_I]]
test_vbicq_s8(int8x16_t a,int8x16_t b)355*67e74705SXin Li int8x16_t test_vbicq_s8(int8x16_t a, int8x16_t b) {
356*67e74705SXin Li   return vbicq_s8(a, b);
357*67e74705SXin Li }
358*67e74705SXin Li 
359*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vbic_s16(<4 x i16> %a, <4 x i16> %b) #0 {
360*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <4 x i16> %b, <i16 -1, i16 -1, i16 -1, i16 -1>
361*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <4 x i16> %a, [[NEG_I]]
362*67e74705SXin Li // CHECK:   ret <4 x i16> [[AND_I]]
test_vbic_s16(int16x4_t a,int16x4_t b)363*67e74705SXin Li int16x4_t test_vbic_s16(int16x4_t a, int16x4_t b) {
364*67e74705SXin Li   return vbic_s16(a, b);
365*67e74705SXin Li }
366*67e74705SXin Li 
367*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vbicq_s16(<8 x i16> %a, <8 x i16> %b) #0 {
368*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <8 x i16> %b, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
369*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <8 x i16> %a, [[NEG_I]]
370*67e74705SXin Li // CHECK:   ret <8 x i16> [[AND_I]]
test_vbicq_s16(int16x8_t a,int16x8_t b)371*67e74705SXin Li int16x8_t test_vbicq_s16(int16x8_t a, int16x8_t b) {
372*67e74705SXin Li   return vbicq_s16(a, b);
373*67e74705SXin Li }
374*67e74705SXin Li 
375*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vbic_s32(<2 x i32> %a, <2 x i32> %b) #0 {
376*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <2 x i32> %b, <i32 -1, i32 -1>
377*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <2 x i32> %a, [[NEG_I]]
378*67e74705SXin Li // CHECK:   ret <2 x i32> [[AND_I]]
test_vbic_s32(int32x2_t a,int32x2_t b)379*67e74705SXin Li int32x2_t test_vbic_s32(int32x2_t a, int32x2_t b) {
380*67e74705SXin Li   return vbic_s32(a, b);
381*67e74705SXin Li }
382*67e74705SXin Li 
383*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vbicq_s32(<4 x i32> %a, <4 x i32> %b) #0 {
384*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <4 x i32> %b, <i32 -1, i32 -1, i32 -1, i32 -1>
385*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <4 x i32> %a, [[NEG_I]]
386*67e74705SXin Li // CHECK:   ret <4 x i32> [[AND_I]]
test_vbicq_s32(int32x4_t a,int32x4_t b)387*67e74705SXin Li int32x4_t test_vbicq_s32(int32x4_t a, int32x4_t b) {
388*67e74705SXin Li   return vbicq_s32(a, b);
389*67e74705SXin Li }
390*67e74705SXin Li 
391*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vbic_s64(<1 x i64> %a, <1 x i64> %b) #0 {
392*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <1 x i64> %b, <i64 -1>
393*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <1 x i64> %a, [[NEG_I]]
394*67e74705SXin Li // CHECK:   ret <1 x i64> [[AND_I]]
test_vbic_s64(int64x1_t a,int64x1_t b)395*67e74705SXin Li int64x1_t test_vbic_s64(int64x1_t a, int64x1_t b) {
396*67e74705SXin Li   return vbic_s64(a, b);
397*67e74705SXin Li }
398*67e74705SXin Li 
399*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vbicq_s64(<2 x i64> %a, <2 x i64> %b) #0 {
400*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <2 x i64> %b, <i64 -1, i64 -1>
401*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <2 x i64> %a, [[NEG_I]]
402*67e74705SXin Li // CHECK:   ret <2 x i64> [[AND_I]]
test_vbicq_s64(int64x2_t a,int64x2_t b)403*67e74705SXin Li int64x2_t test_vbicq_s64(int64x2_t a, int64x2_t b) {
404*67e74705SXin Li   return vbicq_s64(a, b);
405*67e74705SXin Li }
406*67e74705SXin Li 
407*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vbic_u8(<8 x i8> %a, <8 x i8> %b) #0 {
408*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <8 x i8> %b, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
409*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <8 x i8> %a, [[NEG_I]]
410*67e74705SXin Li // CHECK:   ret <8 x i8> [[AND_I]]
test_vbic_u8(uint8x8_t a,uint8x8_t b)411*67e74705SXin Li uint8x8_t test_vbic_u8(uint8x8_t a, uint8x8_t b) {
412*67e74705SXin Li   return vbic_u8(a, b);
413*67e74705SXin Li }
414*67e74705SXin Li 
415*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vbicq_u8(<16 x i8> %a, <16 x i8> %b) #0 {
416*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <16 x i8> %b, <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>
417*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <16 x i8> %a, [[NEG_I]]
418*67e74705SXin Li // CHECK:   ret <16 x i8> [[AND_I]]
test_vbicq_u8(uint8x16_t a,uint8x16_t b)419*67e74705SXin Li uint8x16_t test_vbicq_u8(uint8x16_t a, uint8x16_t b) {
420*67e74705SXin Li   return vbicq_u8(a, b);
421*67e74705SXin Li }
422*67e74705SXin Li 
423*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vbic_u16(<4 x i16> %a, <4 x i16> %b) #0 {
424*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <4 x i16> %b, <i16 -1, i16 -1, i16 -1, i16 -1>
425*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <4 x i16> %a, [[NEG_I]]
426*67e74705SXin Li // CHECK:   ret <4 x i16> [[AND_I]]
test_vbic_u16(uint16x4_t a,uint16x4_t b)427*67e74705SXin Li uint16x4_t test_vbic_u16(uint16x4_t a, uint16x4_t b) {
428*67e74705SXin Li   return vbic_u16(a, b);
429*67e74705SXin Li }
430*67e74705SXin Li 
431*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vbicq_u16(<8 x i16> %a, <8 x i16> %b) #0 {
432*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <8 x i16> %b, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
433*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <8 x i16> %a, [[NEG_I]]
434*67e74705SXin Li // CHECK:   ret <8 x i16> [[AND_I]]
test_vbicq_u16(uint16x8_t a,uint16x8_t b)435*67e74705SXin Li uint16x8_t test_vbicq_u16(uint16x8_t a, uint16x8_t b) {
436*67e74705SXin Li   return vbicq_u16(a, b);
437*67e74705SXin Li }
438*67e74705SXin Li 
439*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vbic_u32(<2 x i32> %a, <2 x i32> %b) #0 {
440*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <2 x i32> %b, <i32 -1, i32 -1>
441*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <2 x i32> %a, [[NEG_I]]
442*67e74705SXin Li // CHECK:   ret <2 x i32> [[AND_I]]
test_vbic_u32(uint32x2_t a,uint32x2_t b)443*67e74705SXin Li uint32x2_t test_vbic_u32(uint32x2_t a, uint32x2_t b) {
444*67e74705SXin Li   return vbic_u32(a, b);
445*67e74705SXin Li }
446*67e74705SXin Li 
447*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vbicq_u32(<4 x i32> %a, <4 x i32> %b) #0 {
448*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <4 x i32> %b, <i32 -1, i32 -1, i32 -1, i32 -1>
449*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <4 x i32> %a, [[NEG_I]]
450*67e74705SXin Li // CHECK:   ret <4 x i32> [[AND_I]]
test_vbicq_u32(uint32x4_t a,uint32x4_t b)451*67e74705SXin Li uint32x4_t test_vbicq_u32(uint32x4_t a, uint32x4_t b) {
452*67e74705SXin Li   return vbicq_u32(a, b);
453*67e74705SXin Li }
454*67e74705SXin Li 
455*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vbic_u64(<1 x i64> %a, <1 x i64> %b) #0 {
456*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <1 x i64> %b, <i64 -1>
457*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <1 x i64> %a, [[NEG_I]]
458*67e74705SXin Li // CHECK:   ret <1 x i64> [[AND_I]]
test_vbic_u64(uint64x1_t a,uint64x1_t b)459*67e74705SXin Li uint64x1_t test_vbic_u64(uint64x1_t a, uint64x1_t b) {
460*67e74705SXin Li   return vbic_u64(a, b);
461*67e74705SXin Li }
462*67e74705SXin Li 
463*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vbicq_u64(<2 x i64> %a, <2 x i64> %b) #0 {
464*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <2 x i64> %b, <i64 -1, i64 -1>
465*67e74705SXin Li // CHECK:   [[AND_I:%.*]] = and <2 x i64> %a, [[NEG_I]]
466*67e74705SXin Li // CHECK:   ret <2 x i64> [[AND_I]]
test_vbicq_u64(uint64x2_t a,uint64x2_t b)467*67e74705SXin Li uint64x2_t test_vbicq_u64(uint64x2_t a, uint64x2_t b) {
468*67e74705SXin Li   return vbicq_u64(a, b);
469*67e74705SXin Li }
470*67e74705SXin Li 
471*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vorn_s8(<8 x i8> %a, <8 x i8> %b) #0 {
472*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <8 x i8> %b, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
473*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <8 x i8> %a, [[NEG_I]]
474*67e74705SXin Li // CHECK:   ret <8 x i8> [[OR_I]]
test_vorn_s8(int8x8_t a,int8x8_t b)475*67e74705SXin Li int8x8_t test_vorn_s8(int8x8_t a, int8x8_t b) {
476*67e74705SXin Li   return vorn_s8(a, b);
477*67e74705SXin Li }
478*67e74705SXin Li 
479*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vornq_s8(<16 x i8> %a, <16 x i8> %b) #0 {
480*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <16 x i8> %b, <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>
481*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <16 x i8> %a, [[NEG_I]]
482*67e74705SXin Li // CHECK:   ret <16 x i8> [[OR_I]]
test_vornq_s8(int8x16_t a,int8x16_t b)483*67e74705SXin Li int8x16_t test_vornq_s8(int8x16_t a, int8x16_t b) {
484*67e74705SXin Li   return vornq_s8(a, b);
485*67e74705SXin Li }
486*67e74705SXin Li 
487*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vorn_s16(<4 x i16> %a, <4 x i16> %b) #0 {
488*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <4 x i16> %b, <i16 -1, i16 -1, i16 -1, i16 -1>
489*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <4 x i16> %a, [[NEG_I]]
490*67e74705SXin Li // CHECK:   ret <4 x i16> [[OR_I]]
test_vorn_s16(int16x4_t a,int16x4_t b)491*67e74705SXin Li int16x4_t test_vorn_s16(int16x4_t a, int16x4_t b) {
492*67e74705SXin Li   return vorn_s16(a, b);
493*67e74705SXin Li }
494*67e74705SXin Li 
495*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vornq_s16(<8 x i16> %a, <8 x i16> %b) #0 {
496*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <8 x i16> %b, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
497*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <8 x i16> %a, [[NEG_I]]
498*67e74705SXin Li // CHECK:   ret <8 x i16> [[OR_I]]
test_vornq_s16(int16x8_t a,int16x8_t b)499*67e74705SXin Li int16x8_t test_vornq_s16(int16x8_t a, int16x8_t b) {
500*67e74705SXin Li   return vornq_s16(a, b);
501*67e74705SXin Li }
502*67e74705SXin Li 
503*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vorn_s32(<2 x i32> %a, <2 x i32> %b) #0 {
504*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <2 x i32> %b, <i32 -1, i32 -1>
505*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <2 x i32> %a, [[NEG_I]]
506*67e74705SXin Li // CHECK:   ret <2 x i32> [[OR_I]]
test_vorn_s32(int32x2_t a,int32x2_t b)507*67e74705SXin Li int32x2_t test_vorn_s32(int32x2_t a, int32x2_t b) {
508*67e74705SXin Li   return vorn_s32(a, b);
509*67e74705SXin Li }
510*67e74705SXin Li 
511*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vornq_s32(<4 x i32> %a, <4 x i32> %b) #0 {
512*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <4 x i32> %b, <i32 -1, i32 -1, i32 -1, i32 -1>
513*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <4 x i32> %a, [[NEG_I]]
514*67e74705SXin Li // CHECK:   ret <4 x i32> [[OR_I]]
test_vornq_s32(int32x4_t a,int32x4_t b)515*67e74705SXin Li int32x4_t test_vornq_s32(int32x4_t a, int32x4_t b) {
516*67e74705SXin Li   return vornq_s32(a, b);
517*67e74705SXin Li }
518*67e74705SXin Li 
519*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vorn_s64(<1 x i64> %a, <1 x i64> %b) #0 {
520*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <1 x i64> %b, <i64 -1>
521*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <1 x i64> %a, [[NEG_I]]
522*67e74705SXin Li // CHECK:   ret <1 x i64> [[OR_I]]
test_vorn_s64(int64x1_t a,int64x1_t b)523*67e74705SXin Li int64x1_t test_vorn_s64(int64x1_t a, int64x1_t b) {
524*67e74705SXin Li   return vorn_s64(a, b);
525*67e74705SXin Li }
526*67e74705SXin Li 
527*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vornq_s64(<2 x i64> %a, <2 x i64> %b) #0 {
528*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <2 x i64> %b, <i64 -1, i64 -1>
529*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <2 x i64> %a, [[NEG_I]]
530*67e74705SXin Li // CHECK:   ret <2 x i64> [[OR_I]]
test_vornq_s64(int64x2_t a,int64x2_t b)531*67e74705SXin Li int64x2_t test_vornq_s64(int64x2_t a, int64x2_t b) {
532*67e74705SXin Li   return vornq_s64(a, b);
533*67e74705SXin Li }
534*67e74705SXin Li 
535*67e74705SXin Li // CHECK-LABEL: define <8 x i8> @test_vorn_u8(<8 x i8> %a, <8 x i8> %b) #0 {
536*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <8 x i8> %b, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
537*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <8 x i8> %a, [[NEG_I]]
538*67e74705SXin Li // CHECK:   ret <8 x i8> [[OR_I]]
test_vorn_u8(uint8x8_t a,uint8x8_t b)539*67e74705SXin Li uint8x8_t test_vorn_u8(uint8x8_t a, uint8x8_t b) {
540*67e74705SXin Li   return vorn_u8(a, b);
541*67e74705SXin Li }
542*67e74705SXin Li 
543*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vornq_u8(<16 x i8> %a, <16 x i8> %b) #0 {
544*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <16 x i8> %b, <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>
545*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <16 x i8> %a, [[NEG_I]]
546*67e74705SXin Li // CHECK:   ret <16 x i8> [[OR_I]]
test_vornq_u8(uint8x16_t a,uint8x16_t b)547*67e74705SXin Li uint8x16_t test_vornq_u8(uint8x16_t a, uint8x16_t b) {
548*67e74705SXin Li   return vornq_u8(a, b);
549*67e74705SXin Li }
550*67e74705SXin Li 
551*67e74705SXin Li // CHECK-LABEL: define <4 x i16> @test_vorn_u16(<4 x i16> %a, <4 x i16> %b) #0 {
552*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <4 x i16> %b, <i16 -1, i16 -1, i16 -1, i16 -1>
553*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <4 x i16> %a, [[NEG_I]]
554*67e74705SXin Li // CHECK:   ret <4 x i16> [[OR_I]]
test_vorn_u16(uint16x4_t a,uint16x4_t b)555*67e74705SXin Li uint16x4_t test_vorn_u16(uint16x4_t a, uint16x4_t b) {
556*67e74705SXin Li   return vorn_u16(a, b);
557*67e74705SXin Li }
558*67e74705SXin Li 
559*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vornq_u16(<8 x i16> %a, <8 x i16> %b) #0 {
560*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <8 x i16> %b, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
561*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <8 x i16> %a, [[NEG_I]]
562*67e74705SXin Li // CHECK:   ret <8 x i16> [[OR_I]]
test_vornq_u16(uint16x8_t a,uint16x8_t b)563*67e74705SXin Li uint16x8_t test_vornq_u16(uint16x8_t a, uint16x8_t b) {
564*67e74705SXin Li   return vornq_u16(a, b);
565*67e74705SXin Li }
566*67e74705SXin Li 
567*67e74705SXin Li // CHECK-LABEL: define <2 x i32> @test_vorn_u32(<2 x i32> %a, <2 x i32> %b) #0 {
568*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <2 x i32> %b, <i32 -1, i32 -1>
569*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <2 x i32> %a, [[NEG_I]]
570*67e74705SXin Li // CHECK:   ret <2 x i32> [[OR_I]]
test_vorn_u32(uint32x2_t a,uint32x2_t b)571*67e74705SXin Li uint32x2_t test_vorn_u32(uint32x2_t a, uint32x2_t b) {
572*67e74705SXin Li   return vorn_u32(a, b);
573*67e74705SXin Li }
574*67e74705SXin Li 
575*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vornq_u32(<4 x i32> %a, <4 x i32> %b) #0 {
576*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <4 x i32> %b, <i32 -1, i32 -1, i32 -1, i32 -1>
577*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <4 x i32> %a, [[NEG_I]]
578*67e74705SXin Li // CHECK:   ret <4 x i32> [[OR_I]]
test_vornq_u32(uint32x4_t a,uint32x4_t b)579*67e74705SXin Li uint32x4_t test_vornq_u32(uint32x4_t a, uint32x4_t b) {
580*67e74705SXin Li   return vornq_u32(a, b);
581*67e74705SXin Li }
582*67e74705SXin Li 
583*67e74705SXin Li // CHECK-LABEL: define <1 x i64> @test_vorn_u64(<1 x i64> %a, <1 x i64> %b) #0 {
584*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <1 x i64> %b, <i64 -1>
585*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <1 x i64> %a, [[NEG_I]]
586*67e74705SXin Li // CHECK:   ret <1 x i64> [[OR_I]]
test_vorn_u64(uint64x1_t a,uint64x1_t b)587*67e74705SXin Li uint64x1_t test_vorn_u64(uint64x1_t a, uint64x1_t b) {
588*67e74705SXin Li   return vorn_u64(a, b);
589*67e74705SXin Li }
590*67e74705SXin Li 
591*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vornq_u64(<2 x i64> %a, <2 x i64> %b) #0 {
592*67e74705SXin Li // CHECK:   [[NEG_I:%.*]] = xor <2 x i64> %b, <i64 -1, i64 -1>
593*67e74705SXin Li // CHECK:   [[OR_I:%.*]] = or <2 x i64> %a, [[NEG_I]]
594*67e74705SXin Li // CHECK:   ret <2 x i64> [[OR_I]]
test_vornq_u64(uint64x2_t a,uint64x2_t b)595*67e74705SXin Li uint64x2_t test_vornq_u64(uint64x2_t a, uint64x2_t b) {
596*67e74705SXin Li   return vornq_u64(a, b);
597*67e74705SXin Li }
598