680 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_vqdmladhq_s8(10// CHECK-NEXT: entry:11// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vqdmlad.v16i8(<16 x i8> [[INACTIVE:%.*]], <16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 0, i32 0, i32 0)12// CHECK-NEXT: ret <16 x i8> [[TMP0]]13//14int8x16_t test_vqdmladhq_s8(int8x16_t inactive, int8x16_t a, int8x16_t b) {15#ifdef POLYMORPHIC16 return vqdmladhq(inactive, a, b);17#else /* POLYMORPHIC */18 return vqdmladhq_s8(inactive, a, b);19#endif /* POLYMORPHIC */20}21 22// CHECK-LABEL: @test_vqdmladhq_s16(23// CHECK-NEXT: entry:24// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vqdmlad.v8i16(<8 x i16> [[INACTIVE:%.*]], <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 0, i32 0)25// CHECK-NEXT: ret <8 x i16> [[TMP0]]26//27int16x8_t test_vqdmladhq_s16(int16x8_t inactive, int16x8_t a, int16x8_t b) {28#ifdef POLYMORPHIC29 return vqdmladhq(inactive, a, b);30#else /* POLYMORPHIC */31 return vqdmladhq_s16(inactive, a, b);32#endif /* POLYMORPHIC */33}34 35// CHECK-LABEL: @test_vqdmladhq_s32(36// CHECK-NEXT: entry:37// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vqdmlad.v4i32(<4 x i32> [[INACTIVE:%.*]], <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 0, i32 0)38// CHECK-NEXT: ret <4 x i32> [[TMP0]]39//40int32x4_t test_vqdmladhq_s32(int32x4_t inactive, int32x4_t a, int32x4_t b) {41#ifdef POLYMORPHIC42 return vqdmladhq(inactive, a, b);43#else /* POLYMORPHIC */44 return vqdmladhq_s32(inactive, a, b);45#endif /* POLYMORPHIC */46}47 48// CHECK-LABEL: @test_vqdmladhxq_s8(49// CHECK-NEXT: entry:50// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vqdmlad.v16i8(<16 x i8> [[INACTIVE:%.*]], <16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 1, i32 0, i32 0)51// CHECK-NEXT: ret <16 x i8> [[TMP0]]52//53int8x16_t test_vqdmladhxq_s8(int8x16_t inactive, int8x16_t a, int8x16_t b) {54#ifdef POLYMORPHIC55 return vqdmladhxq(inactive, a, b);56#else /* POLYMORPHIC */57 return vqdmladhxq_s8(inactive, a, b);58#endif /* POLYMORPHIC */59}60 61// CHECK-LABEL: @test_vqdmladhxq_s16(62// CHECK-NEXT: entry:63// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vqdmlad.v8i16(<8 x i16> [[INACTIVE:%.*]], <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 0, i32 0)64// CHECK-NEXT: ret <8 x i16> [[TMP0]]65//66int16x8_t test_vqdmladhxq_s16(int16x8_t inactive, int16x8_t a, int16x8_t b) {67#ifdef POLYMORPHIC68 return vqdmladhxq(inactive, a, b);69#else /* POLYMORPHIC */70 return vqdmladhxq_s16(inactive, a, b);71#endif /* POLYMORPHIC */72}73 74// CHECK-LABEL: @test_vqdmladhxq_s32(75// CHECK-NEXT: entry:76// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vqdmlad.v4i32(<4 x i32> [[INACTIVE:%.*]], <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 0, i32 0)77// CHECK-NEXT: ret <4 x i32> [[TMP0]]78//79int32x4_t test_vqdmladhxq_s32(int32x4_t inactive, int32x4_t a, int32x4_t b) {80#ifdef POLYMORPHIC81 return vqdmladhxq(inactive, a, b);82#else /* POLYMORPHIC */83 return vqdmladhxq_s32(inactive, a, b);84#endif /* POLYMORPHIC */85}86 87// CHECK-LABEL: @test_vqdmlsdhq_s8(88// CHECK-NEXT: entry:89// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vqdmlad.v16i8(<16 x i8> [[INACTIVE:%.*]], <16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 0, i32 0, i32 1)90// CHECK-NEXT: ret <16 x i8> [[TMP0]]91//92int8x16_t test_vqdmlsdhq_s8(int8x16_t inactive, int8x16_t a, int8x16_t b) {93#ifdef POLYMORPHIC94 return vqdmlsdhq(inactive, a, b);95#else /* POLYMORPHIC */96 return vqdmlsdhq_s8(inactive, a, b);97#endif /* POLYMORPHIC */98}99 100// CHECK-LABEL: @test_vqdmlsdhq_s16(101// CHECK-NEXT: entry:102// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vqdmlad.v8i16(<8 x i16> [[INACTIVE:%.*]], <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 0, i32 1)103// CHECK-NEXT: ret <8 x i16> [[TMP0]]104//105int16x8_t test_vqdmlsdhq_s16(int16x8_t inactive, int16x8_t a, int16x8_t b) {106#ifdef POLYMORPHIC107 return vqdmlsdhq(inactive, a, b);108#else /* POLYMORPHIC */109 return vqdmlsdhq_s16(inactive, a, b);110#endif /* POLYMORPHIC */111}112 113// CHECK-LABEL: @test_vqdmlsdhq_s32(114// CHECK-NEXT: entry:115// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vqdmlad.v4i32(<4 x i32> [[INACTIVE:%.*]], <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 0, i32 1)116// CHECK-NEXT: ret <4 x i32> [[TMP0]]117//118int32x4_t test_vqdmlsdhq_s32(int32x4_t inactive, int32x4_t a, int32x4_t b) {119#ifdef POLYMORPHIC120 return vqdmlsdhq(inactive, a, b);121#else /* POLYMORPHIC */122 return vqdmlsdhq_s32(inactive, a, b);123#endif /* POLYMORPHIC */124}125 126// CHECK-LABEL: @test_vqdmlsdhxq_s8(127// CHECK-NEXT: entry:128// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vqdmlad.v16i8(<16 x i8> [[INACTIVE:%.*]], <16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 1, i32 0, i32 1)129// CHECK-NEXT: ret <16 x i8> [[TMP0]]130//131int8x16_t test_vqdmlsdhxq_s8(int8x16_t inactive, int8x16_t a, int8x16_t b) {132#ifdef POLYMORPHIC133 return vqdmlsdhxq(inactive, a, b);134#else /* POLYMORPHIC */135 return vqdmlsdhxq_s8(inactive, a, b);136#endif /* POLYMORPHIC */137}138 139// CHECK-LABEL: @test_vqdmlsdhxq_s16(140// CHECK-NEXT: entry:141// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vqdmlad.v8i16(<8 x i16> [[INACTIVE:%.*]], <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 0, i32 1)142// CHECK-NEXT: ret <8 x i16> [[TMP0]]143//144int16x8_t test_vqdmlsdhxq_s16(int16x8_t inactive, int16x8_t a, int16x8_t b) {145#ifdef POLYMORPHIC146 return vqdmlsdhxq(inactive, a, b);147#else /* POLYMORPHIC */148 return vqdmlsdhxq_s16(inactive, a, b);149#endif /* POLYMORPHIC */150}151 152// CHECK-LABEL: @test_vqdmlsdhxq_s32(153// CHECK-NEXT: entry:154// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vqdmlad.v4i32(<4 x i32> [[INACTIVE:%.*]], <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 0, i32 1)155// CHECK-NEXT: ret <4 x i32> [[TMP0]]156//157int32x4_t test_vqdmlsdhxq_s32(int32x4_t inactive, int32x4_t a, int32x4_t b) {158#ifdef POLYMORPHIC159 return vqdmlsdhxq(inactive, a, b);160#else /* POLYMORPHIC */161 return vqdmlsdhxq_s32(inactive, a, b);162#endif /* POLYMORPHIC */163}164 165// CHECK-LABEL: @test_vqrdmladhq_s8(166// CHECK-NEXT: entry:167// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vqdmlad.v16i8(<16 x i8> [[INACTIVE:%.*]], <16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 0, i32 1, i32 0)168// CHECK-NEXT: ret <16 x i8> [[TMP0]]169//170int8x16_t test_vqrdmladhq_s8(int8x16_t inactive, int8x16_t a, int8x16_t b) {171#ifdef POLYMORPHIC172 return vqrdmladhq(inactive, a, b);173#else /* POLYMORPHIC */174 return vqrdmladhq_s8(inactive, a, b);175#endif /* POLYMORPHIC */176}177 178// CHECK-LABEL: @test_vqrdmladhq_s16(179// CHECK-NEXT: entry:180// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vqdmlad.v8i16(<8 x i16> [[INACTIVE:%.*]], <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 1, i32 0)181// CHECK-NEXT: ret <8 x i16> [[TMP0]]182//183int16x8_t test_vqrdmladhq_s16(int16x8_t inactive, int16x8_t a, int16x8_t b) {184#ifdef POLYMORPHIC185 return vqrdmladhq(inactive, a, b);186#else /* POLYMORPHIC */187 return vqrdmladhq_s16(inactive, a, b);188#endif /* POLYMORPHIC */189}190 191// CHECK-LABEL: @test_vqrdmladhq_s32(192// CHECK-NEXT: entry:193// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vqdmlad.v4i32(<4 x i32> [[INACTIVE:%.*]], <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 1, i32 0)194// CHECK-NEXT: ret <4 x i32> [[TMP0]]195//196int32x4_t test_vqrdmladhq_s32(int32x4_t inactive, int32x4_t a, int32x4_t b) {197#ifdef POLYMORPHIC198 return vqrdmladhq(inactive, a, b);199#else /* POLYMORPHIC */200 return vqrdmladhq_s32(inactive, a, b);201#endif /* POLYMORPHIC */202}203 204// CHECK-LABEL: @test_vqrdmladhxq_s8(205// CHECK-NEXT: entry:206// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vqdmlad.v16i8(<16 x i8> [[INACTIVE:%.*]], <16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 1, i32 1, i32 0)207// CHECK-NEXT: ret <16 x i8> [[TMP0]]208//209int8x16_t test_vqrdmladhxq_s8(int8x16_t inactive, int8x16_t a, int8x16_t b) {210#ifdef POLYMORPHIC211 return vqrdmladhxq(inactive, a, b);212#else /* POLYMORPHIC */213 return vqrdmladhxq_s8(inactive, a, b);214#endif /* POLYMORPHIC */215}216 217// CHECK-LABEL: @test_vqrdmladhxq_s16(218// CHECK-NEXT: entry:219// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vqdmlad.v8i16(<8 x i16> [[INACTIVE:%.*]], <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 1, i32 0)220// CHECK-NEXT: ret <8 x i16> [[TMP0]]221//222int16x8_t test_vqrdmladhxq_s16(int16x8_t inactive, int16x8_t a, int16x8_t b) {223#ifdef POLYMORPHIC224 return vqrdmladhxq(inactive, a, b);225#else /* POLYMORPHIC */226 return vqrdmladhxq_s16(inactive, a, b);227#endif /* POLYMORPHIC */228}229 230// CHECK-LABEL: @test_vqrdmladhxq_s32(231// CHECK-NEXT: entry:232// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vqdmlad.v4i32(<4 x i32> [[INACTIVE:%.*]], <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 1, i32 0)233// CHECK-NEXT: ret <4 x i32> [[TMP0]]234//235int32x4_t test_vqrdmladhxq_s32(int32x4_t inactive, int32x4_t a, int32x4_t b) {236#ifdef POLYMORPHIC237 return vqrdmladhxq(inactive, a, b);238#else /* POLYMORPHIC */239 return vqrdmladhxq_s32(inactive, a, b);240#endif /* POLYMORPHIC */241}242 243// CHECK-LABEL: @test_vqrdmlsdhq_s8(244// CHECK-NEXT: entry:245// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vqdmlad.v16i8(<16 x i8> [[INACTIVE:%.*]], <16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 0, i32 1, i32 1)246// CHECK-NEXT: ret <16 x i8> [[TMP0]]247//248int8x16_t test_vqrdmlsdhq_s8(int8x16_t inactive, int8x16_t a, int8x16_t b) {249#ifdef POLYMORPHIC250 return vqrdmlsdhq(inactive, a, b);251#else /* POLYMORPHIC */252 return vqrdmlsdhq_s8(inactive, a, b);253#endif /* POLYMORPHIC */254}255 256// CHECK-LABEL: @test_vqrdmlsdhq_s16(257// CHECK-NEXT: entry:258// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vqdmlad.v8i16(<8 x i16> [[INACTIVE:%.*]], <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 1, i32 1)259// CHECK-NEXT: ret <8 x i16> [[TMP0]]260//261int16x8_t test_vqrdmlsdhq_s16(int16x8_t inactive, int16x8_t a, int16x8_t b) {262#ifdef POLYMORPHIC263 return vqrdmlsdhq(inactive, a, b);264#else /* POLYMORPHIC */265 return vqrdmlsdhq_s16(inactive, a, b);266#endif /* POLYMORPHIC */267}268 269// CHECK-LABEL: @test_vqrdmlsdhq_s32(270// CHECK-NEXT: entry:271// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vqdmlad.v4i32(<4 x i32> [[INACTIVE:%.*]], <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 1, i32 1)272// CHECK-NEXT: ret <4 x i32> [[TMP0]]273//274int32x4_t test_vqrdmlsdhq_s32(int32x4_t inactive, int32x4_t a, int32x4_t b) {275#ifdef POLYMORPHIC276 return vqrdmlsdhq(inactive, a, b);277#else /* POLYMORPHIC */278 return vqrdmlsdhq_s32(inactive, a, b);279#endif /* POLYMORPHIC */280}281 282// CHECK-LABEL: @test_vqrdmlsdhxq_s8(283// CHECK-NEXT: entry:284// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vqdmlad.v16i8(<16 x i8> [[INACTIVE:%.*]], <16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 1, i32 1, i32 1)285// CHECK-NEXT: ret <16 x i8> [[TMP0]]286//287int8x16_t test_vqrdmlsdhxq_s8(int8x16_t inactive, int8x16_t a, int8x16_t b) {288#ifdef POLYMORPHIC289 return vqrdmlsdhxq(inactive, a, b);290#else /* POLYMORPHIC */291 return vqrdmlsdhxq_s8(inactive, a, b);292#endif /* POLYMORPHIC */293}294 295// CHECK-LABEL: @test_vqrdmlsdhxq_s16(296// CHECK-NEXT: entry:297// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vqdmlad.v8i16(<8 x i16> [[INACTIVE:%.*]], <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 1, i32 1)298// CHECK-NEXT: ret <8 x i16> [[TMP0]]299//300int16x8_t test_vqrdmlsdhxq_s16(int16x8_t inactive, int16x8_t a, int16x8_t b) {301#ifdef POLYMORPHIC302 return vqrdmlsdhxq(inactive, a, b);303#else /* POLYMORPHIC */304 return vqrdmlsdhxq_s16(inactive, a, b);305#endif /* POLYMORPHIC */306}307 308// CHECK-LABEL: @test_vqrdmlsdhxq_s32(309// CHECK-NEXT: entry:310// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vqdmlad.v4i32(<4 x i32> [[INACTIVE:%.*]], <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 1, i32 1)311// CHECK-NEXT: ret <4 x i32> [[TMP0]]312//313int32x4_t test_vqrdmlsdhxq_s32(int32x4_t inactive, int32x4_t a, int32x4_t b) {314#ifdef POLYMORPHIC315 return vqrdmlsdhxq(inactive, a, b);316#else /* POLYMORPHIC */317 return vqrdmlsdhxq_s32(inactive, a, b);318#endif /* POLYMORPHIC */319}320 321// CHECK-LABEL: @test_vqdmladhq_m_s8(322// CHECK-NEXT: entry:323// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32324// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])325// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vqdmlad.predicated.v16i8.v16i1(<16 x i8> [[INACTIVE:%.*]], <16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 0, i32 0, i32 0, <16 x i1> [[TMP1]])326// CHECK-NEXT: ret <16 x i8> [[TMP2]]327//328int8x16_t test_vqdmladhq_m_s8(int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p) {329#ifdef POLYMORPHIC330 return vqdmladhq_m(inactive, a, b, p);331#else /* POLYMORPHIC */332 return vqdmladhq_m_s8(inactive, a, b, p);333#endif /* POLYMORPHIC */334}335 336// CHECK-LABEL: @test_vqdmladhq_m_s16(337// CHECK-NEXT: entry:338// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32339// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])340// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vqdmlad.predicated.v8i16.v8i1(<8 x i16> [[INACTIVE:%.*]], <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 0, i32 0, <8 x i1> [[TMP1]])341// CHECK-NEXT: ret <8 x i16> [[TMP2]]342//343int16x8_t test_vqdmladhq_m_s16(int16x8_t inactive, int16x8_t a, int16x8_t b, mve_pred16_t p) {344#ifdef POLYMORPHIC345 return vqdmladhq_m(inactive, a, b, p);346#else /* POLYMORPHIC */347 return vqdmladhq_m_s16(inactive, a, b, p);348#endif /* POLYMORPHIC */349}350 351// CHECK-LABEL: @test_vqdmladhq_m_s32(352// CHECK-NEXT: entry:353// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32354// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])355// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vqdmlad.predicated.v4i32.v4i1(<4 x i32> [[INACTIVE:%.*]], <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 0, i32 0, <4 x i1> [[TMP1]])356// CHECK-NEXT: ret <4 x i32> [[TMP2]]357//358int32x4_t test_vqdmladhq_m_s32(int32x4_t inactive, int32x4_t a, int32x4_t b, mve_pred16_t p) {359#ifdef POLYMORPHIC360 return vqdmladhq_m(inactive, a, b, p);361#else /* POLYMORPHIC */362 return vqdmladhq_m_s32(inactive, a, b, p);363#endif /* POLYMORPHIC */364}365 366// CHECK-LABEL: @test_vqdmladhxq_m_s8(367// CHECK-NEXT: entry:368// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32369// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])370// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vqdmlad.predicated.v16i8.v16i1(<16 x i8> [[INACTIVE:%.*]], <16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 1, i32 0, i32 0, <16 x i1> [[TMP1]])371// CHECK-NEXT: ret <16 x i8> [[TMP2]]372//373int8x16_t test_vqdmladhxq_m_s8(int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p) {374#ifdef POLYMORPHIC375 return vqdmladhxq_m(inactive, a, b, p);376#else /* POLYMORPHIC */377 return vqdmladhxq_m_s8(inactive, a, b, p);378#endif /* POLYMORPHIC */379}380 381// CHECK-LABEL: @test_vqdmladhxq_m_s16(382// CHECK-NEXT: entry:383// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32384// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])385// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vqdmlad.predicated.v8i16.v8i1(<8 x i16> [[INACTIVE:%.*]], <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 0, i32 0, <8 x i1> [[TMP1]])386// CHECK-NEXT: ret <8 x i16> [[TMP2]]387//388int16x8_t test_vqdmladhxq_m_s16(int16x8_t inactive, int16x8_t a, int16x8_t b, mve_pred16_t p) {389#ifdef POLYMORPHIC390 return vqdmladhxq_m(inactive, a, b, p);391#else /* POLYMORPHIC */392 return vqdmladhxq_m_s16(inactive, a, b, p);393#endif /* POLYMORPHIC */394}395 396// CHECK-LABEL: @test_vqdmladhxq_m_s32(397// CHECK-NEXT: entry:398// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32399// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])400// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vqdmlad.predicated.v4i32.v4i1(<4 x i32> [[INACTIVE:%.*]], <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 0, i32 0, <4 x i1> [[TMP1]])401// CHECK-NEXT: ret <4 x i32> [[TMP2]]402//403int32x4_t test_vqdmladhxq_m_s32(int32x4_t inactive, int32x4_t a, int32x4_t b, mve_pred16_t p) {404#ifdef POLYMORPHIC405 return vqdmladhxq_m(inactive, a, b, p);406#else /* POLYMORPHIC */407 return vqdmladhxq_m_s32(inactive, a, b, p);408#endif /* POLYMORPHIC */409}410 411// CHECK-LABEL: @test_vqdmlsdhq_m_s8(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.vqdmlad.predicated.v16i8.v16i1(<16 x i8> [[INACTIVE:%.*]], <16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 0, i32 0, i32 1, <16 x i1> [[TMP1]])416// CHECK-NEXT: ret <16 x i8> [[TMP2]]417//418int8x16_t test_vqdmlsdhq_m_s8(int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p) {419#ifdef POLYMORPHIC420 return vqdmlsdhq_m(inactive, a, b, p);421#else /* POLYMORPHIC */422 return vqdmlsdhq_m_s8(inactive, a, b, p);423#endif /* POLYMORPHIC */424}425 426// CHECK-LABEL: @test_vqdmlsdhq_m_s16(427// CHECK-NEXT: entry:428// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32429// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])430// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vqdmlad.predicated.v8i16.v8i1(<8 x i16> [[INACTIVE:%.*]], <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 0, i32 1, <8 x i1> [[TMP1]])431// CHECK-NEXT: ret <8 x i16> [[TMP2]]432//433int16x8_t test_vqdmlsdhq_m_s16(int16x8_t inactive, int16x8_t a, int16x8_t b, mve_pred16_t p) {434#ifdef POLYMORPHIC435 return vqdmlsdhq_m(inactive, a, b, p);436#else /* POLYMORPHIC */437 return vqdmlsdhq_m_s16(inactive, a, b, p);438#endif /* POLYMORPHIC */439}440 441// CHECK-LABEL: @test_vqdmlsdhq_m_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 <4 x i32> @llvm.arm.mve.vqdmlad.predicated.v4i32.v4i1(<4 x i32> [[INACTIVE:%.*]], <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 0, i32 1, <4 x i1> [[TMP1]])446// CHECK-NEXT: ret <4 x i32> [[TMP2]]447//448int32x4_t test_vqdmlsdhq_m_s32(int32x4_t inactive, int32x4_t a, int32x4_t b, mve_pred16_t p) {449#ifdef POLYMORPHIC450 return vqdmlsdhq_m(inactive, a, b, p);451#else /* POLYMORPHIC */452 return vqdmlsdhq_m_s32(inactive, a, b, p);453#endif /* POLYMORPHIC */454}455 456// CHECK-LABEL: @test_vqdmlsdhxq_m_s8(457// CHECK-NEXT: entry:458// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32459// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])460// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vqdmlad.predicated.v16i8.v16i1(<16 x i8> [[INACTIVE:%.*]], <16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 1, i32 0, i32 1, <16 x i1> [[TMP1]])461// CHECK-NEXT: ret <16 x i8> [[TMP2]]462//463int8x16_t test_vqdmlsdhxq_m_s8(int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p) {464#ifdef POLYMORPHIC465 return vqdmlsdhxq_m(inactive, a, b, p);466#else /* POLYMORPHIC */467 return vqdmlsdhxq_m_s8(inactive, a, b, p);468#endif /* POLYMORPHIC */469}470 471// CHECK-LABEL: @test_vqdmlsdhxq_m_s16(472// CHECK-NEXT: entry:473// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32474// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])475// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vqdmlad.predicated.v8i16.v8i1(<8 x i16> [[INACTIVE:%.*]], <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 0, i32 1, <8 x i1> [[TMP1]])476// CHECK-NEXT: ret <8 x i16> [[TMP2]]477//478int16x8_t test_vqdmlsdhxq_m_s16(int16x8_t inactive, int16x8_t a, int16x8_t b, mve_pred16_t p) {479#ifdef POLYMORPHIC480 return vqdmlsdhxq_m(inactive, a, b, p);481#else /* POLYMORPHIC */482 return vqdmlsdhxq_m_s16(inactive, a, b, p);483#endif /* POLYMORPHIC */484}485 486// CHECK-LABEL: @test_vqdmlsdhxq_m_s32(487// CHECK-NEXT: entry:488// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32489// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])490// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vqdmlad.predicated.v4i32.v4i1(<4 x i32> [[INACTIVE:%.*]], <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 0, i32 1, <4 x i1> [[TMP1]])491// CHECK-NEXT: ret <4 x i32> [[TMP2]]492//493int32x4_t test_vqdmlsdhxq_m_s32(int32x4_t inactive, int32x4_t a, int32x4_t b, mve_pred16_t p) {494#ifdef POLYMORPHIC495 return vqdmlsdhxq_m(inactive, a, b, p);496#else /* POLYMORPHIC */497 return vqdmlsdhxq_m_s32(inactive, a, b, p);498#endif /* POLYMORPHIC */499}500 501// CHECK-LABEL: @test_vqrdmladhq_m_s8(502// CHECK-NEXT: entry:503// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32504// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])505// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vqdmlad.predicated.v16i8.v16i1(<16 x i8> [[INACTIVE:%.*]], <16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 0, i32 1, i32 0, <16 x i1> [[TMP1]])506// CHECK-NEXT: ret <16 x i8> [[TMP2]]507//508int8x16_t test_vqrdmladhq_m_s8(int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p) {509#ifdef POLYMORPHIC510 return vqrdmladhq_m(inactive, a, b, p);511#else /* POLYMORPHIC */512 return vqrdmladhq_m_s8(inactive, a, b, p);513#endif /* POLYMORPHIC */514}515 516// CHECK-LABEL: @test_vqrdmladhq_m_s16(517// CHECK-NEXT: entry:518// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32519// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])520// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vqdmlad.predicated.v8i16.v8i1(<8 x i16> [[INACTIVE:%.*]], <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 1, i32 0, <8 x i1> [[TMP1]])521// CHECK-NEXT: ret <8 x i16> [[TMP2]]522//523int16x8_t test_vqrdmladhq_m_s16(int16x8_t inactive, int16x8_t a, int16x8_t b, mve_pred16_t p) {524#ifdef POLYMORPHIC525 return vqrdmladhq_m(inactive, a, b, p);526#else /* POLYMORPHIC */527 return vqrdmladhq_m_s16(inactive, a, b, p);528#endif /* POLYMORPHIC */529}530 531// CHECK-LABEL: @test_vqrdmladhq_m_s32(532// CHECK-NEXT: entry:533// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32534// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])535// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vqdmlad.predicated.v4i32.v4i1(<4 x i32> [[INACTIVE:%.*]], <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 1, i32 0, <4 x i1> [[TMP1]])536// CHECK-NEXT: ret <4 x i32> [[TMP2]]537//538int32x4_t test_vqrdmladhq_m_s32(int32x4_t inactive, int32x4_t a, int32x4_t b, mve_pred16_t p) {539#ifdef POLYMORPHIC540 return vqrdmladhq_m(inactive, a, b, p);541#else /* POLYMORPHIC */542 return vqrdmladhq_m_s32(inactive, a, b, p);543#endif /* POLYMORPHIC */544}545 546// CHECK-LABEL: @test_vqrdmladhxq_m_s8(547// CHECK-NEXT: entry:548// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32549// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])550// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vqdmlad.predicated.v16i8.v16i1(<16 x i8> [[INACTIVE:%.*]], <16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 1, i32 1, i32 0, <16 x i1> [[TMP1]])551// CHECK-NEXT: ret <16 x i8> [[TMP2]]552//553int8x16_t test_vqrdmladhxq_m_s8(int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p) {554#ifdef POLYMORPHIC555 return vqrdmladhxq_m(inactive, a, b, p);556#else /* POLYMORPHIC */557 return vqrdmladhxq_m_s8(inactive, a, b, p);558#endif /* POLYMORPHIC */559}560 561// CHECK-LABEL: @test_vqrdmladhxq_m_s16(562// CHECK-NEXT: entry:563// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32564// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])565// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vqdmlad.predicated.v8i16.v8i1(<8 x i16> [[INACTIVE:%.*]], <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 1, i32 0, <8 x i1> [[TMP1]])566// CHECK-NEXT: ret <8 x i16> [[TMP2]]567//568int16x8_t test_vqrdmladhxq_m_s16(int16x8_t inactive, int16x8_t a, int16x8_t b, mve_pred16_t p) {569#ifdef POLYMORPHIC570 return vqrdmladhxq_m(inactive, a, b, p);571#else /* POLYMORPHIC */572 return vqrdmladhxq_m_s16(inactive, a, b, p);573#endif /* POLYMORPHIC */574}575 576// CHECK-LABEL: @test_vqrdmladhxq_m_s32(577// CHECK-NEXT: entry:578// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32579// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])580// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vqdmlad.predicated.v4i32.v4i1(<4 x i32> [[INACTIVE:%.*]], <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 1, i32 0, <4 x i1> [[TMP1]])581// CHECK-NEXT: ret <4 x i32> [[TMP2]]582//583int32x4_t test_vqrdmladhxq_m_s32(int32x4_t inactive, int32x4_t a, int32x4_t b, mve_pred16_t p) {584#ifdef POLYMORPHIC585 return vqrdmladhxq_m(inactive, a, b, p);586#else /* POLYMORPHIC */587 return vqrdmladhxq_m_s32(inactive, a, b, p);588#endif /* POLYMORPHIC */589}590 591// CHECK-LABEL: @test_vqrdmlsdhq_m_s8(592// CHECK-NEXT: entry:593// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32594// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])595// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vqdmlad.predicated.v16i8.v16i1(<16 x i8> [[INACTIVE:%.*]], <16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 0, i32 1, i32 1, <16 x i1> [[TMP1]])596// CHECK-NEXT: ret <16 x i8> [[TMP2]]597//598int8x16_t test_vqrdmlsdhq_m_s8(int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p) {599#ifdef POLYMORPHIC600 return vqrdmlsdhq_m(inactive, a, b, p);601#else /* POLYMORPHIC */602 return vqrdmlsdhq_m_s8(inactive, a, b, p);603#endif /* POLYMORPHIC */604}605 606// CHECK-LABEL: @test_vqrdmlsdhq_m_s16(607// CHECK-NEXT: entry:608// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32609// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])610// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vqdmlad.predicated.v8i16.v8i1(<8 x i16> [[INACTIVE:%.*]], <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 1, i32 1, <8 x i1> [[TMP1]])611// CHECK-NEXT: ret <8 x i16> [[TMP2]]612//613int16x8_t test_vqrdmlsdhq_m_s16(int16x8_t inactive, int16x8_t a, int16x8_t b, mve_pred16_t p) {614#ifdef POLYMORPHIC615 return vqrdmlsdhq_m(inactive, a, b, p);616#else /* POLYMORPHIC */617 return vqrdmlsdhq_m_s16(inactive, a, b, p);618#endif /* POLYMORPHIC */619}620 621// CHECK-LABEL: @test_vqrdmlsdhq_m_s32(622// CHECK-NEXT: entry:623// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32624// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])625// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vqdmlad.predicated.v4i32.v4i1(<4 x i32> [[INACTIVE:%.*]], <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 1, i32 1, <4 x i1> [[TMP1]])626// CHECK-NEXT: ret <4 x i32> [[TMP2]]627//628int32x4_t test_vqrdmlsdhq_m_s32(int32x4_t inactive, int32x4_t a, int32x4_t b, mve_pred16_t p) {629#ifdef POLYMORPHIC630 return vqrdmlsdhq_m(inactive, a, b, p);631#else /* POLYMORPHIC */632 return vqrdmlsdhq_m_s32(inactive, a, b, p);633#endif /* POLYMORPHIC */634}635 636// CHECK-LABEL: @test_vqrdmlsdhxq_m_s8(637// CHECK-NEXT: entry:638// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32639// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])640// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vqdmlad.predicated.v16i8.v16i1(<16 x i8> [[INACTIVE:%.*]], <16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], i32 1, i32 1, i32 1, <16 x i1> [[TMP1]])641// CHECK-NEXT: ret <16 x i8> [[TMP2]]642//643int8x16_t test_vqrdmlsdhxq_m_s8(int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p) {644#ifdef POLYMORPHIC645 return vqrdmlsdhxq_m(inactive, a, b, p);646#else /* POLYMORPHIC */647 return vqrdmlsdhxq_m_s8(inactive, a, b, p);648#endif /* POLYMORPHIC */649}650 651// CHECK-LABEL: @test_vqrdmlsdhxq_m_s16(652// CHECK-NEXT: entry:653// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32654// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])655// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vqdmlad.predicated.v8i16.v8i1(<8 x i16> [[INACTIVE:%.*]], <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 1, i32 1, <8 x i1> [[TMP1]])656// CHECK-NEXT: ret <8 x i16> [[TMP2]]657//658int16x8_t test_vqrdmlsdhxq_m_s16(int16x8_t inactive, int16x8_t a, int16x8_t b, mve_pred16_t p) {659#ifdef POLYMORPHIC660 return vqrdmlsdhxq_m(inactive, a, b, p);661#else /* POLYMORPHIC */662 return vqrdmlsdhxq_m_s16(inactive, a, b, p);663#endif /* POLYMORPHIC */664}665 666// CHECK-LABEL: @test_vqrdmlsdhxq_m_s32(667// CHECK-NEXT: entry:668// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32669// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])670// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vqdmlad.predicated.v4i32.v4i1(<4 x i32> [[INACTIVE:%.*]], <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 1, i32 1, <4 x i1> [[TMP1]])671// CHECK-NEXT: ret <4 x i32> [[TMP2]]672//673int32x4_t test_vqrdmlsdhxq_m_s32(int32x4_t inactive, int32x4_t a, int32x4_t b, mve_pred16_t p) {674#ifdef POLYMORPHIC675 return vqrdmlsdhxq_m(inactive, a, b, p);676#else /* POLYMORPHIC */677 return vqrdmlsdhxq_m_s32(inactive, a, b, p);678#endif /* POLYMORPHIC */679}680