diff --git a/clang/lib/Basic/Targets/PPC.cpp b/clang/lib/Basic/Targets/PPC.cpp --- a/clang/lib/Basic/Targets/PPC.cpp +++ b/clang/lib/Basic/Targets/PPC.cpp @@ -235,6 +235,7 @@ Builder.defineMacro("__frsqrtes", "__builtin_ppc_frsqrtes"); Builder.defineMacro("__fsqrt", "__builtin_ppc_fsqrt"); Builder.defineMacro("__fsqrts", "__builtin_ppc_fsqrts"); + Builder.defineMacro("__cmplxl", "__builtin_complex"); } /// PPCTargetInfo::getTargetDefines - Return a set of the PowerPC-specific diff --git a/clang/test/CodeGen/builtins-ppc-xlcompat-complex.c b/clang/test/CodeGen/builtins-ppc-xlcompat-complex.c new file mode 100644 --- /dev/null +++ b/clang/test/CodeGen/builtins-ppc-xlcompat-complex.c @@ -0,0 +1,30 @@ +// REQUIRES: powerpc-registered-target +// RUN: %clang_cc1 -O2 -triple powerpc64-unknown-unknown \ +// RUN: -emit-llvm %s -o - -target-cpu pwr7 | FileCheck %s +// RUN: %clang_cc1 -O2 -triple powerpc64le-unknown-unknown \ +// RUN: -emit-llvm %s -o - -target-cpu pwr8 | FileCheck %s +// RUN: %clang_cc1 -O2 -triple powerpc-unknown-aix \ +// RUN: -emit-llvm %s -o - -target-cpu pwr7 | \ +// RUN: FileCheck %s --check-prefix=CHECK-AIX +// RUN: %clang_cc1 -O2 -triple powerpc64-unknown-aix \ +// RUN: -emit-llvm %s -o - -target-cpu pwr7 | FileCheck %s \ +// RUN: --check-prefix=CHECK-AIX + +extern long double lda, ldb; + +long double _Complex test_xl_cmplxl() { + // CHECK-LABEL: test_xl_cmplxl + // CHECK: %0 = load ppc_fp128, ppc_fp128* @lda + // CHECK-NEXT: %1 = load ppc_fp128, ppc_fp128* @ldb + // CHECK-NEXT: [[VAR1:%.*]] = insertvalue { ppc_fp128, ppc_fp128 } undef, ppc_fp128 %0, 0 + // CHECK-NEXT: [[VAR2:%.*]] = insertvalue { ppc_fp128, ppc_fp128 } [[VAR1]], ppc_fp128 %1, 1 + // CHECK-NEXT: ret { ppc_fp128, ppc_fp128 } [[VAR2]] + + // CHECK-AIX-LABEL: test_xl_cmplxl + // CHECK-AIX: %0 = load double, double* @lda + // CHECK-AIX-NEXT: %1 = load double, double* @ldb + // CHECK-AIX-NEXT: [[VAR3:%.*]] = insertvalue { double, double } undef, double %0, 0 + // CHECK-AIX-NEXT: [[VAR4:%.*]] = insertvalue { double, double } [[VAR3]], double %1, 1 + // CHECK-AIX-NEXT: ret { double, double } [[VAR4]] + return __cmplxl(lda, ldb); +}