1640 lines · c
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py2// RUN: %clang_cc1 -triple thumbv8.1m.main-none-none-eabi -target-feature +mve.fp -mfloat-abi hard -O0 -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s3// RUN: %clang_cc1 -triple thumbv8.1m.main-none-none-eabi -target-feature +mve.fp -mfloat-abi hard -O0 -disable-O0-optnone -DPOLYMORPHIC -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s4 5// REQUIRES: aarch64-registered-target || arm-registered-target6 7#include <arm_mve.h>8 9// CHECK-LABEL: @test_vshlq_n_s8(10// CHECK-NEXT: entry:11// CHECK-NEXT: [[TMP0:%.*]] = shl <16 x i8> [[A:%.*]], splat (i8 5)12// CHECK-NEXT: ret <16 x i8> [[TMP0]]13//14int8x16_t test_vshlq_n_s8(int8x16_t a)15{16#ifdef POLYMORPHIC17 return vshlq_n(a, 5);18#else /* POLYMORPHIC */19 return vshlq_n_s8(a, 5);20#endif /* POLYMORPHIC */21}22 23// CHECK-LABEL: @test_vshlq_n_s16(24// CHECK-NEXT: entry:25// CHECK-NEXT: [[TMP0:%.*]] = shl <8 x i16> [[A:%.*]], splat (i16 5)26// CHECK-NEXT: ret <8 x i16> [[TMP0]]27//28int16x8_t test_vshlq_n_s16(int16x8_t a)29{30#ifdef POLYMORPHIC31 return vshlq_n(a, 5);32#else /* POLYMORPHIC */33 return vshlq_n_s16(a, 5);34#endif /* POLYMORPHIC */35}36 37// CHECK-LABEL: @test_vshlq_n_s32(38// CHECK-NEXT: entry:39// CHECK-NEXT: [[TMP0:%.*]] = shl <4 x i32> [[A:%.*]], splat (i32 18)40// CHECK-NEXT: ret <4 x i32> [[TMP0]]41//42int32x4_t test_vshlq_n_s32(int32x4_t a)43{44#ifdef POLYMORPHIC45 return vshlq_n(a, 18);46#else /* POLYMORPHIC */47 return vshlq_n_s32(a, 18);48#endif /* POLYMORPHIC */49}50 51// CHECK-LABEL: @test_vshlq_n_s8_trivial(52// CHECK-NEXT: entry:53// CHECK-NEXT: [[TMP0:%.*]] = shl <16 x i8> [[A:%.*]], zeroinitializer54// CHECK-NEXT: ret <16 x i8> [[TMP0]]55//56int8x16_t test_vshlq_n_s8_trivial(int8x16_t a)57{58#ifdef POLYMORPHIC59 return vshlq_n(a, 0);60#else /* POLYMORPHIC */61 return vshlq_n_s8(a, 0);62#endif /* POLYMORPHIC */63}64 65// CHECK-LABEL: @test_vshlq_n_s16_trivial(66// CHECK-NEXT: entry:67// CHECK-NEXT: [[TMP0:%.*]] = shl <8 x i16> [[A:%.*]], zeroinitializer68// CHECK-NEXT: ret <8 x i16> [[TMP0]]69//70int16x8_t test_vshlq_n_s16_trivial(int16x8_t a)71{72#ifdef POLYMORPHIC73 return vshlq_n(a, 0);74#else /* POLYMORPHIC */75 return vshlq_n_s16(a, 0);76#endif /* POLYMORPHIC */77}78 79// CHECK-LABEL: @test_vshlq_n_s32_trivial(80// CHECK-NEXT: entry:81// CHECK-NEXT: [[TMP0:%.*]] = shl <4 x i32> [[A:%.*]], zeroinitializer82// CHECK-NEXT: ret <4 x i32> [[TMP0]]83//84int32x4_t test_vshlq_n_s32_trivial(int32x4_t a)85{86#ifdef POLYMORPHIC87 return vshlq_n(a, 0);88#else /* POLYMORPHIC */89 return vshlq_n_s32(a, 0);90#endif /* POLYMORPHIC */91}92 93// CHECK-LABEL: @test_vshlq_n_u8(94// CHECK-NEXT: entry:95// CHECK-NEXT: [[TMP0:%.*]] = shl <16 x i8> [[A:%.*]], splat (i8 3)96// CHECK-NEXT: ret <16 x i8> [[TMP0]]97//98uint8x16_t test_vshlq_n_u8(uint8x16_t a)99{100#ifdef POLYMORPHIC101 return vshlq_n(a, 3);102#else /* POLYMORPHIC */103 return vshlq_n_u8(a, 3);104#endif /* POLYMORPHIC */105}106 107// CHECK-LABEL: @test_vshlq_n_u16(108// CHECK-NEXT: entry:109// CHECK-NEXT: [[TMP0:%.*]] = shl <8 x i16> [[A:%.*]], splat (i16 11)110// CHECK-NEXT: ret <8 x i16> [[TMP0]]111//112uint16x8_t test_vshlq_n_u16(uint16x8_t a)113{114#ifdef POLYMORPHIC115 return vshlq_n(a, 11);116#else /* POLYMORPHIC */117 return vshlq_n_u16(a, 11);118#endif /* POLYMORPHIC */119}120 121// CHECK-LABEL: @test_vshlq_n_u32(122// CHECK-NEXT: entry:123// CHECK-NEXT: [[TMP0:%.*]] = shl <4 x i32> [[A:%.*]], splat (i32 7)124// CHECK-NEXT: ret <4 x i32> [[TMP0]]125//126uint32x4_t test_vshlq_n_u32(uint32x4_t a)127{128#ifdef POLYMORPHIC129 return vshlq_n(a, 7);130#else /* POLYMORPHIC */131 return vshlq_n_u32(a, 7);132#endif /* POLYMORPHIC */133}134 135// CHECK-LABEL: @test_vshlq_n_u8_trivial(136// CHECK-NEXT: entry:137// CHECK-NEXT: [[TMP0:%.*]] = shl <16 x i8> [[A:%.*]], zeroinitializer138// CHECK-NEXT: ret <16 x i8> [[TMP0]]139//140uint8x16_t test_vshlq_n_u8_trivial(uint8x16_t a)141{142#ifdef POLYMORPHIC143 return vshlq_n(a, 0);144#else /* POLYMORPHIC */145 return vshlq_n_u8(a, 0);146#endif /* POLYMORPHIC */147}148 149// CHECK-LABEL: @test_vshlq_n_u16_trivial(150// CHECK-NEXT: entry:151// CHECK-NEXT: [[TMP0:%.*]] = shl <8 x i16> [[A:%.*]], zeroinitializer152// CHECK-NEXT: ret <8 x i16> [[TMP0]]153//154uint16x8_t test_vshlq_n_u16_trivial(uint16x8_t a)155{156#ifdef POLYMORPHIC157 return vshlq_n(a, 0);158#else /* POLYMORPHIC */159 return vshlq_n_u16(a, 0);160#endif /* POLYMORPHIC */161}162 163// CHECK-LABEL: @test_vshlq_n_u32_trivial(164// CHECK-NEXT: entry:165// CHECK-NEXT: [[TMP0:%.*]] = shl <4 x i32> [[A:%.*]], zeroinitializer166// CHECK-NEXT: ret <4 x i32> [[TMP0]]167//168uint32x4_t test_vshlq_n_u32_trivial(uint32x4_t a)169{170#ifdef POLYMORPHIC171 return vshlq_n(a, 0);172#else /* POLYMORPHIC */173 return vshlq_n_u32(a, 0);174#endif /* POLYMORPHIC */175}176 177// CHECK-LABEL: @test_vshrq_n_s8(178// CHECK-NEXT: entry:179// CHECK-NEXT: [[TMP0:%.*]] = ashr <16 x i8> [[A:%.*]], splat (i8 4)180// CHECK-NEXT: ret <16 x i8> [[TMP0]]181//182int8x16_t test_vshrq_n_s8(int8x16_t a)183{184#ifdef POLYMORPHIC185 return vshrq(a, 4);186#else /* POLYMORPHIC */187 return vshrq_n_s8(a, 4);188#endif /* POLYMORPHIC */189}190 191// CHECK-LABEL: @test_vshrq_n_s16(192// CHECK-NEXT: entry:193// CHECK-NEXT: [[TMP0:%.*]] = ashr <8 x i16> [[A:%.*]], splat (i16 10)194// CHECK-NEXT: ret <8 x i16> [[TMP0]]195//196int16x8_t test_vshrq_n_s16(int16x8_t a)197{198#ifdef POLYMORPHIC199 return vshrq(a, 10);200#else /* POLYMORPHIC */201 return vshrq_n_s16(a, 10);202#endif /* POLYMORPHIC */203}204 205// CHECK-LABEL: @test_vshrq_n_s32(206// CHECK-NEXT: entry:207// CHECK-NEXT: [[TMP0:%.*]] = ashr <4 x i32> [[A:%.*]], splat (i32 19)208// CHECK-NEXT: ret <4 x i32> [[TMP0]]209//210int32x4_t test_vshrq_n_s32(int32x4_t a)211{212#ifdef POLYMORPHIC213 return vshrq(a, 19);214#else /* POLYMORPHIC */215 return vshrq_n_s32(a, 19);216#endif /* POLYMORPHIC */217}218 219// CHECK-LABEL: @test_vshrq_n_s8_trivial(220// CHECK-NEXT: entry:221// CHECK-NEXT: [[TMP0:%.*]] = ashr <16 x i8> [[A:%.*]], splat (i8 7)222// CHECK-NEXT: ret <16 x i8> [[TMP0]]223//224int8x16_t test_vshrq_n_s8_trivial(int8x16_t a)225{226#ifdef POLYMORPHIC227 return vshrq(a, 8);228#else /* POLYMORPHIC */229 return vshrq_n_s8(a, 8);230#endif /* POLYMORPHIC */231}232 233// CHECK-LABEL: @test_vshrq_n_s16_trivial(234// CHECK-NEXT: entry:235// CHECK-NEXT: [[TMP0:%.*]] = ashr <8 x i16> [[A:%.*]], splat (i16 15)236// CHECK-NEXT: ret <8 x i16> [[TMP0]]237//238int16x8_t test_vshrq_n_s16_trivial(int16x8_t a)239{240#ifdef POLYMORPHIC241 return vshrq(a, 16);242#else /* POLYMORPHIC */243 return vshrq_n_s16(a, 16);244#endif /* POLYMORPHIC */245}246 247// CHECK-LABEL: @test_vshrq_n_s32_trivial(248// CHECK-NEXT: entry:249// CHECK-NEXT: [[TMP0:%.*]] = ashr <4 x i32> [[A:%.*]], splat (i32 31)250// CHECK-NEXT: ret <4 x i32> [[TMP0]]251//252int32x4_t test_vshrq_n_s32_trivial(int32x4_t a)253{254#ifdef POLYMORPHIC255 return vshrq(a, 32);256#else /* POLYMORPHIC */257 return vshrq_n_s32(a, 32);258#endif /* POLYMORPHIC */259}260 261// CHECK-LABEL: @test_vshrq_n_u8(262// CHECK-NEXT: entry:263// CHECK-NEXT: [[TMP0:%.*]] = lshr <16 x i8> [[A:%.*]], splat (i8 1)264// CHECK-NEXT: ret <16 x i8> [[TMP0]]265//266uint8x16_t test_vshrq_n_u8(uint8x16_t a)267{268#ifdef POLYMORPHIC269 return vshrq(a, 1);270#else /* POLYMORPHIC */271 return vshrq_n_u8(a, 1);272#endif /* POLYMORPHIC */273}274 275// CHECK-LABEL: @test_vshrq_n_u16(276// CHECK-NEXT: entry:277// CHECK-NEXT: [[TMP0:%.*]] = lshr <8 x i16> [[A:%.*]], splat (i16 10)278// CHECK-NEXT: ret <8 x i16> [[TMP0]]279//280uint16x8_t test_vshrq_n_u16(uint16x8_t a)281{282#ifdef POLYMORPHIC283 return vshrq(a, 10);284#else /* POLYMORPHIC */285 return vshrq_n_u16(a, 10);286#endif /* POLYMORPHIC */287}288 289// CHECK-LABEL: @test_vshrq_n_u32(290// CHECK-NEXT: entry:291// CHECK-NEXT: [[TMP0:%.*]] = lshr <4 x i32> [[A:%.*]], splat (i32 10)292// CHECK-NEXT: ret <4 x i32> [[TMP0]]293//294uint32x4_t test_vshrq_n_u32(uint32x4_t a)295{296#ifdef POLYMORPHIC297 return vshrq(a, 10);298#else /* POLYMORPHIC */299 return vshrq_n_u32(a, 10);300#endif /* POLYMORPHIC */301}302 303// CHECK-LABEL: @test_vshrq_n_u8_trivial(304// CHECK-NEXT: entry:305// CHECK-NEXT: ret <16 x i8> zeroinitializer306//307uint8x16_t test_vshrq_n_u8_trivial(uint8x16_t a)308{309#ifdef POLYMORPHIC310 return vshrq(a, 8);311#else /* POLYMORPHIC */312 return vshrq_n_u8(a, 8);313#endif /* POLYMORPHIC */314}315 316// CHECK-LABEL: @test_vshrq_n_u16_trivial(317// CHECK-NEXT: entry:318// CHECK-NEXT: ret <8 x i16> zeroinitializer319//320uint16x8_t test_vshrq_n_u16_trivial(uint16x8_t a)321{322#ifdef POLYMORPHIC323 return vshrq(a, 16);324#else /* POLYMORPHIC */325 return vshrq_n_u16(a, 16);326#endif /* POLYMORPHIC */327}328 329// CHECK-LABEL: @test_vshrq_n_u32_trivial(330// CHECK-NEXT: entry:331// CHECK-NEXT: ret <4 x i32> zeroinitializer332//333uint32x4_t test_vshrq_n_u32_trivial(uint32x4_t a)334{335#ifdef POLYMORPHIC336 return vshrq(a, 32);337#else /* POLYMORPHIC */338 return vshrq_n_u32(a, 32);339#endif /* POLYMORPHIC */340}341 342// CHECK-LABEL: @test_vshlq_m_n_s8(343// CHECK-NEXT: entry:344// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32345// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])346// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.shl.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 6, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])347// CHECK-NEXT: ret <16 x i8> [[TMP2]]348//349int8x16_t test_vshlq_m_n_s8(int8x16_t inactive, int8x16_t a, mve_pred16_t p)350{351#ifdef POLYMORPHIC352 return vshlq_m_n(inactive, a, 6, p);353#else /* POLYMORPHIC */354 return vshlq_m_n_s8(inactive, a, 6, p);355#endif /* POLYMORPHIC */356}357 358// CHECK-LABEL: @test_vshlq_m_n_s16(359// CHECK-NEXT: entry:360// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32361// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])362// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.shl.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 13, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])363// CHECK-NEXT: ret <8 x i16> [[TMP2]]364//365int16x8_t test_vshlq_m_n_s16(int16x8_t inactive, int16x8_t a, mve_pred16_t p)366{367#ifdef POLYMORPHIC368 return vshlq_m_n(inactive, a, 13, p);369#else /* POLYMORPHIC */370 return vshlq_m_n_s16(inactive, a, 13, p);371#endif /* POLYMORPHIC */372}373 374// CHECK-LABEL: @test_vshlq_m_n_s32(375// CHECK-NEXT: entry:376// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32377// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])378// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.shl.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 0, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])379// CHECK-NEXT: ret <4 x i32> [[TMP2]]380//381int32x4_t test_vshlq_m_n_s32(int32x4_t inactive, int32x4_t a, mve_pred16_t p)382{383#ifdef POLYMORPHIC384 return vshlq_m_n(inactive, a, 0, p);385#else /* POLYMORPHIC */386 return vshlq_m_n_s32(inactive, a, 0, p);387#endif /* POLYMORPHIC */388}389 390// CHECK-LABEL: @test_vshlq_m_n_u8(391// CHECK-NEXT: entry:392// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32393// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])394// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.shl.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 3, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])395// CHECK-NEXT: ret <16 x i8> [[TMP2]]396//397uint8x16_t test_vshlq_m_n_u8(uint8x16_t inactive, uint8x16_t a, mve_pred16_t p)398{399#ifdef POLYMORPHIC400 return vshlq_m_n(inactive, a, 3, p);401#else /* POLYMORPHIC */402 return vshlq_m_n_u8(inactive, a, 3, p);403#endif /* POLYMORPHIC */404}405 406// CHECK-LABEL: @test_vshlq_m_n_u16(407// CHECK-NEXT: entry:408// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32409// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])410// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.shl.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 1, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])411// CHECK-NEXT: ret <8 x i16> [[TMP2]]412//413uint16x8_t test_vshlq_m_n_u16(uint16x8_t inactive, uint16x8_t a, mve_pred16_t p)414{415#ifdef POLYMORPHIC416 return vshlq_m_n(inactive, a, 1, p);417#else /* POLYMORPHIC */418 return vshlq_m_n_u16(inactive, a, 1, p);419#endif /* POLYMORPHIC */420}421 422// CHECK-LABEL: @test_vshlq_m_n_u32(423// CHECK-NEXT: entry:424// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32425// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])426// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.shl.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 24, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])427// CHECK-NEXT: ret <4 x i32> [[TMP2]]428//429uint32x4_t test_vshlq_m_n_u32(uint32x4_t inactive, uint32x4_t a, mve_pred16_t p)430{431#ifdef POLYMORPHIC432 return vshlq_m_n(inactive, a, 24, p);433#else /* POLYMORPHIC */434 return vshlq_m_n_u32(inactive, a, 24, p);435#endif /* POLYMORPHIC */436}437 438// CHECK-LABEL: @test_vshrq_m_n_s8(439// CHECK-NEXT: entry:440// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32441// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])442// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.shr.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 2, i32 0, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])443// CHECK-NEXT: ret <16 x i8> [[TMP2]]444//445int8x16_t test_vshrq_m_n_s8(int8x16_t inactive, int8x16_t a, mve_pred16_t p)446{447#ifdef POLYMORPHIC448 return vshrq_m(inactive, a, 2, p);449#else /* POLYMORPHIC */450 return vshrq_m_n_s8(inactive, a, 2, p);451#endif /* POLYMORPHIC */452}453 454// CHECK-LABEL: @test_vshrq_m_n_s16(455// CHECK-NEXT: entry:456// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32457// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])458// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.shr.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 3, i32 0, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])459// CHECK-NEXT: ret <8 x i16> [[TMP2]]460//461int16x8_t test_vshrq_m_n_s16(int16x8_t inactive, int16x8_t a, mve_pred16_t p)462{463#ifdef POLYMORPHIC464 return vshrq_m(inactive, a, 3, p);465#else /* POLYMORPHIC */466 return vshrq_m_n_s16(inactive, a, 3, p);467#endif /* POLYMORPHIC */468}469 470// CHECK-LABEL: @test_vshrq_m_n_s32(471// CHECK-NEXT: entry:472// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32473// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])474// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.shr.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 13, i32 0, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])475// CHECK-NEXT: ret <4 x i32> [[TMP2]]476//477int32x4_t test_vshrq_m_n_s32(int32x4_t inactive, int32x4_t a, mve_pred16_t p)478{479#ifdef POLYMORPHIC480 return vshrq_m(inactive, a, 13, p);481#else /* POLYMORPHIC */482 return vshrq_m_n_s32(inactive, a, 13, p);483#endif /* POLYMORPHIC */484}485 486// CHECK-LABEL: @test_vshrq_m_n_u8(487// CHECK-NEXT: entry:488// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32489// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])490// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.shr.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 4, i32 1, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])491// CHECK-NEXT: ret <16 x i8> [[TMP2]]492//493uint8x16_t test_vshrq_m_n_u8(uint8x16_t inactive, uint8x16_t a, mve_pred16_t p)494{495#ifdef POLYMORPHIC496 return vshrq_m(inactive, a, 4, p);497#else /* POLYMORPHIC */498 return vshrq_m_n_u8(inactive, a, 4, p);499#endif /* POLYMORPHIC */500}501 502// CHECK-LABEL: @test_vshrq_m_n_u16(503// CHECK-NEXT: entry:504// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32505// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])506// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.shr.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 14, i32 1, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])507// CHECK-NEXT: ret <8 x i16> [[TMP2]]508//509uint16x8_t test_vshrq_m_n_u16(uint16x8_t inactive, uint16x8_t a, mve_pred16_t p)510{511#ifdef POLYMORPHIC512 return vshrq_m(inactive, a, 14, p);513#else /* POLYMORPHIC */514 return vshrq_m_n_u16(inactive, a, 14, p);515#endif /* POLYMORPHIC */516}517 518// CHECK-LABEL: @test_vshrq_m_n_u32(519// CHECK-NEXT: entry:520// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32521// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])522// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.shr.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 21, i32 1, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])523// CHECK-NEXT: ret <4 x i32> [[TMP2]]524//525uint32x4_t test_vshrq_m_n_u32(uint32x4_t inactive, uint32x4_t a, mve_pred16_t p)526{527#ifdef POLYMORPHIC528 return vshrq_m(inactive, a, 21, p);529#else /* POLYMORPHIC */530 return vshrq_m_n_u32(inactive, a, 21, p);531#endif /* POLYMORPHIC */532}533 534// CHECK-LABEL: @test_vshlq_x_n_s8(535// CHECK-NEXT: entry:536// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32537// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])538// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.shl.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 1, <16 x i1> [[TMP1]], <16 x i8> undef)539// CHECK-NEXT: ret <16 x i8> [[TMP2]]540//541int8x16_t test_vshlq_x_n_s8(int8x16_t a, mve_pred16_t p)542{543#ifdef POLYMORPHIC544 return vshlq_x_n(a, 1, p);545#else /* POLYMORPHIC */546 return vshlq_x_n_s8(a, 1, p);547#endif /* POLYMORPHIC */548}549 550// CHECK-LABEL: @test_vshlq_x_n_s16(551// CHECK-NEXT: entry:552// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32553// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])554// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.shl.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 15, <8 x i1> [[TMP1]], <8 x i16> undef)555// CHECK-NEXT: ret <8 x i16> [[TMP2]]556//557int16x8_t test_vshlq_x_n_s16(int16x8_t a, mve_pred16_t p)558{559#ifdef POLYMORPHIC560 return vshlq_x_n(a, 15, p);561#else /* POLYMORPHIC */562 return vshlq_x_n_s16(a, 15, p);563#endif /* POLYMORPHIC */564}565 566// CHECK-LABEL: @test_vshlq_x_n_s32(567// CHECK-NEXT: entry:568// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32569// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])570// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.shl.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 13, <4 x i1> [[TMP1]], <4 x i32> undef)571// CHECK-NEXT: ret <4 x i32> [[TMP2]]572//573int32x4_t test_vshlq_x_n_s32(int32x4_t a, mve_pred16_t p)574{575#ifdef POLYMORPHIC576 return vshlq_x_n(a, 13, p);577#else /* POLYMORPHIC */578 return vshlq_x_n_s32(a, 13, p);579#endif /* POLYMORPHIC */580}581 582// CHECK-LABEL: @test_vshlq_x_n_u8(583// CHECK-NEXT: entry:584// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32585// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])586// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.shl.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 4, <16 x i1> [[TMP1]], <16 x i8> undef)587// CHECK-NEXT: ret <16 x i8> [[TMP2]]588//589uint8x16_t test_vshlq_x_n_u8(uint8x16_t a, mve_pred16_t p)590{591#ifdef POLYMORPHIC592 return vshlq_x_n(a, 4, p);593#else /* POLYMORPHIC */594 return vshlq_x_n_u8(a, 4, p);595#endif /* POLYMORPHIC */596}597 598// CHECK-LABEL: @test_vshlq_x_n_u16(599// CHECK-NEXT: entry:600// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32601// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])602// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.shl.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 10, <8 x i1> [[TMP1]], <8 x i16> undef)603// CHECK-NEXT: ret <8 x i16> [[TMP2]]604//605uint16x8_t test_vshlq_x_n_u16(uint16x8_t a, mve_pred16_t p)606{607#ifdef POLYMORPHIC608 return vshlq_x_n(a, 10, p);609#else /* POLYMORPHIC */610 return vshlq_x_n_u16(a, 10, p);611#endif /* POLYMORPHIC */612}613 614// CHECK-LABEL: @test_vshlq_x_n_u32(615// CHECK-NEXT: entry:616// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32617// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])618// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.shl.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 30, <4 x i1> [[TMP1]], <4 x i32> undef)619// CHECK-NEXT: ret <4 x i32> [[TMP2]]620//621uint32x4_t test_vshlq_x_n_u32(uint32x4_t a, mve_pred16_t p)622{623#ifdef POLYMORPHIC624 return vshlq_x_n(a, 30, p);625#else /* POLYMORPHIC */626 return vshlq_x_n_u32(a, 30, p);627#endif /* POLYMORPHIC */628}629 630// CHECK-LABEL: @test_vshrq_x_n_s8(631// CHECK-NEXT: entry:632// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32633// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])634// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.shr.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 4, i32 0, <16 x i1> [[TMP1]], <16 x i8> undef)635// CHECK-NEXT: ret <16 x i8> [[TMP2]]636//637int8x16_t test_vshrq_x_n_s8(int8x16_t a, mve_pred16_t p)638{639#ifdef POLYMORPHIC640 return vshrq_x(a, 4, p);641#else /* POLYMORPHIC */642 return vshrq_x_n_s8(a, 4, p);643#endif /* POLYMORPHIC */644}645 646// CHECK-LABEL: @test_vshrq_x_n_s16(647// CHECK-NEXT: entry:648// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32649// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])650// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.shr.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 10, i32 0, <8 x i1> [[TMP1]], <8 x i16> undef)651// CHECK-NEXT: ret <8 x i16> [[TMP2]]652//653int16x8_t test_vshrq_x_n_s16(int16x8_t a, mve_pred16_t p)654{655#ifdef POLYMORPHIC656 return vshrq_x(a, 10, p);657#else /* POLYMORPHIC */658 return vshrq_x_n_s16(a, 10, p);659#endif /* POLYMORPHIC */660}661 662// CHECK-LABEL: @test_vshrq_x_n_s32(663// CHECK-NEXT: entry:664// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32665// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])666// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.shr.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 7, i32 0, <4 x i1> [[TMP1]], <4 x i32> undef)667// CHECK-NEXT: ret <4 x i32> [[TMP2]]668//669int32x4_t test_vshrq_x_n_s32(int32x4_t a, mve_pred16_t p)670{671#ifdef POLYMORPHIC672 return vshrq_x(a, 7, p);673#else /* POLYMORPHIC */674 return vshrq_x_n_s32(a, 7, p);675#endif /* POLYMORPHIC */676}677 678// CHECK-LABEL: @test_vshrq_x_n_u8(679// CHECK-NEXT: entry:680// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32681// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])682// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.shr.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 7, i32 1, <16 x i1> [[TMP1]], <16 x i8> undef)683// CHECK-NEXT: ret <16 x i8> [[TMP2]]684//685uint8x16_t test_vshrq_x_n_u8(uint8x16_t a, mve_pred16_t p)686{687#ifdef POLYMORPHIC688 return vshrq_x(a, 7, p);689#else /* POLYMORPHIC */690 return vshrq_x_n_u8(a, 7, p);691#endif /* POLYMORPHIC */692}693 694// CHECK-LABEL: @test_vshrq_x_n_u16(695// CHECK-NEXT: entry:696// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32697// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])698// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.shr.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 7, i32 1, <8 x i1> [[TMP1]], <8 x i16> undef)699// CHECK-NEXT: ret <8 x i16> [[TMP2]]700//701uint16x8_t test_vshrq_x_n_u16(uint16x8_t a, mve_pred16_t p)702{703#ifdef POLYMORPHIC704 return vshrq_x(a, 7, p);705#else /* POLYMORPHIC */706 return vshrq_x_n_u16(a, 7, p);707#endif /* POLYMORPHIC */708}709 710// CHECK-LABEL: @test_vshrq_x_n_u32(711// CHECK-NEXT: entry:712// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32713// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])714// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.shr.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 6, i32 1, <4 x i1> [[TMP1]], <4 x i32> undef)715// CHECK-NEXT: ret <4 x i32> [[TMP2]]716//717uint32x4_t test_vshrq_x_n_u32(uint32x4_t a, mve_pred16_t p)718{719#ifdef POLYMORPHIC720 return vshrq_x(a, 6, p);721#else /* POLYMORPHIC */722 return vshrq_x_n_u32(a, 6, p);723#endif /* POLYMORPHIC */724}725 726// CHECK-LABEL: @test_vqshlq_n_s8(727// CHECK-NEXT: entry:728// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vqshl.imm.v16i8(<16 x i8> [[A:%.*]], i32 3, i32 0)729// CHECK-NEXT: ret <16 x i8> [[TMP0]]730//731int8x16_t test_vqshlq_n_s8(int8x16_t a)732{733#ifdef POLYMORPHIC734 return vqshlq_n(a, 3);735#else /* POLYMORPHIC */736 return vqshlq_n_s8(a, 3);737#endif /* POLYMORPHIC */738}739 740// CHECK-LABEL: @test_vqshlq_n_s16(741// CHECK-NEXT: entry:742// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vqshl.imm.v8i16(<8 x i16> [[A:%.*]], i32 4, i32 0)743// CHECK-NEXT: ret <8 x i16> [[TMP0]]744//745int16x8_t test_vqshlq_n_s16(int16x8_t a)746{747#ifdef POLYMORPHIC748 return vqshlq_n(a, 4);749#else /* POLYMORPHIC */750 return vqshlq_n_s16(a, 4);751#endif /* POLYMORPHIC */752}753 754// CHECK-LABEL: @test_vqshlq_n_s32(755// CHECK-NEXT: entry:756// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vqshl.imm.v4i32(<4 x i32> [[A:%.*]], i32 4, i32 0)757// CHECK-NEXT: ret <4 x i32> [[TMP0]]758//759int32x4_t test_vqshlq_n_s32(int32x4_t a)760{761#ifdef POLYMORPHIC762 return vqshlq_n(a, 4);763#else /* POLYMORPHIC */764 return vqshlq_n_s32(a, 4);765#endif /* POLYMORPHIC */766}767 768// CHECK-LABEL: @test_vqshlq_n_u8(769// CHECK-NEXT: entry:770// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vqshl.imm.v16i8(<16 x i8> [[A:%.*]], i32 0, i32 1)771// CHECK-NEXT: ret <16 x i8> [[TMP0]]772//773uint8x16_t test_vqshlq_n_u8(uint8x16_t a)774{775#ifdef POLYMORPHIC776 return vqshlq_n(a, 0);777#else /* POLYMORPHIC */778 return vqshlq_n_u8(a, 0);779#endif /* POLYMORPHIC */780}781 782// CHECK-LABEL: @test_vqshlq_n_u16(783// CHECK-NEXT: entry:784// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vqshl.imm.v8i16(<8 x i16> [[A:%.*]], i32 13, i32 1)785// CHECK-NEXT: ret <8 x i16> [[TMP0]]786//787uint16x8_t test_vqshlq_n_u16(uint16x8_t a)788{789#ifdef POLYMORPHIC790 return vqshlq_n(a, 13);791#else /* POLYMORPHIC */792 return vqshlq_n_u16(a, 13);793#endif /* POLYMORPHIC */794}795 796// CHECK-LABEL: @test_vqshlq_n_u32(797// CHECK-NEXT: entry:798// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vqshl.imm.v4i32(<4 x i32> [[A:%.*]], i32 6, i32 1)799// CHECK-NEXT: ret <4 x i32> [[TMP0]]800//801uint32x4_t test_vqshlq_n_u32(uint32x4_t a)802{803#ifdef POLYMORPHIC804 return vqshlq_n(a, 6);805#else /* POLYMORPHIC */806 return vqshlq_n_u32(a, 6);807#endif /* POLYMORPHIC */808}809 810// CHECK-LABEL: @test_vqshluq_n_s8(811// CHECK-NEXT: entry:812// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vqshlu.imm.v16i8(<16 x i8> [[A:%.*]], i32 5)813// CHECK-NEXT: ret <16 x i8> [[TMP0]]814//815uint8x16_t test_vqshluq_n_s8(int8x16_t a)816{817#ifdef POLYMORPHIC818 return vqshluq(a, 5);819#else /* POLYMORPHIC */820 return vqshluq_n_s8(a, 5);821#endif /* POLYMORPHIC */822}823 824// CHECK-LABEL: @test_vqshluq_n_s16(825// CHECK-NEXT: entry:826// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vqshlu.imm.v8i16(<8 x i16> [[A:%.*]], i32 5)827// CHECK-NEXT: ret <8 x i16> [[TMP0]]828//829uint16x8_t test_vqshluq_n_s16(int16x8_t a)830{831#ifdef POLYMORPHIC832 return vqshluq(a, 5);833#else /* POLYMORPHIC */834 return vqshluq_n_s16(a, 5);835#endif /* POLYMORPHIC */836}837 838// CHECK-LABEL: @test_vqshluq_n_s32(839// CHECK-NEXT: entry:840// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vqshlu.imm.v4i32(<4 x i32> [[A:%.*]], i32 4)841// CHECK-NEXT: ret <4 x i32> [[TMP0]]842//843uint32x4_t test_vqshluq_n_s32(int32x4_t a)844{845#ifdef POLYMORPHIC846 return vqshluq(a, 4);847#else /* POLYMORPHIC */848 return vqshluq_n_s32(a, 4);849#endif /* POLYMORPHIC */850}851 852// CHECK-LABEL: @test_vrshrq_n_s8(853// CHECK-NEXT: entry:854// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vrshr.imm.v16i8(<16 x i8> [[A:%.*]], i32 4, i32 0)855// CHECK-NEXT: ret <16 x i8> [[TMP0]]856//857int8x16_t test_vrshrq_n_s8(int8x16_t a)858{859#ifdef POLYMORPHIC860 return vrshrq(a, 4);861#else /* POLYMORPHIC */862 return vrshrq_n_s8(a, 4);863#endif /* POLYMORPHIC */864}865 866// CHECK-LABEL: @test_vrshrq_n_s16(867// CHECK-NEXT: entry:868// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vrshr.imm.v8i16(<8 x i16> [[A:%.*]], i32 12, i32 0)869// CHECK-NEXT: ret <8 x i16> [[TMP0]]870//871int16x8_t test_vrshrq_n_s16(int16x8_t a)872{873#ifdef POLYMORPHIC874 return vrshrq(a, 12);875#else /* POLYMORPHIC */876 return vrshrq_n_s16(a, 12);877#endif /* POLYMORPHIC */878}879 880// CHECK-LABEL: @test_vrshrq_n_s32(881// CHECK-NEXT: entry:882// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vrshr.imm.v4i32(<4 x i32> [[A:%.*]], i32 30, i32 0)883// CHECK-NEXT: ret <4 x i32> [[TMP0]]884//885int32x4_t test_vrshrq_n_s32(int32x4_t a)886{887#ifdef POLYMORPHIC888 return vrshrq(a, 30);889#else /* POLYMORPHIC */890 return vrshrq_n_s32(a, 30);891#endif /* POLYMORPHIC */892}893 894// CHECK-LABEL: @test_vrshrq_n_u8(895// CHECK-NEXT: entry:896// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vrshr.imm.v16i8(<16 x i8> [[A:%.*]], i32 1, i32 1)897// CHECK-NEXT: ret <16 x i8> [[TMP0]]898//899uint8x16_t test_vrshrq_n_u8(uint8x16_t a)900{901#ifdef POLYMORPHIC902 return vrshrq(a, 1);903#else /* POLYMORPHIC */904 return vrshrq_n_u8(a, 1);905#endif /* POLYMORPHIC */906}907 908// CHECK-LABEL: @test_vrshrq_n_u16(909// CHECK-NEXT: entry:910// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vrshr.imm.v8i16(<8 x i16> [[A:%.*]], i32 15, i32 1)911// CHECK-NEXT: ret <8 x i16> [[TMP0]]912//913uint16x8_t test_vrshrq_n_u16(uint16x8_t a)914{915#ifdef POLYMORPHIC916 return vrshrq(a, 15);917#else /* POLYMORPHIC */918 return vrshrq_n_u16(a, 15);919#endif /* POLYMORPHIC */920}921 922// CHECK-LABEL: @test_vrshrq_n_u32(923// CHECK-NEXT: entry:924// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vrshr.imm.v4i32(<4 x i32> [[A:%.*]], i32 20, i32 1)925// CHECK-NEXT: ret <4 x i32> [[TMP0]]926//927uint32x4_t test_vrshrq_n_u32(uint32x4_t a)928{929#ifdef POLYMORPHIC930 return vrshrq(a, 20);931#else /* POLYMORPHIC */932 return vrshrq_n_u32(a, 20);933#endif /* POLYMORPHIC */934}935 936// CHECK-LABEL: @test_vqshlq_m_n_s8(937// CHECK-NEXT: entry:938// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32939// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])940// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vqshl.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 6, i32 0, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])941// CHECK-NEXT: ret <16 x i8> [[TMP2]]942//943int8x16_t test_vqshlq_m_n_s8(int8x16_t inactive, int8x16_t a, mve_pred16_t p)944{945#ifdef POLYMORPHIC946 return vqshlq_m_n(inactive, a, 6, p);947#else /* POLYMORPHIC */948 return vqshlq_m_n_s8(inactive, a, 6, p);949#endif /* POLYMORPHIC */950}951 952// CHECK-LABEL: @test_vqshlq_m_n_s16(953// CHECK-NEXT: entry:954// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32955// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])956// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vqshl.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 13, i32 0, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])957// CHECK-NEXT: ret <8 x i16> [[TMP2]]958//959int16x8_t test_vqshlq_m_n_s16(int16x8_t inactive, int16x8_t a, mve_pred16_t p)960{961#ifdef POLYMORPHIC962 return vqshlq_m_n(inactive, a, 13, p);963#else /* POLYMORPHIC */964 return vqshlq_m_n_s16(inactive, a, 13, p);965#endif /* POLYMORPHIC */966}967 968// CHECK-LABEL: @test_vqshlq_m_n_s32(969// CHECK-NEXT: entry:970// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32971// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])972// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vqshl.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 14, i32 0, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])973// CHECK-NEXT: ret <4 x i32> [[TMP2]]974//975int32x4_t test_vqshlq_m_n_s32(int32x4_t inactive, int32x4_t a, mve_pred16_t p)976{977#ifdef POLYMORPHIC978 return vqshlq_m_n(inactive, a, 14, p);979#else /* POLYMORPHIC */980 return vqshlq_m_n_s32(inactive, a, 14, p);981#endif /* POLYMORPHIC */982}983 984// CHECK-LABEL: @test_vqshlq_m_n_u8(985// CHECK-NEXT: entry:986// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32987// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])988// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vqshl.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 4, i32 1, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])989// CHECK-NEXT: ret <16 x i8> [[TMP2]]990//991uint8x16_t test_vqshlq_m_n_u8(uint8x16_t inactive, uint8x16_t a, mve_pred16_t p)992{993#ifdef POLYMORPHIC994 return vqshlq_m_n(inactive, a, 4, p);995#else /* POLYMORPHIC */996 return vqshlq_m_n_u8(inactive, a, 4, p);997#endif /* POLYMORPHIC */998}999 1000// CHECK-LABEL: @test_vqshlq_m_n_u16(1001// CHECK-NEXT: entry:1002// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321003// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1004// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vqshl.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 9, i32 1, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])1005// CHECK-NEXT: ret <8 x i16> [[TMP2]]1006//1007uint16x8_t test_vqshlq_m_n_u16(uint16x8_t inactive, uint16x8_t a, mve_pred16_t p)1008{1009#ifdef POLYMORPHIC1010 return vqshlq_m_n(inactive, a, 9, p);1011#else /* POLYMORPHIC */1012 return vqshlq_m_n_u16(inactive, a, 9, p);1013#endif /* POLYMORPHIC */1014}1015 1016// CHECK-LABEL: @test_vqshlq_m_n_u32(1017// CHECK-NEXT: entry:1018// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321019// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1020// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vqshl.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 25, i32 1, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])1021// CHECK-NEXT: ret <4 x i32> [[TMP2]]1022//1023uint32x4_t test_vqshlq_m_n_u32(uint32x4_t inactive, uint32x4_t a, mve_pred16_t p)1024{1025#ifdef POLYMORPHIC1026 return vqshlq_m_n(inactive, a, 25, p);1027#else /* POLYMORPHIC */1028 return vqshlq_m_n_u32(inactive, a, 25, p);1029#endif /* POLYMORPHIC */1030}1031 1032// CHECK-LABEL: @test_vqshluq_m_n_s8(1033// CHECK-NEXT: entry:1034// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321035// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])1036// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vqshlu.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 2, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])1037// CHECK-NEXT: ret <16 x i8> [[TMP2]]1038//1039uint8x16_t test_vqshluq_m_n_s8(uint8x16_t inactive, int8x16_t a, mve_pred16_t p)1040{1041#ifdef POLYMORPHIC1042 return vqshluq_m(inactive, a, 2, p);1043#else /* POLYMORPHIC */1044 return vqshluq_m_n_s8(inactive, a, 2, p);1045#endif /* POLYMORPHIC */1046}1047 1048// CHECK-LABEL: @test_vqshluq_m_n_s16(1049// CHECK-NEXT: entry:1050// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321051// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1052// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vqshlu.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 12, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])1053// CHECK-NEXT: ret <8 x i16> [[TMP2]]1054//1055uint16x8_t test_vqshluq_m_n_s16(uint16x8_t inactive, int16x8_t a, mve_pred16_t p)1056{1057#ifdef POLYMORPHIC1058 return vqshluq_m(inactive, a, 12, p);1059#else /* POLYMORPHIC */1060 return vqshluq_m_n_s16(inactive, a, 12, p);1061#endif /* POLYMORPHIC */1062}1063 1064// CHECK-LABEL: @test_vqshluq_m_n_s32(1065// CHECK-NEXT: entry:1066// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321067// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1068// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vqshlu.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 24, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])1069// CHECK-NEXT: ret <4 x i32> [[TMP2]]1070//1071uint32x4_t test_vqshluq_m_n_s32(uint32x4_t inactive, int32x4_t a, mve_pred16_t p)1072{1073#ifdef POLYMORPHIC1074 return vqshluq_m(inactive, a, 24, p);1075#else /* POLYMORPHIC */1076 return vqshluq_m_n_s32(inactive, a, 24, p);1077#endif /* POLYMORPHIC */1078}1079 1080// CHECK-LABEL: @test_vrshrq_m_n_s8(1081// CHECK-NEXT: entry:1082// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321083// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])1084// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vrshr.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 2, i32 0, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])1085// CHECK-NEXT: ret <16 x i8> [[TMP2]]1086//1087int8x16_t test_vrshrq_m_n_s8(int8x16_t inactive, int8x16_t a, mve_pred16_t p)1088{1089#ifdef POLYMORPHIC1090 return vrshrq_m(inactive, a, 2, p);1091#else /* POLYMORPHIC */1092 return vrshrq_m_n_s8(inactive, a, 2, p);1093#endif /* POLYMORPHIC */1094}1095 1096// CHECK-LABEL: @test_vrshrq_m_n_s16(1097// CHECK-NEXT: entry:1098// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321099// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1100// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vrshr.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 11, i32 0, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])1101// CHECK-NEXT: ret <8 x i16> [[TMP2]]1102//1103int16x8_t test_vrshrq_m_n_s16(int16x8_t inactive, int16x8_t a, mve_pred16_t p)1104{1105#ifdef POLYMORPHIC1106 return vrshrq_m(inactive, a, 11, p);1107#else /* POLYMORPHIC */1108 return vrshrq_m_n_s16(inactive, a, 11, p);1109#endif /* POLYMORPHIC */1110}1111 1112// CHECK-LABEL: @test_vrshrq_m_n_s32(1113// CHECK-NEXT: entry:1114// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321115// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1116// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vrshr.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 24, i32 0, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])1117// CHECK-NEXT: ret <4 x i32> [[TMP2]]1118//1119int32x4_t test_vrshrq_m_n_s32(int32x4_t inactive, int32x4_t a, mve_pred16_t p)1120{1121#ifdef POLYMORPHIC1122 return vrshrq_m(inactive, a, 24, p);1123#else /* POLYMORPHIC */1124 return vrshrq_m_n_s32(inactive, a, 24, p);1125#endif /* POLYMORPHIC */1126}1127 1128// CHECK-LABEL: @test_vrshrq_m_n_u8(1129// CHECK-NEXT: entry:1130// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321131// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])1132// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vrshr.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 7, i32 1, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])1133// CHECK-NEXT: ret <16 x i8> [[TMP2]]1134//1135uint8x16_t test_vrshrq_m_n_u8(uint8x16_t inactive, uint8x16_t a, mve_pred16_t p)1136{1137#ifdef POLYMORPHIC1138 return vrshrq_m(inactive, a, 7, p);1139#else /* POLYMORPHIC */1140 return vrshrq_m_n_u8(inactive, a, 7, p);1141#endif /* POLYMORPHIC */1142}1143 1144// CHECK-LABEL: @test_vrshrq_m_n_u16(1145// CHECK-NEXT: entry:1146// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321147// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1148// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vrshr.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 4, i32 1, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])1149// CHECK-NEXT: ret <8 x i16> [[TMP2]]1150//1151uint16x8_t test_vrshrq_m_n_u16(uint16x8_t inactive, uint16x8_t a, mve_pred16_t p)1152{1153#ifdef POLYMORPHIC1154 return vrshrq_m(inactive, a, 4, p);1155#else /* POLYMORPHIC */1156 return vrshrq_m_n_u16(inactive, a, 4, p);1157#endif /* POLYMORPHIC */1158}1159 1160// CHECK-LABEL: @test_vrshrq_m_n_u32(1161// CHECK-NEXT: entry:1162// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321163// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1164// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vrshr.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 27, i32 1, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])1165// CHECK-NEXT: ret <4 x i32> [[TMP2]]1166//1167uint32x4_t test_vrshrq_m_n_u32(uint32x4_t inactive, uint32x4_t a, mve_pred16_t p)1168{1169#ifdef POLYMORPHIC1170 return vrshrq_m(inactive, a, 27, p);1171#else /* POLYMORPHIC */1172 return vrshrq_m_n_u32(inactive, a, 27, p);1173#endif /* POLYMORPHIC */1174}1175 1176// CHECK-LABEL: @test_vrshrq_x_n_s8(1177// CHECK-NEXT: entry:1178// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321179// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])1180// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vrshr.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 3, i32 0, <16 x i1> [[TMP1]], <16 x i8> undef)1181// CHECK-NEXT: ret <16 x i8> [[TMP2]]1182//1183int8x16_t test_vrshrq_x_n_s8(int8x16_t a, mve_pred16_t p)1184{1185#ifdef POLYMORPHIC1186 return vrshrq_x(a, 3, p);1187#else /* POLYMORPHIC */1188 return vrshrq_x_n_s8(a, 3, p);1189#endif /* POLYMORPHIC */1190}1191 1192// CHECK-LABEL: @test_vrshrq_x_n_s16(1193// CHECK-NEXT: entry:1194// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321195// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1196// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vrshr.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 12, i32 0, <8 x i1> [[TMP1]], <8 x i16> undef)1197// CHECK-NEXT: ret <8 x i16> [[TMP2]]1198//1199int16x8_t test_vrshrq_x_n_s16(int16x8_t a, mve_pred16_t p)1200{1201#ifdef POLYMORPHIC1202 return vrshrq_x(a, 12, p);1203#else /* POLYMORPHIC */1204 return vrshrq_x_n_s16(a, 12, p);1205#endif /* POLYMORPHIC */1206}1207 1208// CHECK-LABEL: @test_vrshrq_x_n_s32(1209// CHECK-NEXT: entry:1210// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321211// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1212// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vrshr.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 20, i32 0, <4 x i1> [[TMP1]], <4 x i32> undef)1213// CHECK-NEXT: ret <4 x i32> [[TMP2]]1214//1215int32x4_t test_vrshrq_x_n_s32(int32x4_t a, mve_pred16_t p)1216{1217#ifdef POLYMORPHIC1218 return vrshrq_x(a, 20, p);1219#else /* POLYMORPHIC */1220 return vrshrq_x_n_s32(a, 20, p);1221#endif /* POLYMORPHIC */1222}1223 1224// CHECK-LABEL: @test_vrshrq_x_n_u8(1225// CHECK-NEXT: entry:1226// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321227// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])1228// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vrshr.imm.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 1, i32 1, <16 x i1> [[TMP1]], <16 x i8> undef)1229// CHECK-NEXT: ret <16 x i8> [[TMP2]]1230//1231uint8x16_t test_vrshrq_x_n_u8(uint8x16_t a, mve_pred16_t p)1232{1233#ifdef POLYMORPHIC1234 return vrshrq_x(a, 1, p);1235#else /* POLYMORPHIC */1236 return vrshrq_x_n_u8(a, 1, p);1237#endif /* POLYMORPHIC */1238}1239 1240// CHECK-LABEL: @test_vrshrq_x_n_u16(1241// CHECK-NEXT: entry:1242// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321243// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1244// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vrshr.imm.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 13, i32 1, <8 x i1> [[TMP1]], <8 x i16> undef)1245// CHECK-NEXT: ret <8 x i16> [[TMP2]]1246//1247uint16x8_t test_vrshrq_x_n_u16(uint16x8_t a, mve_pred16_t p)1248{1249#ifdef POLYMORPHIC1250 return vrshrq_x(a, 13, p);1251#else /* POLYMORPHIC */1252 return vrshrq_x_n_u16(a, 13, p);1253#endif /* POLYMORPHIC */1254}1255 1256// CHECK-LABEL: @test_vrshrq_x_n_u32(1257// CHECK-NEXT: entry:1258// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321259// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1260// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vrshr.imm.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 6, i32 1, <4 x i1> [[TMP1]], <4 x i32> undef)1261// CHECK-NEXT: ret <4 x i32> [[TMP2]]1262//1263uint32x4_t test_vrshrq_x_n_u32(uint32x4_t a, mve_pred16_t p)1264{1265#ifdef POLYMORPHIC1266 return vrshrq_x(a, 6, p);1267#else /* POLYMORPHIC */1268 return vrshrq_x_n_u32(a, 6, p);1269#endif /* POLYMORPHIC */1270}1271 1272// CHECK-LABEL: @test_vshllbq_n_s8(1273// CHECK-NEXT: entry:1274// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.v8i16.v16i8(<16 x i8> [[A:%.*]], i32 2, i32 0, i32 0)1275// CHECK-NEXT: ret <8 x i16> [[TMP0]]1276//1277int16x8_t test_vshllbq_n_s8(int8x16_t a)1278{1279#ifdef POLYMORPHIC1280 return vshllbq(a, 2);1281#else /* POLYMORPHIC */1282 return vshllbq_n_s8(a, 2);1283#endif /* POLYMORPHIC */1284}1285 1286// CHECK-LABEL: @test_vshllbq_n_s16(1287// CHECK-NEXT: entry:1288// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.v4i32.v8i16(<8 x i16> [[A:%.*]], i32 13, i32 0, i32 0)1289// CHECK-NEXT: ret <4 x i32> [[TMP0]]1290//1291int32x4_t test_vshllbq_n_s16(int16x8_t a)1292{1293#ifdef POLYMORPHIC1294 return vshllbq(a, 13);1295#else /* POLYMORPHIC */1296 return vshllbq_n_s16(a, 13);1297#endif /* POLYMORPHIC */1298}1299 1300// CHECK-LABEL: @test_vshllbq_n_u8(1301// CHECK-NEXT: entry:1302// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.v8i16.v16i8(<16 x i8> [[A:%.*]], i32 5, i32 1, i32 0)1303// CHECK-NEXT: ret <8 x i16> [[TMP0]]1304//1305uint16x8_t test_vshllbq_n_u8(uint8x16_t a)1306{1307#ifdef POLYMORPHIC1308 return vshllbq(a, 5);1309#else /* POLYMORPHIC */1310 return vshllbq_n_u8(a, 5);1311#endif /* POLYMORPHIC */1312}1313 1314// CHECK-LABEL: @test_vshllbq_n_u16(1315// CHECK-NEXT: entry:1316// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.v4i32.v8i16(<8 x i16> [[A:%.*]], i32 6, i32 1, i32 0)1317// CHECK-NEXT: ret <4 x i32> [[TMP0]]1318//1319uint32x4_t test_vshllbq_n_u16(uint16x8_t a)1320{1321#ifdef POLYMORPHIC1322 return vshllbq(a, 6);1323#else /* POLYMORPHIC */1324 return vshllbq_n_u16(a, 6);1325#endif /* POLYMORPHIC */1326}1327 1328// CHECK-LABEL: @test_vshlltq_n_s8(1329// CHECK-NEXT: entry:1330// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.v8i16.v16i8(<16 x i8> [[A:%.*]], i32 7, i32 0, i32 1)1331// CHECK-NEXT: ret <8 x i16> [[TMP0]]1332//1333int16x8_t test_vshlltq_n_s8(int8x16_t a)1334{1335#ifdef POLYMORPHIC1336 return vshlltq(a, 7);1337#else /* POLYMORPHIC */1338 return vshlltq_n_s8(a, 7);1339#endif /* POLYMORPHIC */1340}1341 1342// CHECK-LABEL: @test_vshlltq_n_s16(1343// CHECK-NEXT: entry:1344// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.v4i32.v8i16(<8 x i16> [[A:%.*]], i32 2, i32 0, i32 1)1345// CHECK-NEXT: ret <4 x i32> [[TMP0]]1346//1347int32x4_t test_vshlltq_n_s16(int16x8_t a)1348{1349#ifdef POLYMORPHIC1350 return vshlltq(a, 2);1351#else /* POLYMORPHIC */1352 return vshlltq_n_s16(a, 2);1353#endif /* POLYMORPHIC */1354}1355 1356// CHECK-LABEL: @test_vshlltq_n_u8(1357// CHECK-NEXT: entry:1358// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.v8i16.v16i8(<16 x i8> [[A:%.*]], i32 7, i32 1, i32 1)1359// CHECK-NEXT: ret <8 x i16> [[TMP0]]1360//1361uint16x8_t test_vshlltq_n_u8(uint8x16_t a)1362{1363#ifdef POLYMORPHIC1364 return vshlltq(a, 7);1365#else /* POLYMORPHIC */1366 return vshlltq_n_u8(a, 7);1367#endif /* POLYMORPHIC */1368}1369 1370// CHECK-LABEL: @test_vshlltq_n_u16(1371// CHECK-NEXT: entry:1372// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.v4i32.v8i16(<8 x i16> [[A:%.*]], i32 14, i32 1, i32 1)1373// CHECK-NEXT: ret <4 x i32> [[TMP0]]1374//1375uint32x4_t test_vshlltq_n_u16(uint16x8_t a)1376{1377#ifdef POLYMORPHIC1378 return vshlltq(a, 14);1379#else /* POLYMORPHIC */1380 return vshlltq_n_u16(a, 14);1381#endif /* POLYMORPHIC */1382}1383 1384// CHECK-LABEL: @test_vshllbq_m_n_s8(1385// CHECK-NEXT: entry:1386// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321387// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1388// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.predicated.v8i16.v16i8.v8i1(<16 x i8> [[A:%.*]], i32 6, i32 0, i32 0, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])1389// CHECK-NEXT: ret <8 x i16> [[TMP2]]1390//1391int16x8_t test_vshllbq_m_n_s8(int16x8_t inactive, int8x16_t a, mve_pred16_t p)1392{1393#ifdef POLYMORPHIC1394 return vshllbq_m(inactive, a, 6, p);1395#else /* POLYMORPHIC */1396 return vshllbq_m_n_s8(inactive, a, 6, p);1397#endif /* POLYMORPHIC */1398}1399 1400// CHECK-LABEL: @test_vshllbq_m_n_s16(1401// CHECK-NEXT: entry:1402// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321403// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1404// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.predicated.v4i32.v8i16.v4i1(<8 x i16> [[A:%.*]], i32 10, i32 0, i32 0, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])1405// CHECK-NEXT: ret <4 x i32> [[TMP2]]1406//1407int32x4_t test_vshllbq_m_n_s16(int32x4_t inactive, int16x8_t a, mve_pred16_t p)1408{1409#ifdef POLYMORPHIC1410 return vshllbq_m(inactive, a, 10, p);1411#else /* POLYMORPHIC */1412 return vshllbq_m_n_s16(inactive, a, 10, p);1413#endif /* POLYMORPHIC */1414}1415 1416// CHECK-LABEL: @test_vshllbq_m_n_u8(1417// CHECK-NEXT: entry:1418// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321419// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1420// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.predicated.v8i16.v16i8.v8i1(<16 x i8> [[A:%.*]], i32 3, i32 1, i32 0, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])1421// CHECK-NEXT: ret <8 x i16> [[TMP2]]1422//1423uint16x8_t test_vshllbq_m_n_u8(uint16x8_t inactive, uint8x16_t a, mve_pred16_t p)1424{1425#ifdef POLYMORPHIC1426 return vshllbq_m(inactive, a, 3, p);1427#else /* POLYMORPHIC */1428 return vshllbq_m_n_u8(inactive, a, 3, p);1429#endif /* POLYMORPHIC */1430}1431 1432// CHECK-LABEL: @test_vshllbq_m_n_u16(1433// CHECK-NEXT: entry:1434// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321435// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1436// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.predicated.v4i32.v8i16.v4i1(<8 x i16> [[A:%.*]], i32 14, i32 1, i32 0, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])1437// CHECK-NEXT: ret <4 x i32> [[TMP2]]1438//1439uint32x4_t test_vshllbq_m_n_u16(uint32x4_t inactive, uint16x8_t a, mve_pred16_t p)1440{1441#ifdef POLYMORPHIC1442 return vshllbq_m(inactive, a, 14, p);1443#else /* POLYMORPHIC */1444 return vshllbq_m_n_u16(inactive, a, 14, p);1445#endif /* POLYMORPHIC */1446}1447 1448// CHECK-LABEL: @test_vshlltq_m_n_s8(1449// CHECK-NEXT: entry:1450// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321451// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1452// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.predicated.v8i16.v16i8.v8i1(<16 x i8> [[A:%.*]], i32 4, i32 0, i32 1, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])1453// CHECK-NEXT: ret <8 x i16> [[TMP2]]1454//1455int16x8_t test_vshlltq_m_n_s8(int16x8_t inactive, int8x16_t a, mve_pred16_t p)1456{1457#ifdef POLYMORPHIC1458 return vshlltq_m(inactive, a, 4, p);1459#else /* POLYMORPHIC */1460 return vshlltq_m_n_s8(inactive, a, 4, p);1461#endif /* POLYMORPHIC */1462}1463 1464// CHECK-LABEL: @test_vshlltq_m_n_s16(1465// CHECK-NEXT: entry:1466// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321467// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1468// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.predicated.v4i32.v8i16.v4i1(<8 x i16> [[A:%.*]], i32 12, i32 0, i32 1, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])1469// CHECK-NEXT: ret <4 x i32> [[TMP2]]1470//1471int32x4_t test_vshlltq_m_n_s16(int32x4_t inactive, int16x8_t a, mve_pred16_t p)1472{1473#ifdef POLYMORPHIC1474 return vshlltq_m(inactive, a, 12, p);1475#else /* POLYMORPHIC */1476 return vshlltq_m_n_s16(inactive, a, 12, p);1477#endif /* POLYMORPHIC */1478}1479 1480// CHECK-LABEL: @test_vshlltq_m_n_u8(1481// CHECK-NEXT: entry:1482// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321483// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1484// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.predicated.v8i16.v16i8.v8i1(<16 x i8> [[A:%.*]], i32 2, i32 1, i32 1, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])1485// CHECK-NEXT: ret <8 x i16> [[TMP2]]1486//1487uint16x8_t test_vshlltq_m_n_u8(uint16x8_t inactive, uint8x16_t a, mve_pred16_t p)1488{1489#ifdef POLYMORPHIC1490 return vshlltq_m(inactive, a, 2, p);1491#else /* POLYMORPHIC */1492 return vshlltq_m_n_u8(inactive, a, 2, p);1493#endif /* POLYMORPHIC */1494}1495 1496// CHECK-LABEL: @test_vshlltq_m_n_u16(1497// CHECK-NEXT: entry:1498// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321499// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1500// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.predicated.v4i32.v8i16.v4i1(<8 x i16> [[A:%.*]], i32 9, i32 1, i32 1, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])1501// CHECK-NEXT: ret <4 x i32> [[TMP2]]1502//1503uint32x4_t test_vshlltq_m_n_u16(uint32x4_t inactive, uint16x8_t a, mve_pred16_t p)1504{1505#ifdef POLYMORPHIC1506 return vshlltq_m(inactive, a, 9, p);1507#else /* POLYMORPHIC */1508 return vshlltq_m_n_u16(inactive, a, 9, p);1509#endif /* POLYMORPHIC */1510}1511 1512// CHECK-LABEL: @test_vshllbq_x_n_s8(1513// CHECK-NEXT: entry:1514// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321515// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1516// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.predicated.v8i16.v16i8.v8i1(<16 x i8> [[A:%.*]], i32 1, i32 0, i32 0, <8 x i1> [[TMP1]], <8 x i16> undef)1517// CHECK-NEXT: ret <8 x i16> [[TMP2]]1518//1519int16x8_t test_vshllbq_x_n_s8(int8x16_t a, mve_pred16_t p)1520{1521#ifdef POLYMORPHIC1522 return vshllbq_x(a, 1, p);1523#else /* POLYMORPHIC */1524 return vshllbq_x_n_s8(a, 1, p);1525#endif /* POLYMORPHIC */1526}1527 1528// CHECK-LABEL: @test_vshllbq_x_n_s16(1529// CHECK-NEXT: entry:1530// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321531// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1532// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.predicated.v4i32.v8i16.v4i1(<8 x i16> [[A:%.*]], i32 10, i32 0, i32 0, <4 x i1> [[TMP1]], <4 x i32> undef)1533// CHECK-NEXT: ret <4 x i32> [[TMP2]]1534//1535int32x4_t test_vshllbq_x_n_s16(int16x8_t a, mve_pred16_t p)1536{1537#ifdef POLYMORPHIC1538 return vshllbq_x(a, 10, p);1539#else /* POLYMORPHIC */1540 return vshllbq_x_n_s16(a, 10, p);1541#endif /* POLYMORPHIC */1542}1543 1544// CHECK-LABEL: @test_vshllbq_x_n_u8(1545// CHECK-NEXT: entry:1546// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321547// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1548// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.predicated.v8i16.v16i8.v8i1(<16 x i8> [[A:%.*]], i32 6, i32 1, i32 0, <8 x i1> [[TMP1]], <8 x i16> undef)1549// CHECK-NEXT: ret <8 x i16> [[TMP2]]1550//1551uint16x8_t test_vshllbq_x_n_u8(uint8x16_t a, mve_pred16_t p)1552{1553#ifdef POLYMORPHIC1554 return vshllbq_x(a, 6, p);1555#else /* POLYMORPHIC */1556 return vshllbq_x_n_u8(a, 6, p);1557#endif /* POLYMORPHIC */1558}1559 1560// CHECK-LABEL: @test_vshllbq_x_n_u16(1561// CHECK-NEXT: entry:1562// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321563// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1564// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.predicated.v4i32.v8i16.v4i1(<8 x i16> [[A:%.*]], i32 10, i32 1, i32 0, <4 x i1> [[TMP1]], <4 x i32> undef)1565// CHECK-NEXT: ret <4 x i32> [[TMP2]]1566//1567uint32x4_t test_vshllbq_x_n_u16(uint16x8_t a, mve_pred16_t p)1568{1569#ifdef POLYMORPHIC1570 return vshllbq_x(a, 10, p);1571#else /* POLYMORPHIC */1572 return vshllbq_x_n_u16(a, 10, p);1573#endif /* POLYMORPHIC */1574}1575 1576// CHECK-LABEL: @test_vshlltq_x_n_s8(1577// CHECK-NEXT: entry:1578// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321579// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1580// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.predicated.v8i16.v16i8.v8i1(<16 x i8> [[A:%.*]], i32 2, i32 0, i32 1, <8 x i1> [[TMP1]], <8 x i16> undef)1581// CHECK-NEXT: ret <8 x i16> [[TMP2]]1582//1583int16x8_t test_vshlltq_x_n_s8(int8x16_t a, mve_pred16_t p)1584{1585#ifdef POLYMORPHIC1586 return vshlltq_x(a, 2, p);1587#else /* POLYMORPHIC */1588 return vshlltq_x_n_s8(a, 2, p);1589#endif /* POLYMORPHIC */1590}1591 1592// CHECK-LABEL: @test_vshlltq_x_n_s16(1593// CHECK-NEXT: entry:1594// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321595// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1596// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.predicated.v4i32.v8i16.v4i1(<8 x i16> [[A:%.*]], i32 6, i32 0, i32 1, <4 x i1> [[TMP1]], <4 x i32> undef)1597// CHECK-NEXT: ret <4 x i32> [[TMP2]]1598//1599int32x4_t test_vshlltq_x_n_s16(int16x8_t a, mve_pred16_t p)1600{1601#ifdef POLYMORPHIC1602 return vshlltq_x(a, 6, p);1603#else /* POLYMORPHIC */1604 return vshlltq_x_n_s16(a, 6, p);1605#endif /* POLYMORPHIC */1606}1607 1608// CHECK-LABEL: @test_vshlltq_x_n_u8(1609// CHECK-NEXT: entry:1610// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321611// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1612// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshll.imm.predicated.v8i16.v16i8.v8i1(<16 x i8> [[A:%.*]], i32 5, i32 1, i32 1, <8 x i1> [[TMP1]], <8 x i16> undef)1613// CHECK-NEXT: ret <8 x i16> [[TMP2]]1614//1615uint16x8_t test_vshlltq_x_n_u8(uint8x16_t a, mve_pred16_t p)1616{1617#ifdef POLYMORPHIC1618 return vshlltq_x(a, 5, p);1619#else /* POLYMORPHIC */1620 return vshlltq_x_n_u8(a, 5, p);1621#endif /* POLYMORPHIC */1622}1623 1624// CHECK-LABEL: @test_vshlltq_x_n_u16(1625// CHECK-NEXT: entry:1626// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321627// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1628// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshll.imm.predicated.v4i32.v8i16.v4i1(<8 x i16> [[A:%.*]], i32 3, i32 1, i32 1, <4 x i1> [[TMP1]], <4 x i32> undef)1629// CHECK-NEXT: ret <4 x i32> [[TMP2]]1630//1631uint32x4_t test_vshlltq_x_n_u16(uint16x8_t a, mve_pred16_t p)1632{1633#ifdef POLYMORPHIC1634 return vshlltq_x(a, 3, p);1635#else /* POLYMORPHIC */1636 return vshlltq_x_n_u16(a, 3, p);1637#endif /* POLYMORPHIC */1638}1639 1640