1568 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_vshrnbq_n_s16(10// CHECK-NEXT: entry:11// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 3, i32 0, i32 0, i32 0, i32 0, i32 0)12// CHECK-NEXT: ret <16 x i8> [[TMP0]]13//14int8x16_t test_vshrnbq_n_s16(int8x16_t a, int16x8_t b)15{16#ifdef POLYMORPHIC17 return vshrnbq(a, b, 3);18#else /* POLYMORPHIC */19 return vshrnbq_n_s16(a, b, 3);20#endif /* POLYMORPHIC */21}22 23// CHECK-LABEL: @test_vshrnbq_n_s32(24// CHECK-NEXT: entry:25// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 9, i32 0, i32 0, i32 0, i32 0, i32 0)26// CHECK-NEXT: ret <8 x i16> [[TMP0]]27//28int16x8_t test_vshrnbq_n_s32(int16x8_t a, int32x4_t b)29{30#ifdef POLYMORPHIC31 return vshrnbq(a, b, 9);32#else /* POLYMORPHIC */33 return vshrnbq_n_s32(a, b, 9);34#endif /* POLYMORPHIC */35}36 37// CHECK-LABEL: @test_vshrnbq_n_u16(38// CHECK-NEXT: entry:39// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 0, i32 0, i32 1, i32 1, i32 0)40// CHECK-NEXT: ret <16 x i8> [[TMP0]]41//42uint8x16_t test_vshrnbq_n_u16(uint8x16_t a, uint16x8_t b)43{44#ifdef POLYMORPHIC45 return vshrnbq(a, b, 1);46#else /* POLYMORPHIC */47 return vshrnbq_n_u16(a, b, 1);48#endif /* POLYMORPHIC */49}50 51// CHECK-LABEL: @test_vshrnbq_n_u32(52// CHECK-NEXT: entry:53// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 3, i32 0, i32 0, i32 1, i32 1, i32 0)54// CHECK-NEXT: ret <8 x i16> [[TMP0]]55//56uint16x8_t test_vshrnbq_n_u32(uint16x8_t a, uint32x4_t b)57{58#ifdef POLYMORPHIC59 return vshrnbq(a, b, 3);60#else /* POLYMORPHIC */61 return vshrnbq_n_u32(a, b, 3);62#endif /* POLYMORPHIC */63}64 65// CHECK-LABEL: @test_vshrntq_n_s16(66// CHECK-NEXT: entry:67// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 0, i32 0, i32 0, i32 0, i32 1)68// CHECK-NEXT: ret <16 x i8> [[TMP0]]69//70int8x16_t test_vshrntq_n_s16(int8x16_t a, int16x8_t b)71{72#ifdef POLYMORPHIC73 return vshrntq(a, b, 1);74#else /* POLYMORPHIC */75 return vshrntq_n_s16(a, b, 1);76#endif /* POLYMORPHIC */77}78 79// CHECK-LABEL: @test_vshrntq_n_s32(80// CHECK-NEXT: entry:81// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 10, i32 0, i32 0, i32 0, i32 0, i32 1)82// CHECK-NEXT: ret <8 x i16> [[TMP0]]83//84int16x8_t test_vshrntq_n_s32(int16x8_t a, int32x4_t b)85{86#ifdef POLYMORPHIC87 return vshrntq(a, b, 10);88#else /* POLYMORPHIC */89 return vshrntq_n_s32(a, b, 10);90#endif /* POLYMORPHIC */91}92 93// CHECK-LABEL: @test_vshrntq_n_u16(94// CHECK-NEXT: entry:95// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 6, i32 0, i32 0, i32 1, i32 1, i32 1)96// CHECK-NEXT: ret <16 x i8> [[TMP0]]97//98uint8x16_t test_vshrntq_n_u16(uint8x16_t a, uint16x8_t b)99{100#ifdef POLYMORPHIC101 return vshrntq(a, b, 6);102#else /* POLYMORPHIC */103 return vshrntq_n_u16(a, b, 6);104#endif /* POLYMORPHIC */105}106 107// CHECK-LABEL: @test_vshrntq_n_u32(108// CHECK-NEXT: entry:109// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 10, i32 0, i32 0, i32 1, i32 1, i32 1)110// CHECK-NEXT: ret <8 x i16> [[TMP0]]111//112uint16x8_t test_vshrntq_n_u32(uint16x8_t a, uint32x4_t b)113{114#ifdef POLYMORPHIC115 return vshrntq(a, b, 10);116#else /* POLYMORPHIC */117 return vshrntq_n_u32(a, b, 10);118#endif /* POLYMORPHIC */119}120 121// CHECK-LABEL: @test_vshrnbq_m_n_s16(122// CHECK-NEXT: entry:123// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32124// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])125// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 4, i32 0, i32 0, i32 0, i32 0, i32 0, <8 x i1> [[TMP1]])126// CHECK-NEXT: ret <16 x i8> [[TMP2]]127//128int8x16_t test_vshrnbq_m_n_s16(int8x16_t a, int16x8_t b, mve_pred16_t p)129{130#ifdef POLYMORPHIC131 return vshrnbq_m(a, b, 4, p);132#else /* POLYMORPHIC */133 return vshrnbq_m_n_s16(a, b, 4, p);134#endif /* POLYMORPHIC */135}136 137// CHECK-LABEL: @test_vshrnbq_m_n_s32(138// CHECK-NEXT: entry:139// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32140// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])141// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 13, i32 0, i32 0, i32 0, i32 0, i32 0, <4 x i1> [[TMP1]])142// CHECK-NEXT: ret <8 x i16> [[TMP2]]143//144int16x8_t test_vshrnbq_m_n_s32(int16x8_t a, int32x4_t b, mve_pred16_t p)145{146#ifdef POLYMORPHIC147 return vshrnbq_m(a, b, 13, p);148#else /* POLYMORPHIC */149 return vshrnbq_m_n_s32(a, b, 13, p);150#endif /* POLYMORPHIC */151}152 153// CHECK-LABEL: @test_vshrnbq_m_n_u16(154// CHECK-NEXT: entry:155// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32156// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])157// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 7, i32 0, i32 0, i32 1, i32 1, i32 0, <8 x i1> [[TMP1]])158// CHECK-NEXT: ret <16 x i8> [[TMP2]]159//160uint8x16_t test_vshrnbq_m_n_u16(uint8x16_t a, uint16x8_t b, mve_pred16_t p)161{162#ifdef POLYMORPHIC163 return vshrnbq_m(a, b, 7, p);164#else /* POLYMORPHIC */165 return vshrnbq_m_n_u16(a, b, 7, p);166#endif /* POLYMORPHIC */167}168 169// CHECK-LABEL: @test_vshrnbq_m_n_u32(170// CHECK-NEXT: entry:171// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32172// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])173// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 15, i32 0, i32 0, i32 1, i32 1, i32 0, <4 x i1> [[TMP1]])174// CHECK-NEXT: ret <8 x i16> [[TMP2]]175//176uint16x8_t test_vshrnbq_m_n_u32(uint16x8_t a, uint32x4_t b, mve_pred16_t p)177{178#ifdef POLYMORPHIC179 return vshrnbq_m(a, b, 15, p);180#else /* POLYMORPHIC */181 return vshrnbq_m_n_u32(a, b, 15, p);182#endif /* POLYMORPHIC */183}184 185// CHECK-LABEL: @test_vshrntq_m_n_s16(186// CHECK-NEXT: entry:187// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32188// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])189// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 6, i32 0, i32 0, i32 0, i32 0, i32 1, <8 x i1> [[TMP1]])190// CHECK-NEXT: ret <16 x i8> [[TMP2]]191//192int8x16_t test_vshrntq_m_n_s16(int8x16_t a, int16x8_t b, mve_pred16_t p)193{194#ifdef POLYMORPHIC195 return vshrntq_m(a, b, 6, p);196#else /* POLYMORPHIC */197 return vshrntq_m_n_s16(a, b, 6, p);198#endif /* POLYMORPHIC */199}200 201// CHECK-LABEL: @test_vshrntq_m_n_s32(202// CHECK-NEXT: entry:203// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32204// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])205// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 13, i32 0, i32 0, i32 0, i32 0, i32 1, <4 x i1> [[TMP1]])206// CHECK-NEXT: ret <8 x i16> [[TMP2]]207//208int16x8_t test_vshrntq_m_n_s32(int16x8_t a, int32x4_t b, mve_pred16_t p)209{210#ifdef POLYMORPHIC211 return vshrntq_m(a, b, 13, p);212#else /* POLYMORPHIC */213 return vshrntq_m_n_s32(a, b, 13, p);214#endif /* POLYMORPHIC */215}216 217// CHECK-LABEL: @test_vshrntq_m_n_u16(218// CHECK-NEXT: entry:219// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32220// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])221// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 0, i32 0, i32 1, i32 1, i32 1, <8 x i1> [[TMP1]])222// CHECK-NEXT: ret <16 x i8> [[TMP2]]223//224uint8x16_t test_vshrntq_m_n_u16(uint8x16_t a, uint16x8_t b, mve_pred16_t p)225{226#ifdef POLYMORPHIC227 return vshrntq_m(a, b, 1, p);228#else /* POLYMORPHIC */229 return vshrntq_m_n_u16(a, b, 1, p);230#endif /* POLYMORPHIC */231}232 233// CHECK-LABEL: @test_vshrntq_m_n_u32(234// CHECK-NEXT: entry:235// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32236// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])237// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 10, i32 0, i32 0, i32 1, i32 1, i32 1, <4 x i1> [[TMP1]])238// CHECK-NEXT: ret <8 x i16> [[TMP2]]239//240uint16x8_t test_vshrntq_m_n_u32(uint16x8_t a, uint32x4_t b, mve_pred16_t p)241{242#ifdef POLYMORPHIC243 return vshrntq_m(a, b, 10, p);244#else /* POLYMORPHIC */245 return vshrntq_m_n_u32(a, b, 10, p);246#endif /* POLYMORPHIC */247}248 249// CHECK-LABEL: @test_vrshrnbq_n_s16(250// CHECK-NEXT: entry:251// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 5, i32 0, i32 1, i32 0, i32 0, i32 0)252// CHECK-NEXT: ret <16 x i8> [[TMP0]]253//254int8x16_t test_vrshrnbq_n_s16(int8x16_t a, int16x8_t b)255{256#ifdef POLYMORPHIC257 return vrshrnbq(a, b, 5);258#else /* POLYMORPHIC */259 return vrshrnbq_n_s16(a, b, 5);260#endif /* POLYMORPHIC */261}262 263// CHECK-LABEL: @test_vrshrnbq_n_s32(264// CHECK-NEXT: entry:265// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 10, i32 0, i32 1, i32 0, i32 0, i32 0)266// CHECK-NEXT: ret <8 x i16> [[TMP0]]267//268int16x8_t test_vrshrnbq_n_s32(int16x8_t a, int32x4_t b)269{270#ifdef POLYMORPHIC271 return vrshrnbq(a, b, 10);272#else /* POLYMORPHIC */273 return vrshrnbq_n_s32(a, b, 10);274#endif /* POLYMORPHIC */275}276 277// CHECK-LABEL: @test_vrshrnbq_n_u16(278// CHECK-NEXT: entry:279// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 2, i32 0, i32 1, i32 1, i32 1, i32 0)280// CHECK-NEXT: ret <16 x i8> [[TMP0]]281//282uint8x16_t test_vrshrnbq_n_u16(uint8x16_t a, uint16x8_t b)283{284#ifdef POLYMORPHIC285 return vrshrnbq(a, b, 2);286#else /* POLYMORPHIC */287 return vrshrnbq_n_u16(a, b, 2);288#endif /* POLYMORPHIC */289}290 291// CHECK-LABEL: @test_vrshrnbq_n_u32(292// CHECK-NEXT: entry:293// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 12, i32 0, i32 1, i32 1, i32 1, i32 0)294// CHECK-NEXT: ret <8 x i16> [[TMP0]]295//296uint16x8_t test_vrshrnbq_n_u32(uint16x8_t a, uint32x4_t b)297{298#ifdef POLYMORPHIC299 return vrshrnbq(a, b, 12);300#else /* POLYMORPHIC */301 return vrshrnbq_n_u32(a, b, 12);302#endif /* POLYMORPHIC */303}304 305// CHECK-LABEL: @test_vrshrntq_n_s16(306// CHECK-NEXT: entry:307// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 4, i32 0, i32 1, i32 0, i32 0, i32 1)308// CHECK-NEXT: ret <16 x i8> [[TMP0]]309//310int8x16_t test_vrshrntq_n_s16(int8x16_t a, int16x8_t b)311{312#ifdef POLYMORPHIC313 return vrshrntq(a, b, 4);314#else /* POLYMORPHIC */315 return vrshrntq_n_s16(a, b, 4);316#endif /* POLYMORPHIC */317}318 319// CHECK-LABEL: @test_vrshrntq_n_s32(320// CHECK-NEXT: entry:321// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 11, i32 0, i32 1, i32 0, i32 0, i32 1)322// CHECK-NEXT: ret <8 x i16> [[TMP0]]323//324int16x8_t test_vrshrntq_n_s32(int16x8_t a, int32x4_t b)325{326#ifdef POLYMORPHIC327 return vrshrntq(a, b, 11);328#else /* POLYMORPHIC */329 return vrshrntq_n_s32(a, b, 11);330#endif /* POLYMORPHIC */331}332 333// CHECK-LABEL: @test_vrshrntq_n_u16(334// CHECK-NEXT: entry:335// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 0, i32 1, i32 1, i32 1, i32 1)336// CHECK-NEXT: ret <16 x i8> [[TMP0]]337//338uint8x16_t test_vrshrntq_n_u16(uint8x16_t a, uint16x8_t b)339{340#ifdef POLYMORPHIC341 return vrshrntq(a, b, 1);342#else /* POLYMORPHIC */343 return vrshrntq_n_u16(a, b, 1);344#endif /* POLYMORPHIC */345}346 347// CHECK-LABEL: @test_vrshrntq_n_u32(348// CHECK-NEXT: entry:349// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 6, i32 0, i32 1, i32 1, i32 1, i32 1)350// CHECK-NEXT: ret <8 x i16> [[TMP0]]351//352uint16x8_t test_vrshrntq_n_u32(uint16x8_t a, uint32x4_t b)353{354#ifdef POLYMORPHIC355 return vrshrntq(a, b, 6);356#else /* POLYMORPHIC */357 return vrshrntq_n_u32(a, b, 6);358#endif /* POLYMORPHIC */359}360 361// CHECK-LABEL: @test_vrshrnbq_m_n_s16(362// CHECK-NEXT: entry:363// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32364// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])365// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 0, i32 1, i32 0, i32 0, i32 0, <8 x i1> [[TMP1]])366// CHECK-NEXT: ret <16 x i8> [[TMP2]]367//368int8x16_t test_vrshrnbq_m_n_s16(int8x16_t a, int16x8_t b, mve_pred16_t p)369{370#ifdef POLYMORPHIC371 return vrshrnbq_m(a, b, 1, p);372#else /* POLYMORPHIC */373 return vrshrnbq_m_n_s16(a, b, 1, p);374#endif /* POLYMORPHIC */375}376 377// CHECK-LABEL: @test_vrshrnbq_m_n_s32(378// CHECK-NEXT: entry:379// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32380// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])381// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 14, i32 0, i32 1, i32 0, i32 0, i32 0, <4 x i1> [[TMP1]])382// CHECK-NEXT: ret <8 x i16> [[TMP2]]383//384int16x8_t test_vrshrnbq_m_n_s32(int16x8_t a, int32x4_t b, mve_pred16_t p)385{386#ifdef POLYMORPHIC387 return vrshrnbq_m(a, b, 14, p);388#else /* POLYMORPHIC */389 return vrshrnbq_m_n_s32(a, b, 14, p);390#endif /* POLYMORPHIC */391}392 393// CHECK-LABEL: @test_vrshrnbq_m_n_u16(394// CHECK-NEXT: entry:395// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32396// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])397// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 2, i32 0, i32 1, i32 1, i32 1, i32 0, <8 x i1> [[TMP1]])398// CHECK-NEXT: ret <16 x i8> [[TMP2]]399//400uint8x16_t test_vrshrnbq_m_n_u16(uint8x16_t a, uint16x8_t b, mve_pred16_t p)401{402#ifdef POLYMORPHIC403 return vrshrnbq_m(a, b, 2, p);404#else /* POLYMORPHIC */405 return vrshrnbq_m_n_u16(a, b, 2, p);406#endif /* POLYMORPHIC */407}408 409// CHECK-LABEL: @test_vrshrnbq_m_n_u32(410// CHECK-NEXT: entry:411// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32412// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])413// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 12, i32 0, i32 1, i32 1, i32 1, i32 0, <4 x i1> [[TMP1]])414// CHECK-NEXT: ret <8 x i16> [[TMP2]]415//416uint16x8_t test_vrshrnbq_m_n_u32(uint16x8_t a, uint32x4_t b, mve_pred16_t p)417{418#ifdef POLYMORPHIC419 return vrshrnbq_m(a, b, 12, p);420#else /* POLYMORPHIC */421 return vrshrnbq_m_n_u32(a, b, 12, p);422#endif /* POLYMORPHIC */423}424 425// CHECK-LABEL: @test_vrshrntq_m_n_s16(426// CHECK-NEXT: entry:427// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32428// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])429// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 4, i32 0, i32 1, i32 0, i32 0, i32 1, <8 x i1> [[TMP1]])430// CHECK-NEXT: ret <16 x i8> [[TMP2]]431//432int8x16_t test_vrshrntq_m_n_s16(int8x16_t a, int16x8_t b, mve_pred16_t p)433{434#ifdef POLYMORPHIC435 return vrshrntq_m(a, b, 4, p);436#else /* POLYMORPHIC */437 return vrshrntq_m_n_s16(a, b, 4, p);438#endif /* POLYMORPHIC */439}440 441// CHECK-LABEL: @test_vrshrntq_m_n_s32(442// CHECK-NEXT: entry:443// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32444// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])445// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 6, i32 0, i32 1, i32 0, i32 0, i32 1, <4 x i1> [[TMP1]])446// CHECK-NEXT: ret <8 x i16> [[TMP2]]447//448int16x8_t test_vrshrntq_m_n_s32(int16x8_t a, int32x4_t b, mve_pred16_t p)449{450#ifdef POLYMORPHIC451 return vrshrntq_m(a, b, 6, p);452#else /* POLYMORPHIC */453 return vrshrntq_m_n_s32(a, b, 6, p);454#endif /* POLYMORPHIC */455}456 457// CHECK-LABEL: @test_vrshrntq_m_n_u16(458// CHECK-NEXT: entry:459// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32460// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])461// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 6, i32 0, i32 1, i32 1, i32 1, i32 1, <8 x i1> [[TMP1]])462// CHECK-NEXT: ret <16 x i8> [[TMP2]]463//464uint8x16_t test_vrshrntq_m_n_u16(uint8x16_t a, uint16x8_t b, mve_pred16_t p)465{466#ifdef POLYMORPHIC467 return vrshrntq_m(a, b, 6, p);468#else /* POLYMORPHIC */469 return vrshrntq_m_n_u16(a, b, 6, p);470#endif /* POLYMORPHIC */471}472 473// CHECK-LABEL: @test_vrshrntq_m_n_u32(474// CHECK-NEXT: entry:475// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32476// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])477// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 10, i32 0, i32 1, i32 1, i32 1, i32 1, <4 x i1> [[TMP1]])478// CHECK-NEXT: ret <8 x i16> [[TMP2]]479//480uint16x8_t test_vrshrntq_m_n_u32(uint16x8_t a, uint32x4_t b, mve_pred16_t p)481{482#ifdef POLYMORPHIC483 return vrshrntq_m(a, b, 10, p);484#else /* POLYMORPHIC */485 return vrshrntq_m_n_u32(a, b, 10, p);486#endif /* POLYMORPHIC */487}488 489// CHECK-LABEL: @test_vqshrnbq_n_s16(490// CHECK-NEXT: entry:491// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 7, i32 1, i32 0, i32 0, i32 0, i32 0)492// CHECK-NEXT: ret <16 x i8> [[TMP0]]493//494int8x16_t test_vqshrnbq_n_s16(int8x16_t a, int16x8_t b)495{496#ifdef POLYMORPHIC497 return vqshrnbq(a, b, 7);498#else /* POLYMORPHIC */499 return vqshrnbq_n_s16(a, b, 7);500#endif /* POLYMORPHIC */501}502 503// CHECK-LABEL: @test_vqshrnbq_n_s32(504// CHECK-NEXT: entry:505// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 15, i32 1, i32 0, i32 0, i32 0, i32 0)506// CHECK-NEXT: ret <8 x i16> [[TMP0]]507//508int16x8_t test_vqshrnbq_n_s32(int16x8_t a, int32x4_t b)509{510#ifdef POLYMORPHIC511 return vqshrnbq(a, b, 15);512#else /* POLYMORPHIC */513 return vqshrnbq_n_s32(a, b, 15);514#endif /* POLYMORPHIC */515}516 517// CHECK-LABEL: @test_vqshrnbq_n_u16(518// CHECK-NEXT: entry:519// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 3, i32 1, i32 0, i32 1, i32 1, i32 0)520// CHECK-NEXT: ret <16 x i8> [[TMP0]]521//522uint8x16_t test_vqshrnbq_n_u16(uint8x16_t a, uint16x8_t b)523{524#ifdef POLYMORPHIC525 return vqshrnbq(a, b, 3);526#else /* POLYMORPHIC */527 return vqshrnbq_n_u16(a, b, 3);528#endif /* POLYMORPHIC */529}530 531// CHECK-LABEL: @test_vqshrnbq_n_u32(532// CHECK-NEXT: entry:533// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 3, i32 1, i32 0, i32 1, i32 1, i32 0)534// CHECK-NEXT: ret <8 x i16> [[TMP0]]535//536uint16x8_t test_vqshrnbq_n_u32(uint16x8_t a, uint32x4_t b)537{538#ifdef POLYMORPHIC539 return vqshrnbq(a, b, 3);540#else /* POLYMORPHIC */541 return vqshrnbq_n_u32(a, b, 3);542#endif /* POLYMORPHIC */543}544 545// CHECK-LABEL: @test_vqshrntq_n_s16(546// CHECK-NEXT: entry:547// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 5, i32 1, i32 0, i32 0, i32 0, i32 1)548// CHECK-NEXT: ret <16 x i8> [[TMP0]]549//550int8x16_t test_vqshrntq_n_s16(int8x16_t a, int16x8_t b)551{552#ifdef POLYMORPHIC553 return vqshrntq(a, b, 5);554#else /* POLYMORPHIC */555 return vqshrntq_n_s16(a, b, 5);556#endif /* POLYMORPHIC */557}558 559// CHECK-LABEL: @test_vqshrntq_n_s32(560// CHECK-NEXT: entry:561// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 6, i32 1, i32 0, i32 0, i32 0, i32 1)562// CHECK-NEXT: ret <8 x i16> [[TMP0]]563//564int16x8_t test_vqshrntq_n_s32(int16x8_t a, int32x4_t b)565{566#ifdef POLYMORPHIC567 return vqshrntq(a, b, 6);568#else /* POLYMORPHIC */569 return vqshrntq_n_s32(a, b, 6);570#endif /* POLYMORPHIC */571}572 573// CHECK-LABEL: @test_vqshrntq_n_u16(574// CHECK-NEXT: entry:575// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 1, i32 0, i32 1, i32 1, i32 1)576// CHECK-NEXT: ret <16 x i8> [[TMP0]]577//578uint8x16_t test_vqshrntq_n_u16(uint8x16_t a, uint16x8_t b)579{580#ifdef POLYMORPHIC581 return vqshrntq(a, b, 1);582#else /* POLYMORPHIC */583 return vqshrntq_n_u16(a, b, 1);584#endif /* POLYMORPHIC */585}586 587// CHECK-LABEL: @test_vqshrntq_n_u32(588// CHECK-NEXT: entry:589// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 15, i32 1, i32 0, i32 1, i32 1, i32 1)590// CHECK-NEXT: ret <8 x i16> [[TMP0]]591//592uint16x8_t test_vqshrntq_n_u32(uint16x8_t a, uint32x4_t b)593{594#ifdef POLYMORPHIC595 return vqshrntq(a, b, 15);596#else /* POLYMORPHIC */597 return vqshrntq_n_u32(a, b, 15);598#endif /* POLYMORPHIC */599}600 601// CHECK-LABEL: @test_vqshrnbq_m_n_s16(602// CHECK-NEXT: entry:603// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32604// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])605// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 7, i32 1, i32 0, i32 0, i32 0, i32 0, <8 x i1> [[TMP1]])606// CHECK-NEXT: ret <16 x i8> [[TMP2]]607//608int8x16_t test_vqshrnbq_m_n_s16(int8x16_t a, int16x8_t b, mve_pred16_t p)609{610#ifdef POLYMORPHIC611 return vqshrnbq_m(a, b, 7, p);612#else /* POLYMORPHIC */613 return vqshrnbq_m_n_s16(a, b, 7, p);614#endif /* POLYMORPHIC */615}616 617// CHECK-LABEL: @test_vqshrnbq_m_n_s32(618// CHECK-NEXT: entry:619// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32620// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])621// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 1, i32 0, i32 0, i32 0, i32 0, <4 x i1> [[TMP1]])622// CHECK-NEXT: ret <8 x i16> [[TMP2]]623//624int16x8_t test_vqshrnbq_m_n_s32(int16x8_t a, int32x4_t b, mve_pred16_t p)625{626#ifdef POLYMORPHIC627 return vqshrnbq_m(a, b, 1, p);628#else /* POLYMORPHIC */629 return vqshrnbq_m_n_s32(a, b, 1, p);630#endif /* POLYMORPHIC */631}632 633// CHECK-LABEL: @test_vqshrnbq_m_n_u16(634// CHECK-NEXT: entry:635// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32636// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])637// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 1, i32 0, i32 1, i32 1, i32 0, <8 x i1> [[TMP1]])638// CHECK-NEXT: ret <16 x i8> [[TMP2]]639//640uint8x16_t test_vqshrnbq_m_n_u16(uint8x16_t a, uint16x8_t b, mve_pred16_t p)641{642#ifdef POLYMORPHIC643 return vqshrnbq_m(a, b, 1, p);644#else /* POLYMORPHIC */645 return vqshrnbq_m_n_u16(a, b, 1, p);646#endif /* POLYMORPHIC */647}648 649// CHECK-LABEL: @test_vqshrnbq_m_n_u32(650// CHECK-NEXT: entry:651// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32652// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])653// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 8, i32 1, i32 0, i32 1, i32 1, i32 0, <4 x i1> [[TMP1]])654// CHECK-NEXT: ret <8 x i16> [[TMP2]]655//656uint16x8_t test_vqshrnbq_m_n_u32(uint16x8_t a, uint32x4_t b, mve_pred16_t p)657{658#ifdef POLYMORPHIC659 return vqshrnbq_m(a, b, 8, p);660#else /* POLYMORPHIC */661 return vqshrnbq_m_n_u32(a, b, 8, p);662#endif /* POLYMORPHIC */663}664 665// CHECK-LABEL: @test_vqshrntq_m_n_s16(666// CHECK-NEXT: entry:667// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32668// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])669// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 1, i32 0, i32 0, i32 0, i32 1, <8 x i1> [[TMP1]])670// CHECK-NEXT: ret <16 x i8> [[TMP2]]671//672int8x16_t test_vqshrntq_m_n_s16(int8x16_t a, int16x8_t b, mve_pred16_t p)673{674#ifdef POLYMORPHIC675 return vqshrntq_m(a, b, 1, p);676#else /* POLYMORPHIC */677 return vqshrntq_m_n_s16(a, b, 1, p);678#endif /* POLYMORPHIC */679}680 681// CHECK-LABEL: @test_vqshrntq_m_n_s32(682// CHECK-NEXT: entry:683// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32684// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])685// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 11, i32 1, i32 0, i32 0, i32 0, i32 1, <4 x i1> [[TMP1]])686// CHECK-NEXT: ret <8 x i16> [[TMP2]]687//688int16x8_t test_vqshrntq_m_n_s32(int16x8_t a, int32x4_t b, mve_pred16_t p)689{690#ifdef POLYMORPHIC691 return vqshrntq_m(a, b, 11, p);692#else /* POLYMORPHIC */693 return vqshrntq_m_n_s32(a, b, 11, p);694#endif /* POLYMORPHIC */695}696 697// CHECK-LABEL: @test_vqshrntq_m_n_u16(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 <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 3, i32 1, i32 0, i32 1, i32 1, i32 1, <8 x i1> [[TMP1]])702// CHECK-NEXT: ret <16 x i8> [[TMP2]]703//704uint8x16_t test_vqshrntq_m_n_u16(uint8x16_t a, uint16x8_t b, mve_pred16_t p)705{706#ifdef POLYMORPHIC707 return vqshrntq_m(a, b, 3, p);708#else /* POLYMORPHIC */709 return vqshrntq_m_n_u16(a, b, 3, p);710#endif /* POLYMORPHIC */711}712 713// CHECK-LABEL: @test_vqshrntq_m_n_u32(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 <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, <4 x i1> [[TMP1]])718// CHECK-NEXT: ret <8 x i16> [[TMP2]]719//720uint16x8_t test_vqshrntq_m_n_u32(uint16x8_t a, uint32x4_t b, mve_pred16_t p)721{722#ifdef POLYMORPHIC723 return vqshrntq_m(a, b, 1, p);724#else /* POLYMORPHIC */725 return vqshrntq_m_n_u32(a, b, 1, p);726#endif /* POLYMORPHIC */727}728 729// CHECK-LABEL: @test_vqshrunbq_n_s16(730// CHECK-NEXT: entry:731// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 5, i32 1, i32 0, i32 1, i32 0, i32 0)732// CHECK-NEXT: ret <16 x i8> [[TMP0]]733//734uint8x16_t test_vqshrunbq_n_s16(uint8x16_t a, int16x8_t b)735{736#ifdef POLYMORPHIC737 return vqshrunbq(a, b, 5);738#else /* POLYMORPHIC */739 return vqshrunbq_n_s16(a, b, 5);740#endif /* POLYMORPHIC */741}742 743// CHECK-LABEL: @test_vqshrunbq_n_s32(744// CHECK-NEXT: entry:745// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 13, i32 1, i32 0, i32 1, i32 0, i32 0)746// CHECK-NEXT: ret <8 x i16> [[TMP0]]747//748uint16x8_t test_vqshrunbq_n_s32(uint16x8_t a, int32x4_t b)749{750#ifdef POLYMORPHIC751 return vqshrunbq(a, b, 13);752#else /* POLYMORPHIC */753 return vqshrunbq_n_s32(a, b, 13);754#endif /* POLYMORPHIC */755}756 757// CHECK-LABEL: @test_vqshruntq_n_s16(758// CHECK-NEXT: entry:759// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 2, i32 1, i32 0, i32 1, i32 0, i32 1)760// CHECK-NEXT: ret <16 x i8> [[TMP0]]761//762uint8x16_t test_vqshruntq_n_s16(uint8x16_t a, int16x8_t b)763{764#ifdef POLYMORPHIC765 return vqshruntq(a, b, 2);766#else /* POLYMORPHIC */767 return vqshruntq_n_s16(a, b, 2);768#endif /* POLYMORPHIC */769}770 771// CHECK-LABEL: @test_vqshruntq_n_s32(772// CHECK-NEXT: entry:773// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 7, i32 1, i32 0, i32 1, i32 0, i32 1)774// CHECK-NEXT: ret <8 x i16> [[TMP0]]775//776uint16x8_t test_vqshruntq_n_s32(uint16x8_t a, int32x4_t b)777{778#ifdef POLYMORPHIC779 return vqshruntq(a, b, 7);780#else /* POLYMORPHIC */781 return vqshruntq_n_s32(a, b, 7);782#endif /* POLYMORPHIC */783}784 785// CHECK-LABEL: @test_vqshrunbq_m_n_s16(786// CHECK-NEXT: entry:787// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32788// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])789// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 7, i32 1, i32 0, i32 1, i32 0, i32 0, <8 x i1> [[TMP1]])790// CHECK-NEXT: ret <16 x i8> [[TMP2]]791//792uint8x16_t test_vqshrunbq_m_n_s16(uint8x16_t a, int16x8_t b, mve_pred16_t p)793{794#ifdef POLYMORPHIC795 return vqshrunbq_m(a, b, 7, p);796#else /* POLYMORPHIC */797 return vqshrunbq_m_n_s16(a, b, 7, p);798#endif /* POLYMORPHIC */799}800 801// CHECK-LABEL: @test_vqshrunbq_m_n_s32(802// CHECK-NEXT: entry:803// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32804// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])805// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 7, i32 1, i32 0, i32 1, i32 0, i32 0, <4 x i1> [[TMP1]])806// CHECK-NEXT: ret <8 x i16> [[TMP2]]807//808uint16x8_t test_vqshrunbq_m_n_s32(uint16x8_t a, int32x4_t b, mve_pred16_t p)809{810#ifdef POLYMORPHIC811 return vqshrunbq_m(a, b, 7, p);812#else /* POLYMORPHIC */813 return vqshrunbq_m_n_s32(a, b, 7, p);814#endif /* POLYMORPHIC */815}816 817// CHECK-LABEL: @test_vqshruntq_m_n_s16(818// CHECK-NEXT: entry:819// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32820// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])821// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 7, i32 1, i32 0, i32 1, i32 0, i32 1, <8 x i1> [[TMP1]])822// CHECK-NEXT: ret <16 x i8> [[TMP2]]823//824uint8x16_t test_vqshruntq_m_n_s16(uint8x16_t a, int16x8_t b, mve_pred16_t p)825{826#ifdef POLYMORPHIC827 return vqshruntq_m(a, b, 7, p);828#else /* POLYMORPHIC */829 return vqshruntq_m_n_s16(a, b, 7, p);830#endif /* POLYMORPHIC */831}832 833// CHECK-LABEL: @test_vqshruntq_m_n_s32(834// CHECK-NEXT: entry:835// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32836// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])837// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 7, i32 1, i32 0, i32 1, i32 0, i32 1, <4 x i1> [[TMP1]])838// CHECK-NEXT: ret <8 x i16> [[TMP2]]839//840uint16x8_t test_vqshruntq_m_n_s32(uint16x8_t a, int32x4_t b, mve_pred16_t p)841{842#ifdef POLYMORPHIC843 return vqshruntq_m(a, b, 7, p);844#else /* POLYMORPHIC */845 return vqshruntq_m_n_s32(a, b, 7, p);846#endif /* POLYMORPHIC */847}848 849// CHECK-LABEL: @test_vqrshrnbq_n_s16(850// CHECK-NEXT: entry:851// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 5, i32 1, i32 1, i32 0, i32 0, i32 0)852// CHECK-NEXT: ret <16 x i8> [[TMP0]]853//854int8x16_t test_vqrshrnbq_n_s16(int8x16_t a, int16x8_t b)855{856#ifdef POLYMORPHIC857 return vqrshrnbq(a, b, 5);858#else /* POLYMORPHIC */859 return vqrshrnbq_n_s16(a, b, 5);860#endif /* POLYMORPHIC */861}862 863// CHECK-LABEL: @test_vqrshrnbq_n_s32(864// CHECK-NEXT: entry:865// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 13, i32 1, i32 1, i32 0, i32 0, i32 0)866// CHECK-NEXT: ret <8 x i16> [[TMP0]]867//868int16x8_t test_vqrshrnbq_n_s32(int16x8_t a, int32x4_t b)869{870#ifdef POLYMORPHIC871 return vqrshrnbq(a, b, 13);872#else /* POLYMORPHIC */873 return vqrshrnbq_n_s32(a, b, 13);874#endif /* POLYMORPHIC */875}876 877// CHECK-LABEL: @test_vqrshrnbq_n_u16(878// CHECK-NEXT: entry:879// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 7, i32 1, i32 1, i32 1, i32 1, i32 0)880// CHECK-NEXT: ret <16 x i8> [[TMP0]]881//882uint8x16_t test_vqrshrnbq_n_u16(uint8x16_t a, uint16x8_t b)883{884#ifdef POLYMORPHIC885 return vqrshrnbq(a, b, 7);886#else /* POLYMORPHIC */887 return vqrshrnbq_n_u16(a, b, 7);888#endif /* POLYMORPHIC */889}890 891// CHECK-LABEL: @test_vqrshrnbq_n_u32(892// CHECK-NEXT: entry:893// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 8, i32 1, i32 1, i32 1, i32 1, i32 0)894// CHECK-NEXT: ret <8 x i16> [[TMP0]]895//896uint16x8_t test_vqrshrnbq_n_u32(uint16x8_t a, uint32x4_t b)897{898#ifdef POLYMORPHIC899 return vqrshrnbq(a, b, 8);900#else /* POLYMORPHIC */901 return vqrshrnbq_n_u32(a, b, 8);902#endif /* POLYMORPHIC */903}904 905// CHECK-LABEL: @test_vqrshrntq_n_s16(906// CHECK-NEXT: entry:907// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 7, i32 1, i32 1, i32 0, i32 0, i32 1)908// CHECK-NEXT: ret <16 x i8> [[TMP0]]909//910int8x16_t test_vqrshrntq_n_s16(int8x16_t a, int16x8_t b)911{912#ifdef POLYMORPHIC913 return vqrshrntq(a, b, 7);914#else /* POLYMORPHIC */915 return vqrshrntq_n_s16(a, b, 7);916#endif /* POLYMORPHIC */917}918 919// CHECK-LABEL: @test_vqrshrntq_n_s32(920// CHECK-NEXT: entry:921// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 2, i32 1, i32 1, i32 0, i32 0, i32 1)922// CHECK-NEXT: ret <8 x i16> [[TMP0]]923//924int16x8_t test_vqrshrntq_n_s32(int16x8_t a, int32x4_t b)925{926#ifdef POLYMORPHIC927 return vqrshrntq(a, b, 2);928#else /* POLYMORPHIC */929 return vqrshrntq_n_s32(a, b, 2);930#endif /* POLYMORPHIC */931}932 933// CHECK-LABEL: @test_vqrshrntq_n_u16(934// CHECK-NEXT: entry:935// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 1, i32 1, i32 1, i32 1, i32 1)936// CHECK-NEXT: ret <16 x i8> [[TMP0]]937//938uint8x16_t test_vqrshrntq_n_u16(uint8x16_t a, uint16x8_t b)939{940#ifdef POLYMORPHIC941 return vqrshrntq(a, b, 1);942#else /* POLYMORPHIC */943 return vqrshrntq_n_u16(a, b, 1);944#endif /* POLYMORPHIC */945}946 947// CHECK-LABEL: @test_vqrshrntq_n_u32(948// CHECK-NEXT: entry:949// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 11, i32 1, i32 1, i32 1, i32 1, i32 1)950// CHECK-NEXT: ret <8 x i16> [[TMP0]]951//952uint16x8_t test_vqrshrntq_n_u32(uint16x8_t a, uint32x4_t b)953{954#ifdef POLYMORPHIC955 return vqrshrntq(a, b, 11);956#else /* POLYMORPHIC */957 return vqrshrntq_n_u32(a, b, 11);958#endif /* POLYMORPHIC */959}960 961// CHECK-LABEL: @test_vqrshrnbq_m_n_s16(962// CHECK-NEXT: entry:963// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32964// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])965// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 2, i32 1, i32 1, i32 0, i32 0, i32 0, <8 x i1> [[TMP1]])966// CHECK-NEXT: ret <16 x i8> [[TMP2]]967//968int8x16_t test_vqrshrnbq_m_n_s16(int8x16_t a, int16x8_t b, mve_pred16_t p)969{970#ifdef POLYMORPHIC971 return vqrshrnbq_m(a, b, 2, p);972#else /* POLYMORPHIC */973 return vqrshrnbq_m_n_s16(a, b, 2, p);974#endif /* POLYMORPHIC */975}976 977// CHECK-LABEL: @test_vqrshrnbq_m_n_s32(978// CHECK-NEXT: entry:979// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32980// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])981// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 12, i32 1, i32 1, i32 0, i32 0, i32 0, <4 x i1> [[TMP1]])982// CHECK-NEXT: ret <8 x i16> [[TMP2]]983//984int16x8_t test_vqrshrnbq_m_n_s32(int16x8_t a, int32x4_t b, mve_pred16_t p)985{986#ifdef POLYMORPHIC987 return vqrshrnbq_m(a, b, 12, p);988#else /* POLYMORPHIC */989 return vqrshrnbq_m_n_s32(a, b, 12, p);990#endif /* POLYMORPHIC */991}992 993// CHECK-LABEL: @test_vqrshrnbq_m_n_u16(994// CHECK-NEXT: entry:995// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32996// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])997// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 5, i32 1, i32 1, i32 1, i32 1, i32 0, <8 x i1> [[TMP1]])998// CHECK-NEXT: ret <16 x i8> [[TMP2]]999//1000uint8x16_t test_vqrshrnbq_m_n_u16(uint8x16_t a, uint16x8_t b, mve_pred16_t p)1001{1002#ifdef POLYMORPHIC1003 return vqrshrnbq_m(a, b, 5, p);1004#else /* POLYMORPHIC */1005 return vqrshrnbq_m_n_u16(a, b, 5, p);1006#endif /* POLYMORPHIC */1007}1008 1009// CHECK-LABEL: @test_vqrshrnbq_m_n_u32(1010// CHECK-NEXT: entry:1011// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321012// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1013// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 11, i32 1, i32 1, i32 1, i32 1, i32 0, <4 x i1> [[TMP1]])1014// CHECK-NEXT: ret <8 x i16> [[TMP2]]1015//1016uint16x8_t test_vqrshrnbq_m_n_u32(uint16x8_t a, uint32x4_t b, mve_pred16_t p)1017{1018#ifdef POLYMORPHIC1019 return vqrshrnbq_m(a, b, 11, p);1020#else /* POLYMORPHIC */1021 return vqrshrnbq_m_n_u32(a, b, 11, p);1022#endif /* POLYMORPHIC */1023}1024 1025// CHECK-LABEL: @test_vqrshrntq_m_n_s16(1026// CHECK-NEXT: entry:1027// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321028// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1029// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 4, i32 1, i32 1, i32 0, i32 0, i32 1, <8 x i1> [[TMP1]])1030// CHECK-NEXT: ret <16 x i8> [[TMP2]]1031//1032int8x16_t test_vqrshrntq_m_n_s16(int8x16_t a, int16x8_t b, mve_pred16_t p)1033{1034#ifdef POLYMORPHIC1035 return vqrshrntq_m(a, b, 4, p);1036#else /* POLYMORPHIC */1037 return vqrshrntq_m_n_s16(a, b, 4, p);1038#endif /* POLYMORPHIC */1039}1040 1041// CHECK-LABEL: @test_vqrshrntq_m_n_s32(1042// CHECK-NEXT: entry:1043// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321044// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1045// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 6, i32 1, i32 1, i32 0, i32 0, i32 1, <4 x i1> [[TMP1]])1046// CHECK-NEXT: ret <8 x i16> [[TMP2]]1047//1048int16x8_t test_vqrshrntq_m_n_s32(int16x8_t a, int32x4_t b, mve_pred16_t p)1049{1050#ifdef POLYMORPHIC1051 return vqrshrntq_m(a, b, 6, p);1052#else /* POLYMORPHIC */1053 return vqrshrntq_m_n_s32(a, b, 6, p);1054#endif /* POLYMORPHIC */1055}1056 1057// CHECK-LABEL: @test_vqrshrntq_m_n_u16(1058// CHECK-NEXT: entry:1059// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321060// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1061// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 7, i32 1, i32 1, i32 1, i32 1, i32 1, <8 x i1> [[TMP1]])1062// CHECK-NEXT: ret <16 x i8> [[TMP2]]1063//1064uint8x16_t test_vqrshrntq_m_n_u16(uint8x16_t a, uint16x8_t b, mve_pred16_t p)1065{1066#ifdef POLYMORPHIC1067 return vqrshrntq_m(a, b, 7, p);1068#else /* POLYMORPHIC */1069 return vqrshrntq_m_n_u16(a, b, 7, p);1070#endif /* POLYMORPHIC */1071}1072 1073// CHECK-LABEL: @test_vqrshrntq_m_n_u32(1074// CHECK-NEXT: entry:1075// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321076// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1077// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 15, i32 1, i32 1, i32 1, i32 1, i32 1, <4 x i1> [[TMP1]])1078// CHECK-NEXT: ret <8 x i16> [[TMP2]]1079//1080uint16x8_t test_vqrshrntq_m_n_u32(uint16x8_t a, uint32x4_t b, mve_pred16_t p)1081{1082#ifdef POLYMORPHIC1083 return vqrshrntq_m(a, b, 15, p);1084#else /* POLYMORPHIC */1085 return vqrshrntq_m_n_u32(a, b, 15, p);1086#endif /* POLYMORPHIC */1087}1088 1089// CHECK-LABEL: @test_vqrshrunbq_n_s16(1090// CHECK-NEXT: entry:1091// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 7, i32 1, i32 1, i32 1, i32 0, i32 0)1092// CHECK-NEXT: ret <16 x i8> [[TMP0]]1093//1094uint8x16_t test_vqrshrunbq_n_s16(uint8x16_t a, int16x8_t b)1095{1096#ifdef POLYMORPHIC1097 return vqrshrunbq(a, b, 7);1098#else /* POLYMORPHIC */1099 return vqrshrunbq_n_s16(a, b, 7);1100#endif /* POLYMORPHIC */1101}1102 1103// CHECK-LABEL: @test_vqrshrunbq_n_s32(1104// CHECK-NEXT: entry:1105// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 1, i32 1, i32 1, i32 0, i32 0)1106// CHECK-NEXT: ret <8 x i16> [[TMP0]]1107//1108uint16x8_t test_vqrshrunbq_n_s32(uint16x8_t a, int32x4_t b)1109{1110#ifdef POLYMORPHIC1111 return vqrshrunbq(a, b, 1);1112#else /* POLYMORPHIC */1113 return vqrshrunbq_n_s32(a, b, 1);1114#endif /* POLYMORPHIC */1115}1116 1117// CHECK-LABEL: @test_vqrshruntq_n_s16(1118// CHECK-NEXT: entry:1119// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 1, i32 1, i32 1, i32 0, i32 1)1120// CHECK-NEXT: ret <16 x i8> [[TMP0]]1121//1122uint8x16_t test_vqrshruntq_n_s16(uint8x16_t a, int16x8_t b)1123{1124#ifdef POLYMORPHIC1125 return vqrshruntq(a, b, 1);1126#else /* POLYMORPHIC */1127 return vqrshruntq_n_s16(a, b, 1);1128#endif /* POLYMORPHIC */1129}1130 1131// CHECK-LABEL: @test_vqrshruntq_n_s32(1132// CHECK-NEXT: entry:1133// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 3, i32 1, i32 1, i32 1, i32 0, i32 1)1134// CHECK-NEXT: ret <8 x i16> [[TMP0]]1135//1136uint16x8_t test_vqrshruntq_n_s32(uint16x8_t a, int32x4_t b)1137{1138#ifdef POLYMORPHIC1139 return vqrshruntq(a, b, 3);1140#else /* POLYMORPHIC */1141 return vqrshruntq_n_s32(a, b, 3);1142#endif /* POLYMORPHIC */1143}1144 1145// CHECK-LABEL: @test_vqrshrunbq_m_n_s16(1146// CHECK-NEXT: entry:1147// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321148// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1149// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 4, i32 1, i32 1, i32 1, i32 0, i32 0, <8 x i1> [[TMP1]])1150// CHECK-NEXT: ret <16 x i8> [[TMP2]]1151//1152uint8x16_t test_vqrshrunbq_m_n_s16(uint8x16_t a, int16x8_t b, mve_pred16_t p)1153{1154#ifdef POLYMORPHIC1155 return vqrshrunbq_m(a, b, 4, p);1156#else /* POLYMORPHIC */1157 return vqrshrunbq_m_n_s16(a, b, 4, p);1158#endif /* POLYMORPHIC */1159}1160 1161// CHECK-LABEL: @test_vqrshrunbq_m_n_s32(1162// CHECK-NEXT: entry:1163// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321164// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1165// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 10, i32 1, i32 1, i32 1, i32 0, i32 0, <4 x i1> [[TMP1]])1166// CHECK-NEXT: ret <8 x i16> [[TMP2]]1167//1168uint16x8_t test_vqrshrunbq_m_n_s32(uint16x8_t a, int32x4_t b, mve_pred16_t p)1169{1170#ifdef POLYMORPHIC1171 return vqrshrunbq_m(a, b, 10, p);1172#else /* POLYMORPHIC */1173 return vqrshrunbq_m_n_s32(a, b, 10, p);1174#endif /* POLYMORPHIC */1175}1176 1177// CHECK-LABEL: @test_vqrshruntq_m_n_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 <16 x i8> @llvm.arm.mve.vshrn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 3, i32 1, i32 1, i32 1, i32 0, i32 1, <8 x i1> [[TMP1]])1182// CHECK-NEXT: ret <16 x i8> [[TMP2]]1183//1184uint8x16_t test_vqrshruntq_m_n_s16(uint8x16_t a, int16x8_t b, mve_pred16_t p)1185{1186#ifdef POLYMORPHIC1187 return vqrshruntq_m(a, b, 3, p);1188#else /* POLYMORPHIC */1189 return vqrshruntq_m_n_s16(a, b, 3, p);1190#endif /* POLYMORPHIC */1191}1192 1193// CHECK-LABEL: @test_vqrshruntq_m_n_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 <8 x i16> @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 13, i32 1, i32 1, i32 1, i32 0, i32 1, <4 x i1> [[TMP1]])1198// CHECK-NEXT: ret <8 x i16> [[TMP2]]1199//1200uint16x8_t test_vqrshruntq_m_n_s32(uint16x8_t a, int32x4_t b, mve_pred16_t p)1201{1202#ifdef POLYMORPHIC1203 return vqrshruntq_m(a, b, 13, p);1204#else /* POLYMORPHIC */1205 return vqrshruntq_m_n_s32(a, b, 13, p);1206#endif /* POLYMORPHIC */1207}1208 1209// CHECK-LABEL: @test_vsliq_n_s8(1210// CHECK-NEXT: entry:1211// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vsli.v16i8(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 2)1212// CHECK-NEXT: ret <16 x i8> [[TMP0]]1213//1214int8x16_t test_vsliq_n_s8(int8x16_t a, int8x16_t b)1215{1216#ifdef POLYMORPHIC1217 return vsliq(a, b, 2);1218#else /* POLYMORPHIC */1219 return vsliq_n_s8(a, b, 2);1220#endif /* POLYMORPHIC */1221}1222 1223// CHECK-LABEL: @test_vsliq_n_s16(1224// CHECK-NEXT: entry:1225// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vsli.v8i16(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 10)1226// CHECK-NEXT: ret <8 x i16> [[TMP0]]1227//1228int16x8_t test_vsliq_n_s16(int16x8_t a, int16x8_t b)1229{1230#ifdef POLYMORPHIC1231 return vsliq(a, b, 10);1232#else /* POLYMORPHIC */1233 return vsliq_n_s16(a, b, 10);1234#endif /* POLYMORPHIC */1235}1236 1237// CHECK-LABEL: @test_vsliq_n_s32(1238// CHECK-NEXT: entry:1239// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vsli.v4i32(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1)1240// CHECK-NEXT: ret <4 x i32> [[TMP0]]1241//1242int32x4_t test_vsliq_n_s32(int32x4_t a, int32x4_t b)1243{1244#ifdef POLYMORPHIC1245 return vsliq(a, b, 1);1246#else /* POLYMORPHIC */1247 return vsliq_n_s32(a, b, 1);1248#endif /* POLYMORPHIC */1249}1250 1251// CHECK-LABEL: @test_vsliq_n_u8(1252// CHECK-NEXT: entry:1253// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vsli.v16i8(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 1)1254// CHECK-NEXT: ret <16 x i8> [[TMP0]]1255//1256uint8x16_t test_vsliq_n_u8(uint8x16_t a, uint8x16_t b)1257{1258#ifdef POLYMORPHIC1259 return vsliq(a, b, 1);1260#else /* POLYMORPHIC */1261 return vsliq_n_u8(a, b, 1);1262#endif /* POLYMORPHIC */1263}1264 1265// CHECK-LABEL: @test_vsliq_n_u16(1266// CHECK-NEXT: entry:1267// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vsli.v8i16(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1)1268// CHECK-NEXT: ret <8 x i16> [[TMP0]]1269//1270uint16x8_t test_vsliq_n_u16(uint16x8_t a, uint16x8_t b)1271{1272#ifdef POLYMORPHIC1273 return vsliq(a, b, 1);1274#else /* POLYMORPHIC */1275 return vsliq_n_u16(a, b, 1);1276#endif /* POLYMORPHIC */1277}1278 1279// CHECK-LABEL: @test_vsliq_n_u32(1280// CHECK-NEXT: entry:1281// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vsli.v4i32(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 28)1282// CHECK-NEXT: ret <4 x i32> [[TMP0]]1283//1284uint32x4_t test_vsliq_n_u32(uint32x4_t a, uint32x4_t b)1285{1286#ifdef POLYMORPHIC1287 return vsliq(a, b, 28);1288#else /* POLYMORPHIC */1289 return vsliq_n_u32(a, b, 28);1290#endif /* POLYMORPHIC */1291}1292 1293// CHECK-LABEL: @test_vsliq_m_n_s8(1294// CHECK-NEXT: entry:1295// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321296// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])1297// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vsli.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 4, <16 x i1> [[TMP1]])1298// CHECK-NEXT: ret <16 x i8> [[TMP2]]1299//1300int8x16_t test_vsliq_m_n_s8(int8x16_t a, int8x16_t b, mve_pred16_t p)1301{1302#ifdef POLYMORPHIC1303 return vsliq_m(a, b, 4, p);1304#else /* POLYMORPHIC */1305 return vsliq_m_n_s8(a, b, 4, p);1306#endif /* POLYMORPHIC */1307}1308 1309// CHECK-LABEL: @test_vsliq_m_n_s16(1310// CHECK-NEXT: entry:1311// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321312// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1313// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vsli.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, <8 x i1> [[TMP1]])1314// CHECK-NEXT: ret <8 x i16> [[TMP2]]1315//1316int16x8_t test_vsliq_m_n_s16(int16x8_t a, int16x8_t b, mve_pred16_t p)1317{1318#ifdef POLYMORPHIC1319 return vsliq_m(a, b, 1, p);1320#else /* POLYMORPHIC */1321 return vsliq_m_n_s16(a, b, 1, p);1322#endif /* POLYMORPHIC */1323}1324 1325// CHECK-LABEL: @test_vsliq_m_n_s32(1326// CHECK-NEXT: entry:1327// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321328// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1329// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vsli.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, <4 x i1> [[TMP1]])1330// CHECK-NEXT: ret <4 x i32> [[TMP2]]1331//1332int32x4_t test_vsliq_m_n_s32(int32x4_t a, int32x4_t b, mve_pred16_t p)1333{1334#ifdef POLYMORPHIC1335 return vsliq_m(a, b, 1, p);1336#else /* POLYMORPHIC */1337 return vsliq_m_n_s32(a, b, 1, p);1338#endif /* POLYMORPHIC */1339}1340 1341// CHECK-LABEL: @test_vsliq_m_n_u8(1342// CHECK-NEXT: entry:1343// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321344// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])1345// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vsli.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 5, <16 x i1> [[TMP1]])1346// CHECK-NEXT: ret <16 x i8> [[TMP2]]1347//1348uint8x16_t test_vsliq_m_n_u8(uint8x16_t a, uint8x16_t b, mve_pred16_t p)1349{1350#ifdef POLYMORPHIC1351 return vsliq_m(a, b, 5, p);1352#else /* POLYMORPHIC */1353 return vsliq_m_n_u8(a, b, 5, p);1354#endif /* POLYMORPHIC */1355}1356 1357// CHECK-LABEL: @test_vsliq_m_n_u16(1358// CHECK-NEXT: entry:1359// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321360// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1361// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vsli.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 3, <8 x i1> [[TMP1]])1362// CHECK-NEXT: ret <8 x i16> [[TMP2]]1363//1364uint16x8_t test_vsliq_m_n_u16(uint16x8_t a, uint16x8_t b, mve_pred16_t p)1365{1366#ifdef POLYMORPHIC1367 return vsliq_m(a, b, 3, p);1368#else /* POLYMORPHIC */1369 return vsliq_m_n_u16(a, b, 3, p);1370#endif /* POLYMORPHIC */1371}1372 1373// CHECK-LABEL: @test_vsliq_m_n_u32(1374// CHECK-NEXT: entry:1375// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321376// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1377// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vsli.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 9, <4 x i1> [[TMP1]])1378// CHECK-NEXT: ret <4 x i32> [[TMP2]]1379//1380uint32x4_t test_vsliq_m_n_u32(uint32x4_t a, uint32x4_t b, mve_pred16_t p)1381{1382#ifdef POLYMORPHIC1383 return vsliq_m(a, b, 9, p);1384#else /* POLYMORPHIC */1385 return vsliq_m_n_u32(a, b, 9, p);1386#endif /* POLYMORPHIC */1387}1388 1389// CHECK-LABEL: @test_vsriq_n_s8(1390// CHECK-NEXT: entry:1391// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vsri.v16i8(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 3)1392// CHECK-NEXT: ret <16 x i8> [[TMP0]]1393//1394int8x16_t test_vsriq_n_s8(int8x16_t a, int8x16_t b)1395{1396#ifdef POLYMORPHIC1397 return vsriq(a, b, 3);1398#else /* POLYMORPHIC */1399 return vsriq_n_s8(a, b, 3);1400#endif /* POLYMORPHIC */1401}1402 1403// CHECK-LABEL: @test_vsriq_n_s16(1404// CHECK-NEXT: entry:1405// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vsri.v8i16(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 2)1406// CHECK-NEXT: ret <8 x i16> [[TMP0]]1407//1408int16x8_t test_vsriq_n_s16(int16x8_t a, int16x8_t b)1409{1410#ifdef POLYMORPHIC1411 return vsriq(a, b, 2);1412#else /* POLYMORPHIC */1413 return vsriq_n_s16(a, b, 2);1414#endif /* POLYMORPHIC */1415}1416 1417// CHECK-LABEL: @test_vsriq_n_s32(1418// CHECK-NEXT: entry:1419// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vsri.v4i32(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 28)1420// CHECK-NEXT: ret <4 x i32> [[TMP0]]1421//1422int32x4_t test_vsriq_n_s32(int32x4_t a, int32x4_t b)1423{1424#ifdef POLYMORPHIC1425 return vsriq(a, b, 28);1426#else /* POLYMORPHIC */1427 return vsriq_n_s32(a, b, 28);1428#endif /* POLYMORPHIC */1429}1430 1431// CHECK-LABEL: @test_vsriq_n_u8(1432// CHECK-NEXT: entry:1433// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vsri.v16i8(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 3)1434// CHECK-NEXT: ret <16 x i8> [[TMP0]]1435//1436uint8x16_t test_vsriq_n_u8(uint8x16_t a, uint8x16_t b)1437{1438#ifdef POLYMORPHIC1439 return vsriq(a, b, 3);1440#else /* POLYMORPHIC */1441 return vsriq_n_u8(a, b, 3);1442#endif /* POLYMORPHIC */1443}1444 1445// CHECK-LABEL: @test_vsriq_n_u16(1446// CHECK-NEXT: entry:1447// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vsri.v8i16(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 3)1448// CHECK-NEXT: ret <8 x i16> [[TMP0]]1449//1450uint16x8_t test_vsriq_n_u16(uint16x8_t a, uint16x8_t b)1451{1452#ifdef POLYMORPHIC1453 return vsriq(a, b, 3);1454#else /* POLYMORPHIC */1455 return vsriq_n_u16(a, b, 3);1456#endif /* POLYMORPHIC */1457}1458 1459// CHECK-LABEL: @test_vsriq_n_u32(1460// CHECK-NEXT: entry:1461// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vsri.v4i32(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 26)1462// CHECK-NEXT: ret <4 x i32> [[TMP0]]1463//1464uint32x4_t test_vsriq_n_u32(uint32x4_t a, uint32x4_t b)1465{1466#ifdef POLYMORPHIC1467 return vsriq(a, b, 26);1468#else /* POLYMORPHIC */1469 return vsriq_n_u32(a, b, 26);1470#endif /* POLYMORPHIC */1471}1472 1473// CHECK-LABEL: @test_vsriq_m_n_s8(1474// CHECK-NEXT: entry:1475// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321476// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])1477// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vsri.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 4, <16 x i1> [[TMP1]])1478// CHECK-NEXT: ret <16 x i8> [[TMP2]]1479//1480int8x16_t test_vsriq_m_n_s8(int8x16_t a, int8x16_t b, mve_pred16_t p)1481{1482#ifdef POLYMORPHIC1483 return vsriq_m(a, b, 4, p);1484#else /* POLYMORPHIC */1485 return vsriq_m_n_s8(a, b, 4, p);1486#endif /* POLYMORPHIC */1487}1488 1489// CHECK-LABEL: @test_vsriq_m_n_s16(1490// CHECK-NEXT: entry:1491// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321492// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1493// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vsri.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, <8 x i1> [[TMP1]])1494// CHECK-NEXT: ret <8 x i16> [[TMP2]]1495//1496int16x8_t test_vsriq_m_n_s16(int16x8_t a, int16x8_t b, mve_pred16_t p)1497{1498#ifdef POLYMORPHIC1499 return vsriq_m(a, b, 1, p);1500#else /* POLYMORPHIC */1501 return vsriq_m_n_s16(a, b, 1, p);1502#endif /* POLYMORPHIC */1503}1504 1505// CHECK-LABEL: @test_vsriq_m_n_s32(1506// CHECK-NEXT: entry:1507// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321508// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1509// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vsri.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 27, <4 x i1> [[TMP1]])1510// CHECK-NEXT: ret <4 x i32> [[TMP2]]1511//1512int32x4_t test_vsriq_m_n_s32(int32x4_t a, int32x4_t b, mve_pred16_t p)1513{1514#ifdef POLYMORPHIC1515 return vsriq_m(a, b, 27, p);1516#else /* POLYMORPHIC */1517 return vsriq_m_n_s32(a, b, 27, p);1518#endif /* POLYMORPHIC */1519}1520 1521// CHECK-LABEL: @test_vsriq_m_n_u8(1522// CHECK-NEXT: entry:1523// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321524// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])1525// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vsri.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 7, <16 x i1> [[TMP1]])1526// CHECK-NEXT: ret <16 x i8> [[TMP2]]1527//1528uint8x16_t test_vsriq_m_n_u8(uint8x16_t a, uint8x16_t b, mve_pred16_t p)1529{1530#ifdef POLYMORPHIC1531 return vsriq_m(a, b, 7, p);1532#else /* POLYMORPHIC */1533 return vsriq_m_n_u8(a, b, 7, p);1534#endif /* POLYMORPHIC */1535}1536 1537// CHECK-LABEL: @test_vsriq_m_n_u16(1538// CHECK-NEXT: entry:1539// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321540// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])1541// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vsri.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 9, <8 x i1> [[TMP1]])1542// CHECK-NEXT: ret <8 x i16> [[TMP2]]1543//1544uint16x8_t test_vsriq_m_n_u16(uint16x8_t a, uint16x8_t b, mve_pred16_t p)1545{1546#ifdef POLYMORPHIC1547 return vsriq_m(a, b, 9, p);1548#else /* POLYMORPHIC */1549 return vsriq_m_n_u16(a, b, 9, p);1550#endif /* POLYMORPHIC */1551}1552 1553// CHECK-LABEL: @test_vsriq_m_n_u32(1554// CHECK-NEXT: entry:1555// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i321556// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])1557// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vsri.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 13, <4 x i1> [[TMP1]])1558// CHECK-NEXT: ret <4 x i32> [[TMP2]]1559//1560uint32x4_t test_vsriq_m_n_u32(uint32x4_t a, uint32x4_t b, mve_pred16_t p)1561{1562#ifdef POLYMORPHIC1563 return vsriq_m(a, b, 13, p);1564#else /* POLYMORPHIC */1565 return vsriq_m_n_u32(a, b, 13, p);1566#endif /* POLYMORPHIC */1567}1568