brintos

brintos / llvm-project-archived public Read only

0
0
Text · 23.3 KiB · 3580f6d Raw
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