282 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=sroa | FileCheck %s --check-prefixes=CHECK,CHECK-NONSTRICT3// 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=sroa | FileCheck %s --check-prefixes=CHECK,CHECK-NONSTRICT4// RUN: %clang_cc1 -triple thumbv8.1m.main-none-none-eabi -target-feature +mve.fp -mfloat-abi hard -O0 -frounding-math -fexperimental-strict-floating-point -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=sroa | FileCheck %s --check-prefixes=CHECK,CHECK-STRICT5// RUN: %clang_cc1 -triple thumbv8.1m.main-none-none-eabi -target-feature +mve.fp -mfloat-abi hard -O0 -frounding-math -fexperimental-strict-floating-point -disable-O0-optnone -DPOLYMORPHIC -emit-llvm -o - %s | opt -S -passes=sroa | FileCheck %s --check-prefixes=CHECK,CHECK-STRICT6 7// REQUIRES: aarch64-registered-target || arm-registered-target8 9#include <arm_mve.h>10 11// CHECK-LABEL: @test_vaddq_u32(12// CHECK-NEXT: entry:13// CHECK-NEXT: [[TMP0:%.*]] = add <4 x i32> [[A:%.*]], [[B:%.*]]14// CHECK-NEXT: ret <4 x i32> [[TMP0]]15//16uint32x4_t test_vaddq_u32(uint32x4_t a, uint32x4_t b)17{18#ifdef POLYMORPHIC19 return vaddq(a, b);20#else /* POLYMORPHIC */21 return vaddq_u32(a, b);22#endif /* POLYMORPHIC */23}24 25// CHECK-NONSTRICT-LABEL: @test_vaddq_f16(26// CHECK-NONSTRICT-NEXT: entry:27// CHECK-NONSTRICT-NEXT: [[TMP0:%.*]] = fadd <8 x half> [[A:%.*]], [[B:%.*]]28// CHECK-NONSTRICT-NEXT: ret <8 x half> [[TMP0]]29//30// CHECK-STRICT-LABEL: @test_vaddq_f16(31// CHECK-STRICT-NEXT: entry:32// CHECK-STRICT-NEXT: [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vadd.v8f16(<8 x half> [[A:%.*]], <8 x half> [[B:%.*]]) #[[ATTR2:[0-9]+]]33// CHECK-STRICT-NEXT: ret <8 x half> [[TMP0]]34//35float16x8_t test_vaddq_f16(float16x8_t a, float16x8_t b)36{37#ifdef POLYMORPHIC38 return vaddq(a, b);39#else /* POLYMORPHIC */40 return vaddq_f16(a, b);41#endif /* POLYMORPHIC */42}43 44// CHECK-NONSTRICT-LABEL: @test_vaddq_m_s8(45// CHECK-NONSTRICT-NEXT: entry:46// CHECK-NONSTRICT-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i3247// CHECK-NONSTRICT-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])48// CHECK-NONSTRICT-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.add.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])49// CHECK-NONSTRICT-NEXT: ret <16 x i8> [[TMP2]]50//51// CHECK-STRICT-LABEL: @test_vaddq_m_s8(52// CHECK-STRICT-NEXT: entry:53// CHECK-STRICT-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i3254// CHECK-STRICT-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]]) #[[ATTR2]]55// CHECK-STRICT-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.add.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]]) #[[ATTR2]]56// CHECK-STRICT-NEXT: ret <16 x i8> [[TMP2]]57//58int8x16_t test_vaddq_m_s8(int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p)59{60#ifdef POLYMORPHIC61 return vaddq_m(inactive, a, b, p);62#else /* POLYMORPHIC */63 return vaddq_m_s8(inactive, a, b, p);64#endif /* POLYMORPHIC */65}66 67// CHECK-NONSTRICT-LABEL: @test_vaddq_m_f32(68// CHECK-NONSTRICT-NEXT: entry:69// CHECK-NONSTRICT-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i3270// CHECK-NONSTRICT-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])71// CHECK-NONSTRICT-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.arm.mve.add.predicated.v4f32.v4i1(<4 x float> [[A:%.*]], <4 x float> [[B:%.*]], <4 x i1> [[TMP1]], <4 x float> [[INACTIVE:%.*]])72// CHECK-NONSTRICT-NEXT: ret <4 x float> [[TMP2]]73//74// CHECK-STRICT-LABEL: @test_vaddq_m_f32(75// CHECK-STRICT-NEXT: entry:76// CHECK-STRICT-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i3277// CHECK-STRICT-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]]) #[[ATTR2]]78// CHECK-STRICT-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.arm.mve.add.predicated.v4f32.v4i1(<4 x float> [[A:%.*]], <4 x float> [[B:%.*]], <4 x i1> [[TMP1]], <4 x float> [[INACTIVE:%.*]]) #[[ATTR2]]79// CHECK-STRICT-NEXT: ret <4 x float> [[TMP2]]80//81float32x4_t test_vaddq_m_f32(float32x4_t inactive, float32x4_t a, float32x4_t b, mve_pred16_t p)82{83#ifdef POLYMORPHIC84 return vaddq_m(inactive, a, b, p);85#else /* POLYMORPHIC */86 return vaddq_m_f32(inactive, a, b, p);87#endif /* POLYMORPHIC */88}89 90// CHECK-NONSTRICT-LABEL: @test_vaddq_x_u16(91// CHECK-NONSTRICT-NEXT: entry:92// CHECK-NONSTRICT-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i3293// CHECK-NONSTRICT-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])94// CHECK-NONSTRICT-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.add.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], <8 x i1> [[TMP1]], <8 x i16> undef)95// CHECK-NONSTRICT-NEXT: ret <8 x i16> [[TMP2]]96//97// CHECK-STRICT-LABEL: @test_vaddq_x_u16(98// CHECK-STRICT-NEXT: entry:99// CHECK-STRICT-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32100// CHECK-STRICT-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]]) #[[ATTR2]]101// CHECK-STRICT-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.add.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], <8 x i1> [[TMP1]], <8 x i16> undef) #[[ATTR2]]102// CHECK-STRICT-NEXT: ret <8 x i16> [[TMP2]]103//104uint16x8_t test_vaddq_x_u16(uint16x8_t a, uint16x8_t b, mve_pred16_t p)105{106#ifdef POLYMORPHIC107 return vaddq_x(a, b, p);108#else /* POLYMORPHIC */109 return vaddq_x_u16(a, b, p);110#endif /* POLYMORPHIC */111}112 113// CHECK-NONSTRICT-LABEL: @test_vaddq_x_f16(114// CHECK-NONSTRICT-NEXT: entry:115// CHECK-NONSTRICT-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32116// CHECK-NONSTRICT-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])117// CHECK-NONSTRICT-NEXT: [[TMP2:%.*]] = call <8 x half> @llvm.arm.mve.add.predicated.v8f16.v8i1(<8 x half> [[A:%.*]], <8 x half> [[B:%.*]], <8 x i1> [[TMP1]], <8 x half> undef)118// CHECK-NONSTRICT-NEXT: ret <8 x half> [[TMP2]]119//120// CHECK-STRICT-LABEL: @test_vaddq_x_f16(121// CHECK-STRICT-NEXT: entry:122// CHECK-STRICT-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32123// CHECK-STRICT-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]]) #[[ATTR2]]124// CHECK-STRICT-NEXT: [[TMP2:%.*]] = call <8 x half> @llvm.arm.mve.add.predicated.v8f16.v8i1(<8 x half> [[A:%.*]], <8 x half> [[B:%.*]], <8 x i1> [[TMP1]], <8 x half> undef) #[[ATTR2]]125// CHECK-STRICT-NEXT: ret <8 x half> [[TMP2]]126//127float16x8_t test_vaddq_x_f16(float16x8_t a, float16x8_t b, mve_pred16_t p)128{129#ifdef POLYMORPHIC130 return vaddq_x(a, b, p);131#else /* POLYMORPHIC */132 return vaddq_x_f16(a, b, p);133#endif /* POLYMORPHIC */134}135 136// CHECK-LABEL: @test_vaddq_n_u32(137// CHECK-NEXT: entry:138// CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <4 x i32> poison, i32 [[B:%.*]], i64 0139// CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <4 x i32> [[DOTSPLATINSERT]], <4 x i32> poison, <4 x i32> zeroinitializer140// CHECK-NEXT: [[TMP0:%.*]] = add <4 x i32> [[A:%.*]], [[DOTSPLAT]]141// CHECK-NEXT: ret <4 x i32> [[TMP0]]142//143uint32x4_t test_vaddq_n_u32(uint32x4_t a, uint32_t b)144{145#ifdef POLYMORPHIC146 return vaddq(a, b);147#else /* POLYMORPHIC */148 return vaddq_n_u32(a, b);149#endif /* POLYMORPHIC */150}151 152// CHECK-NONSTRICT-LABEL: @test_vaddq_n_f16(153// CHECK-NONSTRICT-NEXT: entry:154// CHECK-NONSTRICT-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <8 x half> poison, half [[B:%.*]], i64 0155// CHECK-NONSTRICT-NEXT: [[DOTSPLAT:%.*]] = shufflevector <8 x half> [[DOTSPLATINSERT]], <8 x half> poison, <8 x i32> zeroinitializer156// CHECK-NONSTRICT-NEXT: [[TMP0:%.*]] = fadd <8 x half> [[A:%.*]], [[DOTSPLAT]]157// CHECK-NONSTRICT-NEXT: ret <8 x half> [[TMP0]]158//159// CHECK-STRICT-LABEL: @test_vaddq_n_f16(160// CHECK-STRICT-NEXT: entry:161// CHECK-STRICT-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <8 x half> poison, half [[B:%.*]], i64 0162// CHECK-STRICT-NEXT: [[DOTSPLAT:%.*]] = shufflevector <8 x half> [[DOTSPLATINSERT]], <8 x half> poison, <8 x i32> zeroinitializer163// CHECK-STRICT-NEXT: [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vadd.v8f16(<8 x half> [[A:%.*]], <8 x half> [[DOTSPLAT]]) #[[ATTR2]]164// CHECK-STRICT-NEXT: ret <8 x half> [[TMP0]]165//166float16x8_t test_vaddq_n_f16(float16x8_t a, float16_t b)167{168#ifdef POLYMORPHIC169 return vaddq(a, b);170#else /* POLYMORPHIC */171 return vaddq_n_f16(a, b);172#endif /* POLYMORPHIC */173}174 175// CHECK-NONSTRICT-LABEL: @test_vaddq_m_n_s8(176// CHECK-NONSTRICT-NEXT: entry:177// CHECK-NONSTRICT-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <16 x i8> poison, i8 [[B:%.*]], i64 0178// CHECK-NONSTRICT-NEXT: [[DOTSPLAT:%.*]] = shufflevector <16 x i8> [[DOTSPLATINSERT]], <16 x i8> poison, <16 x i32> zeroinitializer179// CHECK-NONSTRICT-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32180// CHECK-NONSTRICT-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])181// CHECK-NONSTRICT-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.add.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], <16 x i8> [[DOTSPLAT]], <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]])182// CHECK-NONSTRICT-NEXT: ret <16 x i8> [[TMP2]]183//184// CHECK-STRICT-LABEL: @test_vaddq_m_n_s8(185// CHECK-STRICT-NEXT: entry:186// CHECK-STRICT-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <16 x i8> poison, i8 [[B:%.*]], i64 0187// CHECK-STRICT-NEXT: [[DOTSPLAT:%.*]] = shufflevector <16 x i8> [[DOTSPLATINSERT]], <16 x i8> poison, <16 x i32> zeroinitializer188// CHECK-STRICT-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32189// CHECK-STRICT-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]]) #[[ATTR2]]190// CHECK-STRICT-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.add.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], <16 x i8> [[DOTSPLAT]], <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]]) #[[ATTR2]]191// CHECK-STRICT-NEXT: ret <16 x i8> [[TMP2]]192//193int8x16_t test_vaddq_m_n_s8(int8x16_t inactive, int8x16_t a, int8_t b, mve_pred16_t p)194{195#ifdef POLYMORPHIC196 return vaddq_m(inactive, a, b, p);197#else /* POLYMORPHIC */198 return vaddq_m_n_s8(inactive, a, b, p);199#endif /* POLYMORPHIC */200}201 202// CHECK-NONSTRICT-LABEL: @test_vaddq_m_n_f32(203// CHECK-NONSTRICT-NEXT: entry:204// CHECK-NONSTRICT-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <4 x float> poison, float [[B:%.*]], i64 0205// CHECK-NONSTRICT-NEXT: [[DOTSPLAT:%.*]] = shufflevector <4 x float> [[DOTSPLATINSERT]], <4 x float> poison, <4 x i32> zeroinitializer206// CHECK-NONSTRICT-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32207// CHECK-NONSTRICT-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])208// CHECK-NONSTRICT-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.arm.mve.add.predicated.v4f32.v4i1(<4 x float> [[A:%.*]], <4 x float> [[DOTSPLAT]], <4 x i1> [[TMP1]], <4 x float> [[INACTIVE:%.*]])209// CHECK-NONSTRICT-NEXT: ret <4 x float> [[TMP2]]210//211// CHECK-STRICT-LABEL: @test_vaddq_m_n_f32(212// CHECK-STRICT-NEXT: entry:213// CHECK-STRICT-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <4 x float> poison, float [[B:%.*]], i64 0214// CHECK-STRICT-NEXT: [[DOTSPLAT:%.*]] = shufflevector <4 x float> [[DOTSPLATINSERT]], <4 x float> poison, <4 x i32> zeroinitializer215// CHECK-STRICT-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32216// CHECK-STRICT-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]]) #[[ATTR2]]217// CHECK-STRICT-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.arm.mve.add.predicated.v4f32.v4i1(<4 x float> [[A:%.*]], <4 x float> [[DOTSPLAT]], <4 x i1> [[TMP1]], <4 x float> [[INACTIVE:%.*]]) #[[ATTR2]]218// CHECK-STRICT-NEXT: ret <4 x float> [[TMP2]]219//220float32x4_t test_vaddq_m_n_f32(float32x4_t inactive, float32x4_t a, float32_t b, mve_pred16_t p)221{222#ifdef POLYMORPHIC223 return vaddq_m(inactive, a, b, p);224#else /* POLYMORPHIC */225 return vaddq_m_n_f32(inactive, a, b, p);226#endif /* POLYMORPHIC */227}228 229// CHECK-NONSTRICT-LABEL: @test_vaddq_x_n_u16(230// CHECK-NONSTRICT-NEXT: entry:231// CHECK-NONSTRICT-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <8 x i16> poison, i16 [[B:%.*]], i64 0232// CHECK-NONSTRICT-NEXT: [[DOTSPLAT:%.*]] = shufflevector <8 x i16> [[DOTSPLATINSERT]], <8 x i16> poison, <8 x i32> zeroinitializer233// CHECK-NONSTRICT-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32234// CHECK-NONSTRICT-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])235// CHECK-NONSTRICT-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.add.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], <8 x i16> [[DOTSPLAT]], <8 x i1> [[TMP1]], <8 x i16> undef)236// CHECK-NONSTRICT-NEXT: ret <8 x i16> [[TMP2]]237//238// CHECK-STRICT-LABEL: @test_vaddq_x_n_u16(239// CHECK-STRICT-NEXT: entry:240// CHECK-STRICT-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <8 x i16> poison, i16 [[B:%.*]], i64 0241// CHECK-STRICT-NEXT: [[DOTSPLAT:%.*]] = shufflevector <8 x i16> [[DOTSPLATINSERT]], <8 x i16> poison, <8 x i32> zeroinitializer242// CHECK-STRICT-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32243// CHECK-STRICT-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]]) #[[ATTR2]]244// CHECK-STRICT-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.add.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], <8 x i16> [[DOTSPLAT]], <8 x i1> [[TMP1]], <8 x i16> undef) #[[ATTR2]]245// CHECK-STRICT-NEXT: ret <8 x i16> [[TMP2]]246//247uint16x8_t test_vaddq_x_n_u16(uint16x8_t a, uint16_t b, mve_pred16_t p)248{249#ifdef POLYMORPHIC250 return vaddq_x(a, b, p);251#else /* POLYMORPHIC */252 return vaddq_x_n_u16(a, b, p);253#endif /* POLYMORPHIC */254}255 256// CHECK-NONSTRICT-LABEL: @test_vaddq_x_n_f16(257// CHECK-NONSTRICT-NEXT: entry:258// CHECK-NONSTRICT-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <8 x half> poison, half [[B:%.*]], i64 0259// CHECK-NONSTRICT-NEXT: [[DOTSPLAT:%.*]] = shufflevector <8 x half> [[DOTSPLATINSERT]], <8 x half> poison, <8 x i32> zeroinitializer260// CHECK-NONSTRICT-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32261// CHECK-NONSTRICT-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])262// CHECK-NONSTRICT-NEXT: [[TMP2:%.*]] = call <8 x half> @llvm.arm.mve.add.predicated.v8f16.v8i1(<8 x half> [[A:%.*]], <8 x half> [[DOTSPLAT]], <8 x i1> [[TMP1]], <8 x half> undef)263// CHECK-NONSTRICT-NEXT: ret <8 x half> [[TMP2]]264//265// CHECK-STRICT-LABEL: @test_vaddq_x_n_f16(266// CHECK-STRICT-NEXT: entry:267// CHECK-STRICT-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <8 x half> poison, half [[B:%.*]], i64 0268// CHECK-STRICT-NEXT: [[DOTSPLAT:%.*]] = shufflevector <8 x half> [[DOTSPLATINSERT]], <8 x half> poison, <8 x i32> zeroinitializer269// CHECK-STRICT-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32270// CHECK-STRICT-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]]) #[[ATTR2]]271// CHECK-STRICT-NEXT: [[TMP2:%.*]] = call <8 x half> @llvm.arm.mve.add.predicated.v8f16.v8i1(<8 x half> [[A:%.*]], <8 x half> [[DOTSPLAT]], <8 x i1> [[TMP1]], <8 x half> undef) #[[ATTR2]]272// CHECK-STRICT-NEXT: ret <8 x half> [[TMP2]]273//274float16x8_t test_vaddq_x_n_f16(float16x8_t a, float16_t b, mve_pred16_t p)275{276#ifdef POLYMORPHIC277 return vaddq_x(a, b, p);278#else /* POLYMORPHIC */279 return vaddq_x_n_f16(a, b, p);280#endif /* POLYMORPHIC */281}282