brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.8 KiB · b2e79d6 Raw
124 lines · c
1// RUN: %clang_cc1 -triple powerpc64le-unknown-linux-gnu -emit-llvm \2// RUN:   -target-cpu pwr9 -target-feature +float128 -o - %s | FileCheck %s3 4// Test homogeneous fp128 aggregate passing and returning.5 6struct fp1 { __float128 f[1]; };7struct fp2 { __float128 f[2]; };8struct fp3 { __float128 f[3]; };9struct fp4 { __float128 f[4]; };10struct fp5 { __float128 f[5]; };11struct fp6 { __float128 f[6]; };12struct fp7 { __float128 f[7]; };13struct fp8 { __float128 f[8]; };14struct fp9 { __float128 f[9]; };15 16struct fpab { __float128 a; __float128 b; };17struct fpabc { __float128 a; __float128 b; __float128 c; };18 19struct fp2a2b { __float128 a[2]; __float128 b[2]; };20 21// CHECK: define{{.*}} [1 x fp128] @func_f1(fp128 inreg %x.coerce)22struct fp1 func_f1(struct fp1 x) { return x; }23 24// CHECK: define{{.*}} [2 x fp128] @func_f2([2 x fp128] %x.coerce)25struct fp2 func_f2(struct fp2 x) { return x; }26 27// CHECK: define{{.*}} [3 x fp128] @func_f3([3 x fp128] %x.coerce)28struct fp3 func_f3(struct fp3 x) { return x; }29 30// CHECK: define{{.*}} [4 x fp128] @func_f4([4 x fp128] %x.coerce)31struct fp4 func_f4(struct fp4 x) { return x; }32 33// CHECK: define{{.*}} [5 x fp128] @func_f5([5 x fp128] %x.coerce)34struct fp5 func_f5(struct fp5 x) { return x; }35 36// CHECK: define{{.*}} [6 x fp128] @func_f6([6 x fp128] %x.coerce)37struct fp6 func_f6(struct fp6 x) { return x; }38 39// CHECK: define{{.*}} [7 x fp128] @func_f7([7 x fp128] %x.coerce)40struct fp7 func_f7(struct fp7 x) { return x; }41 42// CHECK: define{{.*}} [8 x fp128] @func_f8([8 x fp128] %x.coerce)43struct fp8 func_f8(struct fp8 x) { return x; }44 45// CHECK: define{{.*}} void @func_f9(ptr dead_on_unwind noalias writable sret(%struct.fp9) align 16 %agg.result, ptr noundef byval(%struct.fp9) align 16 %x)46struct fp9 func_f9(struct fp9 x) { return x; }47 48// CHECK: define{{.*}} [2 x fp128] @func_fab([2 x fp128] %x.coerce)49struct fpab func_fab(struct fpab x) { return x; }50 51// CHECK: define{{.*}} [3 x fp128] @func_fabc([3 x fp128] %x.coerce)52struct fpabc func_fabc(struct fpabc x) { return x; }53 54// CHECK: define{{.*}} [4 x fp128] @func_f2a2b([4 x fp128] %x.coerce)55struct fp2a2b func_f2a2b(struct fp2a2b x) { return x; }56 57// CHECK-LABEL: @call_fp158// CHECK: %[[TMP:[^ ]+]] = load fp128, ptr @global_f1, align 1659// CHECK: call [1 x fp128] @func_f1(fp128 inreg %[[TMP]])60struct fp1 global_f1;61void call_fp1(void) { global_f1 = func_f1(global_f1); }62 63// CHECK-LABEL: @call_fp264// CHECK: %[[TMP:[^ ]+]] = load [2 x fp128], ptr @global_f2, align 1665// CHECK: call [2 x fp128] @func_f2([2 x fp128] %[[TMP]])66struct fp2 global_f2;67void call_fp2(void) { global_f2 = func_f2(global_f2); }68 69// CHECK-LABEL: @call_fp370// CHECK: %[[TMP:[^ ]+]] = load [3 x fp128], ptr @global_f3, align 1671// CHECK: call [3 x fp128] @func_f3([3 x fp128] %[[TMP]])72struct fp3 global_f3;73void call_fp3(void) { global_f3 = func_f3(global_f3); }74 75// CHECK-LABEL: @call_fp476// CHECK: %[[TMP:[^ ]+]] = load [4 x fp128], ptr @global_f4, align 1677// CHECK: call [4 x fp128] @func_f4([4 x fp128] %[[TMP]])78struct fp4 global_f4;79void call_fp4(void) { global_f4 = func_f4(global_f4); }80 81// CHECK-LABEL: @call_fp582// CHECK: %[[TMP:[^ ]+]] = load [5 x fp128], ptr @global_f5, align 1683// CHECK: call [5 x fp128] @func_f5([5 x fp128] %[[TMP]])84struct fp5 global_f5;85void call_fp5(void) { global_f5 = func_f5(global_f5); }86 87// CHECK-LABEL: @call_fp688// CHECK: %[[TMP:[^ ]+]] = load [6 x fp128], ptr @global_f6, align 1689// CHECK: call [6 x fp128] @func_f6([6 x fp128] %[[TMP]])90struct fp6 global_f6;91void call_fp6(void) { global_f6 = func_f6(global_f6); }92 93// CHECK-LABEL: @call_fp794// CHECK: %[[TMP:[^ ]+]] = load [7 x fp128], ptr @global_f7, align 1695// CHECK: call [7 x fp128] @func_f7([7 x fp128] %[[TMP]])96struct fp7 global_f7;97void call_fp7(void) { global_f7 = func_f7(global_f7); }98 99// CHECK-LABEL: @call_fp8100// CHECK: %[[TMP:[^ ]+]] = load [8 x fp128], ptr @global_f8, align 16101// CHECK: call [8 x fp128] @func_f8([8 x fp128] %[[TMP]])102struct fp8 global_f8;103void call_fp8(void) { global_f8 = func_f8(global_f8); }104 105// CHECK-LABEL: @call_fp9106// CHECK: %[[TMP1:[^ ]+]] = alloca %struct.fp9, align 16107// CHECK: call void @func_f9(ptr dead_on_unwind writable sret(%struct.fp9) align 16 %[[TMP2:[^ ]+]], ptr noundef byval(%struct.fp9) align 16 @global_f9108// CHECK: call void @llvm.memcpy.p0.p0.i64(ptr align 16 @global_f9, ptr align 16 %[[TMP2]], i64 144, i1 false109// CHECK: ret void110struct fp9 global_f9;111void call_fp9(void) { global_f9 = func_f9(global_f9); }112 113// CHECK-LABEL: @call_fpab114// CHECK: %[[TMP:[^ ]+]] = load [2 x fp128], ptr @global_fab115// CHECK: call [2 x fp128] @func_fab([2 x fp128] %[[TMP]])116struct fpab global_fab;117void call_fpab(void) { global_fab = func_fab(global_fab); }118 119// CHECK-LABEL: @call_fpabc120// CHECK: %[[TMP:[^ ]+]] = load [3 x fp128], ptr @global_fabc121// CHECK: call [3 x fp128] @func_fabc([3 x fp128] %[[TMP]])122struct fpabc global_fabc;123void call_fpabc(void) { global_fabc = func_fabc(global_fabc); }124