brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.7 KiB · 8eeb52b Raw
365 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-prefixes=CHECK,CHECK-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-prefixes=CHECK,CHECK-LE4// RUN: %clang_cc1 -triple thumbebv8.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-prefixes=CHECK,CHECK-BE5// RUN: %clang_cc1 -triple thumbebv8.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-prefixes=CHECK,CHECK-BE6 7// REQUIRES: aarch64-registered-target || arm-registered-target8 9#include <arm_mve.h>10 11// CHECK-LE-LABEL: @test_vcreateq_f16(12// CHECK-LE-NEXT:  entry:13// CHECK-LE-NEXT:    [[TMP0:%.*]] = insertelement <2 x i64> poison, i64 [[A:%.*]], i64 014// CHECK-LE-NEXT:    [[TMP1:%.*]] = insertelement <2 x i64> [[TMP0]], i64 [[B:%.*]], i64 115// CHECK-LE-NEXT:    [[TMP2:%.*]] = bitcast <2 x i64> [[TMP1]] to <8 x half>16// CHECK-LE-NEXT:    ret <8 x half> [[TMP2]]17//18// CHECK-BE-LABEL: @test_vcreateq_f16(19// CHECK-BE-NEXT:  entry:20// CHECK-BE-NEXT:    [[TMP0:%.*]] = insertelement <2 x i64> poison, i64 [[A:%.*]], i64 021// CHECK-BE-NEXT:    [[TMP1:%.*]] = insertelement <2 x i64> [[TMP0]], i64 [[B:%.*]], i64 122// CHECK-BE-NEXT:    [[TMP2:%.*]] = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v2i64(<2 x i64> [[TMP1]])23// CHECK-BE-NEXT:    ret <8 x half> [[TMP2]]24//25float16x8_t test_vcreateq_f16(uint64_t a, uint64_t b)26{27    return vcreateq_f16(a, b);28}29 30// CHECK-LE-LABEL: @test_vcreateq_f32(31// CHECK-LE-NEXT:  entry:32// CHECK-LE-NEXT:    [[TMP0:%.*]] = insertelement <2 x i64> poison, i64 [[A:%.*]], i64 033// CHECK-LE-NEXT:    [[TMP1:%.*]] = insertelement <2 x i64> [[TMP0]], i64 [[B:%.*]], i64 134// CHECK-LE-NEXT:    [[TMP2:%.*]] = bitcast <2 x i64> [[TMP1]] to <4 x float>35// CHECK-LE-NEXT:    ret <4 x float> [[TMP2]]36//37// CHECK-BE-LABEL: @test_vcreateq_f32(38// CHECK-BE-NEXT:  entry:39// CHECK-BE-NEXT:    [[TMP0:%.*]] = insertelement <2 x i64> poison, i64 [[A:%.*]], i64 040// CHECK-BE-NEXT:    [[TMP1:%.*]] = insertelement <2 x i64> [[TMP0]], i64 [[B:%.*]], i64 141// CHECK-BE-NEXT:    [[TMP2:%.*]] = call <4 x float> @llvm.arm.mve.vreinterpretq.v4f32.v2i64(<2 x i64> [[TMP1]])42// CHECK-BE-NEXT:    ret <4 x float> [[TMP2]]43//44float32x4_t test_vcreateq_f32(uint64_t a, uint64_t b)45{46    return vcreateq_f32(a, b);47}48 49// CHECK-LE-LABEL: @test_vcreateq_s16(50// CHECK-LE-NEXT:  entry:51// CHECK-LE-NEXT:    [[TMP0:%.*]] = insertelement <2 x i64> poison, i64 [[A:%.*]], i64 052// CHECK-LE-NEXT:    [[TMP1:%.*]] = insertelement <2 x i64> [[TMP0]], i64 [[B:%.*]], i64 153// CHECK-LE-NEXT:    [[TMP2:%.*]] = bitcast <2 x i64> [[TMP1]] to <8 x i16>54// CHECK-LE-NEXT:    ret <8 x i16> [[TMP2]]55//56// CHECK-BE-LABEL: @test_vcreateq_s16(57// CHECK-BE-NEXT:  entry:58// CHECK-BE-NEXT:    [[TMP0:%.*]] = insertelement <2 x i64> poison, i64 [[A:%.*]], i64 059// CHECK-BE-NEXT:    [[TMP1:%.*]] = insertelement <2 x i64> [[TMP0]], i64 [[B:%.*]], i64 160// CHECK-BE-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v2i64(<2 x i64> [[TMP1]])61// CHECK-BE-NEXT:    ret <8 x i16> [[TMP2]]62//63int16x8_t test_vcreateq_s16(uint64_t a, uint64_t b)64{65    return vcreateq_s16(a, b);66}67 68// CHECK-LE-LABEL: @test_vcreateq_s32(69// CHECK-LE-NEXT:  entry:70// CHECK-LE-NEXT:    [[TMP0:%.*]] = insertelement <2 x i64> poison, i64 [[A:%.*]], i64 071// CHECK-LE-NEXT:    [[TMP1:%.*]] = insertelement <2 x i64> [[TMP0]], i64 [[B:%.*]], i64 172// CHECK-LE-NEXT:    [[TMP2:%.*]] = bitcast <2 x i64> [[TMP1]] to <4 x i32>73// CHECK-LE-NEXT:    ret <4 x i32> [[TMP2]]74//75// CHECK-BE-LABEL: @test_vcreateq_s32(76// CHECK-BE-NEXT:  entry:77// CHECK-BE-NEXT:    [[TMP0:%.*]] = insertelement <2 x i64> poison, i64 [[A:%.*]], i64 078// CHECK-BE-NEXT:    [[TMP1:%.*]] = insertelement <2 x i64> [[TMP0]], i64 [[B:%.*]], i64 179// CHECK-BE-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v2i64(<2 x i64> [[TMP1]])80// CHECK-BE-NEXT:    ret <4 x i32> [[TMP2]]81//82int32x4_t test_vcreateq_s32(uint64_t a, uint64_t b)83{84    return vcreateq_s32(a, b);85}86 87// CHECK-LABEL: @test_vcreateq_s64(88// CHECK-NEXT:  entry:89// CHECK-NEXT:    [[TMP0:%.*]] = insertelement <2 x i64> poison, i64 [[A:%.*]], i64 090// CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x i64> [[TMP0]], i64 [[B:%.*]], i64 191// CHECK-NEXT:    ret <2 x i64> [[TMP1]]92//93int64x2_t test_vcreateq_s64(uint64_t a, uint64_t b)94{95    return vcreateq_s64(a, b);96}97 98// CHECK-LE-LABEL: @test_vcreateq_s8(99// CHECK-LE-NEXT:  entry:100// CHECK-LE-NEXT:    [[TMP0:%.*]] = insertelement <2 x i64> poison, i64 [[A:%.*]], i64 0101// CHECK-LE-NEXT:    [[TMP1:%.*]] = insertelement <2 x i64> [[TMP0]], i64 [[B:%.*]], i64 1102// CHECK-LE-NEXT:    [[TMP2:%.*]] = bitcast <2 x i64> [[TMP1]] to <16 x i8>103// CHECK-LE-NEXT:    ret <16 x i8> [[TMP2]]104//105// CHECK-BE-LABEL: @test_vcreateq_s8(106// CHECK-BE-NEXT:  entry:107// CHECK-BE-NEXT:    [[TMP0:%.*]] = insertelement <2 x i64> poison, i64 [[A:%.*]], i64 0108// CHECK-BE-NEXT:    [[TMP1:%.*]] = insertelement <2 x i64> [[TMP0]], i64 [[B:%.*]], i64 1109// CHECK-BE-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v2i64(<2 x i64> [[TMP1]])110// CHECK-BE-NEXT:    ret <16 x i8> [[TMP2]]111//112int8x16_t test_vcreateq_s8(uint64_t a, uint64_t b)113{114    return vcreateq_s8(a, b);115}116 117// CHECK-LE-LABEL: @test_vcreateq_u16(118// CHECK-LE-NEXT:  entry:119// CHECK-LE-NEXT:    [[TMP0:%.*]] = insertelement <2 x i64> poison, i64 [[A:%.*]], i64 0120// CHECK-LE-NEXT:    [[TMP1:%.*]] = insertelement <2 x i64> [[TMP0]], i64 [[B:%.*]], i64 1121// CHECK-LE-NEXT:    [[TMP2:%.*]] = bitcast <2 x i64> [[TMP1]] to <8 x i16>122// CHECK-LE-NEXT:    ret <8 x i16> [[TMP2]]123//124// CHECK-BE-LABEL: @test_vcreateq_u16(125// CHECK-BE-NEXT:  entry:126// CHECK-BE-NEXT:    [[TMP0:%.*]] = insertelement <2 x i64> poison, i64 [[A:%.*]], i64 0127// CHECK-BE-NEXT:    [[TMP1:%.*]] = insertelement <2 x i64> [[TMP0]], i64 [[B:%.*]], i64 1128// CHECK-BE-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v2i64(<2 x i64> [[TMP1]])129// CHECK-BE-NEXT:    ret <8 x i16> [[TMP2]]130//131uint16x8_t test_vcreateq_u16(uint64_t a, uint64_t b)132{133    return vcreateq_u16(a, b);134}135 136// CHECK-LE-LABEL: @test_vcreateq_u32(137// CHECK-LE-NEXT:  entry:138// CHECK-LE-NEXT:    [[TMP0:%.*]] = insertelement <2 x i64> poison, i64 [[A:%.*]], i64 0139// CHECK-LE-NEXT:    [[TMP1:%.*]] = insertelement <2 x i64> [[TMP0]], i64 [[B:%.*]], i64 1140// CHECK-LE-NEXT:    [[TMP2:%.*]] = bitcast <2 x i64> [[TMP1]] to <4 x i32>141// CHECK-LE-NEXT:    ret <4 x i32> [[TMP2]]142//143// CHECK-BE-LABEL: @test_vcreateq_u32(144// CHECK-BE-NEXT:  entry:145// CHECK-BE-NEXT:    [[TMP0:%.*]] = insertelement <2 x i64> poison, i64 [[A:%.*]], i64 0146// CHECK-BE-NEXT:    [[TMP1:%.*]] = insertelement <2 x i64> [[TMP0]], i64 [[B:%.*]], i64 1147// CHECK-BE-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v2i64(<2 x i64> [[TMP1]])148// CHECK-BE-NEXT:    ret <4 x i32> [[TMP2]]149//150uint32x4_t test_vcreateq_u32(uint64_t a, uint64_t b)151{152    return vcreateq_u32(a, b);153}154 155// CHECK-LABEL: @test_vcreateq_u64(156// CHECK-NEXT:  entry:157// CHECK-NEXT:    [[TMP0:%.*]] = insertelement <2 x i64> poison, i64 [[A:%.*]], i64 0158// CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x i64> [[TMP0]], i64 [[B:%.*]], i64 1159// CHECK-NEXT:    ret <2 x i64> [[TMP1]]160//161uint64x2_t test_vcreateq_u64(uint64_t a, uint64_t b)162{163    return vcreateq_u64(a, b);164}165 166// CHECK-LE-LABEL: @test_vcreateq_u8(167// CHECK-LE-NEXT:  entry:168// CHECK-LE-NEXT:    [[TMP0:%.*]] = insertelement <2 x i64> poison, i64 [[A:%.*]], i64 0169// CHECK-LE-NEXT:    [[TMP1:%.*]] = insertelement <2 x i64> [[TMP0]], i64 [[B:%.*]], i64 1170// CHECK-LE-NEXT:    [[TMP2:%.*]] = bitcast <2 x i64> [[TMP1]] to <16 x i8>171// CHECK-LE-NEXT:    ret <16 x i8> [[TMP2]]172//173// CHECK-BE-LABEL: @test_vcreateq_u8(174// CHECK-BE-NEXT:  entry:175// CHECK-BE-NEXT:    [[TMP0:%.*]] = insertelement <2 x i64> poison, i64 [[A:%.*]], i64 0176// CHECK-BE-NEXT:    [[TMP1:%.*]] = insertelement <2 x i64> [[TMP0]], i64 [[B:%.*]], i64 1177// CHECK-BE-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v2i64(<2 x i64> [[TMP1]])178// CHECK-BE-NEXT:    ret <16 x i8> [[TMP2]]179//180uint8x16_t test_vcreateq_u8(uint64_t a, uint64_t b)181{182    return vcreateq_u8(a, b);183}184 185// CHECK-LABEL: @test_vuninitializedq_polymorphic_f16(186// CHECK-NEXT:  entry:187// CHECK-NEXT:    ret <8 x half> undef188//189float16x8_t test_vuninitializedq_polymorphic_f16(float16x8_t (*funcptr)(void))190{191    return vuninitializedq(funcptr());192}193 194// CHECK-LABEL: @test_vuninitializedq_polymorphic_f32(195// CHECK-NEXT:  entry:196// CHECK-NEXT:    ret <4 x float> undef197//198float32x4_t test_vuninitializedq_polymorphic_f32(float32x4_t (*funcptr)(void))199{200    return vuninitializedq(funcptr());201}202 203// CHECK-LABEL: @test_vuninitializedq_polymorphic_s8(204// CHECK-NEXT:  entry:205// CHECK-NEXT:    ret <16 x i8> undef206//207int8x16_t test_vuninitializedq_polymorphic_s8(int8x16_t (*funcptr)(void))208{209    return vuninitializedq(funcptr());210}211 212// CHECK-LABEL: @test_vuninitializedq_polymorphic_s16(213// CHECK-NEXT:  entry:214// CHECK-NEXT:    ret <8 x i16> undef215//216int16x8_t test_vuninitializedq_polymorphic_s16(int16x8_t (*funcptr)(void))217{218    return vuninitializedq(funcptr());219}220 221// CHECK-LABEL: @test_vuninitializedq_polymorphic_s32(222// CHECK-NEXT:  entry:223// CHECK-NEXT:    ret <4 x i32> undef224//225int32x4_t test_vuninitializedq_polymorphic_s32(int32x4_t (*funcptr)(void))226{227    return vuninitializedq(funcptr());228}229 230// CHECK-LABEL: @test_vuninitializedq_polymorphic_s64(231// CHECK-NEXT:  entry:232// CHECK-NEXT:    ret <2 x i64> undef233//234int64x2_t test_vuninitializedq_polymorphic_s64(int64x2_t (*funcptr)(void))235{236    return vuninitializedq(funcptr());237}238 239// CHECK-LABEL: @test_vuninitializedq_polymorphic_u8(240// CHECK-NEXT:  entry:241// CHECK-NEXT:    ret <16 x i8> undef242//243uint8x16_t test_vuninitializedq_polymorphic_u8(uint8x16_t (*funcptr)(void))244{245    return vuninitializedq(funcptr());246}247 248// CHECK-LABEL: @test_vuninitializedq_polymorphic_u16(249// CHECK-NEXT:  entry:250// CHECK-NEXT:    ret <8 x i16> undef251//252uint16x8_t test_vuninitializedq_polymorphic_u16(uint16x8_t (*funcptr)(void))253{254    return vuninitializedq(funcptr());255}256 257// CHECK-LABEL: @test_vuninitializedq_polymorphic_u32(258// CHECK-NEXT:  entry:259// CHECK-NEXT:    ret <4 x i32> undef260//261uint32x4_t test_vuninitializedq_polymorphic_u32(uint32x4_t (*funcptr)(void))262{263    return vuninitializedq(funcptr());264}265 266// CHECK-LABEL: @test_vuninitializedq_polymorphic_u64(267// CHECK-NEXT:  entry:268// CHECK-NEXT:    ret <2 x i64> undef269//270uint64x2_t test_vuninitializedq_polymorphic_u64(uint64x2_t (*funcptr)(void))271{272    return vuninitializedq(funcptr());273}274 275// CHECK-LABEL: @test_vuninitializedq_f16(276// CHECK-NEXT:  entry:277// CHECK-NEXT:    ret <8 x half> undef278//279float16x8_t test_vuninitializedq_f16(void)280{281    return vuninitializedq_f16();282}283 284// CHECK-LABEL: @test_vuninitializedq_f32(285// CHECK-NEXT:  entry:286// CHECK-NEXT:    ret <4 x float> undef287//288float32x4_t test_vuninitializedq_f32(void)289{290    return vuninitializedq_f32();291}292 293// CHECK-LABEL: @test_vuninitializedq_s16(294// CHECK-NEXT:  entry:295// CHECK-NEXT:    ret <8 x i16> undef296//297int16x8_t test_vuninitializedq_s16(void)298{299    return vuninitializedq_s16();300}301 302// CHECK-LABEL: @test_vuninitializedq_s32(303// CHECK-NEXT:  entry:304// CHECK-NEXT:    ret <4 x i32> undef305//306int32x4_t test_vuninitializedq_s32(void)307{308    return vuninitializedq_s32();309}310 311// CHECK-LABEL: @test_vuninitializedq_s64(312// CHECK-NEXT:  entry:313// CHECK-NEXT:    ret <2 x i64> undef314//315int64x2_t test_vuninitializedq_s64(void)316{317    return vuninitializedq_s64();318}319 320// CHECK-LABEL: @test_vuninitializedq_s8(321// CHECK-NEXT:  entry:322// CHECK-NEXT:    ret <16 x i8> undef323//324int8x16_t test_vuninitializedq_s8(void)325{326    return vuninitializedq_s8();327}328 329// CHECK-LABEL: @test_vuninitializedq_u16(330// CHECK-NEXT:  entry:331// CHECK-NEXT:    ret <8 x i16> undef332//333uint16x8_t test_vuninitializedq_u16(void)334{335    return vuninitializedq_u16();336}337 338// CHECK-LABEL: @test_vuninitializedq_u32(339// CHECK-NEXT:  entry:340// CHECK-NEXT:    ret <4 x i32> undef341//342uint32x4_t test_vuninitializedq_u32(void)343{344    return vuninitializedq_u32();345}346 347// CHECK-LABEL: @test_vuninitializedq_u64(348// CHECK-NEXT:  entry:349// CHECK-NEXT:    ret <2 x i64> undef350//351uint64x2_t test_vuninitializedq_u64(void)352{353    return vuninitializedq_u64();354}355 356// CHECK-LABEL: @test_vuninitializedq_u8(357// CHECK-NEXT:  entry:358// CHECK-NEXT:    ret <16 x i8> undef359//360uint8x16_t test_vuninitializedq_u8(void)361{362    return vuninitializedq_u8();363}364 365