[libc-commits] [libc] [llvm] [libc] Fix math smoke powf_test's tolerance settings (PR #229390)
via libc-commits
libc-commits at lists.llvm.org
Tue Oct 6 05:09:38 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-libc
Author: Victor Campos (vhscampos)
<details>
<summary>Changes</summary>
The `LIST_POWF_TESTS` macro takes a `tolerance` integer argument. According to the `powf` implementation, single-precision FP evaluation ought to have a tolerance of 1, where it ought to be 0 with double-precision.
If no particular evaluation precision is requested, then libc chooses one depending on the `LIBC_MATH` fields. This is called the Default path by the test. However, the test assumes that the Default is always double-precision evaluation.
This is not the case in baremetal targets.
`libc/config/baremetal/config.json` sets `LIBC_MATH` fields so that `powf` ends up going with single-precision eval. Therefore the tolerance for the Default case has to peek at which implementation was chosen.
Assisted-by: Codex.
---
Full diff: https://github.com/llvm/llvm-project/pull/229390.diff
3 Files Affected:
- (modified) libc/test/src/math/smoke/CMakeLists.txt (+1)
- (modified) libc/test/src/math/smoke/powf_test.cpp (+6-1)
- (modified) utils/bazel/llvm-project-overlay/libc/test/src/math/smoke/BUILD.bazel (+1)
``````````diff
diff --git a/libc/test/src/math/smoke/CMakeLists.txt b/libc/test/src/math/smoke/CMakeLists.txt
index 6037e373fad14..758129434de7a 100644
--- a/libc/test/src/math/smoke/CMakeLists.txt
+++ b/libc/test/src/math/smoke/CMakeLists.txt
@@ -5363,6 +5363,7 @@ add_fp_unittest(
powf_test.cpp
DEPENDS
libc.src.math.powf
+ libc.src.__support.math.powf
libc.src.__support.math.powf_double_eval
libc.src.__support.math.powf_float_eval
libc.src.__support.FPUtil.fp_bits
diff --git a/libc/test/src/math/smoke/powf_test.cpp b/libc/test/src/math/smoke/powf_test.cpp
index c20c02ddd8957..bd852926cd647 100644
--- a/libc/test/src/math/smoke/powf_test.cpp
+++ b/libc/test/src/math/smoke/powf_test.cpp
@@ -15,6 +15,7 @@
#include "hdr/math_macros.h"
#include "hdr/stdint_proxy.h"
#include "src/__support/FPUtil/FPBits.h"
+#include "src/__support/math/powf.h"
#include "src/__support/math/powf_double_eval.h"
#include "src/__support/math/powf_float_eval.h"
#include "src/math/powf.h"
@@ -294,7 +295,11 @@ class PowfTest : public LIBC_NAMESPACE::testing::FPTest<float> {
LIST_POWF_FTZ_DAZ_TESTS(suffix, func) \
static_assert(true, "Require semicolon.")
-LIST_POWF_TESTS(Default, LIBC_NAMESPACE::powf, /*tolerance=*/0);
+LIST_POWF_TESTS(Default, LIBC_NAMESPACE::powf,
+ /*tolerance=*/LIBC_NAMESPACE::math::powf ==
+ LIBC_NAMESPACE::math::float_eval::powf
+ ? 1
+ : 0);
LIST_POWF_TESTS(DoubleEval, LIBC_NAMESPACE::math::double_eval::powf,
/*tolerance=*/0);
LIST_POWF_TESTS(FloatEval, LIBC_NAMESPACE::math::float_eval::powf,
diff --git a/utils/bazel/llvm-project-overlay/libc/test/src/math/smoke/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/test/src/math/smoke/BUILD.bazel
index d7492346e08cf..06e43a622edef 100644
--- a/utils/bazel/llvm-project-overlay/libc/test/src/math/smoke/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/libc/test/src/math/smoke/BUILD.bazel
@@ -1813,6 +1813,7 @@ math_test(name = "pow")
math_test(
name = "powf",
deps = [
+ "//libc:__support_math_powf",
"//libc:__support_math_powf_double_eval",
"//libc:__support_math_powf_float_eval",
],
``````````
</details>
https://github.com/llvm/llvm-project/pull/229390
More information about the libc-commits
mailing list