1641 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 -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 -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_s8(10// CHECK-NEXT: entry:11// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.vector.v16i8.v16i8(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 0, i32 0, i32 0)12// CHECK-NEXT: ret <16 x i8> [[TMP0]]13//14int8x16_t test_vshlq_s8(int8x16_t a, int8x16_t b)15{16#ifdef POLYMORPHIC17 return vshlq(a, b);18#else /* POLYMORPHIC */19 return vshlq_s8(a, b);20#endif /* POLYMORPHIC */21}22 23// CHECK-LABEL: @test_vshlq_s16(24// CHECK-NEXT: entry:25// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.vector.v8i16.v8i16(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 0, i32 0)26// CHECK-NEXT: ret <8 x i16> [[TMP0]]27//28int16x8_t test_vshlq_s16(int16x8_t a, int16x8_t b)29{30#ifdef POLYMORPHIC31 return vshlq(a, b);32#else /* POLYMORPHIC */33 return vshlq_s16(a, b);34#endif /* POLYMORPHIC */35}36 37// CHECK-LABEL: @test_vshlq_s32(38// CHECK-NEXT: entry:39// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.vector.v4i32.v4i32(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 0, i32 0)40// CHECK-NEXT: ret <4 x i32> [[TMP0]]41//42int32x4_t test_vshlq_s32(int32x4_t a, int32x4_t b)43{44#ifdef POLYMORPHIC45 return vshlq(a, b);46#else /* POLYMORPHIC */47 return vshlq_s32(a, b);48#endif /* POLYMORPHIC */49}50 51// CHECK-LABEL: @test_vshlq_u8(52// CHECK-NEXT: entry:53// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.vector.v16i8.v16i8(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 0, i32 0, i32 1)54// CHECK-NEXT: ret <16 x i8> [[TMP0]]55//56uint8x16_t test_vshlq_u8(uint8x16_t a, int8x16_t b)57{58#ifdef POLYMORPHIC59 return vshlq(a, b);60#else /* POLYMORPHIC */61 return vshlq_u8(a, b);62#endif /* POLYMORPHIC */63}64 65// CHECK-LABEL: @test_vshlq_u16(66// CHECK-NEXT: entry:67// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.vector.v8i16.v8i16(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 0, i32 1)68// CHECK-NEXT: ret <8 x i16> [[TMP0]]69//70uint16x8_t test_vshlq_u16(uint16x8_t a, int16x8_t b)71{72#ifdef POLYMORPHIC73 return vshlq(a, b);74#else /* POLYMORPHIC */75 return vshlq_u16(a, b);76#endif /* POLYMORPHIC */77}78 79// CHECK-LABEL: @test_vshlq_u32(80// CHECK-NEXT: entry:81// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.vector.v4i32.v4i32(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 0, i32 1)82// CHECK-NEXT: ret <4 x i32> [[TMP0]]83//84uint32x4_t test_vshlq_u32(uint32x4_t a, int32x4_t b)85{86#ifdef POLYMORPHIC87 return vshlq(a, b);88#else /* POLYMORPHIC */89 return vshlq_u32(a, b);90#endif /* POLYMORPHIC */91}92 93// CHECK-LABEL: @test_vshlq_r_s8(94// CHECK-NEXT: entry:95// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.scalar.v16i8(<16 x i8> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 0, i32 0)96// CHECK-NEXT: ret <16 x i8> [[TMP0]]97//98int8x16_t test_vshlq_r_s8(int8x16_t a, int32_t b)99{100#ifdef POLYMORPHIC101 return vshlq_r(a, b);102#else /* POLYMORPHIC */103 return vshlq_r_s8(a, b);104#endif /* POLYMORPHIC */105}106 107// CHECK-LABEL: @test_vshlq_r_s16(108// CHECK-NEXT: entry:109// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.scalar.v8i16(<8 x i16> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 0, i32 0)110// CHECK-NEXT: ret <8 x i16> [[TMP0]]111//112int16x8_t test_vshlq_r_s16(int16x8_t a, int32_t b)113{114#ifdef POLYMORPHIC115 return vshlq_r(a, b);116#else /* POLYMORPHIC */117 return vshlq_r_s16(a, b);118#endif /* POLYMORPHIC */119}120 121// CHECK-LABEL: @test_vshlq_r_s32(122// CHECK-NEXT: entry:123// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.scalar.v4i32(<4 x i32> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 0, i32 0)124// CHECK-NEXT: ret <4 x i32> [[TMP0]]125//126int32x4_t test_vshlq_r_s32(int32x4_t a, int32_t b)127{128#ifdef POLYMORPHIC129 return vshlq_r(a, b);130#else /* POLYMORPHIC */131 return vshlq_r_s32(a, b);132#endif /* POLYMORPHIC */133}134 135// CHECK-LABEL: @test_vshlq_r_u8(136// CHECK-NEXT: entry:137// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.scalar.v16i8(<16 x i8> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 0, i32 1)138// CHECK-NEXT: ret <16 x i8> [[TMP0]]139//140uint8x16_t test_vshlq_r_u8(uint8x16_t a, int32_t b)141{142#ifdef POLYMORPHIC143 return vshlq_r(a, b);144#else /* POLYMORPHIC */145 return vshlq_r_u8(a, b);146#endif /* POLYMORPHIC */147}148 149// CHECK-LABEL: @test_vshlq_r_u16(150// CHECK-NEXT: entry:151// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.scalar.v8i16(<8 x i16> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 0, i32 1)152// CHECK-NEXT: ret <8 x i16> [[TMP0]]153//154uint16x8_t test_vshlq_r_u16(uint16x8_t a, int32_t b)155{156#ifdef POLYMORPHIC157 return vshlq_r(a, b);158#else /* POLYMORPHIC */159 return vshlq_r_u16(a, b);160#endif /* POLYMORPHIC */161}162 163// CHECK-LABEL: @test_vshlq_r_u32(164// CHECK-NEXT: entry:165// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.scalar.v4i32(<4 x i32> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 0, i32 1)166// CHECK-NEXT: ret <4 x i32> [[TMP0]]167//168uint32x4_t test_vshlq_r_u32(uint32x4_t a, int32_t b)169{170#ifdef POLYMORPHIC171 return vshlq_r(a, b);172#else /* POLYMORPHIC */173 return vshlq_r_u32(a, b);174#endif /* POLYMORPHIC */175}176 177// CHECK-LABEL: @test_vqshlq_s8(178// CHECK-NEXT: entry:179// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.vector.v16i8.v16i8(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 1, i32 0, i32 0)180// CHECK-NEXT: ret <16 x i8> [[TMP0]]181//182int8x16_t test_vqshlq_s8(int8x16_t a, int8x16_t b)183{184#ifdef POLYMORPHIC185 return vqshlq(a, b);186#else /* POLYMORPHIC */187 return vqshlq_s8(a, b);188#endif /* POLYMORPHIC */189}190 191// CHECK-LABEL: @test_vqshlq_s16(192// CHECK-NEXT: entry:193// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.vector.v8i16.v8i16(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 0, i32 0)194// CHECK-NEXT: ret <8 x i16> [[TMP0]]195//196int16x8_t test_vqshlq_s16(int16x8_t a, int16x8_t b)197{198#ifdef POLYMORPHIC199 return vqshlq(a, b);200#else /* POLYMORPHIC */201 return vqshlq_s16(a, b);202#endif /* POLYMORPHIC */203}204 205// CHECK-LABEL: @test_vqshlq_s32(206// CHECK-NEXT: entry:207// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.vector.v4i32.v4i32(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 0, i32 0)208// CHECK-NEXT: ret <4 x i32> [[TMP0]]209//210int32x4_t test_vqshlq_s32(int32x4_t a, int32x4_t b)211{212#ifdef POLYMORPHIC213 return vqshlq(a, b);214#else /* POLYMORPHIC */215 return vqshlq_s32(a, b);216#endif /* POLYMORPHIC */217}218 219// CHECK-LABEL: @test_vqshlq_u8(220// CHECK-NEXT: entry:221// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.vector.v16i8.v16i8(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 1, i32 0, i32 1)222// CHECK-NEXT: ret <16 x i8> [[TMP0]]223//224uint8x16_t test_vqshlq_u8(uint8x16_t a, int8x16_t b)225{226#ifdef POLYMORPHIC227 return vqshlq(a, b);228#else /* POLYMORPHIC */229 return vqshlq_u8(a, b);230#endif /* POLYMORPHIC */231}232 233// CHECK-LABEL: @test_vqshlq_u16(234// CHECK-NEXT: entry:235// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.vector.v8i16.v8i16(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 0, i32 1)236// CHECK-NEXT: ret <8 x i16> [[TMP0]]237//238uint16x8_t test_vqshlq_u16(uint16x8_t a, int16x8_t b)239{240#ifdef POLYMORPHIC241 return vqshlq(a, b);242#else /* POLYMORPHIC */243 return vqshlq_u16(a, b);244#endif /* POLYMORPHIC */245}246 247// CHECK-LABEL: @test_vqshlq_u32(248// CHECK-NEXT: entry:249// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.vector.v4i32.v4i32(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 0, i32 1)250// CHECK-NEXT: ret <4 x i32> [[TMP0]]251//252uint32x4_t test_vqshlq_u32(uint32x4_t a, int32x4_t b)253{254#ifdef POLYMORPHIC255 return vqshlq(a, b);256#else /* POLYMORPHIC */257 return vqshlq_u32(a, b);258#endif /* POLYMORPHIC */259}260 261// CHECK-LABEL: @test_vqshlq_r_s8(262// CHECK-NEXT: entry:263// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.scalar.v16i8(<16 x i8> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 0, i32 0)264// CHECK-NEXT: ret <16 x i8> [[TMP0]]265//266int8x16_t test_vqshlq_r_s8(int8x16_t a, int32_t b)267{268#ifdef POLYMORPHIC269 return vqshlq_r(a, b);270#else /* POLYMORPHIC */271 return vqshlq_r_s8(a, b);272#endif /* POLYMORPHIC */273}274 275// CHECK-LABEL: @test_vqshlq_r_s16(276// CHECK-NEXT: entry:277// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.scalar.v8i16(<8 x i16> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 0, i32 0)278// CHECK-NEXT: ret <8 x i16> [[TMP0]]279//280int16x8_t test_vqshlq_r_s16(int16x8_t a, int32_t b)281{282#ifdef POLYMORPHIC283 return vqshlq_r(a, b);284#else /* POLYMORPHIC */285 return vqshlq_r_s16(a, b);286#endif /* POLYMORPHIC */287}288 289// CHECK-LABEL: @test_vqshlq_r_s32(290// CHECK-NEXT: entry:291// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.scalar.v4i32(<4 x i32> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 0, i32 0)292// CHECK-NEXT: ret <4 x i32> [[TMP0]]293//294int32x4_t test_vqshlq_r_s32(int32x4_t a, int32_t b)295{296#ifdef POLYMORPHIC297 return vqshlq_r(a, b);298#else /* POLYMORPHIC */299 return vqshlq_r_s32(a, b);300#endif /* POLYMORPHIC */301}302 303// CHECK-LABEL: @test_vqshlq_r_u8(304// CHECK-NEXT: entry:305// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.scalar.v16i8(<16 x i8> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 0, i32 1)306// CHECK-NEXT: ret <16 x i8> [[TMP0]]307//308uint8x16_t test_vqshlq_r_u8(uint8x16_t a, int32_t b)309{310#ifdef POLYMORPHIC311 return vqshlq_r(a, b);312#else /* POLYMORPHIC */313 return vqshlq_r_u8(a, b);314#endif /* POLYMORPHIC */315}316 317// CHECK-LABEL: @test_vqshlq_r_u16(318// CHECK-NEXT: entry:319// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.scalar.v8i16(<8 x i16> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 0, i32 1)320// CHECK-NEXT: ret <8 x i16> [[TMP0]]321//322uint16x8_t test_vqshlq_r_u16(uint16x8_t a, int32_t b)323{324#ifdef POLYMORPHIC325 return vqshlq_r(a, b);326#else /* POLYMORPHIC */327 return vqshlq_r_u16(a, b);328#endif /* POLYMORPHIC */329}330 331// CHECK-LABEL: @test_vqshlq_r_u32(332// CHECK-NEXT: entry:333// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.scalar.v4i32(<4 x i32> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 0, i32 1)334// CHECK-NEXT: ret <4 x i32> [[TMP0]]335//336uint32x4_t test_vqshlq_r_u32(uint32x4_t a, int32_t b)337{338#ifdef POLYMORPHIC339 return vqshlq_r(a, b);340#else /* POLYMORPHIC */341 return vqshlq_r_u32(a, b);342#endif /* POLYMORPHIC */343}344 345// CHECK-LABEL: @test_vrshlq_s8(346// CHECK-NEXT: entry:347// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.vector.v16i8.v16i8(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 0, i32 1, i32 0)348// CHECK-NEXT: ret <16 x i8> [[TMP0]]349//350int8x16_t test_vrshlq_s8(int8x16_t a, int8x16_t b)351{352#ifdef POLYMORPHIC353 return vrshlq(a, b);354#else /* POLYMORPHIC */355 return vrshlq_s8(a, b);356#endif /* POLYMORPHIC */357}358 359// CHECK-LABEL: @test_vrshlq_s16(360// CHECK-NEXT: entry:361// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.vector.v8i16.v8i16(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 1, i32 0)362// CHECK-NEXT: ret <8 x i16> [[TMP0]]363//364int16x8_t test_vrshlq_s16(int16x8_t a, int16x8_t b)365{366#ifdef POLYMORPHIC367 return vrshlq(a, b);368#else /* POLYMORPHIC */369 return vrshlq_s16(a, b);370#endif /* POLYMORPHIC */371}372 373// CHECK-LABEL: @test_vrshlq_s32(374// CHECK-NEXT: entry:375// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.vector.v4i32.v4i32(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 1, i32 0)376// CHECK-NEXT: ret <4 x i32> [[TMP0]]377//378int32x4_t test_vrshlq_s32(int32x4_t a, int32x4_t b)379{380#ifdef POLYMORPHIC381 return vrshlq(a, b);382#else /* POLYMORPHIC */383 return vrshlq_s32(a, b);384#endif /* POLYMORPHIC */385}386 387// CHECK-LABEL: @test_vrshlq_u8(388// CHECK-NEXT: entry:389// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.vector.v16i8.v16i8(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 0, i32 1, i32 1)390// CHECK-NEXT: ret <16 x i8> [[TMP0]]391//392uint8x16_t test_vrshlq_u8(uint8x16_t a, int8x16_t b)393{394#ifdef POLYMORPHIC395 return vrshlq(a, b);396#else /* POLYMORPHIC */397 return vrshlq_u8(a, b);398#endif /* POLYMORPHIC */399}400 401// CHECK-LABEL: @test_vrshlq_u16(402// CHECK-NEXT: entry:403// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.vector.v8i16.v8i16(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 1, i32 1)404// CHECK-NEXT: ret <8 x i16> [[TMP0]]405//406uint16x8_t test_vrshlq_u16(uint16x8_t a, int16x8_t b)407{408#ifdef POLYMORPHIC409 return vrshlq(a, b);410#else /* POLYMORPHIC */411 return vrshlq_u16(a, b);412#endif /* POLYMORPHIC */413}414 415// CHECK-LABEL: @test_vrshlq_u32(416// CHECK-NEXT: entry:417// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.vector.v4i32.v4i32(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 1, i32 1)418// CHECK-NEXT: ret <4 x i32> [[TMP0]]419//420uint32x4_t test_vrshlq_u32(uint32x4_t a, int32x4_t b)421{422#ifdef POLYMORPHIC423 return vrshlq(a, b);424#else /* POLYMORPHIC */425 return vrshlq_u32(a, b);426#endif /* POLYMORPHIC */427}428 429// CHECK-LABEL: @test_vrshlq_n_s8(430// CHECK-NEXT: entry:431// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.scalar.v16i8(<16 x i8> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 1, i32 0)432// CHECK-NEXT: ret <16 x i8> [[TMP0]]433//434int8x16_t test_vrshlq_n_s8(int8x16_t a, int32_t b)435{436#ifdef POLYMORPHIC437 return vrshlq(a, b);438#else /* POLYMORPHIC */439 return vrshlq_n_s8(a, b);440#endif /* POLYMORPHIC */441}442 443// CHECK-LABEL: @test_vrshlq_n_s16(444// CHECK-NEXT: entry:445// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.scalar.v8i16(<8 x i16> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 1, i32 0)446// CHECK-NEXT: ret <8 x i16> [[TMP0]]447//448int16x8_t test_vrshlq_n_s16(int16x8_t a, int32_t b)449{450#ifdef POLYMORPHIC451 return vrshlq(a, b);452#else /* POLYMORPHIC */453 return vrshlq_n_s16(a, b);454#endif /* POLYMORPHIC */455}456 457// CHECK-LABEL: @test_vrshlq_n_s32(458// CHECK-NEXT: entry:459// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.scalar.v4i32(<4 x i32> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 1, i32 0)460// CHECK-NEXT: ret <4 x i32> [[TMP0]]461//462int32x4_t test_vrshlq_n_s32(int32x4_t a, int32_t b)463{464#ifdef POLYMORPHIC465 return vrshlq(a, b);466#else /* POLYMORPHIC */467 return vrshlq_n_s32(a, b);468#endif /* POLYMORPHIC */469}470 471// CHECK-LABEL: @test_vrshlq_n_u8(472// CHECK-NEXT: entry:473// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.scalar.v16i8(<16 x i8> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 1, i32 1)474// CHECK-NEXT: ret <16 x i8> [[TMP0]]475//476uint8x16_t test_vrshlq_n_u8(uint8x16_t a, int32_t b)477{478#ifdef POLYMORPHIC479 return vrshlq(a, b);480#else /* POLYMORPHIC */481 return vrshlq_n_u8(a, b);482#endif /* POLYMORPHIC */483}484 485// CHECK-LABEL: @test_vrshlq_n_u16(486// CHECK-NEXT: entry:487// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.scalar.v8i16(<8 x i16> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 1, i32 1)488// CHECK-NEXT: ret <8 x i16> [[TMP0]]489//490uint16x8_t test_vrshlq_n_u16(uint16x8_t a, int32_t b)491{492#ifdef POLYMORPHIC493 return vrshlq(a, b);494#else /* POLYMORPHIC */495 return vrshlq_n_u16(a, b);496#endif /* POLYMORPHIC */497}498 499// CHECK-LABEL: @test_vrshlq_n_u32(500// CHECK-NEXT: entry:501// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.scalar.v4i32(<4 x i32> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 1, i32 1)502// CHECK-NEXT: ret <4 x i32> [[TMP0]]503//504uint32x4_t test_vrshlq_n_u32(uint32x4_t a, int32_t b)505{506#ifdef POLYMORPHIC507 return vrshlq(a, b);508#else /* POLYMORPHIC */509 return vrshlq_n_u32(a, b);510#endif /* POLYMORPHIC */511}512 513// CHECK-LABEL: @test_vqrshlq_s8(514// CHECK-NEXT: entry:515// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.vector.v16i8.v16i8(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 1, i32 1, i32 0)516// CHECK-NEXT: ret <16 x i8> [[TMP0]]517//518int8x16_t test_vqrshlq_s8(int8x16_t a, int8x16_t b)519{520#ifdef POLYMORPHIC521 return vqrshlq(a, b);522#else /* POLYMORPHIC */523 return vqrshlq_s8(a, b);524#endif /* POLYMORPHIC */525}526 527// CHECK-LABEL: @test_vqrshlq_s16(528// CHECK-NEXT: entry:529// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.vector.v8i16.v8i16(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 1, i32 0)530// CHECK-NEXT: ret <8 x i16> [[TMP0]]531//532int16x8_t test_vqrshlq_s16(int16x8_t a, int16x8_t b)533{534#ifdef POLYMORPHIC535 return vqrshlq(a, b);536#else /* POLYMORPHIC */537 return vqrshlq_s16(a, b);538#endif /* POLYMORPHIC */539}540 541// CHECK-LABEL: @test_vqrshlq_s32(542// CHECK-NEXT: entry:543// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.vector.v4i32.v4i32(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 1, i32 0)544// CHECK-NEXT: ret <4 x i32> [[TMP0]]545//546int32x4_t test_vqrshlq_s32(int32x4_t a, int32x4_t b)547{548#ifdef POLYMORPHIC549 return vqrshlq(a, b);550#else /* POLYMORPHIC */551 return vqrshlq_s32(a, b);552#endif /* POLYMORPHIC */553}554 555// CHECK-LABEL: @test_vqrshlq_u8(556// CHECK-NEXT: entry:557// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.vector.v16i8.v16i8(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 1, i32 1, i32 1)558// CHECK-NEXT: ret <16 x i8> [[TMP0]]559//560uint8x16_t test_vqrshlq_u8(uint8x16_t a, int8x16_t b)561{562#ifdef POLYMORPHIC563 return vqrshlq(a, b);564#else /* POLYMORPHIC */565 return vqrshlq_u8(a, b);566#endif /* POLYMORPHIC */567}568 569// CHECK-LABEL: @test_vqrshlq_u16(570// CHECK-NEXT: entry:571// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.vector.v8i16.v8i16(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 1, i32 1)572// CHECK-NEXT: ret <8 x i16> [[TMP0]]573//574uint16x8_t test_vqrshlq_u16(uint16x8_t a, int16x8_t b)575{576#ifdef POLYMORPHIC577 return vqrshlq(a, b);578#else /* POLYMORPHIC */579 return vqrshlq_u16(a, b);580#endif /* POLYMORPHIC */581}582 583// CHECK-LABEL: @test_vqrshlq_u32(584// CHECK-NEXT: entry:585// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.vector.v4i32.v4i32(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 1, i32 1)586// CHECK-NEXT: ret <4 x i32> [[TMP0]]587//588uint32x4_t test_vqrshlq_u32(uint32x4_t a, int32x4_t b)589{590#ifdef POLYMORPHIC591 return vqrshlq(a, b);592#else /* POLYMORPHIC */593 return vqrshlq_u32(a, b);594#endif /* POLYMORPHIC */595}596 597// CHECK-LABEL: @test_vqrshlq_n_s8(598// CHECK-NEXT: entry:599// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.scalar.v16i8(<16 x i8> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 1, i32 0)600// CHECK-NEXT: ret <16 x i8> [[TMP0]]601//602int8x16_t test_vqrshlq_n_s8(int8x16_t a, int32_t b)603{604#ifdef POLYMORPHIC605 return vqrshlq(a, b);606#else /* POLYMORPHIC */607 return vqrshlq_n_s8(a, b);608#endif /* POLYMORPHIC */609}610 611// CHECK-LABEL: @test_vqrshlq_n_s16(612// CHECK-NEXT: entry:613// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.scalar.v8i16(<8 x i16> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 1, i32 0)614// CHECK-NEXT: ret <8 x i16> [[TMP0]]615//616int16x8_t test_vqrshlq_n_s16(int16x8_t a, int32_t b)617{618#ifdef POLYMORPHIC619 return vqrshlq(a, b);620#else /* POLYMORPHIC */621 return vqrshlq_n_s16(a, b);622#endif /* POLYMORPHIC */623}624 625// CHECK-LABEL: @test_vqrshlq_n_s32(626// CHECK-NEXT: entry:627// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.scalar.v4i32(<4 x i32> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 1, i32 0)628// CHECK-NEXT: ret <4 x i32> [[TMP0]]629//630int32x4_t test_vqrshlq_n_s32(int32x4_t a, int32_t b)631{632#ifdef POLYMORPHIC633 return vqrshlq(a, b);634#else /* POLYMORPHIC */635 return vqrshlq_n_s32(a, b);636#endif /* POLYMORPHIC */637}638 639// CHECK-LABEL: @test_vqrshlq_n_u8(640// CHECK-NEXT: entry:641// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.scalar.v16i8(<16 x i8> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 1, i32 1)642// CHECK-NEXT: ret <16 x i8> [[TMP0]]643//644uint8x16_t test_vqrshlq_n_u8(uint8x16_t a, int32_t b)645{646#ifdef POLYMORPHIC647 return vqrshlq(a, b);648#else /* POLYMORPHIC */649 return vqrshlq_n_u8(a, b);650#endif /* POLYMORPHIC */651}652 653// CHECK-LABEL: @test_vqrshlq_n_u16(654// CHECK-NEXT: entry:655// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.scalar.v8i16(<8 x i16> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 1, i32 1)656// CHECK-NEXT: ret <8 x i16> [[TMP0]]657//658uint16x8_t test_vqrshlq_n_u16(uint16x8_t a, int32_t b)659{660#ifdef POLYMORPHIC661 return vqrshlq(a, b);662#else /* POLYMORPHIC */663 return vqrshlq_n_u16(a, b);664#endif /* POLYMORPHIC */665}666 667// CHECK-LABEL: @test_vqrshlq_n_u32(668// CHECK-NEXT: entry:669// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.scalar.v4i32(<4 x i32> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 1, i32 1)670// CHECK-NEXT: ret <4 x i32> [[TMP0]]671//672uint32x4_t test_vqrshlq_n_u32(uint32x4_t a, int32_t b)673{674#ifdef POLYMORPHIC675 return vqrshlq(a, b);676#else /* POLYMORPHIC */677 return vqrshlq_n_u32(a, b);678#endif /* POLYMORPHIC */679}680 681// CHECK-LABEL: @test_vshlq_m_s8(682// CHECK-NEXT: entry:683// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32684// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])685// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.vector.predicated.v16i8.v16i8.v16i1(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 0, i32 0, i32 0, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])686// CHECK-NEXT: ret <16 x i8> [[TMP2]]687//688int8x16_t test_vshlq_m_s8(int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p)689{690#ifdef POLYMORPHIC691 return vshlq_m(inactive, a, b, p);692#else /* POLYMORPHIC */693 return vshlq_m_s8(inactive, a, b, p);694#endif /* POLYMORPHIC */695}696 697// CHECK-LABEL: @test_vshlq_m_s16(698// CHECK-NEXT: entry:699// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32700// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])701// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.vector.predicated.v8i16.v8i16.v8i1(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 0, i32 0, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])702// CHECK-NEXT: ret <8 x i16> [[TMP2]]703//704int16x8_t test_vshlq_m_s16(int16x8_t inactive, int16x8_t a, int16x8_t b, mve_pred16_t p)705{706#ifdef POLYMORPHIC707 return vshlq_m(inactive, a, b, p);708#else /* POLYMORPHIC */709 return vshlq_m_s16(inactive, a, b, p);710#endif /* POLYMORPHIC */711}712 713// CHECK-LABEL: @test_vshlq_m_s32(714// CHECK-NEXT: entry:715// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32716// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])717// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.vector.predicated.v4i32.v4i32.v4i1(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 0, i32 0, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])718// CHECK-NEXT: ret <4 x i32> [[TMP2]]719//720int32x4_t test_vshlq_m_s32(int32x4_t inactive, int32x4_t a, int32x4_t b, mve_pred16_t p)721{722#ifdef POLYMORPHIC723 return vshlq_m(inactive, a, b, p);724#else /* POLYMORPHIC */725 return vshlq_m_s32(inactive, a, b, p);726#endif /* POLYMORPHIC */727}728 729// CHECK-LABEL: @test_vshlq_m_u8(730// CHECK-NEXT: entry:731// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32732// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])733// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.vector.predicated.v16i8.v16i8.v16i1(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 0, i32 0, i32 1, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])734// CHECK-NEXT: ret <16 x i8> [[TMP2]]735//736uint8x16_t test_vshlq_m_u8(uint8x16_t inactive, uint8x16_t a, int8x16_t b, mve_pred16_t p)737{738#ifdef POLYMORPHIC739 return vshlq_m(inactive, a, b, p);740#else /* POLYMORPHIC */741 return vshlq_m_u8(inactive, a, b, p);742#endif /* POLYMORPHIC */743}744 745// CHECK-LABEL: @test_vshlq_m_u16(746// CHECK-NEXT: entry:747// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32748// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])749// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.vector.predicated.v8i16.v8i16.v8i1(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 0, i32 1, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])750// CHECK-NEXT: ret <8 x i16> [[TMP2]]751//752uint16x8_t test_vshlq_m_u16(uint16x8_t inactive, uint16x8_t a, int16x8_t b, mve_pred16_t p)753{754#ifdef POLYMORPHIC755 return vshlq_m(inactive, a, b, p);756#else /* POLYMORPHIC */757 return vshlq_m_u16(inactive, a, b, p);758#endif /* POLYMORPHIC */759}760 761// CHECK-LABEL: @test_vshlq_m_u32(762// CHECK-NEXT: entry:763// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32764// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])765// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.vector.predicated.v4i32.v4i32.v4i1(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 0, i32 1, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])766// CHECK-NEXT: ret <4 x i32> [[TMP2]]767//768uint32x4_t test_vshlq_m_u32(uint32x4_t inactive, uint32x4_t a, int32x4_t b, mve_pred16_t p)769{770#ifdef POLYMORPHIC771 return vshlq_m(inactive, a, b, p);772#else /* POLYMORPHIC */773 return vshlq_m_u32(inactive, a, b, p);774#endif /* POLYMORPHIC */775}776 777// CHECK-LABEL: @test_vshlq_x_s8(778// CHECK-NEXT: entry:779// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32780// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])781// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.vector.predicated.v16i8.v16i8.v16i1(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 0, i32 0, i32 0, <16 x i1> [[TMP1]], <16 x i8> undef)782// CHECK-NEXT: ret <16 x i8> [[TMP2]]783//784int8x16_t test_vshlq_x_s8(int8x16_t a, int8x16_t b, mve_pred16_t p)785{786#ifdef POLYMORPHIC787 return vshlq_x(a, b, p);788#else /* POLYMORPHIC */789 return vshlq_x_s8(a, b, p);790#endif /* POLYMORPHIC */791}792 793// CHECK-LABEL: @test_vshlq_x_s16(794// CHECK-NEXT: entry:795// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32796// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])797// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.vector.predicated.v8i16.v8i16.v8i1(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 0, i32 0, <8 x i1> [[TMP1]], <8 x i16> undef)798// CHECK-NEXT: ret <8 x i16> [[TMP2]]799//800int16x8_t test_vshlq_x_s16(int16x8_t a, int16x8_t b, mve_pred16_t p)801{802#ifdef POLYMORPHIC803 return vshlq_x(a, b, p);804#else /* POLYMORPHIC */805 return vshlq_x_s16(a, b, p);806#endif /* POLYMORPHIC */807}808 809// CHECK-LABEL: @test_vshlq_x_s32(810// CHECK-NEXT: entry:811// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32812// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])813// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.vector.predicated.v4i32.v4i32.v4i1(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 0, i32 0, <4 x i1> [[TMP1]], <4 x i32> undef)814// CHECK-NEXT: ret <4 x i32> [[TMP2]]815//816int32x4_t test_vshlq_x_s32(int32x4_t a, int32x4_t b, mve_pred16_t p)817{818#ifdef POLYMORPHIC819 return vshlq_x(a, b, p);820#else /* POLYMORPHIC */821 return vshlq_x_s32(a, b, p);822#endif /* POLYMORPHIC */823}824 825// CHECK-LABEL: @test_vshlq_x_u8(826// CHECK-NEXT: entry:827// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32828// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])829// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.vector.predicated.v16i8.v16i8.v16i1(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 0, i32 0, i32 1, <16 x i1> [[TMP1]], <16 x i8> undef)830// CHECK-NEXT: ret <16 x i8> [[TMP2]]831//832uint8x16_t test_vshlq_x_u8(uint8x16_t a, int8x16_t b, mve_pred16_t p)833{834#ifdef POLYMORPHIC835 return vshlq_x(a, b, p);836#else /* POLYMORPHIC */837 return vshlq_x_u8(a, b, p);838#endif /* POLYMORPHIC */839}840 841// CHECK-LABEL: @test_vshlq_x_u16(842// CHECK-NEXT: entry:843// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32844// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])845// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.vector.predicated.v8i16.v8i16.v8i1(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 0, i32 1, <8 x i1> [[TMP1]], <8 x i16> undef)846// CHECK-NEXT: ret <8 x i16> [[TMP2]]847//848uint16x8_t test_vshlq_x_u16(uint16x8_t a, int16x8_t b, mve_pred16_t p)849{850#ifdef POLYMORPHIC851 return vshlq_x(a, b, p);852#else /* POLYMORPHIC */853 return vshlq_x_u16(a, b, p);854#endif /* POLYMORPHIC */855}856 857// CHECK-LABEL: @test_vshlq_x_u32(858// CHECK-NEXT: entry:859// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32860// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])861// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.vector.predicated.v4i32.v4i32.v4i1(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 0, i32 1, <4 x i1> [[TMP1]], <4 x i32> undef)862// CHECK-NEXT: ret <4 x i32> [[TMP2]]863//864uint32x4_t test_vshlq_x_u32(uint32x4_t a, int32x4_t b, mve_pred16_t p)865{866#ifdef POLYMORPHIC867 return vshlq_x(a, b, p);868#else /* POLYMORPHIC */869 return vshlq_x_u32(a, b, p);870#endif /* POLYMORPHIC */871}872 873// CHECK-LABEL: @test_vshlq_m_r_s8(874// CHECK-NEXT: entry:875// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32876// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])877// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.scalar.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 0, i32 0, <16 x i1> [[TMP1]])878// CHECK-NEXT: ret <16 x i8> [[TMP2]]879//880int8x16_t test_vshlq_m_r_s8(int8x16_t a, int32_t b, mve_pred16_t p)881{882#ifdef POLYMORPHIC883 return vshlq_m_r(a, b, p);884#else /* POLYMORPHIC */885 return vshlq_m_r_s8(a, b, p);886#endif /* POLYMORPHIC */887}888 889// CHECK-LABEL: @test_vshlq_m_r_s16(890// CHECK-NEXT: entry:891// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32892// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])893// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.scalar.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 0, i32 0, <8 x i1> [[TMP1]])894// CHECK-NEXT: ret <8 x i16> [[TMP2]]895//896int16x8_t test_vshlq_m_r_s16(int16x8_t a, int32_t b, mve_pred16_t p)897{898#ifdef POLYMORPHIC899 return vshlq_m_r(a, b, p);900#else /* POLYMORPHIC */901 return vshlq_m_r_s16(a, b, p);902#endif /* POLYMORPHIC */903}904 905// CHECK-LABEL: @test_vshlq_m_r_s32(906// CHECK-NEXT: entry:907// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32908// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])909// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.scalar.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 0, i32 0, <4 x i1> [[TMP1]])910// CHECK-NEXT: ret <4 x i32> [[TMP2]]911//912int32x4_t test_vshlq_m_r_s32(int32x4_t a, int32_t b, mve_pred16_t p)913{914#ifdef POLYMORPHIC915 return vshlq_m_r(a, b, p);916#else /* POLYMORPHIC */917 return vshlq_m_r_s32(a, b, p);918#endif /* POLYMORPHIC */919}920 921// CHECK-LABEL: @test_vshlq_m_r_u8(922// CHECK-NEXT: entry:923// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32924// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])925// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.scalar.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 0, i32 1, <16 x i1> [[TMP1]])926// CHECK-NEXT: ret <16 x i8> [[TMP2]]927//928uint8x16_t test_vshlq_m_r_u8(uint8x16_t a, int32_t b, mve_pred16_t p)929{930#ifdef POLYMORPHIC931 return vshlq_m_r(a, b, p);932#else /* POLYMORPHIC */933 return vshlq_m_r_u8(a, b, p);934#endif /* POLYMORPHIC */935}936 937// CHECK-LABEL: @test_vshlq_m_r_u16(938// CHECK-NEXT: entry:939// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32940// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])941// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.scalar.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 0, i32 1, <8 x i1> [[TMP1]])942// CHECK-NEXT: ret <8 x i16> [[TMP2]]943//944uint16x8_t test_vshlq_m_r_u16(uint16x8_t a, int32_t b, mve_pred16_t p)945{946#ifdef POLYMORPHIC947 return vshlq_m_r(a, b, p);948#else /* POLYMORPHIC */949 return vshlq_m_r_u16(a, b, p);950#endif /* POLYMORPHIC */951}952 953// CHECK-LABEL: @test_vshlq_m_r_u32(954// CHECK-NEXT: entry:955// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32956// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])957// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.scalar.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 0, i32 1, <4 x i1> [[TMP1]])958// CHECK-NEXT: ret <4 x i32> [[TMP2]]959//960uint32x4_t test_vshlq_m_r_u32(uint32x4_t a, int32_t b, mve_pred16_t p)961{962#ifdef POLYMORPHIC963 return vshlq_m_r(a, b, p);964#else /* POLYMORPHIC */965 return vshlq_m_r_u32(a, b, p);966#endif /* POLYMORPHIC */967}968 969// CHECK-LABEL: @test_vqshlq_m_s8(970// CHECK-NEXT: entry:971// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32972// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])973// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.vector.predicated.v16i8.v16i8.v16i1(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 1, i32 0, i32 0, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])974// CHECK-NEXT: ret <16 x i8> [[TMP2]]975//976int8x16_t test_vqshlq_m_s8(int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p)977{978#ifdef POLYMORPHIC979 return vqshlq_m(inactive, a, b, p);980#else /* POLYMORPHIC */981 return vqshlq_m_s8(inactive, a, b, p);982#endif /* POLYMORPHIC */983}984 985// CHECK-LABEL: @test_vqshlq_m_s16(986// CHECK-NEXT: entry:987// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32988// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])989// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.vector.predicated.v8i16.v8i16.v8i1(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 0, i32 0, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])990// CHECK-NEXT: ret <8 x i16> [[TMP2]]991//992int16x8_t test_vqshlq_m_s16(int16x8_t inactive, int16x8_t a, int16x8_t b, mve_pred16_t p)993{994#ifdef POLYMORPHIC995 return vqshlq_m(inactive, a, b, p);996#else /* POLYMORPHIC */997 return vqshlq_m_s16(inactive, a, b, p);998#endif /* POLYMORPHIC */999}1000 1001// CHECK-LABEL: @test_vqshlq_m_s32(1002// CHECK-NEXT: entry:1003// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321004// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1005// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.vector.predicated.v4i32.v4i32.v4i1(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 0, i32 0, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])1006// CHECK-NEXT: ret <4 x i32> [[TMP2]]1007//1008int32x4_t test_vqshlq_m_s32(int32x4_t inactive, int32x4_t a, int32x4_t b, mve_pred16_t p)1009{1010#ifdef POLYMORPHIC1011 return vqshlq_m(inactive, a, b, p);1012#else /* POLYMORPHIC */1013 return vqshlq_m_s32(inactive, a, b, p);1014#endif /* POLYMORPHIC */1015}1016 1017// CHECK-LABEL: @test_vqshlq_m_u8(1018// CHECK-NEXT: entry:1019// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321020// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])1021// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.vector.predicated.v16i8.v16i8.v16i1(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 1, i32 0, i32 1, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])1022// CHECK-NEXT: ret <16 x i8> [[TMP2]]1023//1024uint8x16_t test_vqshlq_m_u8(uint8x16_t inactive, uint8x16_t a, int8x16_t b, mve_pred16_t p)1025{1026#ifdef POLYMORPHIC1027 return vqshlq_m(inactive, a, b, p);1028#else /* POLYMORPHIC */1029 return vqshlq_m_u8(inactive, a, b, p);1030#endif /* POLYMORPHIC */1031}1032 1033// CHECK-LABEL: @test_vqshlq_m_u16(1034// CHECK-NEXT: entry:1035// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321036// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1037// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.vector.predicated.v8i16.v8i16.v8i1(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 0, i32 1, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])1038// CHECK-NEXT: ret <8 x i16> [[TMP2]]1039//1040uint16x8_t test_vqshlq_m_u16(uint16x8_t inactive, uint16x8_t a, int16x8_t b, mve_pred16_t p)1041{1042#ifdef POLYMORPHIC1043 return vqshlq_m(inactive, a, b, p);1044#else /* POLYMORPHIC */1045 return vqshlq_m_u16(inactive, a, b, p);1046#endif /* POLYMORPHIC */1047}1048 1049// CHECK-LABEL: @test_vqshlq_m_u32(1050// CHECK-NEXT: entry:1051// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321052// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1053// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.vector.predicated.v4i32.v4i32.v4i1(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 0, i32 1, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])1054// CHECK-NEXT: ret <4 x i32> [[TMP2]]1055//1056uint32x4_t test_vqshlq_m_u32(uint32x4_t inactive, uint32x4_t a, int32x4_t b, mve_pred16_t p)1057{1058#ifdef POLYMORPHIC1059 return vqshlq_m(inactive, a, b, p);1060#else /* POLYMORPHIC */1061 return vqshlq_m_u32(inactive, a, b, p);1062#endif /* POLYMORPHIC */1063}1064 1065// CHECK-LABEL: @test_vqshlq_m_r_s8(1066// CHECK-NEXT: entry:1067// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321068// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])1069// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.scalar.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 0, i32 0, <16 x i1> [[TMP1]])1070// CHECK-NEXT: ret <16 x i8> [[TMP2]]1071//1072int8x16_t test_vqshlq_m_r_s8(int8x16_t a, int32_t b, mve_pred16_t p)1073{1074#ifdef POLYMORPHIC1075 return vqshlq_m_r(a, b, p);1076#else /* POLYMORPHIC */1077 return vqshlq_m_r_s8(a, b, p);1078#endif /* POLYMORPHIC */1079}1080 1081// CHECK-LABEL: @test_vqshlq_m_r_s16(1082// CHECK-NEXT: entry:1083// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321084// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1085// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.scalar.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 0, i32 0, <8 x i1> [[TMP1]])1086// CHECK-NEXT: ret <8 x i16> [[TMP2]]1087//1088int16x8_t test_vqshlq_m_r_s16(int16x8_t a, int32_t b, mve_pred16_t p)1089{1090#ifdef POLYMORPHIC1091 return vqshlq_m_r(a, b, p);1092#else /* POLYMORPHIC */1093 return vqshlq_m_r_s16(a, b, p);1094#endif /* POLYMORPHIC */1095}1096 1097// CHECK-LABEL: @test_vqshlq_m_r_s32(1098// CHECK-NEXT: entry:1099// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321100// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1101// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.scalar.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 0, i32 0, <4 x i1> [[TMP1]])1102// CHECK-NEXT: ret <4 x i32> [[TMP2]]1103//1104int32x4_t test_vqshlq_m_r_s32(int32x4_t a, int32_t b, mve_pred16_t p)1105{1106#ifdef POLYMORPHIC1107 return vqshlq_m_r(a, b, p);1108#else /* POLYMORPHIC */1109 return vqshlq_m_r_s32(a, b, p);1110#endif /* POLYMORPHIC */1111}1112 1113// CHECK-LABEL: @test_vqshlq_m_r_u8(1114// CHECK-NEXT: entry:1115// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321116// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])1117// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.scalar.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 0, i32 1, <16 x i1> [[TMP1]])1118// CHECK-NEXT: ret <16 x i8> [[TMP2]]1119//1120uint8x16_t test_vqshlq_m_r_u8(uint8x16_t a, int32_t b, mve_pred16_t p)1121{1122#ifdef POLYMORPHIC1123 return vqshlq_m_r(a, b, p);1124#else /* POLYMORPHIC */1125 return vqshlq_m_r_u8(a, b, p);1126#endif /* POLYMORPHIC */1127}1128 1129// CHECK-LABEL: @test_vqshlq_m_r_u16(1130// CHECK-NEXT: entry:1131// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321132// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1133// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.scalar.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 0, i32 1, <8 x i1> [[TMP1]])1134// CHECK-NEXT: ret <8 x i16> [[TMP2]]1135//1136uint16x8_t test_vqshlq_m_r_u16(uint16x8_t a, int32_t b, mve_pred16_t p)1137{1138#ifdef POLYMORPHIC1139 return vqshlq_m_r(a, b, p);1140#else /* POLYMORPHIC */1141 return vqshlq_m_r_u16(a, b, p);1142#endif /* POLYMORPHIC */1143}1144 1145// CHECK-LABEL: @test_vqshlq_m_r_u32(1146// CHECK-NEXT: entry:1147// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321148// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1149// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.scalar.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 0, i32 1, <4 x i1> [[TMP1]])1150// CHECK-NEXT: ret <4 x i32> [[TMP2]]1151//1152uint32x4_t test_vqshlq_m_r_u32(uint32x4_t a, int32_t b, mve_pred16_t p)1153{1154#ifdef POLYMORPHIC1155 return vqshlq_m_r(a, b, p);1156#else /* POLYMORPHIC */1157 return vqshlq_m_r_u32(a, b, p);1158#endif /* POLYMORPHIC */1159}1160 1161// CHECK-LABEL: @test_vrshlq_m_s8(1162// CHECK-NEXT: entry:1163// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321164// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])1165// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.vector.predicated.v16i8.v16i8.v16i1(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 0, i32 1, i32 0, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])1166// CHECK-NEXT: ret <16 x i8> [[TMP2]]1167//1168int8x16_t test_vrshlq_m_s8(int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p)1169{1170#ifdef POLYMORPHIC1171 return vrshlq_m(inactive, a, b, p);1172#else /* POLYMORPHIC */1173 return vrshlq_m_s8(inactive, a, b, p);1174#endif /* POLYMORPHIC */1175}1176 1177// CHECK-LABEL: @test_vrshlq_m_s16(1178// CHECK-NEXT: entry:1179// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321180// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1181// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.vector.predicated.v8i16.v8i16.v8i1(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 1, i32 0, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])1182// CHECK-NEXT: ret <8 x i16> [[TMP2]]1183//1184int16x8_t test_vrshlq_m_s16(int16x8_t inactive, int16x8_t a, int16x8_t b, mve_pred16_t p)1185{1186#ifdef POLYMORPHIC1187 return vrshlq_m(inactive, a, b, p);1188#else /* POLYMORPHIC */1189 return vrshlq_m_s16(inactive, a, b, p);1190#endif /* POLYMORPHIC */1191}1192 1193// CHECK-LABEL: @test_vrshlq_m_s32(1194// CHECK-NEXT: entry:1195// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321196// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1197// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.vector.predicated.v4i32.v4i32.v4i1(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 1, i32 0, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])1198// CHECK-NEXT: ret <4 x i32> [[TMP2]]1199//1200int32x4_t test_vrshlq_m_s32(int32x4_t inactive, int32x4_t a, int32x4_t b, mve_pred16_t p)1201{1202#ifdef POLYMORPHIC1203 return vrshlq_m(inactive, a, b, p);1204#else /* POLYMORPHIC */1205 return vrshlq_m_s32(inactive, a, b, p);1206#endif /* POLYMORPHIC */1207}1208 1209// CHECK-LABEL: @test_vrshlq_m_u8(1210// CHECK-NEXT: entry:1211// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321212// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])1213// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.vector.predicated.v16i8.v16i8.v16i1(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 0, i32 1, i32 1, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])1214// CHECK-NEXT: ret <16 x i8> [[TMP2]]1215//1216uint8x16_t test_vrshlq_m_u8(uint8x16_t inactive, uint8x16_t a, int8x16_t b, mve_pred16_t p)1217{1218#ifdef POLYMORPHIC1219 return vrshlq_m(inactive, a, b, p);1220#else /* POLYMORPHIC */1221 return vrshlq_m_u8(inactive, a, b, p);1222#endif /* POLYMORPHIC */1223}1224 1225// CHECK-LABEL: @test_vrshlq_m_u16(1226// CHECK-NEXT: entry:1227// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321228// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1229// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.vector.predicated.v8i16.v8i16.v8i1(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 1, i32 1, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])1230// CHECK-NEXT: ret <8 x i16> [[TMP2]]1231//1232uint16x8_t test_vrshlq_m_u16(uint16x8_t inactive, uint16x8_t a, int16x8_t b, mve_pred16_t p)1233{1234#ifdef POLYMORPHIC1235 return vrshlq_m(inactive, a, b, p);1236#else /* POLYMORPHIC */1237 return vrshlq_m_u16(inactive, a, b, p);1238#endif /* POLYMORPHIC */1239}1240 1241// CHECK-LABEL: @test_vrshlq_m_u32(1242// CHECK-NEXT: entry:1243// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321244// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1245// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.vector.predicated.v4i32.v4i32.v4i1(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 1, i32 1, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])1246// CHECK-NEXT: ret <4 x i32> [[TMP2]]1247//1248uint32x4_t test_vrshlq_m_u32(uint32x4_t inactive, uint32x4_t a, int32x4_t b, mve_pred16_t p)1249{1250#ifdef POLYMORPHIC1251 return vrshlq_m(inactive, a, b, p);1252#else /* POLYMORPHIC */1253 return vrshlq_m_u32(inactive, a, b, p);1254#endif /* POLYMORPHIC */1255}1256 1257// CHECK-LABEL: @test_vrshlq_x_s8(1258// CHECK-NEXT: entry:1259// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321260// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])1261// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.vector.predicated.v16i8.v16i8.v16i1(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 0, i32 1, i32 0, <16 x i1> [[TMP1]], <16 x i8> undef)1262// CHECK-NEXT: ret <16 x i8> [[TMP2]]1263//1264int8x16_t test_vrshlq_x_s8(int8x16_t a, int8x16_t b, mve_pred16_t p)1265{1266#ifdef POLYMORPHIC1267 return vrshlq_x(a, b, p);1268#else /* POLYMORPHIC */1269 return vrshlq_x_s8(a, b, p);1270#endif /* POLYMORPHIC */1271}1272 1273// CHECK-LABEL: @test_vrshlq_x_s16(1274// CHECK-NEXT: entry:1275// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321276// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1277// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.vector.predicated.v8i16.v8i16.v8i1(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 1, i32 0, <8 x i1> [[TMP1]], <8 x i16> undef)1278// CHECK-NEXT: ret <8 x i16> [[TMP2]]1279//1280int16x8_t test_vrshlq_x_s16(int16x8_t a, int16x8_t b, mve_pred16_t p)1281{1282#ifdef POLYMORPHIC1283 return vrshlq_x(a, b, p);1284#else /* POLYMORPHIC */1285 return vrshlq_x_s16(a, b, p);1286#endif /* POLYMORPHIC */1287}1288 1289// CHECK-LABEL: @test_vrshlq_x_s32(1290// CHECK-NEXT: entry:1291// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321292// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1293// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.vector.predicated.v4i32.v4i32.v4i1(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 1, i32 0, <4 x i1> [[TMP1]], <4 x i32> undef)1294// CHECK-NEXT: ret <4 x i32> [[TMP2]]1295//1296int32x4_t test_vrshlq_x_s32(int32x4_t a, int32x4_t b, mve_pred16_t p)1297{1298#ifdef POLYMORPHIC1299 return vrshlq_x(a, b, p);1300#else /* POLYMORPHIC */1301 return vrshlq_x_s32(a, b, p);1302#endif /* POLYMORPHIC */1303}1304 1305// CHECK-LABEL: @test_vrshlq_x_u8(1306// CHECK-NEXT: entry:1307// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321308// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])1309// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.vector.predicated.v16i8.v16i8.v16i1(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 0, i32 1, i32 1, <16 x i1> [[TMP1]], <16 x i8> undef)1310// CHECK-NEXT: ret <16 x i8> [[TMP2]]1311//1312uint8x16_t test_vrshlq_x_u8(uint8x16_t a, int8x16_t b, mve_pred16_t p)1313{1314#ifdef POLYMORPHIC1315 return vrshlq_x(a, b, p);1316#else /* POLYMORPHIC */1317 return vrshlq_x_u8(a, b, p);1318#endif /* POLYMORPHIC */1319}1320 1321// CHECK-LABEL: @test_vrshlq_x_u16(1322// CHECK-NEXT: entry:1323// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321324// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1325// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.vector.predicated.v8i16.v8i16.v8i1(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 1, i32 1, <8 x i1> [[TMP1]], <8 x i16> undef)1326// CHECK-NEXT: ret <8 x i16> [[TMP2]]1327//1328uint16x8_t test_vrshlq_x_u16(uint16x8_t a, int16x8_t b, mve_pred16_t p)1329{1330#ifdef POLYMORPHIC1331 return vrshlq_x(a, b, p);1332#else /* POLYMORPHIC */1333 return vrshlq_x_u16(a, b, p);1334#endif /* POLYMORPHIC */1335}1336 1337// CHECK-LABEL: @test_vrshlq_x_u32(1338// CHECK-NEXT: entry:1339// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321340// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1341// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.vector.predicated.v4i32.v4i32.v4i1(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 1, i32 1, <4 x i1> [[TMP1]], <4 x i32> undef)1342// CHECK-NEXT: ret <4 x i32> [[TMP2]]1343//1344uint32x4_t test_vrshlq_x_u32(uint32x4_t a, int32x4_t b, mve_pred16_t p)1345{1346#ifdef POLYMORPHIC1347 return vrshlq_x(a, b, p);1348#else /* POLYMORPHIC */1349 return vrshlq_x_u32(a, b, p);1350#endif /* POLYMORPHIC */1351}1352 1353// CHECK-LABEL: @test_vrshlq_m_n_s8(1354// CHECK-NEXT: entry:1355// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321356// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])1357// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.scalar.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 1, i32 0, <16 x i1> [[TMP1]])1358// CHECK-NEXT: ret <16 x i8> [[TMP2]]1359//1360int8x16_t test_vrshlq_m_n_s8(int8x16_t a, int32_t b, mve_pred16_t p)1361{1362#ifdef POLYMORPHIC1363 return vrshlq_m_n(a, b, p);1364#else /* POLYMORPHIC */1365 return vrshlq_m_n_s8(a, b, p);1366#endif /* POLYMORPHIC */1367}1368 1369// CHECK-LABEL: @test_vrshlq_m_n_s16(1370// CHECK-NEXT: entry:1371// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321372// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1373// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.scalar.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 1, i32 0, <8 x i1> [[TMP1]])1374// CHECK-NEXT: ret <8 x i16> [[TMP2]]1375//1376int16x8_t test_vrshlq_m_n_s16(int16x8_t a, int32_t b, mve_pred16_t p)1377{1378#ifdef POLYMORPHIC1379 return vrshlq_m_n(a, b, p);1380#else /* POLYMORPHIC */1381 return vrshlq_m_n_s16(a, b, p);1382#endif /* POLYMORPHIC */1383}1384 1385// CHECK-LABEL: @test_vrshlq_m_n_s32(1386// CHECK-NEXT: entry:1387// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321388// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1389// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.scalar.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 1, i32 0, <4 x i1> [[TMP1]])1390// CHECK-NEXT: ret <4 x i32> [[TMP2]]1391//1392int32x4_t test_vrshlq_m_n_s32(int32x4_t a, int32_t b, mve_pred16_t p)1393{1394#ifdef POLYMORPHIC1395 return vrshlq_m_n(a, b, p);1396#else /* POLYMORPHIC */1397 return vrshlq_m_n_s32(a, b, p);1398#endif /* POLYMORPHIC */1399}1400 1401// CHECK-LABEL: @test_vrshlq_m_n_u8(1402// CHECK-NEXT: entry:1403// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321404// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])1405// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.scalar.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 1, i32 1, <16 x i1> [[TMP1]])1406// CHECK-NEXT: ret <16 x i8> [[TMP2]]1407//1408uint8x16_t test_vrshlq_m_n_u8(uint8x16_t a, int32_t b, mve_pred16_t p)1409{1410#ifdef POLYMORPHIC1411 return vrshlq_m_n(a, b, p);1412#else /* POLYMORPHIC */1413 return vrshlq_m_n_u8(a, b, p);1414#endif /* POLYMORPHIC */1415}1416 1417// CHECK-LABEL: @test_vrshlq_m_n_u16(1418// CHECK-NEXT: entry:1419// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321420// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1421// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.scalar.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 1, i32 1, <8 x i1> [[TMP1]])1422// CHECK-NEXT: ret <8 x i16> [[TMP2]]1423//1424uint16x8_t test_vrshlq_m_n_u16(uint16x8_t a, int32_t b, mve_pred16_t p)1425{1426#ifdef POLYMORPHIC1427 return vrshlq_m_n(a, b, p);1428#else /* POLYMORPHIC */1429 return vrshlq_m_n_u16(a, b, p);1430#endif /* POLYMORPHIC */1431}1432 1433// CHECK-LABEL: @test_vrshlq_m_n_u32(1434// CHECK-NEXT: entry:1435// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321436// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1437// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.scalar.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 [[B:%.*]], i32 0, i32 1, i32 1, <4 x i1> [[TMP1]])1438// CHECK-NEXT: ret <4 x i32> [[TMP2]]1439//1440uint32x4_t test_vrshlq_m_n_u32(uint32x4_t a, int32_t b, mve_pred16_t p)1441{1442#ifdef POLYMORPHIC1443 return vrshlq_m_n(a, b, p);1444#else /* POLYMORPHIC */1445 return vrshlq_m_n_u32(a, b, p);1446#endif /* POLYMORPHIC */1447}1448 1449// CHECK-LABEL: @test_vqrshlq_m_s8(1450// CHECK-NEXT: entry:1451// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321452// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])1453// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.vector.predicated.v16i8.v16i8.v16i1(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 1, i32 1, i32 0, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])1454// CHECK-NEXT: ret <16 x i8> [[TMP2]]1455//1456int8x16_t test_vqrshlq_m_s8(int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p)1457{1458#ifdef POLYMORPHIC1459 return vqrshlq_m(inactive, a, b, p);1460#else /* POLYMORPHIC */1461 return vqrshlq_m_s8(inactive, a, b, p);1462#endif /* POLYMORPHIC */1463}1464 1465// CHECK-LABEL: @test_vqrshlq_m_s16(1466// CHECK-NEXT: entry:1467// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321468// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1469// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.vector.predicated.v8i16.v8i16.v8i1(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 1, i32 0, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])1470// CHECK-NEXT: ret <8 x i16> [[TMP2]]1471//1472int16x8_t test_vqrshlq_m_s16(int16x8_t inactive, int16x8_t a, int16x8_t b, mve_pred16_t p)1473{1474#ifdef POLYMORPHIC1475 return vqrshlq_m(inactive, a, b, p);1476#else /* POLYMORPHIC */1477 return vqrshlq_m_s16(inactive, a, b, p);1478#endif /* POLYMORPHIC */1479}1480 1481// CHECK-LABEL: @test_vqrshlq_m_s32(1482// CHECK-NEXT: entry:1483// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321484// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1485// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.vector.predicated.v4i32.v4i32.v4i1(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 1, i32 0, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])1486// CHECK-NEXT: ret <4 x i32> [[TMP2]]1487//1488int32x4_t test_vqrshlq_m_s32(int32x4_t inactive, int32x4_t a, int32x4_t b, mve_pred16_t p)1489{1490#ifdef POLYMORPHIC1491 return vqrshlq_m(inactive, a, b, p);1492#else /* POLYMORPHIC */1493 return vqrshlq_m_s32(inactive, a, b, p);1494#endif /* POLYMORPHIC */1495}1496 1497// CHECK-LABEL: @test_vqrshlq_m_u8(1498// CHECK-NEXT: entry:1499// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321500// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])1501// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.vector.predicated.v16i8.v16i8.v16i1(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 1, i32 1, i32 1, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])1502// CHECK-NEXT: ret <16 x i8> [[TMP2]]1503//1504uint8x16_t test_vqrshlq_m_u8(uint8x16_t inactive, uint8x16_t a, int8x16_t b, mve_pred16_t p)1505{1506#ifdef POLYMORPHIC1507 return vqrshlq_m(inactive, a, b, p);1508#else /* POLYMORPHIC */1509 return vqrshlq_m_u8(inactive, a, b, p);1510#endif /* POLYMORPHIC */1511}1512 1513// CHECK-LABEL: @test_vqrshlq_m_u16(1514// CHECK-NEXT: entry:1515// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321516// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1517// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.vector.predicated.v8i16.v8i16.v8i1(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 1, i32 1, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])1518// CHECK-NEXT: ret <8 x i16> [[TMP2]]1519//1520uint16x8_t test_vqrshlq_m_u16(uint16x8_t inactive, uint16x8_t a, int16x8_t b, mve_pred16_t p)1521{1522#ifdef POLYMORPHIC1523 return vqrshlq_m(inactive, a, b, p);1524#else /* POLYMORPHIC */1525 return vqrshlq_m_u16(inactive, a, b, p);1526#endif /* POLYMORPHIC */1527}1528 1529// CHECK-LABEL: @test_vqrshlq_m_u32(1530// CHECK-NEXT: entry:1531// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321532// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1533// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.vector.predicated.v4i32.v4i32.v4i1(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 1, i32 1, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])1534// CHECK-NEXT: ret <4 x i32> [[TMP2]]1535//1536uint32x4_t test_vqrshlq_m_u32(uint32x4_t inactive, uint32x4_t a, int32x4_t b, mve_pred16_t p)1537{1538#ifdef POLYMORPHIC1539 return vqrshlq_m(inactive, a, b, p);1540#else /* POLYMORPHIC */1541 return vqrshlq_m_u32(inactive, a, b, p);1542#endif /* POLYMORPHIC */1543}1544 1545// CHECK-LABEL: @test_vqrshlq_m_n_s8(1546// CHECK-NEXT: entry:1547// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321548// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])1549// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.scalar.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 1, i32 0, <16 x i1> [[TMP1]])1550// CHECK-NEXT: ret <16 x i8> [[TMP2]]1551//1552int8x16_t test_vqrshlq_m_n_s8(int8x16_t a, int32_t b, mve_pred16_t p)1553{1554#ifdef POLYMORPHIC1555 return vqrshlq_m_n(a, b, p);1556#else /* POLYMORPHIC */1557 return vqrshlq_m_n_s8(a, b, p);1558#endif /* POLYMORPHIC */1559}1560 1561// CHECK-LABEL: @test_vqrshlq_m_n_s16(1562// CHECK-NEXT: entry:1563// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321564// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1565// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.scalar.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 1, i32 0, <8 x i1> [[TMP1]])1566// CHECK-NEXT: ret <8 x i16> [[TMP2]]1567//1568int16x8_t test_vqrshlq_m_n_s16(int16x8_t a, int32_t b, mve_pred16_t p)1569{1570#ifdef POLYMORPHIC1571 return vqrshlq_m_n(a, b, p);1572#else /* POLYMORPHIC */1573 return vqrshlq_m_n_s16(a, b, p);1574#endif /* POLYMORPHIC */1575}1576 1577// CHECK-LABEL: @test_vqrshlq_m_n_s32(1578// CHECK-NEXT: entry:1579// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321580// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1581// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.scalar.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 1, i32 0, <4 x i1> [[TMP1]])1582// CHECK-NEXT: ret <4 x i32> [[TMP2]]1583//1584int32x4_t test_vqrshlq_m_n_s32(int32x4_t a, int32_t b, mve_pred16_t p)1585{1586#ifdef POLYMORPHIC1587 return vqrshlq_m_n(a, b, p);1588#else /* POLYMORPHIC */1589 return vqrshlq_m_n_s32(a, b, p);1590#endif /* POLYMORPHIC */1591}1592 1593// CHECK-LABEL: @test_vqrshlq_m_n_u8(1594// CHECK-NEXT: entry:1595// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321596// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])1597// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshl.scalar.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 1, i32 1, <16 x i1> [[TMP1]])1598// CHECK-NEXT: ret <16 x i8> [[TMP2]]1599//1600uint8x16_t test_vqrshlq_m_n_u8(uint8x16_t a, int32_t b, mve_pred16_t p)1601{1602#ifdef POLYMORPHIC1603 return vqrshlq_m_n(a, b, p);1604#else /* POLYMORPHIC */1605 return vqrshlq_m_n_u8(a, b, p);1606#endif /* POLYMORPHIC */1607}1608 1609// CHECK-LABEL: @test_vqrshlq_m_n_u16(1610// CHECK-NEXT: entry:1611// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321612// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1613// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshl.scalar.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 1, i32 1, <8 x i1> [[TMP1]])1614// CHECK-NEXT: ret <8 x i16> [[TMP2]]1615//1616uint16x8_t test_vqrshlq_m_n_u16(uint16x8_t a, int32_t b, mve_pred16_t p)1617{1618#ifdef POLYMORPHIC1619 return vqrshlq_m_n(a, b, p);1620#else /* POLYMORPHIC */1621 return vqrshlq_m_n_u16(a, b, p);1622#endif /* POLYMORPHIC */1623}1624 1625// CHECK-LABEL: @test_vqrshlq_m_n_u32(1626// CHECK-NEXT: entry:1627// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321628// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1629// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vshl.scalar.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 [[B:%.*]], i32 1, i32 1, i32 1, <4 x i1> [[TMP1]])1630// CHECK-NEXT: ret <4 x i32> [[TMP2]]1631//1632uint32x4_t test_vqrshlq_m_n_u32(uint32x4_t a, int32_t b, mve_pred16_t p)1633{1634#ifdef POLYMORPHIC1635 return vqrshlq_m_n(a, b, p);1636#else /* POLYMORPHIC */1637 return vqrshlq_m_n_u32(a, b, p);1638#endif /* POLYMORPHIC */1639}1640 1641