[libc-commits] [libc] 4cc98cc - [libc][math] Qualify getpayload functions to constexpr (#195532)
via libc-commits
libc-commits at lists.llvm.org
Sun May 3 21:15:15 PDT 2026
Author: Kiriti Ponduri
Date: 2026-05-04T07:15:10+03:00
New Revision: 4cc98cc48e7d2a4521e1be28c5e51e3ea27b3f41
URL: https://github.com/llvm/llvm-project/commit/4cc98cc48e7d2a4521e1be28c5e51e3ea27b3f41
DIFF: https://github.com/llvm/llvm-project/commit/4cc98cc48e7d2a4521e1be28c5e51e3ea27b3f41.diff
LOG: [libc][math] Qualify getpayload functions to constexpr (#195532)
Signed-off-by: udaykiriti <udaykiriti624 at gmail.com>
Added:
Modified:
libc/src/__support/FPUtil/BasicOperations.h
libc/src/__support/math/getpayload.h
libc/src/__support/math/getpayloadbf16.h
libc/src/__support/math/getpayloadf.h
libc/src/__support/math/getpayloadf128.h
libc/src/__support/math/getpayloadf16.h
libc/src/__support/math/getpayloadl.h
libc/test/shared/CMakeLists.txt
libc/test/shared/shared_math_constexpr_test.cpp
Removed:
################################################################################
diff --git a/libc/src/__support/FPUtil/BasicOperations.h b/libc/src/__support/FPUtil/BasicOperations.h
index 2cbb1f8a04ee7..e6f5f29e73726 100644
--- a/libc/src/__support/FPUtil/BasicOperations.h
+++ b/libc/src/__support/FPUtil/BasicOperations.h
@@ -365,7 +365,8 @@ totalordermag(T x, T y) {
}
template <typename T>
-LIBC_INLINE cpp::enable_if_t<cpp::is_floating_point_v<T>, T> getpayload(T x) {
+LIBC_INLINE constexpr cpp::enable_if_t<cpp::is_floating_point_v<T>, T>
+getpayload(T x) {
using FPBits = FPBits<T>;
using StorageType = typename FPBits::StorageType;
FPBits x_bits(x);
diff --git a/libc/src/__support/math/getpayload.h b/libc/src/__support/math/getpayload.h
index 5983edc827c1a..8a0b2845fd52f 100644
--- a/libc/src/__support/math/getpayload.h
+++ b/libc/src/__support/math/getpayload.h
@@ -16,7 +16,7 @@ namespace LIBC_NAMESPACE_DECL {
namespace math {
-LIBC_INLINE double getpayload(const double *x) {
+LIBC_INLINE constexpr double getpayload(const double *x) {
return fputil::getpayload(*x);
}
diff --git a/libc/src/__support/math/getpayloadbf16.h b/libc/src/__support/math/getpayloadbf16.h
index a2a60d8816f1b..37878f4fe7252 100644
--- a/libc/src/__support/math/getpayloadbf16.h
+++ b/libc/src/__support/math/getpayloadbf16.h
@@ -17,7 +17,7 @@ namespace LIBC_NAMESPACE_DECL {
namespace math {
-LIBC_INLINE bfloat16 getpayloadbf16(const bfloat16 *x) {
+LIBC_INLINE constexpr bfloat16 getpayloadbf16(const bfloat16 *x) {
return fputil::getpayload(*x);
}
diff --git a/libc/src/__support/math/getpayloadf.h b/libc/src/__support/math/getpayloadf.h
index 107aab60d2fe3..6ab8d4c6e6e77 100644
--- a/libc/src/__support/math/getpayloadf.h
+++ b/libc/src/__support/math/getpayloadf.h
@@ -16,7 +16,9 @@ namespace LIBC_NAMESPACE_DECL {
namespace math {
-LIBC_INLINE float getpayloadf(const float *x) { return fputil::getpayload(*x); }
+LIBC_INLINE constexpr float getpayloadf(const float *x) {
+ return fputil::getpayload(*x);
+}
} // namespace math
} // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/src/__support/math/getpayloadf128.h b/libc/src/__support/math/getpayloadf128.h
index 68d21c69dc0d5..9e9231f2a89d5 100644
--- a/libc/src/__support/math/getpayloadf128.h
+++ b/libc/src/__support/math/getpayloadf128.h
@@ -20,7 +20,7 @@ namespace LIBC_NAMESPACE_DECL {
namespace math {
-LIBC_INLINE float128 getpayloadf128(const float128 *x) {
+LIBC_INLINE constexpr float128 getpayloadf128(const float128 *x) {
return fputil::getpayload(*x);
}
diff --git a/libc/src/__support/math/getpayloadf16.h b/libc/src/__support/math/getpayloadf16.h
index 46febea7973bb..4c38bce74c38a 100644
--- a/libc/src/__support/math/getpayloadf16.h
+++ b/libc/src/__support/math/getpayloadf16.h
@@ -20,7 +20,7 @@ namespace LIBC_NAMESPACE_DECL {
namespace math {
-LIBC_INLINE float16 getpayloadf16(const float16 *x) {
+LIBC_INLINE constexpr float16 getpayloadf16(const float16 *x) {
return fputil::getpayload(*x);
}
diff --git a/libc/src/__support/math/getpayloadl.h b/libc/src/__support/math/getpayloadl.h
index cf82f76d8e67a..0bfbc11fa993a 100644
--- a/libc/src/__support/math/getpayloadl.h
+++ b/libc/src/__support/math/getpayloadl.h
@@ -16,7 +16,7 @@ namespace LIBC_NAMESPACE_DECL {
namespace math {
-LIBC_INLINE long double getpayloadl(const long double *x) {
+LIBC_INLINE constexpr long double getpayloadl(const long double *x) {
return fputil::getpayload(*x);
}
diff --git a/libc/test/shared/CMakeLists.txt b/libc/test/shared/CMakeLists.txt
index 700925aae1f2c..f632843d31284 100644
--- a/libc/test/shared/CMakeLists.txt
+++ b/libc/test/shared/CMakeLists.txt
@@ -599,6 +599,12 @@ add_fp_unittest(
libc.src.__support.math.fsub
libc.src.__support.math.fsubf128
libc.src.__support.math.fsubl
+ libc.src.__support.math.getpayload
+ libc.src.__support.math.getpayloadbf16
+ libc.src.__support.math.getpayloadf
+ libc.src.__support.math.getpayloadf128
+ libc.src.__support.math.getpayloadf16
+ libc.src.__support.math.getpayloadl
libc.src.__support.math.ldexp
libc.src.__support.math.ldexpbf16
libc.src.__support.math.ldexpl
diff --git a/libc/test/shared/shared_math_constexpr_test.cpp b/libc/test/shared/shared_math_constexpr_test.cpp
index 764bce643e187..964c1f9e97f3a 100644
--- a/libc/test/shared/shared_math_constexpr_test.cpp
+++ b/libc/test/shared/shared_math_constexpr_test.cpp
@@ -35,6 +35,10 @@ static_assert(0.0 == LIBC_NAMESPACE::shared::ufromfp(0.0, 0, 32));
static_assert(0.0 == LIBC_NAMESPACE::shared::ufromfpx(0.0, 0, 32));
static_assert(0.0 == LIBC_NAMESPACE::shared::fmaximum_mag(0.0, 0.0));
static_assert(0.0 == LIBC_NAMESPACE::shared::fminimum_mag(0.0, 0.0));
+static_assert(-1.0 == [] {
+ double getpayload_x = 0.0;
+ return LIBC_NAMESPACE::shared::getpayload(&getpayload_x);
+}());
constexpr double TOTALORDER_X = 0.0;
constexpr double TOTALORDER_Y = 0.0;
@@ -92,6 +96,10 @@ static_assert(0.0f == LIBC_NAMESPACE::shared::ufromfpf(0.0f, 0, 32));
static_assert(0.0f == LIBC_NAMESPACE::shared::ufromfpxf(0.0f, 0, 32));
static_assert(0.0f == LIBC_NAMESPACE::shared::fmaximum_magf(0.0f, 0.0f));
static_assert(0.0f == LIBC_NAMESPACE::shared::fminimum_magf(0.0f, 0.0f));
+static_assert(-1.0f == [] {
+ float getpayload_x = 0.0f;
+ return LIBC_NAMESPACE::shared::getpayloadf(&getpayload_x);
+}());
constexpr float TOTALORDERF_X = 0.0f;
constexpr float TOTALORDERF_Y = 0.0f;
@@ -155,6 +163,10 @@ static_assert(0.0f16 ==
LIBC_NAMESPACE::shared::fminimum_numf16(0.0f16, 0.0f16));
static_assert(0.0f16 == LIBC_NAMESPACE::shared::fromfpf16(0.0f16, 0, 32));
static_assert(0.0f16 == LIBC_NAMESPACE::shared::fromfpxf16(0.0f16, 0, 32));
+static_assert(-1.0f16 == [] {
+ float16 getpayload_x = 0.0f16;
+ return LIBC_NAMESPACE::shared::getpayloadf16(&getpayload_x);
+}());
static_assert(0.0f16 == LIBC_NAMESPACE::shared::ufromfpf16(0.0f16, 0, 32));
static_assert(0.0f16 == LIBC_NAMESPACE::shared::ufromfpxf16(0.0f16, 0, 32));
static_assert(0.0f16 ==
@@ -223,6 +235,10 @@ static_assert(0.0L == LIBC_NAMESPACE::shared::fminimum_numl(0.0L, 0.0L));
static_assert(0.0L == LIBC_NAMESPACE::shared::fromfpl(0.0L, 0, 32));
static_assert(0.0L == LIBC_NAMESPACE::shared::fromfpxl(0.0L, 0, 32));
static_assert(0.0L == LIBC_NAMESPACE::shared::ufromfpl(0.0L, 0, 32));
+static_assert(-1.0L == [] {
+ long double getpayload_x = 0.0L;
+ return LIBC_NAMESPACE::shared::getpayloadl(&getpayload_x);
+}());
static_assert(0.0L == LIBC_NAMESPACE::shared::ufromfpxl(0.0L, 0, 32));
static_assert(0.0L == LIBC_NAMESPACE::shared::fmaximum_magl(0.0L, 0.0L));
static_assert(0.0L == LIBC_NAMESPACE::shared::fminimum_magl(0.0L, 0.0L));
@@ -313,6 +329,10 @@ static_assert(float128(0.0) ==
LIBC_NAMESPACE::shared::fromfpf128(float128(0.0), 0, 32));
static_assert(float128(0.0) ==
LIBC_NAMESPACE::shared::fromfpxf128(float128(0.0), 0, 32));
+static_assert(float128(-1.0) == [] {
+ float128 getpayload_x = float128(0.0);
+ return LIBC_NAMESPACE::shared::getpayloadf128(&getpayload_x);
+}());
static_assert(float128(0.0) ==
LIBC_NAMESPACE::shared::ufromfpf128(float128(0.0), 0, 32));
static_assert(float128(0.0) ==
@@ -412,6 +432,12 @@ static_assert(bfloat16(0.0) ==
LIBC_NAMESPACE::shared::fromfpbf16(bfloat16(0.0), 0, 32));
static_assert(bfloat16(0.0) ==
LIBC_NAMESPACE::shared::fromfpxbf16(bfloat16(0.0), 0, 32));
+
+static_assert(bfloat16(-1.0) == [] {
+ bfloat16 getpayload_x = bfloat16(0.0);
+ return LIBC_NAMESPACE::shared::getpayloadbf16(&getpayload_x);
+}());
+
static_assert(bfloat16(0.0) ==
LIBC_NAMESPACE::shared::ufromfpbf16(bfloat16(0.0), 0, 32));
static_assert(bfloat16(0.0) ==
More information about the libc-commits
mailing list