[libc-commits] [libc] 543932f - [libc] Make LIBC_MATH_NO_ERRNO imply `-fno-math-errno` (#125794)
via libc-commits
libc-commits at lists.llvm.org
Thu Oct 16 10:00:49 PDT 2025
Author: Petr Hosek
Date: 2025-10-16T10:00:45-07:00
New Revision: 543932f034a15a8a1f6fda545432f87d26949667
URL: https://github.com/llvm/llvm-project/commit/543932f034a15a8a1f6fda545432f87d26949667
DIFF: https://github.com/llvm/llvm-project/commit/543932f034a15a8a1f6fda545432f87d26949667.diff
LOG: [libc] Make LIBC_MATH_NO_ERRNO imply `-fno-math-errno` (#125794)
This partially reverts #124200. Rather than using a CMake option to
control whether to enable `-fno-math-errno`, use LIBC_MATH_NO_ERRNO
configuration option. While there might be other cases when we want to
set `-fno-math-errno`, having LIBC_MATH_NO_ERRNO imply it should be
always safe and represents a reasonable starting point.
Added:
Modified:
libc/cmake/modules/LLVMLibCCompileOptionRules.cmake
libc/cmake/modules/LLVMLibCTestRules.cmake
libc/config/baremetal/config.json
Removed:
################################################################################
diff --git a/libc/cmake/modules/LLVMLibCCompileOptionRules.cmake b/libc/cmake/modules/LLVMLibCCompileOptionRules.cmake
index 2eb0f066e19e0..4c36ed8620f40 100644
--- a/libc/cmake/modules/LLVMLibCCompileOptionRules.cmake
+++ b/libc/cmake/modules/LLVMLibCCompileOptionRules.cmake
@@ -26,13 +26,6 @@ function(_get_compile_options_from_flags output_var)
list(APPEND compile_options "-mavx2")
list(APPEND compile_options "-mfma")
endif()
- # For clang, we will build the math functions with `-fno-math-errno` so that
- # __builtin_fma* will generate the fused-mutliply-add instructions. We
- # don't put the control flag to the public config yet, and see if it makes
- # sense to just enable this flag by default.
- if(LIBC_ADD_FNO_MATH_ERRNO)
- list(APPEND compile_options "-fno-math-errno")
- endif()
endif()
if(ADD_ROUND_OPT_FLAG)
if(LIBC_TARGET_ARCHITECTURE_IS_X86_64)
@@ -102,6 +95,9 @@ function(_get_compile_options_from_config output_var)
if(LIBC_CONF_MATH_OPTIMIZATIONS)
list(APPEND config_options "-DLIBC_MATH=${LIBC_CONF_MATH_OPTIMIZATIONS}")
+ if(LIBC_CONF_MATH_OPTIMIZATIONS MATCHES "LIBC_MATH_NO_ERRNO")
+ list(APPEND config_options "-fno-math-errno")
+ endif()
endif()
if(LIBC_CONF_ERRNO_MODE)
diff --git a/libc/cmake/modules/LLVMLibCTestRules.cmake b/libc/cmake/modules/LLVMLibCTestRules.cmake
index 19da0ad29cd84..933b81b9f1d46 100644
--- a/libc/cmake/modules/LLVMLibCTestRules.cmake
+++ b/libc/cmake/modules/LLVMLibCTestRules.cmake
@@ -3,11 +3,6 @@ function(_get_common_test_compile_options output_var c_test flags)
_get_compile_options_from_config(config_flags)
_get_compile_options_from_arch(arch_flags)
- # Remove -fno-math-errno if it was added.
- if(LIBC_ADD_FNO_MATH_ERRNO)
- list(REMOVE_ITEM compile_flags "-fno-math-errno")
- endif()
-
# Death test executor is only available in Linux for now.
if(NOT ${LIBC_TARGET_OS} STREQUAL "linux")
list(REMOVE_ITEM config_flags "-DLIBC_ADD_NULL_CHECKS")
diff --git a/libc/config/baremetal/config.json b/libc/config/baremetal/config.json
index 796b1d8ed1398..d76ffca6056fd 100644
--- a/libc/config/baremetal/config.json
+++ b/libc/config/baremetal/config.json
@@ -36,7 +36,7 @@
},
"math": {
"LIBC_CONF_MATH_OPTIMIZATIONS": {
- "value": "(LIBC_MATH_SKIP_ACCURATE_PASS | LIBC_MATH_SMALL_TABLES)"
+ "value": "(LIBC_MATH_SKIP_ACCURATE_PASS | LIBC_MATH_SMALL_TABLES | LIBC_MATH_NO_ERRNO)"
}
},
"general": {
More information about the libc-commits
mailing list