1 // RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s
3 // REQUIRES: aarch64-registered-target || arm-registered-target
7 // CHECK-LABEL: define{{.*}} <8 x i8> @test_vand_s8(<8 x i8> noundef %a, <8 x i8> noundef %b) #0 {
8 // CHECK: [[AND_I:%.*]] = and <8 x i8> %a, %b
9 // CHECK: ret <8 x i8> [[AND_I]]
10 int8x8_t
test_vand_s8(int8x8_t a
, int8x8_t b
) {
14 // CHECK-LABEL: define{{.*}} <16 x i8> @test_vandq_s8(<16 x i8> noundef %a, <16 x i8> noundef %b) #0 {
15 // CHECK: [[AND_I:%.*]] = and <16 x i8> %a, %b
16 // CHECK: ret <16 x i8> [[AND_I]]
17 int8x16_t
test_vandq_s8(int8x16_t a
, int8x16_t b
) {
18 return vandq_s8(a
, b
);
21 // CHECK-LABEL: define{{.*}} <4 x i16> @test_vand_s16(<4 x i16> noundef %a, <4 x i16> noundef %b) #0 {
22 // CHECK: [[AND_I:%.*]] = and <4 x i16> %a, %b
23 // CHECK: ret <4 x i16> [[AND_I]]
24 int16x4_t
test_vand_s16(int16x4_t a
, int16x4_t b
) {
25 return vand_s16(a
, b
);
28 // CHECK-LABEL: define{{.*}} <8 x i16> @test_vandq_s16(<8 x i16> noundef %a, <8 x i16> noundef %b) #0 {
29 // CHECK: [[AND_I:%.*]] = and <8 x i16> %a, %b
30 // CHECK: ret <8 x i16> [[AND_I]]
31 int16x8_t
test_vandq_s16(int16x8_t a
, int16x8_t b
) {
32 return vandq_s16(a
, b
);
35 // CHECK-LABEL: define{{.*}} <2 x i32> @test_vand_s32(<2 x i32> noundef %a, <2 x i32> noundef %b) #0 {
36 // CHECK: [[AND_I:%.*]] = and <2 x i32> %a, %b
37 // CHECK: ret <2 x i32> [[AND_I]]
38 int32x2_t
test_vand_s32(int32x2_t a
, int32x2_t b
) {
39 return vand_s32(a
, b
);
42 // CHECK-LABEL: define{{.*}} <4 x i32> @test_vandq_s32(<4 x i32> noundef %a, <4 x i32> noundef %b) #0 {
43 // CHECK: [[AND_I:%.*]] = and <4 x i32> %a, %b
44 // CHECK: ret <4 x i32> [[AND_I]]
45 int32x4_t
test_vandq_s32(int32x4_t a
, int32x4_t b
) {
46 return vandq_s32(a
, b
);
49 // CHECK-LABEL: define{{.*}} <1 x i64> @test_vand_s64(<1 x i64> noundef %a, <1 x i64> noundef %b) #0 {
50 // CHECK: [[AND_I:%.*]] = and <1 x i64> %a, %b
51 // CHECK: ret <1 x i64> [[AND_I]]
52 int64x1_t
test_vand_s64(int64x1_t a
, int64x1_t b
) {
53 return vand_s64(a
, b
);
56 // CHECK-LABEL: define{{.*}} <2 x i64> @test_vandq_s64(<2 x i64> noundef %a, <2 x i64> noundef %b) #0 {
57 // CHECK: [[AND_I:%.*]] = and <2 x i64> %a, %b
58 // CHECK: ret <2 x i64> [[AND_I]]
59 int64x2_t
test_vandq_s64(int64x2_t a
, int64x2_t b
) {
60 return vandq_s64(a
, b
);
63 // CHECK-LABEL: define{{.*}} <8 x i8> @test_vand_u8(<8 x i8> noundef %a, <8 x i8> noundef %b) #0 {
64 // CHECK: [[AND_I:%.*]] = and <8 x i8> %a, %b
65 // CHECK: ret <8 x i8> [[AND_I]]
66 uint8x8_t
test_vand_u8(uint8x8_t a
, uint8x8_t b
) {
70 // CHECK-LABEL: define{{.*}} <16 x i8> @test_vandq_u8(<16 x i8> noundef %a, <16 x i8> noundef %b) #0 {
71 // CHECK: [[AND_I:%.*]] = and <16 x i8> %a, %b
72 // CHECK: ret <16 x i8> [[AND_I]]
73 uint8x16_t
test_vandq_u8(uint8x16_t a
, uint8x16_t b
) {
74 return vandq_u8(a
, b
);
77 // CHECK-LABEL: define{{.*}} <4 x i16> @test_vand_u16(<4 x i16> noundef %a, <4 x i16> noundef %b) #0 {
78 // CHECK: [[AND_I:%.*]] = and <4 x i16> %a, %b
79 // CHECK: ret <4 x i16> [[AND_I]]
80 uint16x4_t
test_vand_u16(uint16x4_t a
, uint16x4_t b
) {
81 return vand_u16(a
, b
);
84 // CHECK-LABEL: define{{.*}} <8 x i16> @test_vandq_u16(<8 x i16> noundef %a, <8 x i16> noundef %b) #0 {
85 // CHECK: [[AND_I:%.*]] = and <8 x i16> %a, %b
86 // CHECK: ret <8 x i16> [[AND_I]]
87 uint16x8_t
test_vandq_u16(uint16x8_t a
, uint16x8_t b
) {
88 return vandq_u16(a
, b
);
91 // CHECK-LABEL: define{{.*}} <2 x i32> @test_vand_u32(<2 x i32> noundef %a, <2 x i32> noundef %b) #0 {
92 // CHECK: [[AND_I:%.*]] = and <2 x i32> %a, %b
93 // CHECK: ret <2 x i32> [[AND_I]]
94 uint32x2_t
test_vand_u32(uint32x2_t a
, uint32x2_t b
) {
95 return vand_u32(a
, b
);
98 // CHECK-LABEL: define{{.*}} <4 x i32> @test_vandq_u32(<4 x i32> noundef %a, <4 x i32> noundef %b) #0 {
99 // CHECK: [[AND_I:%.*]] = and <4 x i32> %a, %b
100 // CHECK: ret <4 x i32> [[AND_I]]
101 uint32x4_t
test_vandq_u32(uint32x4_t a
, uint32x4_t b
) {
102 return vandq_u32(a
, b
);
105 // CHECK-LABEL: define{{.*}} <1 x i64> @test_vand_u64(<1 x i64> noundef %a, <1 x i64> noundef %b) #0 {
106 // CHECK: [[AND_I:%.*]] = and <1 x i64> %a, %b
107 // CHECK: ret <1 x i64> [[AND_I]]
108 uint64x1_t
test_vand_u64(uint64x1_t a
, uint64x1_t b
) {
109 return vand_u64(a
, b
);
112 // CHECK-LABEL: define{{.*}} <2 x i64> @test_vandq_u64(<2 x i64> noundef %a, <2 x i64> noundef %b) #0 {
113 // CHECK: [[AND_I:%.*]] = and <2 x i64> %a, %b
114 // CHECK: ret <2 x i64> [[AND_I]]
115 uint64x2_t
test_vandq_u64(uint64x2_t a
, uint64x2_t b
) {
116 return vandq_u64(a
, b
);
119 // CHECK-LABEL: define{{.*}} <8 x i8> @test_vorr_s8(<8 x i8> noundef %a, <8 x i8> noundef %b) #0 {
120 // CHECK: [[OR_I:%.*]] = or <8 x i8> %a, %b
121 // CHECK: ret <8 x i8> [[OR_I]]
122 int8x8_t
test_vorr_s8(int8x8_t a
, int8x8_t b
) {
123 return vorr_s8(a
, b
);
126 // CHECK-LABEL: define{{.*}} <16 x i8> @test_vorrq_s8(<16 x i8> noundef %a, <16 x i8> noundef %b) #0 {
127 // CHECK: [[OR_I:%.*]] = or <16 x i8> %a, %b
128 // CHECK: ret <16 x i8> [[OR_I]]
129 int8x16_t
test_vorrq_s8(int8x16_t a
, int8x16_t b
) {
130 return vorrq_s8(a
, b
);
133 // CHECK-LABEL: define{{.*}} <4 x i16> @test_vorr_s16(<4 x i16> noundef %a, <4 x i16> noundef %b) #0 {
134 // CHECK: [[OR_I:%.*]] = or <4 x i16> %a, %b
135 // CHECK: ret <4 x i16> [[OR_I]]
136 int16x4_t
test_vorr_s16(int16x4_t a
, int16x4_t b
) {
137 return vorr_s16(a
, b
);
140 // CHECK-LABEL: define{{.*}} <8 x i16> @test_vorrq_s16(<8 x i16> noundef %a, <8 x i16> noundef %b) #0 {
141 // CHECK: [[OR_I:%.*]] = or <8 x i16> %a, %b
142 // CHECK: ret <8 x i16> [[OR_I]]
143 int16x8_t
test_vorrq_s16(int16x8_t a
, int16x8_t b
) {
144 return vorrq_s16(a
, b
);
147 // CHECK-LABEL: define{{.*}} <2 x i32> @test_vorr_s32(<2 x i32> noundef %a, <2 x i32> noundef %b) #0 {
148 // CHECK: [[OR_I:%.*]] = or <2 x i32> %a, %b
149 // CHECK: ret <2 x i32> [[OR_I]]
150 int32x2_t
test_vorr_s32(int32x2_t a
, int32x2_t b
) {
151 return vorr_s32(a
, b
);
154 // CHECK-LABEL: define{{.*}} <4 x i32> @test_vorrq_s32(<4 x i32> noundef %a, <4 x i32> noundef %b) #0 {
155 // CHECK: [[OR_I:%.*]] = or <4 x i32> %a, %b
156 // CHECK: ret <4 x i32> [[OR_I]]
157 int32x4_t
test_vorrq_s32(int32x4_t a
, int32x4_t b
) {
158 return vorrq_s32(a
, b
);
161 // CHECK-LABEL: define{{.*}} <1 x i64> @test_vorr_s64(<1 x i64> noundef %a, <1 x i64> noundef %b) #0 {
162 // CHECK: [[OR_I:%.*]] = or <1 x i64> %a, %b
163 // CHECK: ret <1 x i64> [[OR_I]]
164 int64x1_t
test_vorr_s64(int64x1_t a
, int64x1_t b
) {
165 return vorr_s64(a
, b
);
168 // CHECK-LABEL: define{{.*}} <2 x i64> @test_vorrq_s64(<2 x i64> noundef %a, <2 x i64> noundef %b) #0 {
169 // CHECK: [[OR_I:%.*]] = or <2 x i64> %a, %b
170 // CHECK: ret <2 x i64> [[OR_I]]
171 int64x2_t
test_vorrq_s64(int64x2_t a
, int64x2_t b
) {
172 return vorrq_s64(a
, b
);
175 // CHECK-LABEL: define{{.*}} <8 x i8> @test_vorr_u8(<8 x i8> noundef %a, <8 x i8> noundef %b) #0 {
176 // CHECK: [[OR_I:%.*]] = or <8 x i8> %a, %b
177 // CHECK: ret <8 x i8> [[OR_I]]
178 uint8x8_t
test_vorr_u8(uint8x8_t a
, uint8x8_t b
) {
179 return vorr_u8(a
, b
);
182 // CHECK-LABEL: define{{.*}} <16 x i8> @test_vorrq_u8(<16 x i8> noundef %a, <16 x i8> noundef %b) #0 {
183 // CHECK: [[OR_I:%.*]] = or <16 x i8> %a, %b
184 // CHECK: ret <16 x i8> [[OR_I]]
185 uint8x16_t
test_vorrq_u8(uint8x16_t a
, uint8x16_t b
) {
186 return vorrq_u8(a
, b
);
189 // CHECK-LABEL: define{{.*}} <4 x i16> @test_vorr_u16(<4 x i16> noundef %a, <4 x i16> noundef %b) #0 {
190 // CHECK: [[OR_I:%.*]] = or <4 x i16> %a, %b
191 // CHECK: ret <4 x i16> [[OR_I]]
192 uint16x4_t
test_vorr_u16(uint16x4_t a
, uint16x4_t b
) {
193 return vorr_u16(a
, b
);
196 // CHECK-LABEL: define{{.*}} <8 x i16> @test_vorrq_u16(<8 x i16> noundef %a, <8 x i16> noundef %b) #0 {
197 // CHECK: [[OR_I:%.*]] = or <8 x i16> %a, %b
198 // CHECK: ret <8 x i16> [[OR_I]]
199 uint16x8_t
test_vorrq_u16(uint16x8_t a
, uint16x8_t b
) {
200 return vorrq_u16(a
, b
);
203 // CHECK-LABEL: define{{.*}} <2 x i32> @test_vorr_u32(<2 x i32> noundef %a, <2 x i32> noundef %b) #0 {
204 // CHECK: [[OR_I:%.*]] = or <2 x i32> %a, %b
205 // CHECK: ret <2 x i32> [[OR_I]]
206 uint32x2_t
test_vorr_u32(uint32x2_t a
, uint32x2_t b
) {
207 return vorr_u32(a
, b
);
210 // CHECK-LABEL: define{{.*}} <4 x i32> @test_vorrq_u32(<4 x i32> noundef %a, <4 x i32> noundef %b) #0 {
211 // CHECK: [[OR_I:%.*]] = or <4 x i32> %a, %b
212 // CHECK: ret <4 x i32> [[OR_I]]
213 uint32x4_t
test_vorrq_u32(uint32x4_t a
, uint32x4_t b
) {
214 return vorrq_u32(a
, b
);
217 // CHECK-LABEL: define{{.*}} <1 x i64> @test_vorr_u64(<1 x i64> noundef %a, <1 x i64> noundef %b) #0 {
218 // CHECK: [[OR_I:%.*]] = or <1 x i64> %a, %b
219 // CHECK: ret <1 x i64> [[OR_I]]
220 uint64x1_t
test_vorr_u64(uint64x1_t a
, uint64x1_t b
) {
221 return vorr_u64(a
, b
);
224 // CHECK-LABEL: define{{.*}} <2 x i64> @test_vorrq_u64(<2 x i64> noundef %a, <2 x i64> noundef %b) #0 {
225 // CHECK: [[OR_I:%.*]] = or <2 x i64> %a, %b
226 // CHECK: ret <2 x i64> [[OR_I]]
227 uint64x2_t
test_vorrq_u64(uint64x2_t a
, uint64x2_t b
) {
228 return vorrq_u64(a
, b
);
231 // CHECK-LABEL: define{{.*}} <8 x i8> @test_veor_s8(<8 x i8> noundef %a, <8 x i8> noundef %b) #0 {
232 // CHECK: [[XOR_I:%.*]] = xor <8 x i8> %a, %b
233 // CHECK: ret <8 x i8> [[XOR_I]]
234 int8x8_t
test_veor_s8(int8x8_t a
, int8x8_t b
) {
235 return veor_s8(a
, b
);
238 // CHECK-LABEL: define{{.*}} <16 x i8> @test_veorq_s8(<16 x i8> noundef %a, <16 x i8> noundef %b) #0 {
239 // CHECK: [[XOR_I:%.*]] = xor <16 x i8> %a, %b
240 // CHECK: ret <16 x i8> [[XOR_I]]
241 int8x16_t
test_veorq_s8(int8x16_t a
, int8x16_t b
) {
242 return veorq_s8(a
, b
);
245 // CHECK-LABEL: define{{.*}} <4 x i16> @test_veor_s16(<4 x i16> noundef %a, <4 x i16> noundef %b) #0 {
246 // CHECK: [[XOR_I:%.*]] = xor <4 x i16> %a, %b
247 // CHECK: ret <4 x i16> [[XOR_I]]
248 int16x4_t
test_veor_s16(int16x4_t a
, int16x4_t b
) {
249 return veor_s16(a
, b
);
252 // CHECK-LABEL: define{{.*}} <8 x i16> @test_veorq_s16(<8 x i16> noundef %a, <8 x i16> noundef %b) #0 {
253 // CHECK: [[XOR_I:%.*]] = xor <8 x i16> %a, %b
254 // CHECK: ret <8 x i16> [[XOR_I]]
255 int16x8_t
test_veorq_s16(int16x8_t a
, int16x8_t b
) {
256 return veorq_s16(a
, b
);
259 // CHECK-LABEL: define{{.*}} <2 x i32> @test_veor_s32(<2 x i32> noundef %a, <2 x i32> noundef %b) #0 {
260 // CHECK: [[XOR_I:%.*]] = xor <2 x i32> %a, %b
261 // CHECK: ret <2 x i32> [[XOR_I]]
262 int32x2_t
test_veor_s32(int32x2_t a
, int32x2_t b
) {
263 return veor_s32(a
, b
);
266 // CHECK-LABEL: define{{.*}} <4 x i32> @test_veorq_s32(<4 x i32> noundef %a, <4 x i32> noundef %b) #0 {
267 // CHECK: [[XOR_I:%.*]] = xor <4 x i32> %a, %b
268 // CHECK: ret <4 x i32> [[XOR_I]]
269 int32x4_t
test_veorq_s32(int32x4_t a
, int32x4_t b
) {
270 return veorq_s32(a
, b
);
273 // CHECK-LABEL: define{{.*}} <1 x i64> @test_veor_s64(<1 x i64> noundef %a, <1 x i64> noundef %b) #0 {
274 // CHECK: [[XOR_I:%.*]] = xor <1 x i64> %a, %b
275 // CHECK: ret <1 x i64> [[XOR_I]]
276 int64x1_t
test_veor_s64(int64x1_t a
, int64x1_t b
) {
277 return veor_s64(a
, b
);
280 // CHECK-LABEL: define{{.*}} <2 x i64> @test_veorq_s64(<2 x i64> noundef %a, <2 x i64> noundef %b) #0 {
281 // CHECK: [[XOR_I:%.*]] = xor <2 x i64> %a, %b
282 // CHECK: ret <2 x i64> [[XOR_I]]
283 int64x2_t
test_veorq_s64(int64x2_t a
, int64x2_t b
) {
284 return veorq_s64(a
, b
);
287 // CHECK-LABEL: define{{.*}} <8 x i8> @test_veor_u8(<8 x i8> noundef %a, <8 x i8> noundef %b) #0 {
288 // CHECK: [[XOR_I:%.*]] = xor <8 x i8> %a, %b
289 // CHECK: ret <8 x i8> [[XOR_I]]
290 uint8x8_t
test_veor_u8(uint8x8_t a
, uint8x8_t b
) {
291 return veor_u8(a
, b
);
294 // CHECK-LABEL: define{{.*}} <16 x i8> @test_veorq_u8(<16 x i8> noundef %a, <16 x i8> noundef %b) #0 {
295 // CHECK: [[XOR_I:%.*]] = xor <16 x i8> %a, %b
296 // CHECK: ret <16 x i8> [[XOR_I]]
297 uint8x16_t
test_veorq_u8(uint8x16_t a
, uint8x16_t b
) {
298 return veorq_u8(a
, b
);
301 // CHECK-LABEL: define{{.*}} <4 x i16> @test_veor_u16(<4 x i16> noundef %a, <4 x i16> noundef %b) #0 {
302 // CHECK: [[XOR_I:%.*]] = xor <4 x i16> %a, %b
303 // CHECK: ret <4 x i16> [[XOR_I]]
304 uint16x4_t
test_veor_u16(uint16x4_t a
, uint16x4_t b
) {
305 return veor_u16(a
, b
);
308 // CHECK-LABEL: define{{.*}} <8 x i16> @test_veorq_u16(<8 x i16> noundef %a, <8 x i16> noundef %b) #0 {
309 // CHECK: [[XOR_I:%.*]] = xor <8 x i16> %a, %b
310 // CHECK: ret <8 x i16> [[XOR_I]]
311 uint16x8_t
test_veorq_u16(uint16x8_t a
, uint16x8_t b
) {
312 return veorq_u16(a
, b
);
315 // CHECK-LABEL: define{{.*}} <2 x i32> @test_veor_u32(<2 x i32> noundef %a, <2 x i32> noundef %b) #0 {
316 // CHECK: [[XOR_I:%.*]] = xor <2 x i32> %a, %b
317 // CHECK: ret <2 x i32> [[XOR_I]]
318 uint32x2_t
test_veor_u32(uint32x2_t a
, uint32x2_t b
) {
319 return veor_u32(a
, b
);
322 // CHECK-LABEL: define{{.*}} <4 x i32> @test_veorq_u32(<4 x i32> noundef %a, <4 x i32> noundef %b) #0 {
323 // CHECK: [[XOR_I:%.*]] = xor <4 x i32> %a, %b
324 // CHECK: ret <4 x i32> [[XOR_I]]
325 uint32x4_t
test_veorq_u32(uint32x4_t a
, uint32x4_t b
) {
326 return veorq_u32(a
, b
);
329 // CHECK-LABEL: define{{.*}} <1 x i64> @test_veor_u64(<1 x i64> noundef %a, <1 x i64> noundef %b) #0 {
330 // CHECK: [[XOR_I:%.*]] = xor <1 x i64> %a, %b
331 // CHECK: ret <1 x i64> [[XOR_I]]
332 uint64x1_t
test_veor_u64(uint64x1_t a
, uint64x1_t b
) {
333 return veor_u64(a
, b
);
336 // CHECK-LABEL: define{{.*}} <2 x i64> @test_veorq_u64(<2 x i64> noundef %a, <2 x i64> noundef %b) #0 {
337 // CHECK: [[XOR_I:%.*]] = xor <2 x i64> %a, %b
338 // CHECK: ret <2 x i64> [[XOR_I]]
339 uint64x2_t
test_veorq_u64(uint64x2_t a
, uint64x2_t b
) {
340 return veorq_u64(a
, b
);
343 // CHECK-LABEL: define{{.*}} <8 x i8> @test_vbic_s8(<8 x i8> noundef %a, <8 x i8> noundef %b) #0 {
344 // 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 // CHECK: [[AND_I:%.*]] = and <8 x i8> %a, [[NEG_I]]
346 // CHECK: ret <8 x i8> [[AND_I]]
347 int8x8_t
test_vbic_s8(int8x8_t a
, int8x8_t b
) {
348 return vbic_s8(a
, b
);
351 // CHECK-LABEL: define{{.*}} <16 x i8> @test_vbicq_s8(<16 x i8> noundef %a, <16 x i8> noundef %b) #0 {
352 // 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 // CHECK: [[AND_I:%.*]] = and <16 x i8> %a, [[NEG_I]]
354 // CHECK: ret <16 x i8> [[AND_I]]
355 int8x16_t
test_vbicq_s8(int8x16_t a
, int8x16_t b
) {
356 return vbicq_s8(a
, b
);
359 // CHECK-LABEL: define{{.*}} <4 x i16> @test_vbic_s16(<4 x i16> noundef %a, <4 x i16> noundef %b) #0 {
360 // CHECK: [[NEG_I:%.*]] = xor <4 x i16> %b, <i16 -1, i16 -1, i16 -1, i16 -1>
361 // CHECK: [[AND_I:%.*]] = and <4 x i16> %a, [[NEG_I]]
362 // CHECK: ret <4 x i16> [[AND_I]]
363 int16x4_t
test_vbic_s16(int16x4_t a
, int16x4_t b
) {
364 return vbic_s16(a
, b
);
367 // CHECK-LABEL: define{{.*}} <8 x i16> @test_vbicq_s16(<8 x i16> noundef %a, <8 x i16> noundef %b) #0 {
368 // 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 // CHECK: [[AND_I:%.*]] = and <8 x i16> %a, [[NEG_I]]
370 // CHECK: ret <8 x i16> [[AND_I]]
371 int16x8_t
test_vbicq_s16(int16x8_t a
, int16x8_t b
) {
372 return vbicq_s16(a
, b
);
375 // CHECK-LABEL: define{{.*}} <2 x i32> @test_vbic_s32(<2 x i32> noundef %a, <2 x i32> noundef %b) #0 {
376 // CHECK: [[NEG_I:%.*]] = xor <2 x i32> %b, <i32 -1, i32 -1>
377 // CHECK: [[AND_I:%.*]] = and <2 x i32> %a, [[NEG_I]]
378 // CHECK: ret <2 x i32> [[AND_I]]
379 int32x2_t
test_vbic_s32(int32x2_t a
, int32x2_t b
) {
380 return vbic_s32(a
, b
);
383 // CHECK-LABEL: define{{.*}} <4 x i32> @test_vbicq_s32(<4 x i32> noundef %a, <4 x i32> noundef %b) #0 {
384 // CHECK: [[NEG_I:%.*]] = xor <4 x i32> %b, <i32 -1, i32 -1, i32 -1, i32 -1>
385 // CHECK: [[AND_I:%.*]] = and <4 x i32> %a, [[NEG_I]]
386 // CHECK: ret <4 x i32> [[AND_I]]
387 int32x4_t
test_vbicq_s32(int32x4_t a
, int32x4_t b
) {
388 return vbicq_s32(a
, b
);
391 // CHECK-LABEL: define{{.*}} <1 x i64> @test_vbic_s64(<1 x i64> noundef %a, <1 x i64> noundef %b) #0 {
392 // CHECK: [[NEG_I:%.*]] = xor <1 x i64> %b, <i64 -1>
393 // CHECK: [[AND_I:%.*]] = and <1 x i64> %a, [[NEG_I]]
394 // CHECK: ret <1 x i64> [[AND_I]]
395 int64x1_t
test_vbic_s64(int64x1_t a
, int64x1_t b
) {
396 return vbic_s64(a
, b
);
399 // CHECK-LABEL: define{{.*}} <2 x i64> @test_vbicq_s64(<2 x i64> noundef %a, <2 x i64> noundef %b) #0 {
400 // CHECK: [[NEG_I:%.*]] = xor <2 x i64> %b, <i64 -1, i64 -1>
401 // CHECK: [[AND_I:%.*]] = and <2 x i64> %a, [[NEG_I]]
402 // CHECK: ret <2 x i64> [[AND_I]]
403 int64x2_t
test_vbicq_s64(int64x2_t a
, int64x2_t b
) {
404 return vbicq_s64(a
, b
);
407 // CHECK-LABEL: define{{.*}} <8 x i8> @test_vbic_u8(<8 x i8> noundef %a, <8 x i8> noundef %b) #0 {
408 // 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 // CHECK: [[AND_I:%.*]] = and <8 x i8> %a, [[NEG_I]]
410 // CHECK: ret <8 x i8> [[AND_I]]
411 uint8x8_t
test_vbic_u8(uint8x8_t a
, uint8x8_t b
) {
412 return vbic_u8(a
, b
);
415 // CHECK-LABEL: define{{.*}} <16 x i8> @test_vbicq_u8(<16 x i8> noundef %a, <16 x i8> noundef %b) #0 {
416 // 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 // CHECK: [[AND_I:%.*]] = and <16 x i8> %a, [[NEG_I]]
418 // CHECK: ret <16 x i8> [[AND_I]]
419 uint8x16_t
test_vbicq_u8(uint8x16_t a
, uint8x16_t b
) {
420 return vbicq_u8(a
, b
);
423 // CHECK-LABEL: define{{.*}} <4 x i16> @test_vbic_u16(<4 x i16> noundef %a, <4 x i16> noundef %b) #0 {
424 // CHECK: [[NEG_I:%.*]] = xor <4 x i16> %b, <i16 -1, i16 -1, i16 -1, i16 -1>
425 // CHECK: [[AND_I:%.*]] = and <4 x i16> %a, [[NEG_I]]
426 // CHECK: ret <4 x i16> [[AND_I]]
427 uint16x4_t
test_vbic_u16(uint16x4_t a
, uint16x4_t b
) {
428 return vbic_u16(a
, b
);
431 // CHECK-LABEL: define{{.*}} <8 x i16> @test_vbicq_u16(<8 x i16> noundef %a, <8 x i16> noundef %b) #0 {
432 // 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 // CHECK: [[AND_I:%.*]] = and <8 x i16> %a, [[NEG_I]]
434 // CHECK: ret <8 x i16> [[AND_I]]
435 uint16x8_t
test_vbicq_u16(uint16x8_t a
, uint16x8_t b
) {
436 return vbicq_u16(a
, b
);
439 // CHECK-LABEL: define{{.*}} <2 x i32> @test_vbic_u32(<2 x i32> noundef %a, <2 x i32> noundef %b) #0 {
440 // CHECK: [[NEG_I:%.*]] = xor <2 x i32> %b, <i32 -1, i32 -1>
441 // CHECK: [[AND_I:%.*]] = and <2 x i32> %a, [[NEG_I]]
442 // CHECK: ret <2 x i32> [[AND_I]]
443 uint32x2_t
test_vbic_u32(uint32x2_t a
, uint32x2_t b
) {
444 return vbic_u32(a
, b
);
447 // CHECK-LABEL: define{{.*}} <4 x i32> @test_vbicq_u32(<4 x i32> noundef %a, <4 x i32> noundef %b) #0 {
448 // CHECK: [[NEG_I:%.*]] = xor <4 x i32> %b, <i32 -1, i32 -1, i32 -1, i32 -1>
449 // CHECK: [[AND_I:%.*]] = and <4 x i32> %a, [[NEG_I]]
450 // CHECK: ret <4 x i32> [[AND_I]]
451 uint32x4_t
test_vbicq_u32(uint32x4_t a
, uint32x4_t b
) {
452 return vbicq_u32(a
, b
);
455 // CHECK-LABEL: define{{.*}} <1 x i64> @test_vbic_u64(<1 x i64> noundef %a, <1 x i64> noundef %b) #0 {
456 // CHECK: [[NEG_I:%.*]] = xor <1 x i64> %b, <i64 -1>
457 // CHECK: [[AND_I:%.*]] = and <1 x i64> %a, [[NEG_I]]
458 // CHECK: ret <1 x i64> [[AND_I]]
459 uint64x1_t
test_vbic_u64(uint64x1_t a
, uint64x1_t b
) {
460 return vbic_u64(a
, b
);
463 // CHECK-LABEL: define{{.*}} <2 x i64> @test_vbicq_u64(<2 x i64> noundef %a, <2 x i64> noundef %b) #0 {
464 // CHECK: [[NEG_I:%.*]] = xor <2 x i64> %b, <i64 -1, i64 -1>
465 // CHECK: [[AND_I:%.*]] = and <2 x i64> %a, [[NEG_I]]
466 // CHECK: ret <2 x i64> [[AND_I]]
467 uint64x2_t
test_vbicq_u64(uint64x2_t a
, uint64x2_t b
) {
468 return vbicq_u64(a
, b
);
471 // CHECK-LABEL: define{{.*}} <8 x i8> @test_vorn_s8(<8 x i8> noundef %a, <8 x i8> noundef %b) #0 {
472 // 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 // CHECK: [[OR_I:%.*]] = or <8 x i8> %a, [[NEG_I]]
474 // CHECK: ret <8 x i8> [[OR_I]]
475 int8x8_t
test_vorn_s8(int8x8_t a
, int8x8_t b
) {
476 return vorn_s8(a
, b
);
479 // CHECK-LABEL: define{{.*}} <16 x i8> @test_vornq_s8(<16 x i8> noundef %a, <16 x i8> noundef %b) #0 {
480 // 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 // CHECK: [[OR_I:%.*]] = or <16 x i8> %a, [[NEG_I]]
482 // CHECK: ret <16 x i8> [[OR_I]]
483 int8x16_t
test_vornq_s8(int8x16_t a
, int8x16_t b
) {
484 return vornq_s8(a
, b
);
487 // CHECK-LABEL: define{{.*}} <4 x i16> @test_vorn_s16(<4 x i16> noundef %a, <4 x i16> noundef %b) #0 {
488 // CHECK: [[NEG_I:%.*]] = xor <4 x i16> %b, <i16 -1, i16 -1, i16 -1, i16 -1>
489 // CHECK: [[OR_I:%.*]] = or <4 x i16> %a, [[NEG_I]]
490 // CHECK: ret <4 x i16> [[OR_I]]
491 int16x4_t
test_vorn_s16(int16x4_t a
, int16x4_t b
) {
492 return vorn_s16(a
, b
);
495 // CHECK-LABEL: define{{.*}} <8 x i16> @test_vornq_s16(<8 x i16> noundef %a, <8 x i16> noundef %b) #0 {
496 // 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 // CHECK: [[OR_I:%.*]] = or <8 x i16> %a, [[NEG_I]]
498 // CHECK: ret <8 x i16> [[OR_I]]
499 int16x8_t
test_vornq_s16(int16x8_t a
, int16x8_t b
) {
500 return vornq_s16(a
, b
);
503 // CHECK-LABEL: define{{.*}} <2 x i32> @test_vorn_s32(<2 x i32> noundef %a, <2 x i32> noundef %b) #0 {
504 // CHECK: [[NEG_I:%.*]] = xor <2 x i32> %b, <i32 -1, i32 -1>
505 // CHECK: [[OR_I:%.*]] = or <2 x i32> %a, [[NEG_I]]
506 // CHECK: ret <2 x i32> [[OR_I]]
507 int32x2_t
test_vorn_s32(int32x2_t a
, int32x2_t b
) {
508 return vorn_s32(a
, b
);
511 // CHECK-LABEL: define{{.*}} <4 x i32> @test_vornq_s32(<4 x i32> noundef %a, <4 x i32> noundef %b) #0 {
512 // CHECK: [[NEG_I:%.*]] = xor <4 x i32> %b, <i32 -1, i32 -1, i32 -1, i32 -1>
513 // CHECK: [[OR_I:%.*]] = or <4 x i32> %a, [[NEG_I]]
514 // CHECK: ret <4 x i32> [[OR_I]]
515 int32x4_t
test_vornq_s32(int32x4_t a
, int32x4_t b
) {
516 return vornq_s32(a
, b
);
519 // CHECK-LABEL: define{{.*}} <1 x i64> @test_vorn_s64(<1 x i64> noundef %a, <1 x i64> noundef %b) #0 {
520 // CHECK: [[NEG_I:%.*]] = xor <1 x i64> %b, <i64 -1>
521 // CHECK: [[OR_I:%.*]] = or <1 x i64> %a, [[NEG_I]]
522 // CHECK: ret <1 x i64> [[OR_I]]
523 int64x1_t
test_vorn_s64(int64x1_t a
, int64x1_t b
) {
524 return vorn_s64(a
, b
);
527 // CHECK-LABEL: define{{.*}} <2 x i64> @test_vornq_s64(<2 x i64> noundef %a, <2 x i64> noundef %b) #0 {
528 // CHECK: [[NEG_I:%.*]] = xor <2 x i64> %b, <i64 -1, i64 -1>
529 // CHECK: [[OR_I:%.*]] = or <2 x i64> %a, [[NEG_I]]
530 // CHECK: ret <2 x i64> [[OR_I]]
531 int64x2_t
test_vornq_s64(int64x2_t a
, int64x2_t b
) {
532 return vornq_s64(a
, b
);
535 // CHECK-LABEL: define{{.*}} <8 x i8> @test_vorn_u8(<8 x i8> noundef %a, <8 x i8> noundef %b) #0 {
536 // 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 // CHECK: [[OR_I:%.*]] = or <8 x i8> %a, [[NEG_I]]
538 // CHECK: ret <8 x i8> [[OR_I]]
539 uint8x8_t
test_vorn_u8(uint8x8_t a
, uint8x8_t b
) {
540 return vorn_u8(a
, b
);
543 // CHECK-LABEL: define{{.*}} <16 x i8> @test_vornq_u8(<16 x i8> noundef %a, <16 x i8> noundef %b) #0 {
544 // 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 // CHECK: [[OR_I:%.*]] = or <16 x i8> %a, [[NEG_I]]
546 // CHECK: ret <16 x i8> [[OR_I]]
547 uint8x16_t
test_vornq_u8(uint8x16_t a
, uint8x16_t b
) {
548 return vornq_u8(a
, b
);
551 // CHECK-LABEL: define{{.*}} <4 x i16> @test_vorn_u16(<4 x i16> noundef %a, <4 x i16> noundef %b) #0 {
552 // CHECK: [[NEG_I:%.*]] = xor <4 x i16> %b, <i16 -1, i16 -1, i16 -1, i16 -1>
553 // CHECK: [[OR_I:%.*]] = or <4 x i16> %a, [[NEG_I]]
554 // CHECK: ret <4 x i16> [[OR_I]]
555 uint16x4_t
test_vorn_u16(uint16x4_t a
, uint16x4_t b
) {
556 return vorn_u16(a
, b
);
559 // CHECK-LABEL: define{{.*}} <8 x i16> @test_vornq_u16(<8 x i16> noundef %a, <8 x i16> noundef %b) #0 {
560 // 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 // CHECK: [[OR_I:%.*]] = or <8 x i16> %a, [[NEG_I]]
562 // CHECK: ret <8 x i16> [[OR_I]]
563 uint16x8_t
test_vornq_u16(uint16x8_t a
, uint16x8_t b
) {
564 return vornq_u16(a
, b
);
567 // CHECK-LABEL: define{{.*}} <2 x i32> @test_vorn_u32(<2 x i32> noundef %a, <2 x i32> noundef %b) #0 {
568 // CHECK: [[NEG_I:%.*]] = xor <2 x i32> %b, <i32 -1, i32 -1>
569 // CHECK: [[OR_I:%.*]] = or <2 x i32> %a, [[NEG_I]]
570 // CHECK: ret <2 x i32> [[OR_I]]
571 uint32x2_t
test_vorn_u32(uint32x2_t a
, uint32x2_t b
) {
572 return vorn_u32(a
, b
);
575 // CHECK-LABEL: define{{.*}} <4 x i32> @test_vornq_u32(<4 x i32> noundef %a, <4 x i32> noundef %b) #0 {
576 // CHECK: [[NEG_I:%.*]] = xor <4 x i32> %b, <i32 -1, i32 -1, i32 -1, i32 -1>
577 // CHECK: [[OR_I:%.*]] = or <4 x i32> %a, [[NEG_I]]
578 // CHECK: ret <4 x i32> [[OR_I]]
579 uint32x4_t
test_vornq_u32(uint32x4_t a
, uint32x4_t b
) {
580 return vornq_u32(a
, b
);
583 // CHECK-LABEL: define{{.*}} <1 x i64> @test_vorn_u64(<1 x i64> noundef %a, <1 x i64> noundef %b) #0 {
584 // CHECK: [[NEG_I:%.*]] = xor <1 x i64> %b, <i64 -1>
585 // CHECK: [[OR_I:%.*]] = or <1 x i64> %a, [[NEG_I]]
586 // CHECK: ret <1 x i64> [[OR_I]]
587 uint64x1_t
test_vorn_u64(uint64x1_t a
, uint64x1_t b
) {
588 return vorn_u64(a
, b
);
591 // CHECK-LABEL: define{{.*}} <2 x i64> @test_vornq_u64(<2 x i64> noundef %a, <2 x i64> noundef %b) #0 {
592 // CHECK: [[NEG_I:%.*]] = xor <2 x i64> %b, <i64 -1, i64 -1>
593 // CHECK: [[OR_I:%.*]] = or <2 x i64> %a, [[NEG_I]]
594 // CHECK: ret <2 x i64> [[OR_I]]
595 uint64x2_t
test_vornq_u64(uint64x2_t a
, uint64x2_t b
) {
596 return vornq_u64(a
, b
);