blob: f88d2ee02e87a9dad11a801f1d6b22ef2b13560d [file] [log] [blame]
Chris Bowlerf330d9f2020-09-25 07:36:49 -04001// RUN: %clang_cc1 -triple powerpc64-unknown-aix -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-NOLDBL128
2// RUN: %clang_cc1 -triple powerpc-unknown-aix -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-NOLDBL128
3// RUN: %clang_cc1 -triple powerpc64-unknown-linux -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-LDBL128
4// RUN: %clang_cc1 -triple ppc64le-unknown-linux -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-LDBL128
Chris Bowler64b8a632020-09-24 19:06:56 -04005// RUN: %clang_cc1 -triple powerpc-unknown-linux -emit-llvm %s -o - | FileCheck %s --check-prefix=PPC32LNX
6
7_Complex float foo1(_Complex float x) {
8 return x;
Chris Bowlerf330d9f2020-09-25 07:36:49 -04009// CHECK-LABEL: define { float, float } @foo1(float %x.{{.*}}, float %x.{{.*}}) #0 {
10// CHECK: ret { float, float }
Chris Bowler64b8a632020-09-24 19:06:56 -040011
Matt Arsenault0a7cd992020-09-29 09:33:55 -040012// PPC32LNX-LABEL: define void @foo1({ float, float }* noalias sret({ float, float }) align 4 %agg.result, { float, float }* byval({ float, float }) align 4 %x) #0 {
Chris Bowlerf330d9f2020-09-25 07:36:49 -040013// PPC32LNX: [[RETREAL:%.*]] = getelementptr inbounds { float, float }, { float, float }* %agg.result, i32 0, i32 0
14// PPC32LNX-NEXT: [[RETIMAG:%.*]] = getelementptr inbounds { float, float }, { float, float }* %agg.result, i32 0, i32 1
15// PPC32LNX-NEXT: store float %{{.*}}, float* [[RETREAL]], align 4
16// PPC32LNX-NEXT: store float %{{.*}}, float* [[RETIMAG]], align 4
Chris Bowler64b8a632020-09-24 19:06:56 -040017}
18
19_Complex double foo2(_Complex double x) {
20 return x;
Chris Bowlerf330d9f2020-09-25 07:36:49 -040021// CHECK-LABEL: define { double, double } @foo2(double %x.{{.*}}, double %x.{{.*}}) #0 {
22// CHECK: ret { double, double }
Chris Bowler64b8a632020-09-24 19:06:56 -040023
Matt Arsenault0a7cd992020-09-29 09:33:55 -040024// PPC32LNX-LABEL: define void @foo2({ double, double }* noalias sret({ double, double }) align 8 %agg.result, { double, double }* byval({ double, double }) align 8 %x) #0 {
Chris Bowlerf330d9f2020-09-25 07:36:49 -040025// PPC32LNX: [[RETREAL:%.*]] = getelementptr inbounds { double, double }, { double, double }* %agg.result, i32 0, i32 0
26// PPC32LNX-NEXT: [[RETIMAG:%.*]] = getelementptr inbounds { double, double }, { double, double }* %agg.result, i32 0, i32 1
27// PPC32LNX-NEXT: store double %{{.*}}, double* [[RETREAL]], align 8
28// PPC32LNX-NEXT: store double %{{.*}}, double* [[RETIMAG]], align 8
Chris Bowler64b8a632020-09-24 19:06:56 -040029}
30
31_Complex long double foo3(_Complex long double x) {
32 return x;
Chris Bowlerf330d9f2020-09-25 07:36:49 -040033// CHECK-NOLDBL128-LABEL: define { double, double } @foo3(double %x.{{.*}}, double %x.{{.*}}) #0 {
34// CHECK-NOLDBL128: ret { double, double }
Chris Bowler64b8a632020-09-24 19:06:56 -040035
Chris Bowlerf330d9f2020-09-25 07:36:49 -040036// CHECK-LDBL128-LABEL: define { ppc_fp128, ppc_fp128 } @foo3(ppc_fp128 %x.{{.*}}, ppc_fp128 %x.{{.*}}) #0 {
37// CHECK-LDBL128: ret { ppc_fp128, ppc_fp128 }
38
Matt Arsenault0a7cd992020-09-29 09:33:55 -040039// PPC32LNX-LABEL: define void @foo3({ ppc_fp128, ppc_fp128 }* noalias sret({ ppc_fp128, ppc_fp128 }) align 16 %agg.result, { ppc_fp128, ppc_fp128 }* byval({ ppc_fp128, ppc_fp128 }) align 16 %x) #0 {
Chris Bowlerf330d9f2020-09-25 07:36:49 -040040// PPC32LNX: [[RETREAL:%.*]] = getelementptr inbounds { ppc_fp128, ppc_fp128 }, { ppc_fp128, ppc_fp128 }* %agg.result, i32 0, i32 0
41// PPC32LNX-NEXT: [[RETIMAG:%.*]] = getelementptr inbounds { ppc_fp128, ppc_fp128 }, { ppc_fp128, ppc_fp128 }* %agg.result, i32 0, i32 1
42// PPC32LNX-NEXT: store ppc_fp128 %{{.*}}, ppc_fp128* [[RETREAL]], align 16
43// PPC32LNX-NEXT: store ppc_fp128 %{{.*}}, ppc_fp128* [[RETIMAG]], align 16
Chris Bowler64b8a632020-09-24 19:06:56 -040044}