[libc-commits] [libc] [libc][math] Qualify f16add functions to constexpr (PR #195429)

Kiriti Ponduri via libc-commits libc-commits at lists.llvm.org
Sat May 2 01:27:41 PDT 2026


https://github.com/udaykiriti updated https://github.com/llvm/llvm-project/pull/195429

>From 120e456fc16ceaa0d809d35bfae33f329e1a3f45 Mon Sep 17 00:00:00 2001
From: udaykiriti <udaykiriti624 at gmail.com>
Date: Sat, 2 May 2026 13:40:37 +0530
Subject: [PATCH 1/3] [libc][math] Qualify f16add functions to constexpr

Signed-off-by: udaykiriti <udaykiriti624 at gmail.com>
---
 libc/src/__support/math/f16add.h                | 2 +-
 libc/src/__support/math/f16addf.h               | 2 +-
 libc/src/__support/math/f16addf128.h            | 2 +-
 libc/src/__support/math/f16addl.h               | 2 +-
 libc/test/shared/CMakeLists.txt                 | 4 ++++
 libc/test/shared/shared_math_constexpr_test.cpp | 5 +++++
 6 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/libc/src/__support/math/f16add.h b/libc/src/__support/math/f16add.h
index 7e046c3f115dc..a75d2189b6fd7 100644
--- a/libc/src/__support/math/f16add.h
+++ b/libc/src/__support/math/f16add.h
@@ -19,7 +19,7 @@
 namespace LIBC_NAMESPACE_DECL {
 namespace math {
 
-LIBC_INLINE float16 f16add(double x, double y) {
+LIBC_INLINE constexpr float16 f16add(double x, double y) {
   return fputil::generic::add<float16>(x, y);
 }
 
diff --git a/libc/src/__support/math/f16addf.h b/libc/src/__support/math/f16addf.h
index 5e140bc6e5373..2c91a2ad86051 100644
--- a/libc/src/__support/math/f16addf.h
+++ b/libc/src/__support/math/f16addf.h
@@ -19,7 +19,7 @@
 namespace LIBC_NAMESPACE_DECL {
 namespace math {
 
-LIBC_INLINE float16 f16addf(float x, float y) {
+LIBC_INLINE constexpr float16 f16addf(float x, float y) {
   return fputil::generic::add<float16>(x, y);
 }
 
diff --git a/libc/src/__support/math/f16addf128.h b/libc/src/__support/math/f16addf128.h
index 8d259a273a8d1..d4316ce24b188 100644
--- a/libc/src/__support/math/f16addf128.h
+++ b/libc/src/__support/math/f16addf128.h
@@ -21,7 +21,7 @@
 namespace LIBC_NAMESPACE_DECL {
 namespace math {
 
-LIBC_INLINE float16 f16addf128(float128 x, float128 y) {
+LIBC_INLINE constexpr float16 f16addf128(float128 x, float128 y) {
   return fputil::generic::add<float16>(x, y);
 }
 
diff --git a/libc/src/__support/math/f16addl.h b/libc/src/__support/math/f16addl.h
index 88f16857be48e..265ad52eedb9e 100644
--- a/libc/src/__support/math/f16addl.h
+++ b/libc/src/__support/math/f16addl.h
@@ -19,7 +19,7 @@
 namespace LIBC_NAMESPACE_DECL {
 namespace math {
 
-LIBC_INLINE float16 f16addl(long double x, long double y) {
+LIBC_INLINE constexpr float16 f16addl(long double x, long double y) {
   return fputil::generic::add<float16>(x, y);
 }
 
diff --git a/libc/test/shared/CMakeLists.txt b/libc/test/shared/CMakeLists.txt
index 993f28d8c37c4..a8cd51ac410d4 100644
--- a/libc/test/shared/CMakeLists.txt
+++ b/libc/test/shared/CMakeLists.txt
@@ -418,6 +418,10 @@ add_fp_unittest(
     libc.src.__support.math.dmulf128
     libc.src.__support.math.dmull
     libc.src.__support.math.dsqrtf128
+    libc.src.__support.math.f16add
+    libc.src.__support.math.f16addf
+    libc.src.__support.math.f16addf128
+    libc.src.__support.math.f16addl
     libc.src.__support.math.fadd
     libc.src.__support.math.faddf128
     libc.src.__support.math.faddl
diff --git a/libc/test/shared/shared_math_constexpr_test.cpp b/libc/test/shared/shared_math_constexpr_test.cpp
index f849929e54e08..a6f418fc37646 100644
--- a/libc/test/shared/shared_math_constexpr_test.cpp
+++ b/libc/test/shared/shared_math_constexpr_test.cpp
@@ -17,6 +17,7 @@
 
 static_assert(0.0 == LIBC_NAMESPACE::shared::ceil(0.0));
 static_assert(0.0 == LIBC_NAMESPACE::shared::copysign(0.0, 0.0));
+static_assert(3.0f16 == LIBC_NAMESPACE::shared::f16add(1.0, 2.0));
 static_assert(1.0 == LIBC_NAMESPACE::shared::fabs(-1.0));
 static_assert(1.0 == LIBC_NAMESPACE::shared::fdim(1.0, 0.0));
 static_assert(0.0f == LIBC_NAMESPACE::shared::fdiv(0.0, 1.0));
@@ -57,6 +58,7 @@ static_assert(0.0 == LIBC_NAMESPACE::shared::fminimum_mag_num(0.0, 0.0));
 
 static_assert(0.0f == LIBC_NAMESPACE::shared::ceilf(0.0f));
 static_assert(0.0f == LIBC_NAMESPACE::shared::copysignf(0.0f, 0.0f));
+static_assert(3.0f16 == LIBC_NAMESPACE::shared::f16addf(1.0f, 2.0f));
 static_assert(1.0f == LIBC_NAMESPACE::shared::fabsf(-1.0f));
 static_assert(0.0f == LIBC_NAMESPACE::shared::fadd(0.0, 0.0));
 static_assert(1.0f == LIBC_NAMESPACE::shared::fdimf(1.0f, 0.0f));
@@ -149,6 +151,7 @@ static_assert(0.0L == LIBC_NAMESPACE::shared::ceill(0.0L));
 static_assert(0.0L == LIBC_NAMESPACE::shared::copysignl(0.0L, 0.0L));
 static_assert(0.0 == LIBC_NAMESPACE::shared::ddivl(0.0L, 1.0L));
 static_assert(0.0 == LIBC_NAMESPACE::shared::dmull(0.0L, 1.0L));
+static_assert(3.0f16 == LIBC_NAMESPACE::shared::f16addl(1.0L, 2.0L));
 static_assert(1.0L == LIBC_NAMESPACE::shared::fabsl(-1.0L));
 static_assert(0.0f == LIBC_NAMESPACE::shared::faddl(0.0L, 0.0L));
 static_assert(1.0L == LIBC_NAMESPACE::shared::fdiml(1.0L, 0.0L));
@@ -204,6 +207,8 @@ static_assert(0.0 ==
               LIBC_NAMESPACE::shared::ddivf128(float128(0.0), float128(1.0)));
 static_assert(0.0 ==
               LIBC_NAMESPACE::shared::dmulf128(float128(0.0), float128(1.0)));
+static_assert(3.0f16 ==
+              LIBC_NAMESPACE::shared::f16addf128(float128(1.0), float128(2.0)));
 static_assert(0.0f ==
               LIBC_NAMESPACE::shared::faddf128(float128(0.0), float128(0.0)));
 static_assert(float128(1.0) ==

>From fcb84bd921787466b28103866af1e092d13870d5 Mon Sep 17 00:00:00 2001
From: udaykiriti <udaykiriti624 at gmail.com>
Date: Sat, 2 May 2026 13:53:59 +0530
Subject: [PATCH 2/3] with f16 guards

Signed-off-by: udaykiriti <udaykiriti624 at gmail.com>
---
 libc/test/shared/shared_math_constexpr_test.cpp | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/libc/test/shared/shared_math_constexpr_test.cpp b/libc/test/shared/shared_math_constexpr_test.cpp
index a6f418fc37646..30c905fea0616 100644
--- a/libc/test/shared/shared_math_constexpr_test.cpp
+++ b/libc/test/shared/shared_math_constexpr_test.cpp
@@ -17,7 +17,7 @@
 
 static_assert(0.0 == LIBC_NAMESPACE::shared::ceil(0.0));
 static_assert(0.0 == LIBC_NAMESPACE::shared::copysign(0.0, 0.0));
-static_assert(3.0f16 == LIBC_NAMESPACE::shared::f16add(1.0, 2.0));
+static_assert(3.0 == LIBC_NAMESPACE::shared::f16add(1.0, 2.0));
 static_assert(1.0 == LIBC_NAMESPACE::shared::fabs(-1.0));
 static_assert(1.0 == LIBC_NAMESPACE::shared::fdim(1.0, 0.0));
 static_assert(0.0f == LIBC_NAMESPACE::shared::fdiv(0.0, 1.0));
@@ -58,7 +58,7 @@ static_assert(0.0 == LIBC_NAMESPACE::shared::fminimum_mag_num(0.0, 0.0));
 
 static_assert(0.0f == LIBC_NAMESPACE::shared::ceilf(0.0f));
 static_assert(0.0f == LIBC_NAMESPACE::shared::copysignf(0.0f, 0.0f));
-static_assert(3.0f16 == LIBC_NAMESPACE::shared::f16addf(1.0f, 2.0f));
+static_assert(3.0f == LIBC_NAMESPACE::shared::f16addf(1.0f, 2.0f));
 static_assert(1.0f == LIBC_NAMESPACE::shared::fabsf(-1.0f));
 static_assert(0.0f == LIBC_NAMESPACE::shared::fadd(0.0, 0.0));
 static_assert(1.0f == LIBC_NAMESPACE::shared::fdimf(1.0f, 0.0f));
@@ -151,7 +151,7 @@ static_assert(0.0L == LIBC_NAMESPACE::shared::ceill(0.0L));
 static_assert(0.0L == LIBC_NAMESPACE::shared::copysignl(0.0L, 0.0L));
 static_assert(0.0 == LIBC_NAMESPACE::shared::ddivl(0.0L, 1.0L));
 static_assert(0.0 == LIBC_NAMESPACE::shared::dmull(0.0L, 1.0L));
-static_assert(3.0f16 == LIBC_NAMESPACE::shared::f16addl(1.0L, 2.0L));
+static_assert(3.0f == LIBC_NAMESPACE::shared::f16addl(1.0L, 2.0L));
 static_assert(1.0L == LIBC_NAMESPACE::shared::fabsl(-1.0L));
 static_assert(0.0f == LIBC_NAMESPACE::shared::faddl(0.0L, 0.0L));
 static_assert(1.0L == LIBC_NAMESPACE::shared::fdiml(1.0L, 0.0L));
@@ -207,7 +207,7 @@ static_assert(0.0 ==
               LIBC_NAMESPACE::shared::ddivf128(float128(0.0), float128(1.0)));
 static_assert(0.0 ==
               LIBC_NAMESPACE::shared::dmulf128(float128(0.0), float128(1.0)));
-static_assert(3.0f16 ==
+static_assert(3.0f ==
               LIBC_NAMESPACE::shared::f16addf128(float128(1.0), float128(2.0)));
 static_assert(0.0f ==
               LIBC_NAMESPACE::shared::faddf128(float128(0.0), float128(0.0)));

>From 00d458f5ead77165884484a383878fcf81121a3d Mon Sep 17 00:00:00 2001
From: udaykiriti <udaykiriti624 at gmail.com>
Date: Sat, 2 May 2026 13:57:15 +0530
Subject: [PATCH 3/3] with gaurds

Signed-off-by: udaykiriti <udaykiriti624 at gmail.com>
---
 libc/test/shared/shared_math_constexpr_test.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/libc/test/shared/shared_math_constexpr_test.cpp b/libc/test/shared/shared_math_constexpr_test.cpp
index 30c905fea0616..67febfac71f10 100644
--- a/libc/test/shared/shared_math_constexpr_test.cpp
+++ b/libc/test/shared/shared_math_constexpr_test.cpp
@@ -17,7 +17,6 @@
 
 static_assert(0.0 == LIBC_NAMESPACE::shared::ceil(0.0));
 static_assert(0.0 == LIBC_NAMESPACE::shared::copysign(0.0, 0.0));
-static_assert(3.0 == LIBC_NAMESPACE::shared::f16add(1.0, 2.0));
 static_assert(1.0 == LIBC_NAMESPACE::shared::fabs(-1.0));
 static_assert(1.0 == LIBC_NAMESPACE::shared::fdim(1.0, 0.0));
 static_assert(0.0f == LIBC_NAMESPACE::shared::fdiv(0.0, 1.0));
@@ -58,7 +57,6 @@ static_assert(0.0 == LIBC_NAMESPACE::shared::fminimum_mag_num(0.0, 0.0));
 
 static_assert(0.0f == LIBC_NAMESPACE::shared::ceilf(0.0f));
 static_assert(0.0f == LIBC_NAMESPACE::shared::copysignf(0.0f, 0.0f));
-static_assert(3.0f == LIBC_NAMESPACE::shared::f16addf(1.0f, 2.0f));
 static_assert(1.0f == LIBC_NAMESPACE::shared::fabsf(-1.0f));
 static_assert(0.0f == LIBC_NAMESPACE::shared::fadd(0.0, 0.0));
 static_assert(1.0f == LIBC_NAMESPACE::shared::fdimf(1.0f, 0.0f));
@@ -99,6 +97,9 @@ static_assert(0.0f == LIBC_NAMESPACE::shared::fminimum_mag_numf(0.0f, 0.0f));
 
 static_assert(0.0f16 == LIBC_NAMESPACE::shared::ceilf16(0.0f16));
 static_assert(0.0f16 == LIBC_NAMESPACE::shared::copysignf16(0.0f16, 0.0f16));
+static_assert(3.0f16 == LIBC_NAMESPACE::shared::f16add(1.0, 2.0));
+static_assert(3.0f16 == LIBC_NAMESPACE::shared::f16addf(1.0f, 2.0f));
+static_assert(3.0f16 == LIBC_NAMESPACE::shared::f16addl(1.0L, 2.0L));
 static_assert(1.0f16 == LIBC_NAMESPACE::shared::fabsf16(-1.0f16));
 static_assert(1.0f16 == LIBC_NAMESPACE::shared::fdimf16(1.0f16, 0.0f16));
 static_assert(3.0f16 == LIBC_NAMESPACE::shared::floorf16(3.7f16));
@@ -151,7 +152,6 @@ static_assert(0.0L == LIBC_NAMESPACE::shared::ceill(0.0L));
 static_assert(0.0L == LIBC_NAMESPACE::shared::copysignl(0.0L, 0.0L));
 static_assert(0.0 == LIBC_NAMESPACE::shared::ddivl(0.0L, 1.0L));
 static_assert(0.0 == LIBC_NAMESPACE::shared::dmull(0.0L, 1.0L));
-static_assert(3.0f == LIBC_NAMESPACE::shared::f16addl(1.0L, 2.0L));
 static_assert(1.0L == LIBC_NAMESPACE::shared::fabsl(-1.0L));
 static_assert(0.0f == LIBC_NAMESPACE::shared::faddl(0.0L, 0.0L));
 static_assert(1.0L == LIBC_NAMESPACE::shared::fdiml(1.0L, 0.0L));



More information about the libc-commits mailing list