598 lines · c
1// RUN: %clang_cc1 -triple aarch64 -target-feature +neon -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s2 3// REQUIRES: aarch64-registered-target || arm-registered-target4 5#include <arm_neon.h>6 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, %b9// CHECK: ret <8 x i8> [[AND_I]]10int8x8_t test_vand_s8(int8x8_t a, int8x8_t b) {11 return vand_s8(a, b);12}13 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, %b16// CHECK: ret <16 x i8> [[AND_I]]17int8x16_t test_vandq_s8(int8x16_t a, int8x16_t b) {18 return vandq_s8(a, b);19}20 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, %b23// CHECK: ret <4 x i16> [[AND_I]]24int16x4_t test_vand_s16(int16x4_t a, int16x4_t b) {25 return vand_s16(a, b);26}27 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, %b30// CHECK: ret <8 x i16> [[AND_I]]31int16x8_t test_vandq_s16(int16x8_t a, int16x8_t b) {32 return vandq_s16(a, b);33}34 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, %b37// CHECK: ret <2 x i32> [[AND_I]]38int32x2_t test_vand_s32(int32x2_t a, int32x2_t b) {39 return vand_s32(a, b);40}41 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, %b44// CHECK: ret <4 x i32> [[AND_I]]45int32x4_t test_vandq_s32(int32x4_t a, int32x4_t b) {46 return vandq_s32(a, b);47}48 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, %b51// CHECK: ret <1 x i64> [[AND_I]]52int64x1_t test_vand_s64(int64x1_t a, int64x1_t b) {53 return vand_s64(a, b);54}55 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, %b58// CHECK: ret <2 x i64> [[AND_I]]59int64x2_t test_vandq_s64(int64x2_t a, int64x2_t b) {60 return vandq_s64(a, b);61}62 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, %b65// CHECK: ret <8 x i8> [[AND_I]]66uint8x8_t test_vand_u8(uint8x8_t a, uint8x8_t b) {67 return vand_u8(a, b);68}69 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, %b72// CHECK: ret <16 x i8> [[AND_I]]73uint8x16_t test_vandq_u8(uint8x16_t a, uint8x16_t b) {74 return vandq_u8(a, b);75}76 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, %b79// CHECK: ret <4 x i16> [[AND_I]]80uint16x4_t test_vand_u16(uint16x4_t a, uint16x4_t b) {81 return vand_u16(a, b);82}83 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, %b86// CHECK: ret <8 x i16> [[AND_I]]87uint16x8_t test_vandq_u16(uint16x8_t a, uint16x8_t b) {88 return vandq_u16(a, b);89}90 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, %b93// CHECK: ret <2 x i32> [[AND_I]]94uint32x2_t test_vand_u32(uint32x2_t a, uint32x2_t b) {95 return vand_u32(a, b);96}97 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, %b100// CHECK: ret <4 x i32> [[AND_I]]101uint32x4_t test_vandq_u32(uint32x4_t a, uint32x4_t b) {102 return vandq_u32(a, b);103}104 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, %b107// CHECK: ret <1 x i64> [[AND_I]]108uint64x1_t test_vand_u64(uint64x1_t a, uint64x1_t b) {109 return vand_u64(a, b);110}111 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, %b114// CHECK: ret <2 x i64> [[AND_I]]115uint64x2_t test_vandq_u64(uint64x2_t a, uint64x2_t b) {116 return vandq_u64(a, b);117}118 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, %b121// CHECK: ret <8 x i8> [[OR_I]]122int8x8_t test_vorr_s8(int8x8_t a, int8x8_t b) {123 return vorr_s8(a, b);124}125 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, %b128// CHECK: ret <16 x i8> [[OR_I]]129int8x16_t test_vorrq_s8(int8x16_t a, int8x16_t b) {130 return vorrq_s8(a, b);131}132 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, %b135// CHECK: ret <4 x i16> [[OR_I]]136int16x4_t test_vorr_s16(int16x4_t a, int16x4_t b) {137 return vorr_s16(a, b);138}139 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, %b142// CHECK: ret <8 x i16> [[OR_I]]143int16x8_t test_vorrq_s16(int16x8_t a, int16x8_t b) {144 return vorrq_s16(a, b);145}146 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, %b149// CHECK: ret <2 x i32> [[OR_I]]150int32x2_t test_vorr_s32(int32x2_t a, int32x2_t b) {151 return vorr_s32(a, b);152}153 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, %b156// CHECK: ret <4 x i32> [[OR_I]]157int32x4_t test_vorrq_s32(int32x4_t a, int32x4_t b) {158 return vorrq_s32(a, b);159}160 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, %b163// CHECK: ret <1 x i64> [[OR_I]]164int64x1_t test_vorr_s64(int64x1_t a, int64x1_t b) {165 return vorr_s64(a, b);166}167 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, %b170// CHECK: ret <2 x i64> [[OR_I]]171int64x2_t test_vorrq_s64(int64x2_t a, int64x2_t b) {172 return vorrq_s64(a, b);173}174 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, %b177// CHECK: ret <8 x i8> [[OR_I]]178uint8x8_t test_vorr_u8(uint8x8_t a, uint8x8_t b) {179 return vorr_u8(a, b);180}181 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, %b184// CHECK: ret <16 x i8> [[OR_I]]185uint8x16_t test_vorrq_u8(uint8x16_t a, uint8x16_t b) {186 return vorrq_u8(a, b);187}188 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, %b191// CHECK: ret <4 x i16> [[OR_I]]192uint16x4_t test_vorr_u16(uint16x4_t a, uint16x4_t b) {193 return vorr_u16(a, b);194}195 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, %b198// CHECK: ret <8 x i16> [[OR_I]]199uint16x8_t test_vorrq_u16(uint16x8_t a, uint16x8_t b) {200 return vorrq_u16(a, b);201}202 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, %b205// CHECK: ret <2 x i32> [[OR_I]]206uint32x2_t test_vorr_u32(uint32x2_t a, uint32x2_t b) {207 return vorr_u32(a, b);208}209 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, %b212// CHECK: ret <4 x i32> [[OR_I]]213uint32x4_t test_vorrq_u32(uint32x4_t a, uint32x4_t b) {214 return vorrq_u32(a, b);215}216 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, %b219// CHECK: ret <1 x i64> [[OR_I]]220uint64x1_t test_vorr_u64(uint64x1_t a, uint64x1_t b) {221 return vorr_u64(a, b);222}223 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, %b226// CHECK: ret <2 x i64> [[OR_I]]227uint64x2_t test_vorrq_u64(uint64x2_t a, uint64x2_t b) {228 return vorrq_u64(a, b);229}230 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, %b233// CHECK: ret <8 x i8> [[XOR_I]]234int8x8_t test_veor_s8(int8x8_t a, int8x8_t b) {235 return veor_s8(a, b);236}237 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, %b240// CHECK: ret <16 x i8> [[XOR_I]]241int8x16_t test_veorq_s8(int8x16_t a, int8x16_t b) {242 return veorq_s8(a, b);243}244 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, %b247// CHECK: ret <4 x i16> [[XOR_I]]248int16x4_t test_veor_s16(int16x4_t a, int16x4_t b) {249 return veor_s16(a, b);250}251 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, %b254// CHECK: ret <8 x i16> [[XOR_I]]255int16x8_t test_veorq_s16(int16x8_t a, int16x8_t b) {256 return veorq_s16(a, b);257}258 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, %b261// CHECK: ret <2 x i32> [[XOR_I]]262int32x2_t test_veor_s32(int32x2_t a, int32x2_t b) {263 return veor_s32(a, b);264}265 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, %b268// CHECK: ret <4 x i32> [[XOR_I]]269int32x4_t test_veorq_s32(int32x4_t a, int32x4_t b) {270 return veorq_s32(a, b);271}272 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, %b275// CHECK: ret <1 x i64> [[XOR_I]]276int64x1_t test_veor_s64(int64x1_t a, int64x1_t b) {277 return veor_s64(a, b);278}279 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, %b282// CHECK: ret <2 x i64> [[XOR_I]]283int64x2_t test_veorq_s64(int64x2_t a, int64x2_t b) {284 return veorq_s64(a, b);285}286 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, %b289// CHECK: ret <8 x i8> [[XOR_I]]290uint8x8_t test_veor_u8(uint8x8_t a, uint8x8_t b) {291 return veor_u8(a, b);292}293 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, %b296// CHECK: ret <16 x i8> [[XOR_I]]297uint8x16_t test_veorq_u8(uint8x16_t a, uint8x16_t b) {298 return veorq_u8(a, b);299}300 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, %b303// CHECK: ret <4 x i16> [[XOR_I]]304uint16x4_t test_veor_u16(uint16x4_t a, uint16x4_t b) {305 return veor_u16(a, b);306}307 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, %b310// CHECK: ret <8 x i16> [[XOR_I]]311uint16x8_t test_veorq_u16(uint16x8_t a, uint16x8_t b) {312 return veorq_u16(a, b);313}314 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, %b317// CHECK: ret <2 x i32> [[XOR_I]]318uint32x2_t test_veor_u32(uint32x2_t a, uint32x2_t b) {319 return veor_u32(a, b);320}321 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, %b324// CHECK: ret <4 x i32> [[XOR_I]]325uint32x4_t test_veorq_u32(uint32x4_t a, uint32x4_t b) {326 return veorq_u32(a, b);327}328 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, %b331// CHECK: ret <1 x i64> [[XOR_I]]332uint64x1_t test_veor_u64(uint64x1_t a, uint64x1_t b) {333 return veor_u64(a, b);334}335 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, %b338// CHECK: ret <2 x i64> [[XOR_I]]339uint64x2_t test_veorq_u64(uint64x2_t a, uint64x2_t b) {340 return veorq_u64(a, b);341}342 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, splat (i8 -1)345// CHECK: [[AND_I:%.*]] = and <8 x i8> %a, [[NEG_I]]346// CHECK: ret <8 x i8> [[AND_I]]347int8x8_t test_vbic_s8(int8x8_t a, int8x8_t b) {348 return vbic_s8(a, b);349}350 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, splat (i8 -1)353// CHECK: [[AND_I:%.*]] = and <16 x i8> %a, [[NEG_I]]354// CHECK: ret <16 x i8> [[AND_I]]355int8x16_t test_vbicq_s8(int8x16_t a, int8x16_t b) {356 return vbicq_s8(a, b);357}358 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, splat (i16 -1)361// CHECK: [[AND_I:%.*]] = and <4 x i16> %a, [[NEG_I]]362// CHECK: ret <4 x i16> [[AND_I]]363int16x4_t test_vbic_s16(int16x4_t a, int16x4_t b) {364 return vbic_s16(a, b);365}366 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, splat (i16 -1)369// CHECK: [[AND_I:%.*]] = and <8 x i16> %a, [[NEG_I]]370// CHECK: ret <8 x i16> [[AND_I]]371int16x8_t test_vbicq_s16(int16x8_t a, int16x8_t b) {372 return vbicq_s16(a, b);373}374 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, splat (i32 -1)377// CHECK: [[AND_I:%.*]] = and <2 x i32> %a, [[NEG_I]]378// CHECK: ret <2 x i32> [[AND_I]]379int32x2_t test_vbic_s32(int32x2_t a, int32x2_t b) {380 return vbic_s32(a, b);381}382 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, splat (i32 -1)385// CHECK: [[AND_I:%.*]] = and <4 x i32> %a, [[NEG_I]]386// CHECK: ret <4 x i32> [[AND_I]]387int32x4_t test_vbicq_s32(int32x4_t a, int32x4_t b) {388 return vbicq_s32(a, b);389}390 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, splat (i64 -1)393// CHECK: [[AND_I:%.*]] = and <1 x i64> %a, [[NEG_I]]394// CHECK: ret <1 x i64> [[AND_I]]395int64x1_t test_vbic_s64(int64x1_t a, int64x1_t b) {396 return vbic_s64(a, b);397}398 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, splat (i64 -1)401// CHECK: [[AND_I:%.*]] = and <2 x i64> %a, [[NEG_I]]402// CHECK: ret <2 x i64> [[AND_I]]403int64x2_t test_vbicq_s64(int64x2_t a, int64x2_t b) {404 return vbicq_s64(a, b);405}406 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, splat (i8 -1)409// CHECK: [[AND_I:%.*]] = and <8 x i8> %a, [[NEG_I]]410// CHECK: ret <8 x i8> [[AND_I]]411uint8x8_t test_vbic_u8(uint8x8_t a, uint8x8_t b) {412 return vbic_u8(a, b);413}414 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, splat (i8 -1)417// CHECK: [[AND_I:%.*]] = and <16 x i8> %a, [[NEG_I]]418// CHECK: ret <16 x i8> [[AND_I]]419uint8x16_t test_vbicq_u8(uint8x16_t a, uint8x16_t b) {420 return vbicq_u8(a, b);421}422 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, splat (i16 -1)425// CHECK: [[AND_I:%.*]] = and <4 x i16> %a, [[NEG_I]]426// CHECK: ret <4 x i16> [[AND_I]]427uint16x4_t test_vbic_u16(uint16x4_t a, uint16x4_t b) {428 return vbic_u16(a, b);429}430 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, splat (i16 -1)433// CHECK: [[AND_I:%.*]] = and <8 x i16> %a, [[NEG_I]]434// CHECK: ret <8 x i16> [[AND_I]]435uint16x8_t test_vbicq_u16(uint16x8_t a, uint16x8_t b) {436 return vbicq_u16(a, b);437}438 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, splat (i32 -1)441// CHECK: [[AND_I:%.*]] = and <2 x i32> %a, [[NEG_I]]442// CHECK: ret <2 x i32> [[AND_I]]443uint32x2_t test_vbic_u32(uint32x2_t a, uint32x2_t b) {444 return vbic_u32(a, b);445}446 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, splat (i32 -1)449// CHECK: [[AND_I:%.*]] = and <4 x i32> %a, [[NEG_I]]450// CHECK: ret <4 x i32> [[AND_I]]451uint32x4_t test_vbicq_u32(uint32x4_t a, uint32x4_t b) {452 return vbicq_u32(a, b);453}454 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, splat (i64 -1)457// CHECK: [[AND_I:%.*]] = and <1 x i64> %a, [[NEG_I]]458// CHECK: ret <1 x i64> [[AND_I]]459uint64x1_t test_vbic_u64(uint64x1_t a, uint64x1_t b) {460 return vbic_u64(a, b);461}462 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, splat (i64 -1)465// CHECK: [[AND_I:%.*]] = and <2 x i64> %a, [[NEG_I]]466// CHECK: ret <2 x i64> [[AND_I]]467uint64x2_t test_vbicq_u64(uint64x2_t a, uint64x2_t b) {468 return vbicq_u64(a, b);469}470 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, splat (i8 -1)473// CHECK: [[OR_I:%.*]] = or <8 x i8> %a, [[NEG_I]]474// CHECK: ret <8 x i8> [[OR_I]]475int8x8_t test_vorn_s8(int8x8_t a, int8x8_t b) {476 return vorn_s8(a, b);477}478 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, splat (i8 -1)481// CHECK: [[OR_I:%.*]] = or <16 x i8> %a, [[NEG_I]]482// CHECK: ret <16 x i8> [[OR_I]]483int8x16_t test_vornq_s8(int8x16_t a, int8x16_t b) {484 return vornq_s8(a, b);485}486 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, splat (i16 -1)489// CHECK: [[OR_I:%.*]] = or <4 x i16> %a, [[NEG_I]]490// CHECK: ret <4 x i16> [[OR_I]]491int16x4_t test_vorn_s16(int16x4_t a, int16x4_t b) {492 return vorn_s16(a, b);493}494 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, splat (i16 -1)497// CHECK: [[OR_I:%.*]] = or <8 x i16> %a, [[NEG_I]]498// CHECK: ret <8 x i16> [[OR_I]]499int16x8_t test_vornq_s16(int16x8_t a, int16x8_t b) {500 return vornq_s16(a, b);501}502 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, splat (i32 -1)505// CHECK: [[OR_I:%.*]] = or <2 x i32> %a, [[NEG_I]]506// CHECK: ret <2 x i32> [[OR_I]]507int32x2_t test_vorn_s32(int32x2_t a, int32x2_t b) {508 return vorn_s32(a, b);509}510 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, splat (i32 -1)513// CHECK: [[OR_I:%.*]] = or <4 x i32> %a, [[NEG_I]]514// CHECK: ret <4 x i32> [[OR_I]]515int32x4_t test_vornq_s32(int32x4_t a, int32x4_t b) {516 return vornq_s32(a, b);517}518 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, splat (i64 -1)521// CHECK: [[OR_I:%.*]] = or <1 x i64> %a, [[NEG_I]]522// CHECK: ret <1 x i64> [[OR_I]]523int64x1_t test_vorn_s64(int64x1_t a, int64x1_t b) {524 return vorn_s64(a, b);525}526 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, splat (i64 -1)529// CHECK: [[OR_I:%.*]] = or <2 x i64> %a, [[NEG_I]]530// CHECK: ret <2 x i64> [[OR_I]]531int64x2_t test_vornq_s64(int64x2_t a, int64x2_t b) {532 return vornq_s64(a, b);533}534 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, splat (i8 -1)537// CHECK: [[OR_I:%.*]] = or <8 x i8> %a, [[NEG_I]]538// CHECK: ret <8 x i8> [[OR_I]]539uint8x8_t test_vorn_u8(uint8x8_t a, uint8x8_t b) {540 return vorn_u8(a, b);541}542 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, splat (i8 -1)545// CHECK: [[OR_I:%.*]] = or <16 x i8> %a, [[NEG_I]]546// CHECK: ret <16 x i8> [[OR_I]]547uint8x16_t test_vornq_u8(uint8x16_t a, uint8x16_t b) {548 return vornq_u8(a, b);549}550 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, splat (i16 -1)553// CHECK: [[OR_I:%.*]] = or <4 x i16> %a, [[NEG_I]]554// CHECK: ret <4 x i16> [[OR_I]]555uint16x4_t test_vorn_u16(uint16x4_t a, uint16x4_t b) {556 return vorn_u16(a, b);557}558 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, splat (i16 -1)561// CHECK: [[OR_I:%.*]] = or <8 x i16> %a, [[NEG_I]]562// CHECK: ret <8 x i16> [[OR_I]]563uint16x8_t test_vornq_u16(uint16x8_t a, uint16x8_t b) {564 return vornq_u16(a, b);565}566 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, splat (i32 -1)569// CHECK: [[OR_I:%.*]] = or <2 x i32> %a, [[NEG_I]]570// CHECK: ret <2 x i32> [[OR_I]]571uint32x2_t test_vorn_u32(uint32x2_t a, uint32x2_t b) {572 return vorn_u32(a, b);573}574 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, splat (i32 -1)577// CHECK: [[OR_I:%.*]] = or <4 x i32> %a, [[NEG_I]]578// CHECK: ret <4 x i32> [[OR_I]]579uint32x4_t test_vornq_u32(uint32x4_t a, uint32x4_t b) {580 return vornq_u32(a, b);581}582 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, splat (i64 -1)585// CHECK: [[OR_I:%.*]] = or <1 x i64> %a, [[NEG_I]]586// CHECK: ret <1 x i64> [[OR_I]]587uint64x1_t test_vorn_u64(uint64x1_t a, uint64x1_t b) {588 return vorn_u64(a, b);589}590 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, splat (i64 -1)593// CHECK: [[OR_I:%.*]] = or <2 x i64> %a, [[NEG_I]]594// CHECK: ret <2 x i64> [[OR_I]]595uint64x2_t test_vornq_u64(uint64x2_t a, uint64x2_t b) {596 return vornq_u64(a, b);597}598