brintos

brintos / llvm-project-archived public Read only

0
0
Text · 57.5 KiB · b56cefb Raw
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