brintos

brintos / llvm-project-archived public Read only

0
0
Text · 25.3 KiB · d584e7e Raw
698 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,sroa,early-cse<>' | FileCheck %s4 5// REQUIRES: aarch64-registered-target || arm-registered-target6 7#include <arm_mve.h>8 9// CHECK-LABEL: @test_vrev16q_s8(10// CHECK-NEXT:  entry:11// CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <16 x i8> [[A:%.*]], <16 x i8> poison, <16 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6, i32 9, i32 8, i32 11, i32 10, i32 13, i32 12, i32 15, i32 14>12// CHECK-NEXT:    ret <16 x i8> [[TMP0]]13//14int8x16_t test_vrev16q_s8(int8x16_t a)15{16#ifdef POLYMORPHIC17    return vrev16q(a);18#else /* POLYMORPHIC */19    return vrev16q_s8(a);20#endif /* POLYMORPHIC */21}22 23// CHECK-LABEL: @test_vrev16q_u8(24// CHECK-NEXT:  entry:25// CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <16 x i8> [[A:%.*]], <16 x i8> poison, <16 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6, i32 9, i32 8, i32 11, i32 10, i32 13, i32 12, i32 15, i32 14>26// CHECK-NEXT:    ret <16 x i8> [[TMP0]]27//28uint8x16_t test_vrev16q_u8(uint8x16_t a)29{30#ifdef POLYMORPHIC31    return vrev16q(a);32#else /* POLYMORPHIC */33    return vrev16q_u8(a);34#endif /* POLYMORPHIC */35}36 37// CHECK-LABEL: @test_vrev32q_s8(38// CHECK-NEXT:  entry:39// CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <16 x i8> [[A:%.*]], <16 x i8> poison, <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>40// CHECK-NEXT:    ret <16 x i8> [[TMP0]]41//42int8x16_t test_vrev32q_s8(int8x16_t a)43{44#ifdef POLYMORPHIC45    return vrev32q(a);46#else /* POLYMORPHIC */47    return vrev32q_s8(a);48#endif /* POLYMORPHIC */49}50 51// CHECK-LABEL: @test_vrev32q_u8(52// CHECK-NEXT:  entry:53// CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <16 x i8> [[A:%.*]], <16 x i8> poison, <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>54// CHECK-NEXT:    ret <16 x i8> [[TMP0]]55//56uint8x16_t test_vrev32q_u8(uint8x16_t a)57{58#ifdef POLYMORPHIC59    return vrev32q(a);60#else /* POLYMORPHIC */61    return vrev32q_u8(a);62#endif /* POLYMORPHIC */63}64 65// CHECK-LABEL: @test_vrev32q_s16(66// CHECK-NEXT:  entry:67// CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <8 x i16> [[A:%.*]], <8 x i16> poison, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>68// CHECK-NEXT:    ret <8 x i16> [[TMP0]]69//70int16x8_t test_vrev32q_s16(int16x8_t a)71{72#ifdef POLYMORPHIC73    return vrev32q(a);74#else /* POLYMORPHIC */75    return vrev32q_s16(a);76#endif /* POLYMORPHIC */77}78 79// CHECK-LABEL: @test_vrev32q_u16(80// CHECK-NEXT:  entry:81// CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <8 x i16> [[A:%.*]], <8 x i16> poison, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>82// CHECK-NEXT:    ret <8 x i16> [[TMP0]]83//84uint16x8_t test_vrev32q_u16(uint16x8_t a)85{86#ifdef POLYMORPHIC87    return vrev32q(a);88#else /* POLYMORPHIC */89    return vrev32q_u16(a);90#endif /* POLYMORPHIC */91}92 93// CHECK-LABEL: @test_vrev32q_f16(94// CHECK-NEXT:  entry:95// CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <8 x half> [[A:%.*]], <8 x half> poison, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>96// CHECK-NEXT:    ret <8 x half> [[TMP0]]97//98float16x8_t test_vrev32q_f16(float16x8_t a)99{100#ifdef POLYMORPHIC101    return vrev32q(a);102#else /* POLYMORPHIC */103    return vrev32q_f16(a);104#endif /* POLYMORPHIC */105}106 107// CHECK-LABEL: @test_vrev64q_s8(108// CHECK-NEXT:  entry:109// CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <16 x i8> [[A:%.*]], <16 x i8> poison, <16 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8>110// CHECK-NEXT:    ret <16 x i8> [[TMP0]]111//112int8x16_t test_vrev64q_s8(int8x16_t a)113{114#ifdef POLYMORPHIC115    return vrev64q(a);116#else /* POLYMORPHIC */117    return vrev64q_s8(a);118#endif /* POLYMORPHIC */119}120 121// CHECK-LABEL: @test_vrev64q_u8(122// CHECK-NEXT:  entry:123// CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <16 x i8> [[A:%.*]], <16 x i8> poison, <16 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8>124// CHECK-NEXT:    ret <16 x i8> [[TMP0]]125//126uint8x16_t test_vrev64q_u8(uint8x16_t a)127{128#ifdef POLYMORPHIC129    return vrev64q(a);130#else /* POLYMORPHIC */131    return vrev64q_u8(a);132#endif /* POLYMORPHIC */133}134 135// CHECK-LABEL: @test_vrev64q_s16(136// CHECK-NEXT:  entry:137// CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <8 x i16> [[A:%.*]], <8 x i16> poison, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>138// CHECK-NEXT:    ret <8 x i16> [[TMP0]]139//140int16x8_t test_vrev64q_s16(int16x8_t a)141{142#ifdef POLYMORPHIC143    return vrev64q(a);144#else /* POLYMORPHIC */145    return vrev64q_s16(a);146#endif /* POLYMORPHIC */147}148 149// CHECK-LABEL: @test_vrev64q_u16(150// CHECK-NEXT:  entry:151// CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <8 x i16> [[A:%.*]], <8 x i16> poison, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>152// CHECK-NEXT:    ret <8 x i16> [[TMP0]]153//154uint16x8_t test_vrev64q_u16(uint16x8_t a)155{156#ifdef POLYMORPHIC157    return vrev64q(a);158#else /* POLYMORPHIC */159    return vrev64q_u16(a);160#endif /* POLYMORPHIC */161}162 163// CHECK-LABEL: @test_vrev64q_f16(164// CHECK-NEXT:  entry:165// CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <8 x half> [[A:%.*]], <8 x half> poison, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>166// CHECK-NEXT:    ret <8 x half> [[TMP0]]167//168float16x8_t test_vrev64q_f16(float16x8_t a)169{170#ifdef POLYMORPHIC171    return vrev64q(a);172#else /* POLYMORPHIC */173    return vrev64q_f16(a);174#endif /* POLYMORPHIC */175}176 177// CHECK-LABEL: @test_vrev64q_f32(178// CHECK-NEXT:  entry:179// CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <4 x float> [[A:%.*]], <4 x float> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2>180// CHECK-NEXT:    ret <4 x float> [[TMP0]]181//182float32x4_t test_vrev64q_f32(float32x4_t a)183{184#ifdef POLYMORPHIC185    return vrev64q(a);186#else /* POLYMORPHIC */187    return vrev64q_f32(a);188#endif /* POLYMORPHIC */189}190 191// CHECK-LABEL: @test_vrev64q_s32(192// CHECK-NEXT:  entry:193// CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <4 x i32> [[A:%.*]], <4 x i32> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2>194// CHECK-NEXT:    ret <4 x i32> [[TMP0]]195//196int32x4_t test_vrev64q_s32(int32x4_t a)197{198#ifdef POLYMORPHIC199    return vrev64q(a);200#else /* POLYMORPHIC */201    return vrev64q_s32(a);202#endif /* POLYMORPHIC */203}204 205// CHECK-LABEL: @test_vrev64q_u32(206// CHECK-NEXT:  entry:207// CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <4 x i32> [[A:%.*]], <4 x i32> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2>208// CHECK-NEXT:    ret <4 x i32> [[TMP0]]209//210uint32x4_t test_vrev64q_u32(uint32x4_t a)211{212#ifdef POLYMORPHIC213    return vrev64q(a);214#else /* POLYMORPHIC */215    return vrev64q_u32(a);216#endif /* POLYMORPHIC */217}218 219// CHECK-LABEL: @test_vrev16q_m_s8(220// CHECK-NEXT:  entry:221// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32222// CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])223// CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vrev.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 16, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])224// CHECK-NEXT:    ret <16 x i8> [[TMP2]]225//226int8x16_t test_vrev16q_m_s8(int8x16_t inactive, int8x16_t a, mve_pred16_t p)227{228#ifdef POLYMORPHIC229    return vrev16q_m(inactive, a, p);230#else /* POLYMORPHIC */231    return vrev16q_m_s8(inactive, a, p);232#endif /* POLYMORPHIC */233}234 235// CHECK-LABEL: @test_vrev16q_m_u8(236// CHECK-NEXT:  entry:237// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32238// CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])239// CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vrev.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 16, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])240// CHECK-NEXT:    ret <16 x i8> [[TMP2]]241//242uint8x16_t test_vrev16q_m_u8(uint8x16_t inactive, uint8x16_t a, mve_pred16_t p)243{244#ifdef POLYMORPHIC245    return vrev16q_m(inactive, a, p);246#else /* POLYMORPHIC */247    return vrev16q_m_u8(inactive, a, p);248#endif /* POLYMORPHIC */249}250 251// CHECK-LABEL: @test_vrev32q_m_f16(252// CHECK-NEXT:  entry:253// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32254// CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])255// CHECK-NEXT:    [[TMP2:%.*]] = call <8 x half> @llvm.arm.mve.vrev.predicated.v8f16.v8i1(<8 x half> [[A:%.*]], i32 32, <8 x i1> [[TMP1]], <8 x half> [[INACTIVE:%.*]])256// CHECK-NEXT:    ret <8 x half> [[TMP2]]257//258float16x8_t test_vrev32q_m_f16(float16x8_t inactive, float16x8_t a, mve_pred16_t p)259{260#ifdef POLYMORPHIC261    return vrev32q_m(inactive, a, p);262#else /* POLYMORPHIC */263    return vrev32q_m_f16(inactive, a, p);264#endif /* POLYMORPHIC */265}266 267// CHECK-LABEL: @test_vrev32q_m_s8(268// CHECK-NEXT:  entry:269// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32270// CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])271// CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vrev.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 32, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])272// CHECK-NEXT:    ret <16 x i8> [[TMP2]]273//274int8x16_t test_vrev32q_m_s8(int8x16_t inactive, int8x16_t a, mve_pred16_t p)275{276#ifdef POLYMORPHIC277    return vrev32q_m(inactive, a, p);278#else /* POLYMORPHIC */279    return vrev32q_m_s8(inactive, a, p);280#endif /* POLYMORPHIC */281}282 283// CHECK-LABEL: @test_vrev32q_m_s16(284// CHECK-NEXT:  entry:285// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32286// CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])287// CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vrev.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 32, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])288// CHECK-NEXT:    ret <8 x i16> [[TMP2]]289//290int16x8_t test_vrev32q_m_s16(int16x8_t inactive, int16x8_t a, mve_pred16_t p)291{292#ifdef POLYMORPHIC293    return vrev32q_m(inactive, a, p);294#else /* POLYMORPHIC */295    return vrev32q_m_s16(inactive, a, p);296#endif /* POLYMORPHIC */297}298 299// CHECK-LABEL: @test_vrev32q_m_u8(300// CHECK-NEXT:  entry:301// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32302// CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])303// CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vrev.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 32, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])304// CHECK-NEXT:    ret <16 x i8> [[TMP2]]305//306uint8x16_t test_vrev32q_m_u8(uint8x16_t inactive, uint8x16_t a, mve_pred16_t p)307{308#ifdef POLYMORPHIC309    return vrev32q_m(inactive, a, p);310#else /* POLYMORPHIC */311    return vrev32q_m_u8(inactive, a, p);312#endif /* POLYMORPHIC */313}314 315// CHECK-LABEL: @test_vrev32q_m_u16(316// CHECK-NEXT:  entry:317// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32318// CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])319// CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vrev.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 32, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])320// CHECK-NEXT:    ret <8 x i16> [[TMP2]]321//322uint16x8_t test_vrev32q_m_u16(uint16x8_t inactive, uint16x8_t a, mve_pred16_t p)323{324#ifdef POLYMORPHIC325    return vrev32q_m(inactive, a, p);326#else /* POLYMORPHIC */327    return vrev32q_m_u16(inactive, a, p);328#endif /* POLYMORPHIC */329}330 331// CHECK-LABEL: @test_vrev64q_m_f16(332// CHECK-NEXT:  entry:333// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32334// CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])335// CHECK-NEXT:    [[TMP2:%.*]] = call <8 x half> @llvm.arm.mve.vrev.predicated.v8f16.v8i1(<8 x half> [[A:%.*]], i32 64, <8 x i1> [[TMP1]], <8 x half> [[INACTIVE:%.*]])336// CHECK-NEXT:    ret <8 x half> [[TMP2]]337//338float16x8_t test_vrev64q_m_f16(float16x8_t inactive, float16x8_t a, mve_pred16_t p)339{340#ifdef POLYMORPHIC341    return vrev64q_m(inactive, a, p);342#else /* POLYMORPHIC */343    return vrev64q_m_f16(inactive, a, p);344#endif /* POLYMORPHIC */345}346 347// CHECK-LABEL: @test_vrev64q_m_f32(348// CHECK-NEXT:  entry:349// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32350// CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])351// CHECK-NEXT:    [[TMP2:%.*]] = call <4 x float> @llvm.arm.mve.vrev.predicated.v4f32.v4i1(<4 x float> [[A:%.*]], i32 64, <4 x i1> [[TMP1]], <4 x float> [[INACTIVE:%.*]])352// CHECK-NEXT:    ret <4 x float> [[TMP2]]353//354float32x4_t test_vrev64q_m_f32(float32x4_t inactive, float32x4_t a, mve_pred16_t p)355{356#ifdef POLYMORPHIC357    return vrev64q_m(inactive, a, p);358#else /* POLYMORPHIC */359    return vrev64q_m_f32(inactive, a, p);360#endif /* POLYMORPHIC */361}362 363// CHECK-LABEL: @test_vrev64q_m_s8(364// CHECK-NEXT:  entry:365// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32366// CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])367// CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vrev.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 64, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])368// CHECK-NEXT:    ret <16 x i8> [[TMP2]]369//370int8x16_t test_vrev64q_m_s8(int8x16_t inactive, int8x16_t a, mve_pred16_t p)371{372#ifdef POLYMORPHIC373    return vrev64q_m(inactive, a, p);374#else /* POLYMORPHIC */375    return vrev64q_m_s8(inactive, a, p);376#endif /* POLYMORPHIC */377}378 379// CHECK-LABEL: @test_vrev64q_m_s16(380// CHECK-NEXT:  entry:381// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32382// CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])383// CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vrev.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 64, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])384// CHECK-NEXT:    ret <8 x i16> [[TMP2]]385//386int16x8_t test_vrev64q_m_s16(int16x8_t inactive, int16x8_t a, mve_pred16_t p)387{388#ifdef POLYMORPHIC389    return vrev64q_m(inactive, a, p);390#else /* POLYMORPHIC */391    return vrev64q_m_s16(inactive, a, p);392#endif /* POLYMORPHIC */393}394 395// CHECK-LABEL: @test_vrev64q_m_s32(396// CHECK-NEXT:  entry:397// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32398// CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])399// CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vrev.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 64, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])400// CHECK-NEXT:    ret <4 x i32> [[TMP2]]401//402int32x4_t test_vrev64q_m_s32(int32x4_t inactive, int32x4_t a, mve_pred16_t p)403{404#ifdef POLYMORPHIC405    return vrev64q_m(inactive, a, p);406#else /* POLYMORPHIC */407    return vrev64q_m_s32(inactive, a, p);408#endif /* POLYMORPHIC */409}410 411// CHECK-LABEL: @test_vrev64q_m_u8(412// CHECK-NEXT:  entry:413// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32414// CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])415// CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vrev.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 64, <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])416// CHECK-NEXT:    ret <16 x i8> [[TMP2]]417//418uint8x16_t test_vrev64q_m_u8(uint8x16_t inactive, uint8x16_t a, mve_pred16_t p)419{420#ifdef POLYMORPHIC421    return vrev64q_m(inactive, a, p);422#else /* POLYMORPHIC */423    return vrev64q_m_u8(inactive, a, p);424#endif /* POLYMORPHIC */425}426 427// CHECK-LABEL: @test_vrev64q_m_u16(428// CHECK-NEXT:  entry:429// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32430// CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])431// CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vrev.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 64, <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]])432// CHECK-NEXT:    ret <8 x i16> [[TMP2]]433//434uint16x8_t test_vrev64q_m_u16(uint16x8_t inactive, uint16x8_t a, mve_pred16_t p)435{436#ifdef POLYMORPHIC437    return vrev64q_m(inactive, a, p);438#else /* POLYMORPHIC */439    return vrev64q_m_u16(inactive, a, p);440#endif /* POLYMORPHIC */441}442 443// CHECK-LABEL: @test_vrev64q_m_u32(444// CHECK-NEXT:  entry:445// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32446// CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])447// CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vrev.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 64, <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]])448// CHECK-NEXT:    ret <4 x i32> [[TMP2]]449//450uint32x4_t test_vrev64q_m_u32(uint32x4_t inactive, uint32x4_t a, mve_pred16_t p)451{452#ifdef POLYMORPHIC453    return vrev64q_m(inactive, a, p);454#else /* POLYMORPHIC */455    return vrev64q_m_u32(inactive, a, p);456#endif /* POLYMORPHIC */457}458 459// CHECK-LABEL: @test_vrev16q_x_s8(460// CHECK-NEXT:  entry:461// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32462// CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])463// CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vrev.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 16, <16 x i1> [[TMP1]], <16 x i8> undef)464// CHECK-NEXT:    ret <16 x i8> [[TMP2]]465//466int8x16_t test_vrev16q_x_s8(int8x16_t a, mve_pred16_t p)467{468#ifdef POLYMORPHIC469    return vrev16q_x(a, p);470#else /* POLYMORPHIC */471    return vrev16q_x_s8(a, p);472#endif /* POLYMORPHIC */473}474 475// CHECK-LABEL: @test_vrev16q_x_u8(476// CHECK-NEXT:  entry:477// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32478// CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])479// CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vrev.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 16, <16 x i1> [[TMP1]], <16 x i8> undef)480// CHECK-NEXT:    ret <16 x i8> [[TMP2]]481//482uint8x16_t test_vrev16q_x_u8(uint8x16_t a, mve_pred16_t p)483{484#ifdef POLYMORPHIC485    return vrev16q_x(a, p);486#else /* POLYMORPHIC */487    return vrev16q_x_u8(a, p);488#endif /* POLYMORPHIC */489}490 491// CHECK-LABEL: @test_vrev32q_x_f16(492// CHECK-NEXT:  entry:493// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32494// CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])495// CHECK-NEXT:    [[TMP2:%.*]] = call <8 x half> @llvm.arm.mve.vrev.predicated.v8f16.v8i1(<8 x half> [[A:%.*]], i32 32, <8 x i1> [[TMP1]], <8 x half> undef)496// CHECK-NEXT:    ret <8 x half> [[TMP2]]497//498float16x8_t test_vrev32q_x_f16(float16x8_t a, mve_pred16_t p)499{500#ifdef POLYMORPHIC501    return vrev32q_x(a, p);502#else /* POLYMORPHIC */503    return vrev32q_x_f16(a, p);504#endif /* POLYMORPHIC */505}506 507// CHECK-LABEL: @test_vrev32q_x_s8(508// CHECK-NEXT:  entry:509// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32510// CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])511// CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vrev.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 32, <16 x i1> [[TMP1]], <16 x i8> undef)512// CHECK-NEXT:    ret <16 x i8> [[TMP2]]513//514int8x16_t test_vrev32q_x_s8(int8x16_t a, mve_pred16_t p)515{516#ifdef POLYMORPHIC517    return vrev32q_x(a, p);518#else /* POLYMORPHIC */519    return vrev32q_x_s8(a, p);520#endif /* POLYMORPHIC */521}522 523// CHECK-LABEL: @test_vrev32q_x_s16(524// CHECK-NEXT:  entry:525// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32526// CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])527// CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vrev.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 32, <8 x i1> [[TMP1]], <8 x i16> undef)528// CHECK-NEXT:    ret <8 x i16> [[TMP2]]529//530int16x8_t test_vrev32q_x_s16(int16x8_t a, mve_pred16_t p)531{532#ifdef POLYMORPHIC533    return vrev32q_x(a, p);534#else /* POLYMORPHIC */535    return vrev32q_x_s16(a, p);536#endif /* POLYMORPHIC */537}538 539// CHECK-LABEL: @test_vrev32q_x_u8(540// CHECK-NEXT:  entry:541// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32542// CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])543// CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vrev.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 32, <16 x i1> [[TMP1]], <16 x i8> undef)544// CHECK-NEXT:    ret <16 x i8> [[TMP2]]545//546uint8x16_t test_vrev32q_x_u8(uint8x16_t a, mve_pred16_t p)547{548#ifdef POLYMORPHIC549    return vrev32q_x(a, p);550#else /* POLYMORPHIC */551    return vrev32q_x_u8(a, p);552#endif /* POLYMORPHIC */553}554 555// CHECK-LABEL: @test_vrev32q_x_u16(556// CHECK-NEXT:  entry:557// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32558// CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])559// CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vrev.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 32, <8 x i1> [[TMP1]], <8 x i16> undef)560// CHECK-NEXT:    ret <8 x i16> [[TMP2]]561//562uint16x8_t test_vrev32q_x_u16(uint16x8_t a, mve_pred16_t p)563{564#ifdef POLYMORPHIC565    return vrev32q_x(a, p);566#else /* POLYMORPHIC */567    return vrev32q_x_u16(a, p);568#endif /* POLYMORPHIC */569}570 571// CHECK-LABEL: @test_vrev64q_x_f16(572// CHECK-NEXT:  entry:573// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32574// CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])575// CHECK-NEXT:    [[TMP2:%.*]] = call <8 x half> @llvm.arm.mve.vrev.predicated.v8f16.v8i1(<8 x half> [[A:%.*]], i32 64, <8 x i1> [[TMP1]], <8 x half> undef)576// CHECK-NEXT:    ret <8 x half> [[TMP2]]577//578float16x8_t test_vrev64q_x_f16(float16x8_t a, mve_pred16_t p)579{580#ifdef POLYMORPHIC581    return vrev64q_x(a, p);582#else /* POLYMORPHIC */583    return vrev64q_x_f16(a, p);584#endif /* POLYMORPHIC */585}586 587// CHECK-LABEL: @test_vrev64q_x_f32(588// CHECK-NEXT:  entry:589// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32590// CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])591// CHECK-NEXT:    [[TMP2:%.*]] = call <4 x float> @llvm.arm.mve.vrev.predicated.v4f32.v4i1(<4 x float> [[A:%.*]], i32 64, <4 x i1> [[TMP1]], <4 x float> undef)592// CHECK-NEXT:    ret <4 x float> [[TMP2]]593//594float32x4_t test_vrev64q_x_f32(float32x4_t a, mve_pred16_t p)595{596#ifdef POLYMORPHIC597    return vrev64q_x(a, p);598#else /* POLYMORPHIC */599    return vrev64q_x_f32(a, p);600#endif /* POLYMORPHIC */601}602 603// CHECK-LABEL: @test_vrev64q_x_s8(604// CHECK-NEXT:  entry:605// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32606// CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])607// CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vrev.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 64, <16 x i1> [[TMP1]], <16 x i8> undef)608// CHECK-NEXT:    ret <16 x i8> [[TMP2]]609//610int8x16_t test_vrev64q_x_s8(int8x16_t a, mve_pred16_t p)611{612#ifdef POLYMORPHIC613    return vrev64q_x(a, p);614#else /* POLYMORPHIC */615    return vrev64q_x_s8(a, p);616#endif /* POLYMORPHIC */617}618 619// CHECK-LABEL: @test_vrev64q_x_s16(620// CHECK-NEXT:  entry:621// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32622// CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])623// CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vrev.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 64, <8 x i1> [[TMP1]], <8 x i16> undef)624// CHECK-NEXT:    ret <8 x i16> [[TMP2]]625//626int16x8_t test_vrev64q_x_s16(int16x8_t a, mve_pred16_t p)627{628#ifdef POLYMORPHIC629    return vrev64q_x(a, p);630#else /* POLYMORPHIC */631    return vrev64q_x_s16(a, p);632#endif /* POLYMORPHIC */633}634 635// CHECK-LABEL: @test_vrev64q_x_s32(636// CHECK-NEXT:  entry:637// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32638// CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])639// CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vrev.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 64, <4 x i1> [[TMP1]], <4 x i32> undef)640// CHECK-NEXT:    ret <4 x i32> [[TMP2]]641//642int32x4_t test_vrev64q_x_s32(int32x4_t a, mve_pred16_t p)643{644#ifdef POLYMORPHIC645    return vrev64q_x(a, p);646#else /* POLYMORPHIC */647    return vrev64q_x_s32(a, p);648#endif /* POLYMORPHIC */649}650 651// CHECK-LABEL: @test_vrev64q_x_u8(652// CHECK-NEXT:  entry:653// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32654// CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])655// CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vrev.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], i32 64, <16 x i1> [[TMP1]], <16 x i8> undef)656// CHECK-NEXT:    ret <16 x i8> [[TMP2]]657//658uint8x16_t test_vrev64q_x_u8(uint8x16_t a, mve_pred16_t p)659{660#ifdef POLYMORPHIC661    return vrev64q_x(a, p);662#else /* POLYMORPHIC */663    return vrev64q_x_u8(a, p);664#endif /* POLYMORPHIC */665}666 667// CHECK-LABEL: @test_vrev64q_x_u16(668// CHECK-NEXT:  entry:669// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32670// CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])671// CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vrev.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], i32 64, <8 x i1> [[TMP1]], <8 x i16> undef)672// CHECK-NEXT:    ret <8 x i16> [[TMP2]]673//674uint16x8_t test_vrev64q_x_u16(uint16x8_t a, mve_pred16_t p)675{676#ifdef POLYMORPHIC677    return vrev64q_x(a, p);678#else /* POLYMORPHIC */679    return vrev64q_x_u16(a, p);680#endif /* POLYMORPHIC */681}682 683// CHECK-LABEL: @test_vrev64q_x_u32(684// CHECK-NEXT:  entry:685// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32686// CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])687// CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vrev.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], i32 64, <4 x i1> [[TMP1]], <4 x i32> undef)688// CHECK-NEXT:    ret <4 x i32> [[TMP2]]689//690uint32x4_t test_vrev64q_x_u32(uint32x4_t a, mve_pred16_t p)691{692#ifdef POLYMORPHIC693    return vrev64q_x(a, p);694#else /* POLYMORPHIC */695    return vrev64q_x_u32(a, p);696#endif /* POLYMORPHIC */697}698