Skip to content

Conversation

@petrhosek
Copy link
Member

This can improve performance on 32-bit baremetal targets.

This can improve performance on 32-bit baremetal targets.
@petrhosek petrhosek requested a review from Prabhuk October 15, 2025 19:58
@petrhosek petrhosek added the libc label Oct 15, 2025
@llvmbot
Copy link
Member

llvmbot commented Oct 15, 2025

@llvm/pr-subscribers-libc

Author: Petr Hosek (petrhosek)

Changes

This can improve performance on 32-bit baremetal targets.


Full diff: https://github.com/llvm/llvm-project/pull/163622.diff

1 Files Affected:

  • (modified) libc/config/baremetal/config.json (+1-1)
diff --git a/libc/config/baremetal/config.json b/libc/config/baremetal/config.json
index 796b1d8ed1398..ffb4fe6487fdc 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_INTERMEDIATE_COMP_IN_FLOAT)"
     }
   },
   "general": {

Copy link
Contributor

@Prabhuk Prabhuk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@petrhosek petrhosek merged commit 49f03ee into llvm:main Oct 15, 2025
22 checks passed
@llvm-ci
Copy link
Collaborator

llvm-ci commented Oct 15, 2025

LLVM Buildbot has detected a new failure on builder fuchsia-x86_64-linux running on fuchsia-debian-64-us-central1-b-1 while building libc at step 4 "annotate".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/11/builds/26090

Here is the relevant piece of the build log for the reference
Step 4 (annotate) failure: 'python ../llvm-zorg/zorg/buildbot/builders/annotated/fuchsia-linux.py ...' (failure)
...
[859/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.nextdownbf16.dir/nextdownbf16.cpp.obj
[860/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.ufromfpxl.dir/ufromfpxl.cpp.obj
[861/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.tanhf.dir/tanhf.cpp.obj
[862/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.atanhf.dir/atanhf.cpp.obj
[863/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.nextupbf16.dir/nextupbf16.cpp.obj
[864/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.fdimbf16.dir/fdimbf16.cpp.obj
[865/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.ffma.dir/ffma.cpp.obj
[866/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.ffmal.dir/ffmal.cpp.obj
[867/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.fmodbf16.dir/fmodbf16.cpp.obj
[868/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.atan2f.dir/atan2f.cpp.obj
FAILED: libc/src/math/generic/CMakeFiles/libc.src.math.generic.atan2f.dir/atan2f.cpp.obj 
/var/lib/buildbot/fuchsia-x86_64-linux/build/llvm-build-52kagzfa/./bin/clang++ --target=armv6m-none-eabi -DLIBC_NAMESPACE=__llvm_libc_22_0_0_git -I/var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/libc -isystem /var/lib/buildbot/fuchsia-x86_64-linux/build/llvm-build-52kagzfa/include/armv6m-unknown-none-eabi --target=armv6m-none-eabi -Wno-atomic-alignment "-Dvfprintf(stream, format, vlist)=vprintf(format, vlist)" "-Dfprintf(stream, format, ...)=printf(format)" "-Dfputs(string, stream)=puts(string)" -D_LIBCPP_PRINT=1 -mthumb -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wno-pass-failed -Wmisleading-indentation -Wctad-maybe-unsupported -ffunction-sections -fdata-sections -ffile-prefix-map=/var/lib/buildbot/fuchsia-x86_64-linux/build/llvm-build-52kagzfa/runtimes/runtimes-armv6m-none-eabi-bins=../../../../llvm-project -ffile-prefix-map=/var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/= -no-canonical-prefixes -Os -DNDEBUG --target=armv6m-none-eabi -DLIBC_QSORT_IMPL=LIBC_QSORT_HEAP_SORT -DLIBC_TYPES_TIME_T_IS_32_BIT "-DLIBC_MATH=(LIBC_MATH_SKIP_ACCURATE_PASS | LIBC_MATH_SMALL_TABLES | LIBC_MATH_INTERMEDIATE_COMP_IN_FLOAT)" -DLIBC_ERRNO_MODE=LIBC_ERRNO_MODE_EXTERNAL -DLIBC_THREAD_MODE=LIBC_THREAD_MODE_SINGLE -DLIBC_TARGET_OS_IS_BAREMETAL -fpie -ffreestanding -DLIBC_FULL_BUILD -nostdlibinc -ffixed-point -fno-builtin -fno-exceptions -fno-lax-vector-conversions -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-rtti -ftrivial-auto-var-init=pattern -fno-omit-frame-pointer -Wall -Wextra -Werror -Wconversion -Wno-sign-conversion -Wdeprecated -Wno-c99-extensions -Wno-gnu-imaginary-constant -Wno-pedantic -Wimplicit-fallthrough -Wwrite-strings -Wextra-semi -Wnewline-eof -Wnonportable-system-include-path -Wstrict-prototypes -Wthread-safety -Wglobal-constructors -DLIBC_COPT_PUBLIC_PACKAGING -MD -MT libc/src/math/generic/CMakeFiles/libc.src.math.generic.atan2f.dir/atan2f.cpp.obj -MF libc/src/math/generic/CMakeFiles/libc.src.math.generic.atan2f.dir/atan2f.cpp.obj.d -o libc/src/math/generic/CMakeFiles/libc.src.math.generic.atan2f.dir/atan2f.cpp.obj -c /var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/libc/src/math/generic/atan2f.cpp
In file included from /var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/libc/src/math/generic/atan2f.cpp:10:
In file included from /var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/libc/src/__support/math/atan2f.h:16:
/var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/libc/src/__support/FPUtil/double_double.h:83:13: error: implicit conversion loses floating-point precision: 'double' to 'float' [-Werror,-Wimplicit-float-conversion]
   83 |   r.hi = t1 + t2;
      |        ~ ~~~^~~~
/var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/libc/src/__support/FPUtil/double_double.h:139:24: note: in instantiation of function template specialization '__llvm_libc_22_0_0_git::fputil::split<float, 12U>' requested here
  139 |     NumberPair<T> as = split(a);
      |                        ^
/var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/libc/src/__support/math/atan2f_float.h:223:30: note: in instantiation of function template specialization '__llvm_libc_22_0_0_git::fputil::exact_mult<float, 12U>' requested here
  223 |   FloatFloat num_k = fputil::exact_mult(num, k);
      |                              ^
1 error generated.
[869/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.atanf.dir/atanf.cpp.obj
[870/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.totalordermag.dir/totalordermag.cpp.obj
[871/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.totalorder.dir/totalorder.cpp.obj
[872/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.totalorderf.dir/totalorderf.cpp.obj
[873/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.totalorderl.dir/totalorderl.cpp.obj
[874/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.totalordermagf.dir/totalordermagf.cpp.obj
[875/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.fmaf.dir/fmaf.cpp.obj
[876/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.totalordermagl.dir/totalordermagl.cpp.obj
[877/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.scalblnf.dir/scalblnf.cpp.obj
[878/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.remquobf16.dir/remquobf16.cpp.obj
[879/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.remainderbf16.dir/remainderbf16.cpp.obj
[880/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.acoshf.dir/acoshf.cpp.obj
[881/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.getpayload.dir/getpayload.cpp.obj
[882/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.scalbln.dir/scalbln.cpp.obj
[883/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.getpayloadl.dir/getpayloadl.cpp.obj
[884/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.getpayloadf.dir/getpayloadf.cpp.obj
[885/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.asinhf.dir/asinhf.cpp.obj
[886/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.scalbn.dir/scalbn.cpp.obj
[887/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.setpayloadf.dir/setpayloadf.cpp.obj
[888/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.cbrtf.dir/cbrtf.cpp.obj
[889/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.scalbnl.dir/scalbnl.cpp.obj
[890/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.scalblnl.dir/scalblnl.cpp.obj
[891/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.setpayload.dir/setpayload.cpp.obj
[892/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.setpayloadl.dir/setpayloadl.cpp.obj
[893/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.scalbnf.dir/scalbnf.cpp.obj
Step 6 (build) failure: build (failure)
...
[859/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.nextdownbf16.dir/nextdownbf16.cpp.obj
[860/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.ufromfpxl.dir/ufromfpxl.cpp.obj
[861/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.tanhf.dir/tanhf.cpp.obj
[862/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.atanhf.dir/atanhf.cpp.obj
[863/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.nextupbf16.dir/nextupbf16.cpp.obj
[864/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.fdimbf16.dir/fdimbf16.cpp.obj
[865/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.ffma.dir/ffma.cpp.obj
[866/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.ffmal.dir/ffmal.cpp.obj
[867/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.fmodbf16.dir/fmodbf16.cpp.obj
[868/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.atan2f.dir/atan2f.cpp.obj
FAILED: libc/src/math/generic/CMakeFiles/libc.src.math.generic.atan2f.dir/atan2f.cpp.obj 
/var/lib/buildbot/fuchsia-x86_64-linux/build/llvm-build-52kagzfa/./bin/clang++ --target=armv6m-none-eabi -DLIBC_NAMESPACE=__llvm_libc_22_0_0_git -I/var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/libc -isystem /var/lib/buildbot/fuchsia-x86_64-linux/build/llvm-build-52kagzfa/include/armv6m-unknown-none-eabi --target=armv6m-none-eabi -Wno-atomic-alignment "-Dvfprintf(stream, format, vlist)=vprintf(format, vlist)" "-Dfprintf(stream, format, ...)=printf(format)" "-Dfputs(string, stream)=puts(string)" -D_LIBCPP_PRINT=1 -mthumb -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wno-pass-failed -Wmisleading-indentation -Wctad-maybe-unsupported -ffunction-sections -fdata-sections -ffile-prefix-map=/var/lib/buildbot/fuchsia-x86_64-linux/build/llvm-build-52kagzfa/runtimes/runtimes-armv6m-none-eabi-bins=../../../../llvm-project -ffile-prefix-map=/var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/= -no-canonical-prefixes -Os -DNDEBUG --target=armv6m-none-eabi -DLIBC_QSORT_IMPL=LIBC_QSORT_HEAP_SORT -DLIBC_TYPES_TIME_T_IS_32_BIT "-DLIBC_MATH=(LIBC_MATH_SKIP_ACCURATE_PASS | LIBC_MATH_SMALL_TABLES | LIBC_MATH_INTERMEDIATE_COMP_IN_FLOAT)" -DLIBC_ERRNO_MODE=LIBC_ERRNO_MODE_EXTERNAL -DLIBC_THREAD_MODE=LIBC_THREAD_MODE_SINGLE -DLIBC_TARGET_OS_IS_BAREMETAL -fpie -ffreestanding -DLIBC_FULL_BUILD -nostdlibinc -ffixed-point -fno-builtin -fno-exceptions -fno-lax-vector-conversions -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-rtti -ftrivial-auto-var-init=pattern -fno-omit-frame-pointer -Wall -Wextra -Werror -Wconversion -Wno-sign-conversion -Wdeprecated -Wno-c99-extensions -Wno-gnu-imaginary-constant -Wno-pedantic -Wimplicit-fallthrough -Wwrite-strings -Wextra-semi -Wnewline-eof -Wnonportable-system-include-path -Wstrict-prototypes -Wthread-safety -Wglobal-constructors -DLIBC_COPT_PUBLIC_PACKAGING -MD -MT libc/src/math/generic/CMakeFiles/libc.src.math.generic.atan2f.dir/atan2f.cpp.obj -MF libc/src/math/generic/CMakeFiles/libc.src.math.generic.atan2f.dir/atan2f.cpp.obj.d -o libc/src/math/generic/CMakeFiles/libc.src.math.generic.atan2f.dir/atan2f.cpp.obj -c /var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/libc/src/math/generic/atan2f.cpp
In file included from /var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/libc/src/math/generic/atan2f.cpp:10:
In file included from /var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/libc/src/__support/math/atan2f.h:16:
/var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/libc/src/__support/FPUtil/double_double.h:83:13: error: implicit conversion loses floating-point precision: 'double' to 'float' [-Werror,-Wimplicit-float-conversion]
   83 |   r.hi = t1 + t2;
      |        ~ ~~~^~~~
/var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/libc/src/__support/FPUtil/double_double.h:139:24: note: in instantiation of function template specialization '__llvm_libc_22_0_0_git::fputil::split<float, 12U>' requested here
  139 |     NumberPair<T> as = split(a);
      |                        ^
/var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/libc/src/__support/math/atan2f_float.h:223:30: note: in instantiation of function template specialization '__llvm_libc_22_0_0_git::fputil::exact_mult<float, 12U>' requested here
  223 |   FloatFloat num_k = fputil::exact_mult(num, k);
      |                              ^
1 error generated.
[869/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.atanf.dir/atanf.cpp.obj
[870/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.totalordermag.dir/totalordermag.cpp.obj
[871/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.totalorder.dir/totalorder.cpp.obj
[872/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.totalorderf.dir/totalorderf.cpp.obj
[873/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.totalorderl.dir/totalorderl.cpp.obj
[874/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.totalordermagf.dir/totalordermagf.cpp.obj
[875/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.fmaf.dir/fmaf.cpp.obj
[876/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.totalordermagl.dir/totalordermagl.cpp.obj
[877/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.scalblnf.dir/scalblnf.cpp.obj
[878/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.remquobf16.dir/remquobf16.cpp.obj
[879/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.remainderbf16.dir/remainderbf16.cpp.obj
[880/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.acoshf.dir/acoshf.cpp.obj
[881/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.getpayload.dir/getpayload.cpp.obj
[882/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.scalbln.dir/scalbln.cpp.obj
[883/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.getpayloadl.dir/getpayloadl.cpp.obj
[884/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.getpayloadf.dir/getpayloadf.cpp.obj
[885/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.asinhf.dir/asinhf.cpp.obj
[886/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.scalbn.dir/scalbn.cpp.obj
[887/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.setpayloadf.dir/setpayloadf.cpp.obj
[888/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.cbrtf.dir/cbrtf.cpp.obj
[889/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.scalbnl.dir/scalbnl.cpp.obj
[890/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.scalblnl.dir/scalblnl.cpp.obj
[891/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.setpayload.dir/setpayload.cpp.obj
[892/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.setpayloadl.dir/setpayloadl.cpp.obj
[893/2598] Building CXX object libc/src/math/generic/CMakeFiles/libc.src.math.generic.scalbnf.dir/scalbnf.cpp.obj

petrhosek added a commit that referenced this pull request Oct 16, 2025
llvm-sync bot pushed a commit to arm/arm-toolchain that referenced this pull request Oct 16, 2025
@petrhosek petrhosek deleted the libc-baremetal-intermediate-math-in-float branch October 16, 2025 17:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants