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 @@ -122,6 +122,10 @@ if (LongDoubleWidth == 128) { Builder.defineMacro("__LONG_DOUBLE_128__"); Builder.defineMacro("__LONGDOUBLE128"); + if (Opts.PPCIEEELongDouble) + Builder.defineMacro("__LONG_DOUBLE_IEEE128__"); + else + Builder.defineMacro("__LONG_DOUBLE_IBM128__"); } // Define this for elfv2 (64-bit only) or 64-bit darwin. diff --git a/clang/test/CodeGen/ppc64-long-double.cpp b/clang/test/CodeGen/ppc64-long-double.cpp --- a/clang/test/CodeGen/ppc64-long-double.cpp +++ b/clang/test/CodeGen/ppc64-long-double.cpp @@ -16,6 +16,20 @@ // RUN: %clang_cc1 -triple powerpc64-linux-musl -emit-llvm -o - -mlong-double-128 %s | \ // RUN: FileCheck --check-prefix=IBM128 %s +// Check IBM-quad and IEEE-quad macros are defined. +// RUN: %clang -E -dM -ffreestanding -target powerpc64le-linux-gnu %s \ +// RUN: -mabi=ibmlongdouble | FileCheck -check-prefix=CHECK-DEF-IBM128 %s +// RUN: %clang -E -dM -ffreestanding -target powerpc64le-linux-gnu %s \ +// RUN: -mabi=ieeelongdouble | FileCheck -check-prefix=CHECK-DEF-IEEE128 %s +// RUN: %clang -E -dM -ffreestanding -target powerpc64le-linux-gnu %s \ +// RUN: -mlong-double-64 | FileCheck -check-prefix=CHECK-DEF-F64 %s + +// CHECK-DEF-IBM128: #define __LONG_DOUBLE_128__ +// CHECK-DEF-IBM128: #define __LONG_DOUBLE_IBM128__ +// CHECK-DEF-IEEE128: #define __LONG_DOUBLE_128__ +// CHECK-DEF-IEEE128: #define __LONG_DOUBLE_IEEE128__ +// CHECK-DEF-F64-NOT: #define __LONG_DOUBLE_128__ + long double x = 0; int size = sizeof(x);