[PATCH] D107589: [CMake] Support setting default fused FP contract via CMake

Petr Hosek via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Aug 5 11:51:00 PDT 2021


phosek created this revision.
phosek added reviewers: mibintc, andrew.w.kaylor, rjmccall, zahiraam, hans, haowei.
Herald added a subscriber: mgorny.
phosek requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

D74436 <https://reviews.llvm.org/D74436> changed the default fused FP contract which broke several
projects and it may take a while to address those issues. This
change allows setting the default fused FP contract via CMake, so
vendors can change their defaults rather than having to include the
-ffp-contract=off flag in every project to revert to the previous
behavior while the issues that were uncovered by D74436 <https://reviews.llvm.org/D74436> are being
addressed.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D107589

Files:
  clang/CMakeLists.txt
  clang/cmake/caches/Fuchsia-stage2.cmake
  clang/cmake/caches/Fuchsia.cmake
  clang/include/clang/Config/config.h.cmake
  clang/lib/Driver/ToolChains/Clang.cpp


Index: clang/lib/Driver/ToolChains/Clang.cpp
===================================================================
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -27,6 +27,7 @@
 #include "clang/Basic/LangOptions.h"
 #include "clang/Basic/ObjCRuntime.h"
 #include "clang/Basic/Version.h"
+#include "clang/Config/config.h"
 #include "clang/Driver/Distro.h"
 #include "clang/Driver/DriverDiagnostic.h"
 #include "clang/Driver/InputInfo.h"
@@ -2641,7 +2642,7 @@
 
   llvm::DenormalMode DenormalFPMath = DefaultDenormalFPMath;
   llvm::DenormalMode DenormalFP32Math = DefaultDenormalFP32Math;
-  StringRef FPContract = "on";
+  StringRef FPContract = CLANG_DEFAULT_FFP_CONTRACT;
   bool StrictFPModel = false;
 
 
Index: clang/include/clang/Config/config.h.cmake
===================================================================
--- clang/include/clang/Config/config.h.cmake
+++ clang/include/clang/Config/config.h.cmake
@@ -32,6 +32,9 @@
 /* Default OpenMP runtime used by -fopenmp. */
 #define CLANG_DEFAULT_OPENMP_RUNTIME "${CLANG_DEFAULT_OPENMP_RUNTIME}"
 
+/* Default fused FP contract */
+#define CLANG_DEFAULT_FFP_CONTRACT "${CLANG_DEFAULT_FFP_CONTRACT}"
+
 /* Default architecture for OpenMP offloading to Nvidia GPUs. */
 #define CLANG_OPENMP_NVPTX_DEFAULT_ARCH "${CLANG_OPENMP_NVPTX_DEFAULT_ARCH}"
 
Index: clang/cmake/caches/Fuchsia.cmake
===================================================================
--- clang/cmake/caches/Fuchsia.cmake
+++ clang/cmake/caches/Fuchsia.cmake
@@ -28,6 +28,7 @@
   set(CLANG_DEFAULT_OBJCOPY llvm-objcopy CACHE STRING "")
 endif()
 set(CLANG_DEFAULT_RTLIB compiler-rt CACHE STRING "")
+set(CLANG_DEFAULT_FFP_CONTRACT off CACHE STRING "")
 set(CLANG_ENABLE_ARCMT OFF CACHE BOOL "")
 set(CLANG_ENABLE_STATIC_ANALYZER ON CACHE BOOL "")
 set(CLANG_PLUGIN_SUPPORT OFF CACHE BOOL "")
Index: clang/cmake/caches/Fuchsia-stage2.cmake
===================================================================
--- clang/cmake/caches/Fuchsia-stage2.cmake
+++ clang/cmake/caches/Fuchsia-stage2.cmake
@@ -37,6 +37,7 @@
   set(CLANG_DEFAULT_OBJCOPY llvm-objcopy CACHE STRING "")
 endif()
 set(CLANG_DEFAULT_RTLIB compiler-rt CACHE STRING "")
+set(CLANG_DEFAULT_FFP_CONTRACT off CACHE STRING "")
 set(CLANG_ENABLE_ARCMT OFF CACHE BOOL "")
 set(CLANG_ENABLE_STATIC_ANALYZER ON CACHE BOOL "")
 set(CLANG_PLUGIN_SUPPORT OFF CACHE BOOL "")
Index: clang/CMakeLists.txt
===================================================================
--- clang/CMakeLists.txt
+++ clang/CMakeLists.txt
@@ -335,6 +335,17 @@
                       "LLVM_LINK_LLVM_DYLIB=OFF")
 endif()
 
+set(CLANG_DEFAULT_FFP_CONTRACT "on" CACHE STRING
+  "Default fused FP contract (\"fast\", \"on\", \"off\", \"fast-honor-pragmas\")")
+if (NOT(CLANG_DEFAULT_FFP_CONTRACT STREQUAL "fast" OR
+        CLANG_DEFAULT_FFP_CONTRACT STREQUAL "on" OR
+        CLANG_DEFAULT_FFP_CONTRACT STREQUAL "off" OR
+        CLANG_DEFAULT_FFP_CONTRACT STREQUAL "fast-honor-pragmas"))
+  message(WARNING "Resetting default fused FP contract")
+  set(CLANG_DEFAULT_RTLIB "on" CACHE STRING
+    "Default fused FP contract (\"fast\", \"on\", \"off\", \"fast-honor-pragmas\", empty for platform default)" FORCE)
+endif()
+
 # The libdir suffix must exactly match whatever LLVM's configuration used.
 set(CLANG_LIBDIR_SUFFIX "${LLVM_LIBDIR_SUFFIX}")
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D107589.364566.patch
Type: text/x-patch
Size: 3351 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210805/1bbb217b/attachment.bin>


More information about the cfe-commits mailing list