Add powerpcle support to clang. For FreeBSD, assume a freestanding environment for now, as we only need it in the first place to build loader, which runs in the OpenFirmware environment instead of the FreeBSD environment. For Linux, recognize glibc and musl environments to match current usage in Void Linux PPC. Adjust driver to match current binutils behavior regarding machine naming. Adjust and expand tests. Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D93919
101 lines
4.1 KiB
C
101 lines
4.1 KiB
C
// REQUIRES: powerpc-registered-target
|
|
// RUN: %clang_cc1 -triple powerpc-unknown-freebsd \
|
|
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-SVR4
|
|
// RUN: %clang_cc1 -triple powerpcle-unknown-freebsd \
|
|
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-SVR4
|
|
// RUN: %clang_cc1 -triple powerpc-unknown-aix \
|
|
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-AIX
|
|
// RUN: %clang_cc1 -triple powerpc64-unknown-aix \
|
|
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-AIX
|
|
// RUN: %clang_cc1 -triple powerpc-unknown-linux \
|
|
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-AIX
|
|
// RUN: %clang_cc1 -triple powerpc-unknown-linux -maix-struct-return \
|
|
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-AIX
|
|
// RUN: %clang_cc1 -triple powerpc-unknown-linux -msvr4-struct-return \
|
|
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-SVR4
|
|
// RUN: %clang_cc1 -triple powerpcle-unknown-linux \
|
|
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-AIX
|
|
// RUN: %clang_cc1 -triple powerpcle-unknown-linux -maix-struct-return \
|
|
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-AIX
|
|
// RUN: %clang_cc1 -triple powerpcle-unknown-linux -msvr4-struct-return \
|
|
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-SVR4
|
|
// RUN: %clang_cc1 -triple powerpc-unknown-netbsd \
|
|
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-SVR4
|
|
// RUN: %clang_cc1 -triple powerpc-unknown-openbsd \
|
|
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-SVR4
|
|
// RUN: %clang_cc1 -triple powerpc-unknown-openbsd -maix-struct-return \
|
|
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-AIX
|
|
// RUN: %clang_cc1 -triple powerpc-unknown-openbsd -msvr4-struct-return \
|
|
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-SVR4
|
|
|
|
typedef struct {
|
|
} Zero;
|
|
typedef struct {
|
|
char c;
|
|
} One;
|
|
typedef struct {
|
|
short s;
|
|
} Two;
|
|
typedef struct {
|
|
char c[3];
|
|
} Three;
|
|
typedef struct {
|
|
float f;
|
|
} Four; // svr4 to return i32, not float
|
|
typedef struct {
|
|
char c[5];
|
|
} Five;
|
|
typedef struct {
|
|
short s[3];
|
|
} Six;
|
|
typedef struct {
|
|
char c[7];
|
|
} Seven;
|
|
typedef struct {
|
|
int i;
|
|
char c;
|
|
} Eight; // padded for alignment
|
|
typedef struct {
|
|
char c[9];
|
|
} Nine;
|
|
|
|
// CHECK-AIX-LABEL: define{{.*}} void @ret0(%struct.Zero* noalias sret(%struct.Zero) {{[^,]*}})
|
|
// CHECK-SVR4-LABEL: define{{.*}} void @ret0()
|
|
Zero ret0(void) { return (Zero){}; }
|
|
|
|
// CHECK-AIX-LABEL: define{{.*}} void @ret1(%struct.One* noalias sret(%struct.One) {{[^,]*}})
|
|
// CHECK-SVR4-LABEL: define{{.*}} i8 @ret1()
|
|
One ret1(void) { return (One){'a'}; }
|
|
|
|
// CHECK-AIX-LABEL: define{{.*}} void @ret2(%struct.Two* noalias sret(%struct.Two) {{[^,]*}})
|
|
// CHECK-SVR4-LABEL: define{{.*}} i16 @ret2()
|
|
Two ret2(void) { return (Two){123}; }
|
|
|
|
// CHECK-AIX-LABEL: define{{.*}} void @ret3(%struct.Three* noalias sret(%struct.Three) {{[^,]*}})
|
|
// CHECK-SVR4-LABEL: define{{.*}} i24 @ret3()
|
|
Three ret3(void) { return (Three){"abc"}; }
|
|
|
|
// CHECK-AIX-LABEL: define{{.*}} void @ret4(%struct.Four* noalias sret(%struct.Four) {{[^,]*}})
|
|
// CHECK-SVR4-LABEL: define{{.*}} i32 @ret4()
|
|
Four ret4(void) { return (Four){0.4}; }
|
|
|
|
// CHECK-AIX-LABEL: define{{.*}} void @ret5(%struct.Five* noalias sret(%struct.Five) {{[^,]*}})
|
|
// CHECK-SVR4-LABEL: define{{.*}} i40 @ret5()
|
|
Five ret5(void) { return (Five){"abcde"}; }
|
|
|
|
// CHECK-AIX-LABEL: define{{.*}} void @ret6(%struct.Six* noalias sret(%struct.Six) {{[^,]*}})
|
|
// CHECK-SVR4-LABEL: define{{.*}} i48 @ret6()
|
|
Six ret6(void) { return (Six){12, 34, 56}; }
|
|
|
|
// CHECK-AIX-LABEL: define{{.*}} void @ret7(%struct.Seven* noalias sret(%struct.Seven) {{[^,]*}})
|
|
// CHECK-SVR4-LABEL: define{{.*}} i56 @ret7()
|
|
Seven ret7(void) { return (Seven){"abcdefg"}; }
|
|
|
|
// CHECK-AIX-LABEL: define{{.*}} void @ret8(%struct.Eight* noalias sret(%struct.Eight) {{[^,]*}})
|
|
// CHECK-SVR4-LABEL: define{{.*}} i64 @ret8()
|
|
Eight ret8(void) { return (Eight){123, 'a'}; }
|
|
|
|
// CHECK-AIX-LABEL: define{{.*}} void @ret9(%struct.Nine* noalias sret(%struct.Nine) {{[^,]*}})
|
|
// CHECK-SVR4-LABEL: define{{.*}} void @ret9(%struct.Nine* noalias sret(%struct.Nine) {{[^,]*}})
|
|
Nine ret9(void) { return (Nine){"abcdefghi"}; }
|