llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-libc Author: Muhammad Bassiouni (bassiounix) <details> <summary>Changes</summary> Part of #<!-- -->147386 in preparation for: https://discourse.llvm.org/t/rfc-make-clang-builtin-math-functions-constexpr-with-llvm-libc-to-support-c-23-constexpr-math-functions/86450 --- Full diff: https://github.com/llvm/llvm-project/pull/163968.diff 9 Files Affected: - (modified) libc/shared/math.h (+1) - (added) libc/shared/math/fma.h (+23) - (modified) libc/src/__support/math/CMakeLists.txt (+8) - (added) libc/src/__support/math/fma.h (+27) - (modified) libc/src/math/generic/CMakeLists.txt (+1-1) - (modified) libc/src/math/generic/fma.cpp (+2-5) - (modified) libc/test/shared/CMakeLists.txt (+1) - (modified) libc/test/shared/shared_math_test.cpp (+1) - (modified) utils/bazel/llvm-project-overlay/libc/BUILD.bazel (+11-3) ``````````diff diff --git a/libc/shared/math.h b/libc/shared/math.h index 874c2c0779adb..79ba2ea5aa6ff 100644 --- a/libc/shared/math.h +++ b/libc/shared/math.h @@ -57,6 +57,7 @@ #include "math/expm1.h" #include "math/expm1f.h" #include "math/expm1f16.h" +#include "math/fma.h" #include "math/frexpf.h" #include "math/frexpf128.h" #include "math/frexpf16.h" diff --git a/libc/shared/math/fma.h b/libc/shared/math/fma.h new file mode 100644 index 0000000000000..82f1dac61dda2 --- /dev/null +++ b/libc/shared/math/fma.h @@ -0,0 +1,23 @@ +//===-- Shared fma function -------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_LIBC_SHARED_MATH_FMA_H +#define LLVM_LIBC_SHARED_MATH_FMA_H + +#include "shared/libc_common.h" +#include "src/__support/math/fma.h" + +namespace LIBC_NAMESPACE_DECL { +namespace shared { + +using math::fma; + +} // namespace shared +} // namespace LIBC_NAMESPACE_DECL + +#endif // LLVM_LIBC_SHARED_MATH_FMA_H diff --git a/libc/src/__support/math/CMakeLists.txt b/libc/src/__support/math/CMakeLists.txt index 0cae228d7f10f..1911481d0649e 100644 --- a/libc/src/__support/math/CMakeLists.txt +++ b/libc/src/__support/math/CMakeLists.txt @@ -593,6 +593,14 @@ add_header_library( libc.src.__support.math.exp10_float16_constants ) +add_header_library( + fma + HDRS + fma.h + DEPENDS + libc.src.__support.FPUtil.fma +) + add_header_library( frexpf128 HDRS diff --git a/libc/src/__support/math/fma.h b/libc/src/__support/math/fma.h new file mode 100644 index 0000000000000..d996610167a19 --- /dev/null +++ b/libc/src/__support/math/fma.h @@ -0,0 +1,27 @@ +//===-- Implementation header for fma ---------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_LIBC_SRC___SUPPORT_MATH_FMA_H +#define LLVM_LIBC_SRC___SUPPORT_MATH_FMA_H + +#include "src/__support/FPUtil/FMA.h" +#include "src/__support/macros/config.h" + +namespace LIBC_NAMESPACE_DECL { + +namespace math { + +LIBC_INLINE static double fma(double x, double y, double z) { + return fputil::fma<double>(x, y, z); +} + +} // namespace math + +} // namespace LIBC_NAMESPACE_DECL + +#endif // LLVM_LIBC_SRC___SUPPORT_MATH_FMA_H diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt index b13da9770dc69..7103c6947eba0 100644 --- a/libc/src/math/generic/CMakeLists.txt +++ b/libc/src/math/generic/CMakeLists.txt @@ -4722,7 +4722,7 @@ add_entrypoint_object( HDRS ../fma.h DEPENDS - libc.src.__support.FPUtil.fma + libc.src.__support.math.fma ) add_entrypoint_object( diff --git a/libc/src/math/generic/fma.cpp b/libc/src/math/generic/fma.cpp index 2ea4ae9961150..3ccdb78846e34 100644 --- a/libc/src/math/generic/fma.cpp +++ b/libc/src/math/generic/fma.cpp @@ -7,15 +7,12 @@ //===----------------------------------------------------------------------===// #include "src/math/fma.h" -#include "src/__support/common.h" - -#include "src/__support/FPUtil/FMA.h" -#include "src/__support/macros/config.h" +#include "src/__support/math/fma.h" namespace LIBC_NAMESPACE_DECL { LLVM_LIBC_FUNCTION(double, fma, (double x, double y, double z)) { - return fputil::fma<double>(x, y, z); + return math::fma(x, y, z); } } // namespace LIBC_NAMESPACE_DECL diff --git a/libc/test/shared/CMakeLists.txt b/libc/test/shared/CMakeLists.txt index bfcac7884e646..cd4b5ec75f876 100644 --- a/libc/test/shared/CMakeLists.txt +++ b/libc/test/shared/CMakeLists.txt @@ -53,6 +53,7 @@ add_fp_unittest( libc.src.__support.math.exp10f16 libc.src.__support.math.expf libc.src.__support.math.expf16 + libc.src.__support.math.fma libc.src.__support.math.frexpf libc.src.__support.math.frexpf128 libc.src.__support.math.frexpf16 diff --git a/libc/test/shared/shared_math_test.cpp b/libc/test/shared/shared_math_test.cpp index 3369cb5e2cf03..7357e24603004 100644 --- a/libc/test/shared/shared_math_test.cpp +++ b/libc/test/shared/shared_math_test.cpp @@ -90,6 +90,7 @@ TEST(LlvmLibcSharedMathTest, AllDouble) { EXPECT_FP_EQ(0x1p+0, LIBC_NAMESPACE::shared::exp2(0.0)); EXPECT_FP_EQ(0x1p+0, LIBC_NAMESPACE::shared::exp10(0.0)); EXPECT_FP_EQ(0x0p+0, LIBC_NAMESPACE::shared::expm1(0.0)); + EXPECT_FP_EQ(0x0p+0, LIBC_NAMESPACE::shared::fma(0.0, 0.0, 0.0)); } #ifdef LIBC_TYPES_HAS_FLOAT128 diff --git a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel index 7c98fc7d53796..1902b43216a7c 100644 --- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel +++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel @@ -2791,6 +2791,14 @@ libc_support_library( ], ) +libc_support_library( + name = "__support_math_fma", + hdrs = ["src/__support/math/fma.h"], + deps = [ + ":__support_fputil_fma", + ], +) + libc_support_library( name = "__support_math_frexpf128", hdrs = ["src/__support/math/frexpf128.h"], @@ -3093,15 +3101,15 @@ libc_support_library( name = "__support_math_expm1f16", hdrs = ["src/__support/math/expm1f16.h"], deps = [ + ":__support_fputil_except_value_utils", ":__support_fputil_fma", ":__support_fputil_multiply_add", ":__support_fputil_nearest_integer", ":__support_fputil_polyeval", ":__support_fputil_rounding_mode", - ":__support_fputil_except_value_utils", ":__support_macros_optimization", ":__support_macros_properties_cpu_features", - ":__support_math_expxf16_utils" + ":__support_math_expxf16_utils", ], ) @@ -4001,7 +4009,7 @@ libc_math_function(name = "floorf16") libc_math_function( name = "fma", additional_deps = [ - ":__support_fputil_fma", + ":__support_math_fma", ], ) `````````` </details> https://github.com/llvm/llvm-project/pull/163968 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
