[libc-commits] [libc] [libc][math] Fix subtraction of infinity (PR #152017)
Krishna Pandey via libc-commits
libc-commits at lists.llvm.org
Mon Aug 4 12:18:12 PDT 2025
https://github.com/krishna2803 updated https://github.com/llvm/llvm-project/pull/152017
>From 7678bcd7c3e40cce798f0ad85f6450d1d5482c68 Mon Sep 17 00:00:00 2001
From: Krishna Pandey <kpandey81930 at gmail.com>
Date: Tue, 5 Aug 2025 00:39:41 +0530
Subject: [PATCH 1/3] fix: consider IsSub in finite - infinity case
Signed-off-by: Krishna Pandey <kpandey81930 at gmail.com>
---
libc/src/__support/FPUtil/generic/add_sub.h | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/libc/src/__support/FPUtil/generic/add_sub.h b/libc/src/__support/FPUtil/generic/add_sub.h
index 7205d8d41f5bd..3f80191dcf017 100644
--- a/libc/src/__support/FPUtil/generic/add_sub.h
+++ b/libc/src/__support/FPUtil/generic/add_sub.h
@@ -87,8 +87,12 @@ add_or_sub(InType x, InType y) {
return OutFPBits::inf(x_bits.sign()).get_val();
}
- if (y_bits.is_inf())
- return OutFPBits::inf(y_bits.sign()).get_val();
+ if (y_bits.is_inf()) {
+ if constexpr (IsSub)
+ OutFPBits::inf(y_bits.sign().negate()).get_val();
+ else
+ return OutFPBits::inf(y_bits.sign()).get_val();
+ }
if (x_bits.is_zero()) {
if (y_bits.is_zero()) {
>From fd3e5ec2f1dfc8284b622ba47f09a09bc952c6ea Mon Sep 17 00:00:00 2001
From: Krishna Pandey <kpandey81930 at gmail.com>
Date: Tue, 5 Aug 2025 00:40:37 +0530
Subject: [PATCH 2/3] chore: add unit tests for x - inf
Signed-off-by: Krishna Pandey <kpandey81930 at gmail.com>
---
libc/test/src/math/smoke/SubTest.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/libc/test/src/math/smoke/SubTest.h b/libc/test/src/math/smoke/SubTest.h
index c344db28b7fc6..5fafde00778c0 100644
--- a/libc/test/src/math/smoke/SubTest.h
+++ b/libc/test/src/math/smoke/SubTest.h
@@ -47,6 +47,8 @@ class SubTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
EXPECT_FP_EQ(neg_inf, func(in.neg_inf, in.zero));
EXPECT_FP_EQ(inf, func(in.inf, in.neg_zero));
EXPECT_FP_EQ(neg_inf, func(in.neg_inf, in.neg_zero));
+ EXPECT_FP_EQ(neg_inf, func(in.zero, in.inf));
+ EXPECT_FP_EQ(inf, func(in.zero, in.neg_inf));
}
void test_invalid_operations(SubFunc func) {
>From 30dca295ec0d394364fc2a1e352828d2eabf43ec Mon Sep 17 00:00:00 2001
From: Krishna Pandey <kpandey81930 at gmail.com>
Date: Tue, 5 Aug 2025 00:46:13 +0530
Subject: [PATCH 3/3] fix: add missing return
---
libc/src/__support/FPUtil/generic/add_sub.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libc/src/__support/FPUtil/generic/add_sub.h b/libc/src/__support/FPUtil/generic/add_sub.h
index 3f80191dcf017..d4a4129496640 100644
--- a/libc/src/__support/FPUtil/generic/add_sub.h
+++ b/libc/src/__support/FPUtil/generic/add_sub.h
@@ -89,7 +89,7 @@ add_or_sub(InType x, InType y) {
if (y_bits.is_inf()) {
if constexpr (IsSub)
- OutFPBits::inf(y_bits.sign().negate()).get_val();
+ return OutFPBits::inf(y_bits.sign().negate()).get_val();
else
return OutFPBits::inf(y_bits.sign()).get_val();
}
More information about the libc-commits
mailing list