qiucf created this revision. qiucf added reviewers: jsji, nemanjai, shchenz, PowerPC. Herald added subscribers: steven.zhang, kbarton, mgorny. qiucf requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
This method introduces new CMake variable `ENABLE_PPC_IEEELONGDOUBLE` (false by default) to enable `fp128` as default long double format. We need to make some tests explicitly set long double type, otherwise they fail in either config. There's one thing uncertain: whether this config only applies to `ppc64le`? Currently `-mabi=ieeelongdouble` also works on ppc64 linux, GCC also does under big endian, however we may be not interested in doing the transition other than ppc64le (https://gcc.gnu.org/wiki/Ieee128PowerPC#A7.0_Transition_to_IEEE_128-bit_floating_point_as_the_default_for_long_double ). Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D118110 Files: clang/CMakeLists.txt clang/include/clang/Config/config.h.cmake clang/include/clang/Driver/ToolChain.h clang/lib/Driver/ToolChain.cpp clang/lib/Driver/ToolChains/Clang.cpp clang/test/Analysis/builtin_signbit.cpp clang/test/Driver/ppc-abi.c
Index: clang/test/Driver/ppc-abi.c =================================================================== --- clang/test/Driver/ppc-abi.c +++ clang/test/Driver/ppc-abi.c @@ -63,9 +63,6 @@ // CHECK-ELFv1-IEEE: "-mabi=ieeelongdouble" // CHECK-ELFv1-IEEE: "-target-abi" "elfv1" -// Check -mabi=ibmlongdouble is the default. -// RUN: %clang -target powerpc64le-linux-gnu %s -### 2>&1 \ -// RUN: | FileCheck -check-prefix=CHECK-ELFv2-IBM128 %s // RUN: %clang -target powerpc64le-linux-gnu %s -mabi=ibmlongdouble -### 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK-ELFv2-IBM128 %s Index: clang/test/Analysis/builtin_signbit.cpp =================================================================== --- clang/test/Analysis/builtin_signbit.cpp +++ clang/test/Analysis/builtin_signbit.cpp @@ -1,6 +1,9 @@ -// RUN: %clang -target powerpc-linux-gnu -emit-llvm -S -O0 %s -o - | FileCheck %s --check-prefix=CHECK-BE --check-prefix=CHECK -// RUN: %clang -target powerpc64-linux-gnu -emit-llvm -S -O0 %s -o - | FileCheck %s --check-prefix=CHECK-BE --check-prefix=CHECK -// RUN: %clang -target powerpc64le-linux-gnu -emit-llvm -S -O0 %s -o - | FileCheck %s --check-prefix=CHECK-LE --check-prefix=CHECK +// RUN: %clang -target powerpc-linux-gnu -emit-llvm -S -mabi=ibmlongdouble \ +// RUN: -O0 %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-BE +// RUN: %clang -target powerpc64-linux-gnu -emit-llvm -S -mabi=ibmlongdouble \ +// RUN: -O0 %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-BE +// RUN: %clang -target powerpc64le-linux-gnu -emit-llvm -S -mabi=ibmlongdouble \ +// RUN: -O0 %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-LE bool b; double d = -1.0; Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -2061,7 +2061,7 @@ } } - bool IEEELongDouble = false; + bool IEEELongDouble = getToolChain().useIEEELongDouble(); for (const Arg *A : Args.filtered(options::OPT_mabi_EQ)) { StringRef V = A->getValue(); if (V == "ieeelongdouble") Index: clang/lib/Driver/ToolChain.cpp =================================================================== --- clang/lib/Driver/ToolChain.cpp +++ clang/lib/Driver/ToolChain.cpp @@ -109,6 +109,10 @@ return ENABLE_X86_RELAX_RELOCATIONS; } +bool ToolChain::useIEEELongDouble() const { + return ENABLE_PPC_IEEELONGDOUBLE; +} + SanitizerArgs ToolChain::getSanitizerArgs(const llvm::opt::ArgList &JobArgs) const { SanitizerArgs SanArgs(*this, JobArgs, !SanitizerArgsChecked); Index: clang/include/clang/Driver/ToolChain.h =================================================================== --- clang/include/clang/Driver/ToolChain.h +++ clang/include/clang/Driver/ToolChain.h @@ -409,6 +409,9 @@ /// Check whether to enable x86 relax relocations by default. virtual bool useRelaxRelocations() const; + /// Check whether use IEEE binary128 as long double format by default. + bool useIEEELongDouble() const; + /// GetDefaultStackProtectorLevel - Get the default stack protector level for /// this tool chain. virtual LangOptions::StackProtectorMode Index: clang/include/clang/Config/config.h.cmake =================================================================== --- clang/include/clang/Config/config.h.cmake +++ clang/include/clang/Config/config.h.cmake @@ -78,6 +78,9 @@ /* enable x86 relax relocations by default */ #cmakedefine01 ENABLE_X86_RELAX_RELOCATIONS +/* Enable IEEE binary128 as default long double format on PowerPC. */ +#cmakedefine01 ENABLE_PPC_IEEELONGDOUBLE + /* Enable each functionality of modules */ #cmakedefine01 CLANG_ENABLE_ARCMT #cmakedefine01 CLANG_ENABLE_OBJC_REWRITER Index: clang/CMakeLists.txt =================================================================== --- clang/CMakeLists.txt +++ clang/CMakeLists.txt @@ -237,6 +237,9 @@ set(ENABLE_X86_RELAX_RELOCATIONS ON CACHE BOOL "enable x86 relax relocations by default") +set(ENABLE_PPC_IEEELONGDOUBLE OFF CACHE BOOL + "Enable IEEE binary128 as default long double format on PowerPC.") + set(CLANG_SPAWN_CC1 OFF CACHE BOOL "Whether clang should use a new process for the CC1 invocation")
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits