1632 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,sroa,early-cse<>' | FileCheck %s --check-prefix=BOTH --check-prefix=LE3// 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 %s --check-prefix=BOTH --check-prefix=LE4// RUN: %clang_cc1 -triple thumbebv8.1m.main-arm-none-eabi -target-feature +mve.fp -mfloat-abi hard -O0 -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes='mem2reg,sroa,early-cse<>' | FileCheck %s --check-prefix=BOTH --check-prefix=BE5// RUN: %clang_cc1 -triple thumbebv8.1m.main-arm-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 %s --check-prefix=BOTH --check-prefix=BE6 7// REQUIRES: aarch64-registered-target || arm-registered-target8 9#include <arm_mve.h>10 11// LE-LABEL: @test_vreinterpretq_f16_f32(12// LE-NEXT: entry:13// LE-NEXT: [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <8 x half>14// LE-NEXT: ret <8 x half> [[TMP0]]15//16// BE-LABEL: @test_vreinterpretq_f16_f32(17// BE-NEXT: entry:18// BE-NEXT: [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v4f32(<4 x float> [[A:%.*]])19// BE-NEXT: ret <8 x half> [[TMP0]]20//21float16x8_t test_vreinterpretq_f16_f32(float32x4_t a)22{23#ifdef POLYMORPHIC24 return vreinterpretq_f16(a);25#else /* POLYMORPHIC */26 return vreinterpretq_f16_f32(a);27#endif /* POLYMORPHIC */28}29 30// BOTH-LABEL: @test_vreinterpretq_f16_s16(31// BOTH-NEXT: entry:32// BOTH-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <8 x half>33// BOTH-NEXT: ret <8 x half> [[TMP0]]34//35float16x8_t test_vreinterpretq_f16_s16(int16x8_t a)36{37#ifdef POLYMORPHIC38 return vreinterpretq_f16(a);39#else /* POLYMORPHIC */40 return vreinterpretq_f16_s16(a);41#endif /* POLYMORPHIC */42}43 44// LE-LABEL: @test_vreinterpretq_f16_s32(45// LE-NEXT: entry:46// LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x half>47// LE-NEXT: ret <8 x half> [[TMP0]]48//49// BE-LABEL: @test_vreinterpretq_f16_s32(50// BE-NEXT: entry:51// BE-NEXT: [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v4i32(<4 x i32> [[A:%.*]])52// BE-NEXT: ret <8 x half> [[TMP0]]53//54float16x8_t test_vreinterpretq_f16_s32(int32x4_t a)55{56#ifdef POLYMORPHIC57 return vreinterpretq_f16(a);58#else /* POLYMORPHIC */59 return vreinterpretq_f16_s32(a);60#endif /* POLYMORPHIC */61}62 63// LE-LABEL: @test_vreinterpretq_f16_s64(64// LE-NEXT: entry:65// LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <8 x half>66// LE-NEXT: ret <8 x half> [[TMP0]]67//68// BE-LABEL: @test_vreinterpretq_f16_s64(69// BE-NEXT: entry:70// BE-NEXT: [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v2i64(<2 x i64> [[A:%.*]])71// BE-NEXT: ret <8 x half> [[TMP0]]72//73float16x8_t test_vreinterpretq_f16_s64(int64x2_t a)74{75#ifdef POLYMORPHIC76 return vreinterpretq_f16(a);77#else /* POLYMORPHIC */78 return vreinterpretq_f16_s64(a);79#endif /* POLYMORPHIC */80}81 82// LE-LABEL: @test_vreinterpretq_f16_s8(83// LE-NEXT: entry:84// LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <8 x half>85// LE-NEXT: ret <8 x half> [[TMP0]]86//87// BE-LABEL: @test_vreinterpretq_f16_s8(88// BE-NEXT: entry:89// BE-NEXT: [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v16i8(<16 x i8> [[A:%.*]])90// BE-NEXT: ret <8 x half> [[TMP0]]91//92float16x8_t test_vreinterpretq_f16_s8(int8x16_t a)93{94#ifdef POLYMORPHIC95 return vreinterpretq_f16(a);96#else /* POLYMORPHIC */97 return vreinterpretq_f16_s8(a);98#endif /* POLYMORPHIC */99}100 101// BOTH-LABEL: @test_vreinterpretq_f16_u16(102// BOTH-NEXT: entry:103// BOTH-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <8 x half>104// BOTH-NEXT: ret <8 x half> [[TMP0]]105//106float16x8_t test_vreinterpretq_f16_u16(uint16x8_t a)107{108#ifdef POLYMORPHIC109 return vreinterpretq_f16(a);110#else /* POLYMORPHIC */111 return vreinterpretq_f16_u16(a);112#endif /* POLYMORPHIC */113}114 115// LE-LABEL: @test_vreinterpretq_f16_u32(116// LE-NEXT: entry:117// LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x half>118// LE-NEXT: ret <8 x half> [[TMP0]]119//120// BE-LABEL: @test_vreinterpretq_f16_u32(121// BE-NEXT: entry:122// BE-NEXT: [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v4i32(<4 x i32> [[A:%.*]])123// BE-NEXT: ret <8 x half> [[TMP0]]124//125float16x8_t test_vreinterpretq_f16_u32(uint32x4_t a)126{127#ifdef POLYMORPHIC128 return vreinterpretq_f16(a);129#else /* POLYMORPHIC */130 return vreinterpretq_f16_u32(a);131#endif /* POLYMORPHIC */132}133 134// LE-LABEL: @test_vreinterpretq_f16_u64(135// LE-NEXT: entry:136// LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <8 x half>137// LE-NEXT: ret <8 x half> [[TMP0]]138//139// BE-LABEL: @test_vreinterpretq_f16_u64(140// BE-NEXT: entry:141// BE-NEXT: [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v2i64(<2 x i64> [[A:%.*]])142// BE-NEXT: ret <8 x half> [[TMP0]]143//144float16x8_t test_vreinterpretq_f16_u64(uint64x2_t a)145{146#ifdef POLYMORPHIC147 return vreinterpretq_f16(a);148#else /* POLYMORPHIC */149 return vreinterpretq_f16_u64(a);150#endif /* POLYMORPHIC */151}152 153// LE-LABEL: @test_vreinterpretq_f16_u8(154// LE-NEXT: entry:155// LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <8 x half>156// LE-NEXT: ret <8 x half> [[TMP0]]157//158// BE-LABEL: @test_vreinterpretq_f16_u8(159// BE-NEXT: entry:160// BE-NEXT: [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v16i8(<16 x i8> [[A:%.*]])161// BE-NEXT: ret <8 x half> [[TMP0]]162//163float16x8_t test_vreinterpretq_f16_u8(uint8x16_t a)164{165#ifdef POLYMORPHIC166 return vreinterpretq_f16(a);167#else /* POLYMORPHIC */168 return vreinterpretq_f16_u8(a);169#endif /* POLYMORPHIC */170}171 172// LE-LABEL: @test_vreinterpretq_f32_f16(173// LE-NEXT: entry:174// LE-NEXT: [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <4 x float>175// LE-NEXT: ret <4 x float> [[TMP0]]176//177// BE-LABEL: @test_vreinterpretq_f32_f16(178// BE-NEXT: entry:179// BE-NEXT: [[TMP0:%.*]] = call <4 x float> @llvm.arm.mve.vreinterpretq.v4f32.v8f16(<8 x half> [[A:%.*]])180// BE-NEXT: ret <4 x float> [[TMP0]]181//182float32x4_t test_vreinterpretq_f32_f16(float16x8_t a)183{184#ifdef POLYMORPHIC185 return vreinterpretq_f32(a);186#else /* POLYMORPHIC */187 return vreinterpretq_f32_f16(a);188#endif /* POLYMORPHIC */189}190 191// LE-LABEL: @test_vreinterpretq_f32_s16(192// LE-NEXT: entry:193// LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <4 x float>194// LE-NEXT: ret <4 x float> [[TMP0]]195//196// BE-LABEL: @test_vreinterpretq_f32_s16(197// BE-NEXT: entry:198// BE-NEXT: [[TMP0:%.*]] = call <4 x float> @llvm.arm.mve.vreinterpretq.v4f32.v8i16(<8 x i16> [[A:%.*]])199// BE-NEXT: ret <4 x float> [[TMP0]]200//201float32x4_t test_vreinterpretq_f32_s16(int16x8_t a)202{203#ifdef POLYMORPHIC204 return vreinterpretq_f32(a);205#else /* POLYMORPHIC */206 return vreinterpretq_f32_s16(a);207#endif /* POLYMORPHIC */208}209 210// BOTH-LABEL: @test_vreinterpretq_f32_s32(211// BOTH-NEXT: entry:212// BOTH-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <4 x float>213// BOTH-NEXT: ret <4 x float> [[TMP0]]214//215float32x4_t test_vreinterpretq_f32_s32(int32x4_t a)216{217#ifdef POLYMORPHIC218 return vreinterpretq_f32(a);219#else /* POLYMORPHIC */220 return vreinterpretq_f32_s32(a);221#endif /* POLYMORPHIC */222}223 224// LE-LABEL: @test_vreinterpretq_f32_s64(225// LE-NEXT: entry:226// LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <4 x float>227// LE-NEXT: ret <4 x float> [[TMP0]]228//229// BE-LABEL: @test_vreinterpretq_f32_s64(230// BE-NEXT: entry:231// BE-NEXT: [[TMP0:%.*]] = call <4 x float> @llvm.arm.mve.vreinterpretq.v4f32.v2i64(<2 x i64> [[A:%.*]])232// BE-NEXT: ret <4 x float> [[TMP0]]233//234float32x4_t test_vreinterpretq_f32_s64(int64x2_t a)235{236#ifdef POLYMORPHIC237 return vreinterpretq_f32(a);238#else /* POLYMORPHIC */239 return vreinterpretq_f32_s64(a);240#endif /* POLYMORPHIC */241}242 243// LE-LABEL: @test_vreinterpretq_f32_s8(244// LE-NEXT: entry:245// LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <4 x float>246// LE-NEXT: ret <4 x float> [[TMP0]]247//248// BE-LABEL: @test_vreinterpretq_f32_s8(249// BE-NEXT: entry:250// BE-NEXT: [[TMP0:%.*]] = call <4 x float> @llvm.arm.mve.vreinterpretq.v4f32.v16i8(<16 x i8> [[A:%.*]])251// BE-NEXT: ret <4 x float> [[TMP0]]252//253float32x4_t test_vreinterpretq_f32_s8(int8x16_t a)254{255#ifdef POLYMORPHIC256 return vreinterpretq_f32(a);257#else /* POLYMORPHIC */258 return vreinterpretq_f32_s8(a);259#endif /* POLYMORPHIC */260}261 262// LE-LABEL: @test_vreinterpretq_f32_u16(263// LE-NEXT: entry:264// LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <4 x float>265// LE-NEXT: ret <4 x float> [[TMP0]]266//267// BE-LABEL: @test_vreinterpretq_f32_u16(268// BE-NEXT: entry:269// BE-NEXT: [[TMP0:%.*]] = call <4 x float> @llvm.arm.mve.vreinterpretq.v4f32.v8i16(<8 x i16> [[A:%.*]])270// BE-NEXT: ret <4 x float> [[TMP0]]271//272float32x4_t test_vreinterpretq_f32_u16(uint16x8_t a)273{274#ifdef POLYMORPHIC275 return vreinterpretq_f32(a);276#else /* POLYMORPHIC */277 return vreinterpretq_f32_u16(a);278#endif /* POLYMORPHIC */279}280 281// BOTH-LABEL: @test_vreinterpretq_f32_u32(282// BOTH-NEXT: entry:283// BOTH-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <4 x float>284// BOTH-NEXT: ret <4 x float> [[TMP0]]285//286float32x4_t test_vreinterpretq_f32_u32(uint32x4_t a)287{288#ifdef POLYMORPHIC289 return vreinterpretq_f32(a);290#else /* POLYMORPHIC */291 return vreinterpretq_f32_u32(a);292#endif /* POLYMORPHIC */293}294 295// LE-LABEL: @test_vreinterpretq_f32_u64(296// LE-NEXT: entry:297// LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <4 x float>298// LE-NEXT: ret <4 x float> [[TMP0]]299//300// BE-LABEL: @test_vreinterpretq_f32_u64(301// BE-NEXT: entry:302// BE-NEXT: [[TMP0:%.*]] = call <4 x float> @llvm.arm.mve.vreinterpretq.v4f32.v2i64(<2 x i64> [[A:%.*]])303// BE-NEXT: ret <4 x float> [[TMP0]]304//305float32x4_t test_vreinterpretq_f32_u64(uint64x2_t a)306{307#ifdef POLYMORPHIC308 return vreinterpretq_f32(a);309#else /* POLYMORPHIC */310 return vreinterpretq_f32_u64(a);311#endif /* POLYMORPHIC */312}313 314// LE-LABEL: @test_vreinterpretq_f32_u8(315// LE-NEXT: entry:316// LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <4 x float>317// LE-NEXT: ret <4 x float> [[TMP0]]318//319// BE-LABEL: @test_vreinterpretq_f32_u8(320// BE-NEXT: entry:321// BE-NEXT: [[TMP0:%.*]] = call <4 x float> @llvm.arm.mve.vreinterpretq.v4f32.v16i8(<16 x i8> [[A:%.*]])322// BE-NEXT: ret <4 x float> [[TMP0]]323//324float32x4_t test_vreinterpretq_f32_u8(uint8x16_t a)325{326#ifdef POLYMORPHIC327 return vreinterpretq_f32(a);328#else /* POLYMORPHIC */329 return vreinterpretq_f32_u8(a);330#endif /* POLYMORPHIC */331}332 333// BOTH-LABEL: @test_vreinterpretq_s16_f16(334// BOTH-NEXT: entry:335// BOTH-NEXT: [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <8 x i16>336// BOTH-NEXT: ret <8 x i16> [[TMP0]]337//338int16x8_t test_vreinterpretq_s16_f16(float16x8_t a)339{340#ifdef POLYMORPHIC341 return vreinterpretq_s16(a);342#else /* POLYMORPHIC */343 return vreinterpretq_s16_f16(a);344#endif /* POLYMORPHIC */345}346 347// LE-LABEL: @test_vreinterpretq_s16_f32(348// LE-NEXT: entry:349// LE-NEXT: [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <8 x i16>350// LE-NEXT: ret <8 x i16> [[TMP0]]351//352// BE-LABEL: @test_vreinterpretq_s16_f32(353// BE-NEXT: entry:354// BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v4f32(<4 x float> [[A:%.*]])355// BE-NEXT: ret <8 x i16> [[TMP0]]356//357int16x8_t test_vreinterpretq_s16_f32(float32x4_t a)358{359#ifdef POLYMORPHIC360 return vreinterpretq_s16(a);361#else /* POLYMORPHIC */362 return vreinterpretq_s16_f32(a);363#endif /* POLYMORPHIC */364}365 366// LE-LABEL: @test_vreinterpretq_s16_s32(367// LE-NEXT: entry:368// LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x i16>369// LE-NEXT: ret <8 x i16> [[TMP0]]370//371// BE-LABEL: @test_vreinterpretq_s16_s32(372// BE-NEXT: entry:373// BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v4i32(<4 x i32> [[A:%.*]])374// BE-NEXT: ret <8 x i16> [[TMP0]]375//376int16x8_t test_vreinterpretq_s16_s32(int32x4_t a)377{378#ifdef POLYMORPHIC379 return vreinterpretq_s16(a);380#else /* POLYMORPHIC */381 return vreinterpretq_s16_s32(a);382#endif /* POLYMORPHIC */383}384 385// LE-LABEL: @test_vreinterpretq_s16_s64(386// LE-NEXT: entry:387// LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <8 x i16>388// LE-NEXT: ret <8 x i16> [[TMP0]]389//390// BE-LABEL: @test_vreinterpretq_s16_s64(391// BE-NEXT: entry:392// BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v2i64(<2 x i64> [[A:%.*]])393// BE-NEXT: ret <8 x i16> [[TMP0]]394//395int16x8_t test_vreinterpretq_s16_s64(int64x2_t a)396{397#ifdef POLYMORPHIC398 return vreinterpretq_s16(a);399#else /* POLYMORPHIC */400 return vreinterpretq_s16_s64(a);401#endif /* POLYMORPHIC */402}403 404// LE-LABEL: @test_vreinterpretq_s16_s8(405// LE-NEXT: entry:406// LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <8 x i16>407// LE-NEXT: ret <8 x i16> [[TMP0]]408//409// BE-LABEL: @test_vreinterpretq_s16_s8(410// BE-NEXT: entry:411// BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v16i8(<16 x i8> [[A:%.*]])412// BE-NEXT: ret <8 x i16> [[TMP0]]413//414int16x8_t test_vreinterpretq_s16_s8(int8x16_t a)415{416#ifdef POLYMORPHIC417 return vreinterpretq_s16(a);418#else /* POLYMORPHIC */419 return vreinterpretq_s16_s8(a);420#endif /* POLYMORPHIC */421}422 423// BOTH-LABEL: @test_vreinterpretq_s16_u16(424// BOTH-NEXT: entry:425// BOTH-NEXT: ret <8 x i16> [[A:%.*]]426//427int16x8_t test_vreinterpretq_s16_u16(uint16x8_t a)428{429#ifdef POLYMORPHIC430 return vreinterpretq_s16(a);431#else /* POLYMORPHIC */432 return vreinterpretq_s16_u16(a);433#endif /* POLYMORPHIC */434}435 436// LE-LABEL: @test_vreinterpretq_s16_u32(437// LE-NEXT: entry:438// LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x i16>439// LE-NEXT: ret <8 x i16> [[TMP0]]440//441// BE-LABEL: @test_vreinterpretq_s16_u32(442// BE-NEXT: entry:443// BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v4i32(<4 x i32> [[A:%.*]])444// BE-NEXT: ret <8 x i16> [[TMP0]]445//446int16x8_t test_vreinterpretq_s16_u32(uint32x4_t a)447{448#ifdef POLYMORPHIC449 return vreinterpretq_s16(a);450#else /* POLYMORPHIC */451 return vreinterpretq_s16_u32(a);452#endif /* POLYMORPHIC */453}454 455// LE-LABEL: @test_vreinterpretq_s16_u64(456// LE-NEXT: entry:457// LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <8 x i16>458// LE-NEXT: ret <8 x i16> [[TMP0]]459//460// BE-LABEL: @test_vreinterpretq_s16_u64(461// BE-NEXT: entry:462// BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v2i64(<2 x i64> [[A:%.*]])463// BE-NEXT: ret <8 x i16> [[TMP0]]464//465int16x8_t test_vreinterpretq_s16_u64(uint64x2_t a)466{467#ifdef POLYMORPHIC468 return vreinterpretq_s16(a);469#else /* POLYMORPHIC */470 return vreinterpretq_s16_u64(a);471#endif /* POLYMORPHIC */472}473 474// LE-LABEL: @test_vreinterpretq_s16_u8(475// LE-NEXT: entry:476// LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <8 x i16>477// LE-NEXT: ret <8 x i16> [[TMP0]]478//479// BE-LABEL: @test_vreinterpretq_s16_u8(480// BE-NEXT: entry:481// BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v16i8(<16 x i8> [[A:%.*]])482// BE-NEXT: ret <8 x i16> [[TMP0]]483//484int16x8_t test_vreinterpretq_s16_u8(uint8x16_t a)485{486#ifdef POLYMORPHIC487 return vreinterpretq_s16(a);488#else /* POLYMORPHIC */489 return vreinterpretq_s16_u8(a);490#endif /* POLYMORPHIC */491}492 493// LE-LABEL: @test_vreinterpretq_s32_f16(494// LE-NEXT: entry:495// LE-NEXT: [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <4 x i32>496// LE-NEXT: ret <4 x i32> [[TMP0]]497//498// BE-LABEL: @test_vreinterpretq_s32_f16(499// BE-NEXT: entry:500// BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v8f16(<8 x half> [[A:%.*]])501// BE-NEXT: ret <4 x i32> [[TMP0]]502//503int32x4_t test_vreinterpretq_s32_f16(float16x8_t a)504{505#ifdef POLYMORPHIC506 return vreinterpretq_s32(a);507#else /* POLYMORPHIC */508 return vreinterpretq_s32_f16(a);509#endif /* POLYMORPHIC */510}511 512// BOTH-LABEL: @test_vreinterpretq_s32_f32(513// BOTH-NEXT: entry:514// BOTH-NEXT: [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <4 x i32>515// BOTH-NEXT: ret <4 x i32> [[TMP0]]516//517int32x4_t test_vreinterpretq_s32_f32(float32x4_t a)518{519#ifdef POLYMORPHIC520 return vreinterpretq_s32(a);521#else /* POLYMORPHIC */522 return vreinterpretq_s32_f32(a);523#endif /* POLYMORPHIC */524}525 526// LE-LABEL: @test_vreinterpretq_s32_s16(527// LE-NEXT: entry:528// LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <4 x i32>529// LE-NEXT: ret <4 x i32> [[TMP0]]530//531// BE-LABEL: @test_vreinterpretq_s32_s16(532// BE-NEXT: entry:533// BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v8i16(<8 x i16> [[A:%.*]])534// BE-NEXT: ret <4 x i32> [[TMP0]]535//536int32x4_t test_vreinterpretq_s32_s16(int16x8_t a)537{538#ifdef POLYMORPHIC539 return vreinterpretq_s32(a);540#else /* POLYMORPHIC */541 return vreinterpretq_s32_s16(a);542#endif /* POLYMORPHIC */543}544 545// LE-LABEL: @test_vreinterpretq_s32_s64(546// LE-NEXT: entry:547// LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <4 x i32>548// LE-NEXT: ret <4 x i32> [[TMP0]]549//550// BE-LABEL: @test_vreinterpretq_s32_s64(551// BE-NEXT: entry:552// BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v2i64(<2 x i64> [[A:%.*]])553// BE-NEXT: ret <4 x i32> [[TMP0]]554//555int32x4_t test_vreinterpretq_s32_s64(int64x2_t a)556{557#ifdef POLYMORPHIC558 return vreinterpretq_s32(a);559#else /* POLYMORPHIC */560 return vreinterpretq_s32_s64(a);561#endif /* POLYMORPHIC */562}563 564// LE-LABEL: @test_vreinterpretq_s32_s8(565// LE-NEXT: entry:566// LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <4 x i32>567// LE-NEXT: ret <4 x i32> [[TMP0]]568//569// BE-LABEL: @test_vreinterpretq_s32_s8(570// BE-NEXT: entry:571// BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v16i8(<16 x i8> [[A:%.*]])572// BE-NEXT: ret <4 x i32> [[TMP0]]573//574int32x4_t test_vreinterpretq_s32_s8(int8x16_t a)575{576#ifdef POLYMORPHIC577 return vreinterpretq_s32(a);578#else /* POLYMORPHIC */579 return vreinterpretq_s32_s8(a);580#endif /* POLYMORPHIC */581}582 583// LE-LABEL: @test_vreinterpretq_s32_u16(584// LE-NEXT: entry:585// LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <4 x i32>586// LE-NEXT: ret <4 x i32> [[TMP0]]587//588// BE-LABEL: @test_vreinterpretq_s32_u16(589// BE-NEXT: entry:590// BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v8i16(<8 x i16> [[A:%.*]])591// BE-NEXT: ret <4 x i32> [[TMP0]]592//593int32x4_t test_vreinterpretq_s32_u16(uint16x8_t a)594{595#ifdef POLYMORPHIC596 return vreinterpretq_s32(a);597#else /* POLYMORPHIC */598 return vreinterpretq_s32_u16(a);599#endif /* POLYMORPHIC */600}601 602// BOTH-LABEL: @test_vreinterpretq_s32_u32(603// BOTH-NEXT: entry:604// BOTH-NEXT: ret <4 x i32> [[A:%.*]]605//606int32x4_t test_vreinterpretq_s32_u32(uint32x4_t a)607{608#ifdef POLYMORPHIC609 return vreinterpretq_s32(a);610#else /* POLYMORPHIC */611 return vreinterpretq_s32_u32(a);612#endif /* POLYMORPHIC */613}614 615// LE-LABEL: @test_vreinterpretq_s32_u64(616// LE-NEXT: entry:617// LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <4 x i32>618// LE-NEXT: ret <4 x i32> [[TMP0]]619//620// BE-LABEL: @test_vreinterpretq_s32_u64(621// BE-NEXT: entry:622// BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v2i64(<2 x i64> [[A:%.*]])623// BE-NEXT: ret <4 x i32> [[TMP0]]624//625int32x4_t test_vreinterpretq_s32_u64(uint64x2_t a)626{627#ifdef POLYMORPHIC628 return vreinterpretq_s32(a);629#else /* POLYMORPHIC */630 return vreinterpretq_s32_u64(a);631#endif /* POLYMORPHIC */632}633 634// LE-LABEL: @test_vreinterpretq_s32_u8(635// LE-NEXT: entry:636// LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <4 x i32>637// LE-NEXT: ret <4 x i32> [[TMP0]]638//639// BE-LABEL: @test_vreinterpretq_s32_u8(640// BE-NEXT: entry:641// BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v16i8(<16 x i8> [[A:%.*]])642// BE-NEXT: ret <4 x i32> [[TMP0]]643//644int32x4_t test_vreinterpretq_s32_u8(uint8x16_t a)645{646#ifdef POLYMORPHIC647 return vreinterpretq_s32(a);648#else /* POLYMORPHIC */649 return vreinterpretq_s32_u8(a);650#endif /* POLYMORPHIC */651}652 653// LE-LABEL: @test_vreinterpretq_s64_f16(654// LE-NEXT: entry:655// LE-NEXT: [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <2 x i64>656// LE-NEXT: ret <2 x i64> [[TMP0]]657//658// BE-LABEL: @test_vreinterpretq_s64_f16(659// BE-NEXT: entry:660// BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v8f16(<8 x half> [[A:%.*]])661// BE-NEXT: ret <2 x i64> [[TMP0]]662//663int64x2_t test_vreinterpretq_s64_f16(float16x8_t a)664{665#ifdef POLYMORPHIC666 return vreinterpretq_s64(a);667#else /* POLYMORPHIC */668 return vreinterpretq_s64_f16(a);669#endif /* POLYMORPHIC */670}671 672// LE-LABEL: @test_vreinterpretq_s64_f32(673// LE-NEXT: entry:674// LE-NEXT: [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <2 x i64>675// LE-NEXT: ret <2 x i64> [[TMP0]]676//677// BE-LABEL: @test_vreinterpretq_s64_f32(678// BE-NEXT: entry:679// BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v4f32(<4 x float> [[A:%.*]])680// BE-NEXT: ret <2 x i64> [[TMP0]]681//682int64x2_t test_vreinterpretq_s64_f32(float32x4_t a)683{684#ifdef POLYMORPHIC685 return vreinterpretq_s64(a);686#else /* POLYMORPHIC */687 return vreinterpretq_s64_f32(a);688#endif /* POLYMORPHIC */689}690 691// LE-LABEL: @test_vreinterpretq_s64_s16(692// LE-NEXT: entry:693// LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <2 x i64>694// LE-NEXT: ret <2 x i64> [[TMP0]]695//696// BE-LABEL: @test_vreinterpretq_s64_s16(697// BE-NEXT: entry:698// BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v8i16(<8 x i16> [[A:%.*]])699// BE-NEXT: ret <2 x i64> [[TMP0]]700//701int64x2_t test_vreinterpretq_s64_s16(int16x8_t a)702{703#ifdef POLYMORPHIC704 return vreinterpretq_s64(a);705#else /* POLYMORPHIC */706 return vreinterpretq_s64_s16(a);707#endif /* POLYMORPHIC */708}709 710// LE-LABEL: @test_vreinterpretq_s64_s32(711// LE-NEXT: entry:712// LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <2 x i64>713// LE-NEXT: ret <2 x i64> [[TMP0]]714//715// BE-LABEL: @test_vreinterpretq_s64_s32(716// BE-NEXT: entry:717// BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v4i32(<4 x i32> [[A:%.*]])718// BE-NEXT: ret <2 x i64> [[TMP0]]719//720int64x2_t test_vreinterpretq_s64_s32(int32x4_t a)721{722#ifdef POLYMORPHIC723 return vreinterpretq_s64(a);724#else /* POLYMORPHIC */725 return vreinterpretq_s64_s32(a);726#endif /* POLYMORPHIC */727}728 729// LE-LABEL: @test_vreinterpretq_s64_s8(730// LE-NEXT: entry:731// LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <2 x i64>732// LE-NEXT: ret <2 x i64> [[TMP0]]733//734// BE-LABEL: @test_vreinterpretq_s64_s8(735// BE-NEXT: entry:736// BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v16i8(<16 x i8> [[A:%.*]])737// BE-NEXT: ret <2 x i64> [[TMP0]]738//739int64x2_t test_vreinterpretq_s64_s8(int8x16_t a)740{741#ifdef POLYMORPHIC742 return vreinterpretq_s64(a);743#else /* POLYMORPHIC */744 return vreinterpretq_s64_s8(a);745#endif /* POLYMORPHIC */746}747 748// LE-LABEL: @test_vreinterpretq_s64_u16(749// LE-NEXT: entry:750// LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <2 x i64>751// LE-NEXT: ret <2 x i64> [[TMP0]]752//753// BE-LABEL: @test_vreinterpretq_s64_u16(754// BE-NEXT: entry:755// BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v8i16(<8 x i16> [[A:%.*]])756// BE-NEXT: ret <2 x i64> [[TMP0]]757//758int64x2_t test_vreinterpretq_s64_u16(uint16x8_t a)759{760#ifdef POLYMORPHIC761 return vreinterpretq_s64(a);762#else /* POLYMORPHIC */763 return vreinterpretq_s64_u16(a);764#endif /* POLYMORPHIC */765}766 767// LE-LABEL: @test_vreinterpretq_s64_u32(768// LE-NEXT: entry:769// LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <2 x i64>770// LE-NEXT: ret <2 x i64> [[TMP0]]771//772// BE-LABEL: @test_vreinterpretq_s64_u32(773// BE-NEXT: entry:774// BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v4i32(<4 x i32> [[A:%.*]])775// BE-NEXT: ret <2 x i64> [[TMP0]]776//777int64x2_t test_vreinterpretq_s64_u32(uint32x4_t a)778{779#ifdef POLYMORPHIC780 return vreinterpretq_s64(a);781#else /* POLYMORPHIC */782 return vreinterpretq_s64_u32(a);783#endif /* POLYMORPHIC */784}785 786// BOTH-LABEL: @test_vreinterpretq_s64_u64(787// BOTH-NEXT: entry:788// BOTH-NEXT: ret <2 x i64> [[A:%.*]]789//790int64x2_t test_vreinterpretq_s64_u64(uint64x2_t a)791{792#ifdef POLYMORPHIC793 return vreinterpretq_s64(a);794#else /* POLYMORPHIC */795 return vreinterpretq_s64_u64(a);796#endif /* POLYMORPHIC */797}798 799// LE-LABEL: @test_vreinterpretq_s64_u8(800// LE-NEXT: entry:801// LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <2 x i64>802// LE-NEXT: ret <2 x i64> [[TMP0]]803//804// BE-LABEL: @test_vreinterpretq_s64_u8(805// BE-NEXT: entry:806// BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v16i8(<16 x i8> [[A:%.*]])807// BE-NEXT: ret <2 x i64> [[TMP0]]808//809int64x2_t test_vreinterpretq_s64_u8(uint8x16_t a)810{811#ifdef POLYMORPHIC812 return vreinterpretq_s64(a);813#else /* POLYMORPHIC */814 return vreinterpretq_s64_u8(a);815#endif /* POLYMORPHIC */816}817 818// LE-LABEL: @test_vreinterpretq_s8_f16(819// LE-NEXT: entry:820// LE-NEXT: [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <16 x i8>821// LE-NEXT: ret <16 x i8> [[TMP0]]822//823// BE-LABEL: @test_vreinterpretq_s8_f16(824// BE-NEXT: entry:825// BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v8f16(<8 x half> [[A:%.*]])826// BE-NEXT: ret <16 x i8> [[TMP0]]827//828int8x16_t test_vreinterpretq_s8_f16(float16x8_t a)829{830#ifdef POLYMORPHIC831 return vreinterpretq_s8(a);832#else /* POLYMORPHIC */833 return vreinterpretq_s8_f16(a);834#endif /* POLYMORPHIC */835}836 837// LE-LABEL: @test_vreinterpretq_s8_f32(838// LE-NEXT: entry:839// LE-NEXT: [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <16 x i8>840// LE-NEXT: ret <16 x i8> [[TMP0]]841//842// BE-LABEL: @test_vreinterpretq_s8_f32(843// BE-NEXT: entry:844// BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v4f32(<4 x float> [[A:%.*]])845// BE-NEXT: ret <16 x i8> [[TMP0]]846//847int8x16_t test_vreinterpretq_s8_f32(float32x4_t a)848{849#ifdef POLYMORPHIC850 return vreinterpretq_s8(a);851#else /* POLYMORPHIC */852 return vreinterpretq_s8_f32(a);853#endif /* POLYMORPHIC */854}855 856// LE-LABEL: @test_vreinterpretq_s8_s16(857// LE-NEXT: entry:858// LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <16 x i8>859// LE-NEXT: ret <16 x i8> [[TMP0]]860//861// BE-LABEL: @test_vreinterpretq_s8_s16(862// BE-NEXT: entry:863// BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v8i16(<8 x i16> [[A:%.*]])864// BE-NEXT: ret <16 x i8> [[TMP0]]865//866int8x16_t test_vreinterpretq_s8_s16(int16x8_t a)867{868#ifdef POLYMORPHIC869 return vreinterpretq_s8(a);870#else /* POLYMORPHIC */871 return vreinterpretq_s8_s16(a);872#endif /* POLYMORPHIC */873}874 875// LE-LABEL: @test_vreinterpretq_s8_s32(876// LE-NEXT: entry:877// LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <16 x i8>878// LE-NEXT: ret <16 x i8> [[TMP0]]879//880// BE-LABEL: @test_vreinterpretq_s8_s32(881// BE-NEXT: entry:882// BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v4i32(<4 x i32> [[A:%.*]])883// BE-NEXT: ret <16 x i8> [[TMP0]]884//885int8x16_t test_vreinterpretq_s8_s32(int32x4_t a)886{887#ifdef POLYMORPHIC888 return vreinterpretq_s8(a);889#else /* POLYMORPHIC */890 return vreinterpretq_s8_s32(a);891#endif /* POLYMORPHIC */892}893 894// LE-LABEL: @test_vreinterpretq_s8_s64(895// LE-NEXT: entry:896// LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <16 x i8>897// LE-NEXT: ret <16 x i8> [[TMP0]]898//899// BE-LABEL: @test_vreinterpretq_s8_s64(900// BE-NEXT: entry:901// BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v2i64(<2 x i64> [[A:%.*]])902// BE-NEXT: ret <16 x i8> [[TMP0]]903//904int8x16_t test_vreinterpretq_s8_s64(int64x2_t a)905{906#ifdef POLYMORPHIC907 return vreinterpretq_s8(a);908#else /* POLYMORPHIC */909 return vreinterpretq_s8_s64(a);910#endif /* POLYMORPHIC */911}912 913// LE-LABEL: @test_vreinterpretq_s8_u16(914// LE-NEXT: entry:915// LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <16 x i8>916// LE-NEXT: ret <16 x i8> [[TMP0]]917//918// BE-LABEL: @test_vreinterpretq_s8_u16(919// BE-NEXT: entry:920// BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v8i16(<8 x i16> [[A:%.*]])921// BE-NEXT: ret <16 x i8> [[TMP0]]922//923int8x16_t test_vreinterpretq_s8_u16(uint16x8_t a)924{925#ifdef POLYMORPHIC926 return vreinterpretq_s8(a);927#else /* POLYMORPHIC */928 return vreinterpretq_s8_u16(a);929#endif /* POLYMORPHIC */930}931 932// LE-LABEL: @test_vreinterpretq_s8_u32(933// LE-NEXT: entry:934// LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <16 x i8>935// LE-NEXT: ret <16 x i8> [[TMP0]]936//937// BE-LABEL: @test_vreinterpretq_s8_u32(938// BE-NEXT: entry:939// BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v4i32(<4 x i32> [[A:%.*]])940// BE-NEXT: ret <16 x i8> [[TMP0]]941//942int8x16_t test_vreinterpretq_s8_u32(uint32x4_t a)943{944#ifdef POLYMORPHIC945 return vreinterpretq_s8(a);946#else /* POLYMORPHIC */947 return vreinterpretq_s8_u32(a);948#endif /* POLYMORPHIC */949}950 951// LE-LABEL: @test_vreinterpretq_s8_u64(952// LE-NEXT: entry:953// LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <16 x i8>954// LE-NEXT: ret <16 x i8> [[TMP0]]955//956// BE-LABEL: @test_vreinterpretq_s8_u64(957// BE-NEXT: entry:958// BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v2i64(<2 x i64> [[A:%.*]])959// BE-NEXT: ret <16 x i8> [[TMP0]]960//961int8x16_t test_vreinterpretq_s8_u64(uint64x2_t a)962{963#ifdef POLYMORPHIC964 return vreinterpretq_s8(a);965#else /* POLYMORPHIC */966 return vreinterpretq_s8_u64(a);967#endif /* POLYMORPHIC */968}969 970// BOTH-LABEL: @test_vreinterpretq_s8_u8(971// BOTH-NEXT: entry:972// BOTH-NEXT: ret <16 x i8> [[A:%.*]]973//974int8x16_t test_vreinterpretq_s8_u8(uint8x16_t a)975{976#ifdef POLYMORPHIC977 return vreinterpretq_s8(a);978#else /* POLYMORPHIC */979 return vreinterpretq_s8_u8(a);980#endif /* POLYMORPHIC */981}982 983// BOTH-LABEL: @test_vreinterpretq_u16_f16(984// BOTH-NEXT: entry:985// BOTH-NEXT: [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <8 x i16>986// BOTH-NEXT: ret <8 x i16> [[TMP0]]987//988uint16x8_t test_vreinterpretq_u16_f16(float16x8_t a)989{990#ifdef POLYMORPHIC991 return vreinterpretq_u16(a);992#else /* POLYMORPHIC */993 return vreinterpretq_u16_f16(a);994#endif /* POLYMORPHIC */995}996 997// LE-LABEL: @test_vreinterpretq_u16_f32(998// LE-NEXT: entry:999// LE-NEXT: [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <8 x i16>1000// LE-NEXT: ret <8 x i16> [[TMP0]]1001//1002// BE-LABEL: @test_vreinterpretq_u16_f32(1003// BE-NEXT: entry:1004// BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v4f32(<4 x float> [[A:%.*]])1005// BE-NEXT: ret <8 x i16> [[TMP0]]1006//1007uint16x8_t test_vreinterpretq_u16_f32(float32x4_t a)1008{1009#ifdef POLYMORPHIC1010 return vreinterpretq_u16(a);1011#else /* POLYMORPHIC */1012 return vreinterpretq_u16_f32(a);1013#endif /* POLYMORPHIC */1014}1015 1016// BOTH-LABEL: @test_vreinterpretq_u16_s16(1017// BOTH-NEXT: entry:1018// BOTH-NEXT: ret <8 x i16> [[A:%.*]]1019//1020uint16x8_t test_vreinterpretq_u16_s16(int16x8_t a)1021{1022#ifdef POLYMORPHIC1023 return vreinterpretq_u16(a);1024#else /* POLYMORPHIC */1025 return vreinterpretq_u16_s16(a);1026#endif /* POLYMORPHIC */1027}1028 1029// LE-LABEL: @test_vreinterpretq_u16_s32(1030// LE-NEXT: entry:1031// LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x i16>1032// LE-NEXT: ret <8 x i16> [[TMP0]]1033//1034// BE-LABEL: @test_vreinterpretq_u16_s32(1035// BE-NEXT: entry:1036// BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v4i32(<4 x i32> [[A:%.*]])1037// BE-NEXT: ret <8 x i16> [[TMP0]]1038//1039uint16x8_t test_vreinterpretq_u16_s32(int32x4_t a)1040{1041#ifdef POLYMORPHIC1042 return vreinterpretq_u16(a);1043#else /* POLYMORPHIC */1044 return vreinterpretq_u16_s32(a);1045#endif /* POLYMORPHIC */1046}1047 1048// LE-LABEL: @test_vreinterpretq_u16_s64(1049// LE-NEXT: entry:1050// LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <8 x i16>1051// LE-NEXT: ret <8 x i16> [[TMP0]]1052//1053// BE-LABEL: @test_vreinterpretq_u16_s64(1054// BE-NEXT: entry:1055// BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v2i64(<2 x i64> [[A:%.*]])1056// BE-NEXT: ret <8 x i16> [[TMP0]]1057//1058uint16x8_t test_vreinterpretq_u16_s64(int64x2_t a)1059{1060#ifdef POLYMORPHIC1061 return vreinterpretq_u16(a);1062#else /* POLYMORPHIC */1063 return vreinterpretq_u16_s64(a);1064#endif /* POLYMORPHIC */1065}1066 1067// LE-LABEL: @test_vreinterpretq_u16_s8(1068// LE-NEXT: entry:1069// LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <8 x i16>1070// LE-NEXT: ret <8 x i16> [[TMP0]]1071//1072// BE-LABEL: @test_vreinterpretq_u16_s8(1073// BE-NEXT: entry:1074// BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v16i8(<16 x i8> [[A:%.*]])1075// BE-NEXT: ret <8 x i16> [[TMP0]]1076//1077uint16x8_t test_vreinterpretq_u16_s8(int8x16_t a)1078{1079#ifdef POLYMORPHIC1080 return vreinterpretq_u16(a);1081#else /* POLYMORPHIC */1082 return vreinterpretq_u16_s8(a);1083#endif /* POLYMORPHIC */1084}1085 1086// LE-LABEL: @test_vreinterpretq_u16_u32(1087// LE-NEXT: entry:1088// LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x i16>1089// LE-NEXT: ret <8 x i16> [[TMP0]]1090//1091// BE-LABEL: @test_vreinterpretq_u16_u32(1092// BE-NEXT: entry:1093// BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v4i32(<4 x i32> [[A:%.*]])1094// BE-NEXT: ret <8 x i16> [[TMP0]]1095//1096uint16x8_t test_vreinterpretq_u16_u32(uint32x4_t a)1097{1098#ifdef POLYMORPHIC1099 return vreinterpretq_u16(a);1100#else /* POLYMORPHIC */1101 return vreinterpretq_u16_u32(a);1102#endif /* POLYMORPHIC */1103}1104 1105// LE-LABEL: @test_vreinterpretq_u16_u64(1106// LE-NEXT: entry:1107// LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <8 x i16>1108// LE-NEXT: ret <8 x i16> [[TMP0]]1109//1110// BE-LABEL: @test_vreinterpretq_u16_u64(1111// BE-NEXT: entry:1112// BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v2i64(<2 x i64> [[A:%.*]])1113// BE-NEXT: ret <8 x i16> [[TMP0]]1114//1115uint16x8_t test_vreinterpretq_u16_u64(uint64x2_t a)1116{1117#ifdef POLYMORPHIC1118 return vreinterpretq_u16(a);1119#else /* POLYMORPHIC */1120 return vreinterpretq_u16_u64(a);1121#endif /* POLYMORPHIC */1122}1123 1124// LE-LABEL: @test_vreinterpretq_u16_u8(1125// LE-NEXT: entry:1126// LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <8 x i16>1127// LE-NEXT: ret <8 x i16> [[TMP0]]1128//1129// BE-LABEL: @test_vreinterpretq_u16_u8(1130// BE-NEXT: entry:1131// BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v16i8(<16 x i8> [[A:%.*]])1132// BE-NEXT: ret <8 x i16> [[TMP0]]1133//1134uint16x8_t test_vreinterpretq_u16_u8(uint8x16_t a)1135{1136#ifdef POLYMORPHIC1137 return vreinterpretq_u16(a);1138#else /* POLYMORPHIC */1139 return vreinterpretq_u16_u8(a);1140#endif /* POLYMORPHIC */1141}1142 1143// LE-LABEL: @test_vreinterpretq_u32_f16(1144// LE-NEXT: entry:1145// LE-NEXT: [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <4 x i32>1146// LE-NEXT: ret <4 x i32> [[TMP0]]1147//1148// BE-LABEL: @test_vreinterpretq_u32_f16(1149// BE-NEXT: entry:1150// BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v8f16(<8 x half> [[A:%.*]])1151// BE-NEXT: ret <4 x i32> [[TMP0]]1152//1153uint32x4_t test_vreinterpretq_u32_f16(float16x8_t a)1154{1155#ifdef POLYMORPHIC1156 return vreinterpretq_u32(a);1157#else /* POLYMORPHIC */1158 return vreinterpretq_u32_f16(a);1159#endif /* POLYMORPHIC */1160}1161 1162// BOTH-LABEL: @test_vreinterpretq_u32_f32(1163// BOTH-NEXT: entry:1164// BOTH-NEXT: [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <4 x i32>1165// BOTH-NEXT: ret <4 x i32> [[TMP0]]1166//1167uint32x4_t test_vreinterpretq_u32_f32(float32x4_t a)1168{1169#ifdef POLYMORPHIC1170 return vreinterpretq_u32(a);1171#else /* POLYMORPHIC */1172 return vreinterpretq_u32_f32(a);1173#endif /* POLYMORPHIC */1174}1175 1176// LE-LABEL: @test_vreinterpretq_u32_s16(1177// LE-NEXT: entry:1178// LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <4 x i32>1179// LE-NEXT: ret <4 x i32> [[TMP0]]1180//1181// BE-LABEL: @test_vreinterpretq_u32_s16(1182// BE-NEXT: entry:1183// BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v8i16(<8 x i16> [[A:%.*]])1184// BE-NEXT: ret <4 x i32> [[TMP0]]1185//1186uint32x4_t test_vreinterpretq_u32_s16(int16x8_t a)1187{1188#ifdef POLYMORPHIC1189 return vreinterpretq_u32(a);1190#else /* POLYMORPHIC */1191 return vreinterpretq_u32_s16(a);1192#endif /* POLYMORPHIC */1193}1194 1195// BOTH-LABEL: @test_vreinterpretq_u32_s32(1196// BOTH-NEXT: entry:1197// BOTH-NEXT: ret <4 x i32> [[A:%.*]]1198//1199uint32x4_t test_vreinterpretq_u32_s32(int32x4_t a)1200{1201#ifdef POLYMORPHIC1202 return vreinterpretq_u32(a);1203#else /* POLYMORPHIC */1204 return vreinterpretq_u32_s32(a);1205#endif /* POLYMORPHIC */1206}1207 1208// LE-LABEL: @test_vreinterpretq_u32_s64(1209// LE-NEXT: entry:1210// LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <4 x i32>1211// LE-NEXT: ret <4 x i32> [[TMP0]]1212//1213// BE-LABEL: @test_vreinterpretq_u32_s64(1214// BE-NEXT: entry:1215// BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v2i64(<2 x i64> [[A:%.*]])1216// BE-NEXT: ret <4 x i32> [[TMP0]]1217//1218uint32x4_t test_vreinterpretq_u32_s64(int64x2_t a)1219{1220#ifdef POLYMORPHIC1221 return vreinterpretq_u32(a);1222#else /* POLYMORPHIC */1223 return vreinterpretq_u32_s64(a);1224#endif /* POLYMORPHIC */1225}1226 1227// LE-LABEL: @test_vreinterpretq_u32_s8(1228// LE-NEXT: entry:1229// LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <4 x i32>1230// LE-NEXT: ret <4 x i32> [[TMP0]]1231//1232// BE-LABEL: @test_vreinterpretq_u32_s8(1233// BE-NEXT: entry:1234// BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v16i8(<16 x i8> [[A:%.*]])1235// BE-NEXT: ret <4 x i32> [[TMP0]]1236//1237uint32x4_t test_vreinterpretq_u32_s8(int8x16_t a)1238{1239#ifdef POLYMORPHIC1240 return vreinterpretq_u32(a);1241#else /* POLYMORPHIC */1242 return vreinterpretq_u32_s8(a);1243#endif /* POLYMORPHIC */1244}1245 1246// LE-LABEL: @test_vreinterpretq_u32_u16(1247// LE-NEXT: entry:1248// LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <4 x i32>1249// LE-NEXT: ret <4 x i32> [[TMP0]]1250//1251// BE-LABEL: @test_vreinterpretq_u32_u16(1252// BE-NEXT: entry:1253// BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v8i16(<8 x i16> [[A:%.*]])1254// BE-NEXT: ret <4 x i32> [[TMP0]]1255//1256uint32x4_t test_vreinterpretq_u32_u16(uint16x8_t a)1257{1258#ifdef POLYMORPHIC1259 return vreinterpretq_u32(a);1260#else /* POLYMORPHIC */1261 return vreinterpretq_u32_u16(a);1262#endif /* POLYMORPHIC */1263}1264 1265// LE-LABEL: @test_vreinterpretq_u32_u64(1266// LE-NEXT: entry:1267// LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <4 x i32>1268// LE-NEXT: ret <4 x i32> [[TMP0]]1269//1270// BE-LABEL: @test_vreinterpretq_u32_u64(1271// BE-NEXT: entry:1272// BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v2i64(<2 x i64> [[A:%.*]])1273// BE-NEXT: ret <4 x i32> [[TMP0]]1274//1275uint32x4_t test_vreinterpretq_u32_u64(uint64x2_t a)1276{1277#ifdef POLYMORPHIC1278 return vreinterpretq_u32(a);1279#else /* POLYMORPHIC */1280 return vreinterpretq_u32_u64(a);1281#endif /* POLYMORPHIC */1282}1283 1284// LE-LABEL: @test_vreinterpretq_u32_u8(1285// LE-NEXT: entry:1286// LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <4 x i32>1287// LE-NEXT: ret <4 x i32> [[TMP0]]1288//1289// BE-LABEL: @test_vreinterpretq_u32_u8(1290// BE-NEXT: entry:1291// BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v16i8(<16 x i8> [[A:%.*]])1292// BE-NEXT: ret <4 x i32> [[TMP0]]1293//1294uint32x4_t test_vreinterpretq_u32_u8(uint8x16_t a)1295{1296#ifdef POLYMORPHIC1297 return vreinterpretq_u32(a);1298#else /* POLYMORPHIC */1299 return vreinterpretq_u32_u8(a);1300#endif /* POLYMORPHIC */1301}1302 1303// LE-LABEL: @test_vreinterpretq_u64_f16(1304// LE-NEXT: entry:1305// LE-NEXT: [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <2 x i64>1306// LE-NEXT: ret <2 x i64> [[TMP0]]1307//1308// BE-LABEL: @test_vreinterpretq_u64_f16(1309// BE-NEXT: entry:1310// BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v8f16(<8 x half> [[A:%.*]])1311// BE-NEXT: ret <2 x i64> [[TMP0]]1312//1313uint64x2_t test_vreinterpretq_u64_f16(float16x8_t a)1314{1315#ifdef POLYMORPHIC1316 return vreinterpretq_u64(a);1317#else /* POLYMORPHIC */1318 return vreinterpretq_u64_f16(a);1319#endif /* POLYMORPHIC */1320}1321 1322// LE-LABEL: @test_vreinterpretq_u64_f32(1323// LE-NEXT: entry:1324// LE-NEXT: [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <2 x i64>1325// LE-NEXT: ret <2 x i64> [[TMP0]]1326//1327// BE-LABEL: @test_vreinterpretq_u64_f32(1328// BE-NEXT: entry:1329// BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v4f32(<4 x float> [[A:%.*]])1330// BE-NEXT: ret <2 x i64> [[TMP0]]1331//1332uint64x2_t test_vreinterpretq_u64_f32(float32x4_t a)1333{1334#ifdef POLYMORPHIC1335 return vreinterpretq_u64(a);1336#else /* POLYMORPHIC */1337 return vreinterpretq_u64_f32(a);1338#endif /* POLYMORPHIC */1339}1340 1341// LE-LABEL: @test_vreinterpretq_u64_s16(1342// LE-NEXT: entry:1343// LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <2 x i64>1344// LE-NEXT: ret <2 x i64> [[TMP0]]1345//1346// BE-LABEL: @test_vreinterpretq_u64_s16(1347// BE-NEXT: entry:1348// BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v8i16(<8 x i16> [[A:%.*]])1349// BE-NEXT: ret <2 x i64> [[TMP0]]1350//1351uint64x2_t test_vreinterpretq_u64_s16(int16x8_t a)1352{1353#ifdef POLYMORPHIC1354 return vreinterpretq_u64(a);1355#else /* POLYMORPHIC */1356 return vreinterpretq_u64_s16(a);1357#endif /* POLYMORPHIC */1358}1359 1360// LE-LABEL: @test_vreinterpretq_u64_s32(1361// LE-NEXT: entry:1362// LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <2 x i64>1363// LE-NEXT: ret <2 x i64> [[TMP0]]1364//1365// BE-LABEL: @test_vreinterpretq_u64_s32(1366// BE-NEXT: entry:1367// BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v4i32(<4 x i32> [[A:%.*]])1368// BE-NEXT: ret <2 x i64> [[TMP0]]1369//1370uint64x2_t test_vreinterpretq_u64_s32(int32x4_t a)1371{1372#ifdef POLYMORPHIC1373 return vreinterpretq_u64(a);1374#else /* POLYMORPHIC */1375 return vreinterpretq_u64_s32(a);1376#endif /* POLYMORPHIC */1377}1378 1379// BOTH-LABEL: @test_vreinterpretq_u64_s64(1380// BOTH-NEXT: entry:1381// BOTH-NEXT: ret <2 x i64> [[A:%.*]]1382//1383uint64x2_t test_vreinterpretq_u64_s64(int64x2_t a)1384{1385#ifdef POLYMORPHIC1386 return vreinterpretq_u64(a);1387#else /* POLYMORPHIC */1388 return vreinterpretq_u64_s64(a);1389#endif /* POLYMORPHIC */1390}1391 1392// LE-LABEL: @test_vreinterpretq_u64_s8(1393// LE-NEXT: entry:1394// LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <2 x i64>1395// LE-NEXT: ret <2 x i64> [[TMP0]]1396//1397// BE-LABEL: @test_vreinterpretq_u64_s8(1398// BE-NEXT: entry:1399// BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v16i8(<16 x i8> [[A:%.*]])1400// BE-NEXT: ret <2 x i64> [[TMP0]]1401//1402uint64x2_t test_vreinterpretq_u64_s8(int8x16_t a)1403{1404#ifdef POLYMORPHIC1405 return vreinterpretq_u64(a);1406#else /* POLYMORPHIC */1407 return vreinterpretq_u64_s8(a);1408#endif /* POLYMORPHIC */1409}1410 1411// LE-LABEL: @test_vreinterpretq_u64_u16(1412// LE-NEXT: entry:1413// LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <2 x i64>1414// LE-NEXT: ret <2 x i64> [[TMP0]]1415//1416// BE-LABEL: @test_vreinterpretq_u64_u16(1417// BE-NEXT: entry:1418// BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v8i16(<8 x i16> [[A:%.*]])1419// BE-NEXT: ret <2 x i64> [[TMP0]]1420//1421uint64x2_t test_vreinterpretq_u64_u16(uint16x8_t a)1422{1423#ifdef POLYMORPHIC1424 return vreinterpretq_u64(a);1425#else /* POLYMORPHIC */1426 return vreinterpretq_u64_u16(a);1427#endif /* POLYMORPHIC */1428}1429 1430// LE-LABEL: @test_vreinterpretq_u64_u32(1431// LE-NEXT: entry:1432// LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <2 x i64>1433// LE-NEXT: ret <2 x i64> [[TMP0]]1434//1435// BE-LABEL: @test_vreinterpretq_u64_u32(1436// BE-NEXT: entry:1437// BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v4i32(<4 x i32> [[A:%.*]])1438// BE-NEXT: ret <2 x i64> [[TMP0]]1439//1440uint64x2_t test_vreinterpretq_u64_u32(uint32x4_t a)1441{1442#ifdef POLYMORPHIC1443 return vreinterpretq_u64(a);1444#else /* POLYMORPHIC */1445 return vreinterpretq_u64_u32(a);1446#endif /* POLYMORPHIC */1447}1448 1449// LE-LABEL: @test_vreinterpretq_u64_u8(1450// LE-NEXT: entry:1451// LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <2 x i64>1452// LE-NEXT: ret <2 x i64> [[TMP0]]1453//1454// BE-LABEL: @test_vreinterpretq_u64_u8(1455// BE-NEXT: entry:1456// BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v16i8(<16 x i8> [[A:%.*]])1457// BE-NEXT: ret <2 x i64> [[TMP0]]1458//1459uint64x2_t test_vreinterpretq_u64_u8(uint8x16_t a)1460{1461#ifdef POLYMORPHIC1462 return vreinterpretq_u64(a);1463#else /* POLYMORPHIC */1464 return vreinterpretq_u64_u8(a);1465#endif /* POLYMORPHIC */1466}1467 1468// LE-LABEL: @test_vreinterpretq_u8_f16(1469// LE-NEXT: entry:1470// LE-NEXT: [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <16 x i8>1471// LE-NEXT: ret <16 x i8> [[TMP0]]1472//1473// BE-LABEL: @test_vreinterpretq_u8_f16(1474// BE-NEXT: entry:1475// BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v8f16(<8 x half> [[A:%.*]])1476// BE-NEXT: ret <16 x i8> [[TMP0]]1477//1478uint8x16_t test_vreinterpretq_u8_f16(float16x8_t a)1479{1480#ifdef POLYMORPHIC1481 return vreinterpretq_u8(a);1482#else /* POLYMORPHIC */1483 return vreinterpretq_u8_f16(a);1484#endif /* POLYMORPHIC */1485}1486 1487// LE-LABEL: @test_vreinterpretq_u8_f32(1488// LE-NEXT: entry:1489// LE-NEXT: [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <16 x i8>1490// LE-NEXT: ret <16 x i8> [[TMP0]]1491//1492// BE-LABEL: @test_vreinterpretq_u8_f32(1493// BE-NEXT: entry:1494// BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v4f32(<4 x float> [[A:%.*]])1495// BE-NEXT: ret <16 x i8> [[TMP0]]1496//1497uint8x16_t test_vreinterpretq_u8_f32(float32x4_t a)1498{1499#ifdef POLYMORPHIC1500 return vreinterpretq_u8(a);1501#else /* POLYMORPHIC */1502 return vreinterpretq_u8_f32(a);1503#endif /* POLYMORPHIC */1504}1505 1506// LE-LABEL: @test_vreinterpretq_u8_s16(1507// LE-NEXT: entry:1508// LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <16 x i8>1509// LE-NEXT: ret <16 x i8> [[TMP0]]1510//1511// BE-LABEL: @test_vreinterpretq_u8_s16(1512// BE-NEXT: entry:1513// BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v8i16(<8 x i16> [[A:%.*]])1514// BE-NEXT: ret <16 x i8> [[TMP0]]1515//1516uint8x16_t test_vreinterpretq_u8_s16(int16x8_t a)1517{1518#ifdef POLYMORPHIC1519 return vreinterpretq_u8(a);1520#else /* POLYMORPHIC */1521 return vreinterpretq_u8_s16(a);1522#endif /* POLYMORPHIC */1523}1524 1525// LE-LABEL: @test_vreinterpretq_u8_s32(1526// LE-NEXT: entry:1527// LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <16 x i8>1528// LE-NEXT: ret <16 x i8> [[TMP0]]1529//1530// BE-LABEL: @test_vreinterpretq_u8_s32(1531// BE-NEXT: entry:1532// BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v4i32(<4 x i32> [[A:%.*]])1533// BE-NEXT: ret <16 x i8> [[TMP0]]1534//1535uint8x16_t test_vreinterpretq_u8_s32(int32x4_t a)1536{1537#ifdef POLYMORPHIC1538 return vreinterpretq_u8(a);1539#else /* POLYMORPHIC */1540 return vreinterpretq_u8_s32(a);1541#endif /* POLYMORPHIC */1542}1543 1544// LE-LABEL: @test_vreinterpretq_u8_s64(1545// LE-NEXT: entry:1546// LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <16 x i8>1547// LE-NEXT: ret <16 x i8> [[TMP0]]1548//1549// BE-LABEL: @test_vreinterpretq_u8_s64(1550// BE-NEXT: entry:1551// BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v2i64(<2 x i64> [[A:%.*]])1552// BE-NEXT: ret <16 x i8> [[TMP0]]1553//1554uint8x16_t test_vreinterpretq_u8_s64(int64x2_t a)1555{1556#ifdef POLYMORPHIC1557 return vreinterpretq_u8(a);1558#else /* POLYMORPHIC */1559 return vreinterpretq_u8_s64(a);1560#endif /* POLYMORPHIC */1561}1562 1563// BOTH-LABEL: @test_vreinterpretq_u8_s8(1564// BOTH-NEXT: entry:1565// BOTH-NEXT: ret <16 x i8> [[A:%.*]]1566//1567uint8x16_t test_vreinterpretq_u8_s8(int8x16_t a)1568{1569#ifdef POLYMORPHIC1570 return vreinterpretq_u8(a);1571#else /* POLYMORPHIC */1572 return vreinterpretq_u8_s8(a);1573#endif /* POLYMORPHIC */1574}1575 1576// LE-LABEL: @test_vreinterpretq_u8_u16(1577// LE-NEXT: entry:1578// LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <16 x i8>1579// LE-NEXT: ret <16 x i8> [[TMP0]]1580//1581// BE-LABEL: @test_vreinterpretq_u8_u16(1582// BE-NEXT: entry:1583// BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v8i16(<8 x i16> [[A:%.*]])1584// BE-NEXT: ret <16 x i8> [[TMP0]]1585//1586uint8x16_t test_vreinterpretq_u8_u16(uint16x8_t a)1587{1588#ifdef POLYMORPHIC1589 return vreinterpretq_u8(a);1590#else /* POLYMORPHIC */1591 return vreinterpretq_u8_u16(a);1592#endif /* POLYMORPHIC */1593}1594 1595// LE-LABEL: @test_vreinterpretq_u8_u32(1596// LE-NEXT: entry:1597// LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <16 x i8>1598// LE-NEXT: ret <16 x i8> [[TMP0]]1599//1600// BE-LABEL: @test_vreinterpretq_u8_u32(1601// BE-NEXT: entry:1602// BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v4i32(<4 x i32> [[A:%.*]])1603// BE-NEXT: ret <16 x i8> [[TMP0]]1604//1605uint8x16_t test_vreinterpretq_u8_u32(uint32x4_t a)1606{1607#ifdef POLYMORPHIC1608 return vreinterpretq_u8(a);1609#else /* POLYMORPHIC */1610 return vreinterpretq_u8_u32(a);1611#endif /* POLYMORPHIC */1612}1613 1614// LE-LABEL: @test_vreinterpretq_u8_u64(1615// LE-NEXT: entry:1616// LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <16 x i8>1617// LE-NEXT: ret <16 x i8> [[TMP0]]1618//1619// BE-LABEL: @test_vreinterpretq_u8_u64(1620// BE-NEXT: entry:1621// BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v2i64(<2 x i64> [[A:%.*]])1622// BE-NEXT: ret <16 x i8> [[TMP0]]1623//1624uint8x16_t test_vreinterpretq_u8_u64(uint64x2_t a)1625{1626#ifdef POLYMORPHIC1627 return vreinterpretq_u8(a);1628#else /* POLYMORPHIC */1629 return vreinterpretq_u8_u64(a);1630#endif /* POLYMORPHIC */1631}1632