From: Guillaume Chatelet Date: Tue, 23 Jan 2024 15:37:36 +0000 (+0100) Subject: [libc] Remove specific nan payload in math functions (#79133) X-Git-Tag: upstream/18.1.6~478 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dffa8039b10823f67347453a0ef445ee785ed4aa;p=platform%2Fupstream%2Fllvm.git [libc] Remove specific nan payload in math functions (#79133) --- diff --git a/libc/src/__support/FPUtil/DivisionAndRemainderOperations.h b/libc/src/__support/FPUtil/DivisionAndRemainderOperations.h index ef9593a42b00..2859a248b95e 100644 --- a/libc/src/__support/FPUtil/DivisionAndRemainderOperations.h +++ b/libc/src/__support/FPUtil/DivisionAndRemainderOperations.h @@ -31,7 +31,7 @@ LIBC_INLINE T remquo(T x, T y, int &q) { if (ybits.is_nan()) return y; if (xbits.is_inf() || ybits.is_zero()) - return FPBits::build_quiet_nan(fputil::Sign::POS, 1).get_val(); + return FPBits::build_quiet_nan().get_val(); if (xbits.is_zero()) { q = 0; diff --git a/libc/src/__support/FPUtil/generic/sqrt.h b/libc/src/__support/FPUtil/generic/sqrt.h index 0a0690ec1463..6650227a014d 100644 --- a/libc/src/__support/FPUtil/generic/sqrt.h +++ b/libc/src/__support/FPUtil/generic/sqrt.h @@ -71,12 +71,10 @@ LIBC_INLINE cpp::enable_if_t, T> sqrt(T x) { return x86::sqrt(x); } else { // IEEE floating points formats. - using Sign = fputil::Sign; using FPBits_t = typename fputil::FPBits; using StorageType = typename FPBits_t::StorageType; constexpr StorageType ONE = StorageType(1) << FPBits_t::FRACTION_LEN; - constexpr auto FLT_NAN = - FPBits_t::build_quiet_nan(Sign::POS, ONE >> 1).get_val(); + constexpr auto FLT_NAN = FPBits_t::build_quiet_nan().get_val(); FPBits_t bits(x); diff --git a/libc/src/__support/FPUtil/generic/sqrt_80_bit_long_double.h b/libc/src/__support/FPUtil/generic/sqrt_80_bit_long_double.h index b0a3776029ca..72977f616b5d 100644 --- a/libc/src/__support/FPUtil/generic/sqrt_80_bit_long_double.h +++ b/libc/src/__support/FPUtil/generic/sqrt_80_bit_long_double.h @@ -38,9 +38,8 @@ LIBC_INLINE long double sqrt(long double x); LIBC_INLINE long double sqrt(long double x) { using LDBits = FPBits; using StorageType = typename LDBits::StorageType; - using Sign = fputil::Sign; constexpr StorageType ONE = StorageType(1) << int(LDBits::FRACTION_LEN); - constexpr auto LDNAN = LDBits::build_quiet_nan(Sign::POS, ONE >> 1).get_val(); + constexpr auto LDNAN = LDBits::build_quiet_nan().get_val(); LDBits bits(x); diff --git a/libc/test/UnitTest/FPMatcher.h b/libc/test/UnitTest/FPMatcher.h index 9880fa51c548..ad2fc0439fd7 100644 --- a/libc/test/UnitTest/FPMatcher.h +++ b/libc/test/UnitTest/FPMatcher.h @@ -68,7 +68,7 @@ template struct FPTest : public Test { LIBC_NAMESPACE::cpp::numeric_limits::max(); static constexpr T zero = T(FPBits::zero(Sign::POS)); static constexpr T neg_zero = T(FPBits::zero(Sign::NEG)); - static constexpr T aNaN = T(FPBits::build_quiet_nan(Sign::POS, 1)); + static constexpr T aNaN = T(FPBits::build_quiet_nan()); static constexpr T sNaN = T(FPBits::build_nan(Sign::POS, 1)); static constexpr T inf = T(FPBits::inf(Sign::POS)); static constexpr T neg_inf = T(FPBits::inf(Sign::NEG)); @@ -97,7 +97,7 @@ template struct FPTest : public Test { LIBC_NAMESPACE::cpp::numeric_limits::max(); \ const T zero = T(FPBits::zero(Sign::POS)); \ const T neg_zero = T(FPBits::zero(Sign::NEG)); \ - const T aNaN = T(FPBits::build_quiet_nan(Sign::POS, 1)); \ + const T aNaN = T(FPBits::build_quiet_nan()); \ const T sNaN = T(FPBits::build_nan(Sign::POS, 1)); \ const T inf = T(FPBits::inf(Sign::POS)); \ const T neg_inf = T(FPBits::inf(Sign::NEG)); \ diff --git a/libc/test/src/__support/FPUtil/fpbits_test.cpp b/libc/test/src/__support/FPUtil/fpbits_test.cpp index 6092945811ce..aadcd3fe92b9 100644 --- a/libc/test/src/__support/FPUtil/fpbits_test.cpp +++ b/libc/test/src/__support/FPUtil/fpbits_test.cpp @@ -287,7 +287,7 @@ TEST(LlvmLibcFPBitsTest, FloatType) { EXPECT_STREQ(LIBC_NAMESPACE::str(negnum).c_str(), "0xBF900000 = (S: 1, E: 0x007F, M: 0x00100000)"); - FloatBits quiet_nan = FloatBits::build_quiet_nan(Sign::POS, 1); + FloatBits quiet_nan = FloatBits::build_quiet_nan(); EXPECT_EQ(quiet_nan.is_quiet_nan(), true); } @@ -298,8 +298,7 @@ TEST(LlvmLibcFPBitsTest, DoubleType) { "(+Infinity)"); EXPECT_STREQ(LIBC_NAMESPACE::str(DoubleBits::inf(Sign::NEG)).c_str(), "(-Infinity)"); - EXPECT_STREQ(LIBC_NAMESPACE::str(DoubleBits::build_nan(Sign::POS, 1)).c_str(), - "(NaN)"); + EXPECT_STREQ(LIBC_NAMESPACE::str(DoubleBits::build_nan()).c_str(), "(NaN)"); DoubleBits zero(0.0); EXPECT_TRUE(zero.is_pos()); @@ -349,7 +348,7 @@ TEST(LlvmLibcFPBitsTest, DoubleType) { EXPECT_STREQ(LIBC_NAMESPACE::str(negnum).c_str(), "0xBFF2000000000000 = (S: 1, E: 0x03FF, M: 0x0002000000000000)"); - DoubleBits quiet_nan = DoubleBits::build_quiet_nan(Sign::POS, 1); + DoubleBits quiet_nan = DoubleBits::build_quiet_nan(); EXPECT_EQ(quiet_nan.is_quiet_nan(), true); } @@ -431,7 +430,7 @@ TEST(LlvmLibcFPBitsTest, X86LongDoubleType) { "0x000000000000BFFF9000000000000000 = " "(S: 1, E: 0x3FFF, I: 1, M: 0x00000000000000001000000000000000)"); - LongDoubleBits quiet_nan = LongDoubleBits::build_quiet_nan(Sign::POS, 1); + LongDoubleBits quiet_nan = LongDoubleBits::build_quiet_nan(); EXPECT_EQ(quiet_nan.is_quiet_nan(), true); } #else @@ -506,7 +505,7 @@ TEST(LlvmLibcFPBitsTest, LongDoubleType) { "0xBFFF2000000000000000000000000000 = " "(S: 1, E: 0x3FFF, M: 0x00002000000000000000000000000000)"); - LongDoubleBits quiet_nan = LongDoubleBits::build_quiet_nan(Sign::POS, 1); + LongDoubleBits quiet_nan = LongDoubleBits::build_quiet_nan(); EXPECT_EQ(quiet_nan.is_quiet_nan(), true); #endif } @@ -581,7 +580,7 @@ TEST(LlvmLibcFPBitsTest, Float128Type) { "0xBFFF2000000000000000000000000000 = " "(S: 1, E: 0x3FFF, M: 0x00002000000000000000000000000000)"); - Float128Bits quiet_nan = Float128Bits::build_quiet_nan(Sign::POS, 1); + Float128Bits quiet_nan = Float128Bits::build_quiet_nan(); EXPECT_EQ(quiet_nan.is_quiet_nan(), true); } #endif // LIBC_COMPILER_HAS_FLOAT128 diff --git a/libc/test/src/math/FDimTest.h b/libc/test/src/math/FDimTest.h index c3d9cb1801cd..46df2b40e64b 100644 --- a/libc/test/src/math/FDimTest.h +++ b/libc/test/src/math/FDimTest.h @@ -24,7 +24,7 @@ public: const T neg_inf = T(FPBits::inf(Sign::NEG)); const T zero = T(FPBits::zero(Sign::POS)); const T neg_zero = T(FPBits::zero(Sign::NEG)); - const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1)); + const T nan = T(FPBits::build_quiet_nan()); void test_na_n_arg(FuncPtr func) { EXPECT_FP_EQ(nan, func(nan, inf)); diff --git a/libc/test/src/math/FmaTest.h b/libc/test/src/math/FmaTest.h index 4343b38053dc..8cc340e9260f 100644 --- a/libc/test/src/math/FmaTest.h +++ b/libc/test/src/math/FmaTest.h @@ -32,7 +32,7 @@ private: const T neg_inf = T(FPBits::inf(Sign::NEG)); const T zero = T(FPBits::zero(Sign::POS)); const T neg_zero = T(FPBits::zero(Sign::NEG)); - const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1)); + const T nan = T(FPBits::build_quiet_nan()); static constexpr StorageType MAX_NORMAL = FPBits::max_normal().uintval(); static constexpr StorageType MIN_NORMAL = FPBits::min_normal().uintval(); diff --git a/libc/test/src/math/HypotTest.h b/libc/test/src/math/HypotTest.h index 0b85f68fda82..2990072fd5c6 100644 --- a/libc/test/src/math/HypotTest.h +++ b/libc/test/src/math/HypotTest.h @@ -25,7 +25,7 @@ private: using FPBits = LIBC_NAMESPACE::fputil::FPBits; using Sign = LIBC_NAMESPACE::fputil::Sign; using StorageType = typename FPBits::StorageType; - const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1)); + const T nan = T(FPBits::build_quiet_nan()); const T inf = T(FPBits::inf()); const T neg_inf = T(FPBits::inf(Sign::NEG)); const T zero = T(FPBits::zero()); diff --git a/libc/test/src/math/ILogbTest.h b/libc/test/src/math/ILogbTest.h index 223de789999a..fe28fab9d777 100644 --- a/libc/test/src/math/ILogbTest.h +++ b/libc/test/src/math/ILogbTest.h @@ -28,7 +28,7 @@ public: using Sign = LIBC_NAMESPACE::fputil::Sign; EXPECT_EQ(FP_ILOGB0, func(T(FPBits::zero(Sign::POS)))); EXPECT_EQ(FP_ILOGB0, func(T(FPBits::zero(Sign::NEG)))); - EXPECT_EQ(FP_ILOGBNAN, func(T(FPBits::build_quiet_nan(Sign::POS, 1)))); + EXPECT_EQ(FP_ILOGBNAN, func(T(FPBits::build_quiet_nan()))); EXPECT_EQ(INT_MAX, func(T(FPBits::inf(Sign::POS)))); EXPECT_EQ(INT_MAX, func(T(FPBits::inf(Sign::NEG)))); } diff --git a/libc/test/src/math/LdExpTest.h b/libc/test/src/math/LdExpTest.h index 3a4baabbf10e..08a14a90c122 100644 --- a/libc/test/src/math/LdExpTest.h +++ b/libc/test/src/math/LdExpTest.h @@ -29,7 +29,7 @@ class LdExpTestTemplate : public LIBC_NAMESPACE::testing::Test { const T neg_inf = T(FPBits::inf(Sign::NEG)); const T zero = T(FPBits::zero(Sign::POS)); const T neg_zero = T(FPBits::zero(Sign::NEG)); - const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1)); + const T nan = T(FPBits::build_quiet_nan()); // A normalized mantissa to be used with tests. static constexpr StorageType MANTISSA = NormalFloat::ONE + 0x1234; diff --git a/libc/test/src/math/NextAfterTest.h b/libc/test/src/math/NextAfterTest.h index 9ff3bf73d2ed..f9ae4a4ec5c0 100644 --- a/libc/test/src/math/NextAfterTest.h +++ b/libc/test/src/math/NextAfterTest.h @@ -27,7 +27,7 @@ class NextAfterTestTemplate : public LIBC_NAMESPACE::testing::Test { const T neg_inf = T(FPBits::inf(Sign::NEG)); const T zero = T(FPBits::zero(Sign::POS)); const T neg_zero = T(FPBits::zero(Sign::NEG)); - const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1)); + const T nan = T(FPBits::build_quiet_nan()); const StorageType min_subnormal = FPBits::min_subnormal().uintval(); const StorageType max_subnormal = FPBits::max_subnormal().uintval(); diff --git a/libc/test/src/math/RIntTest.h b/libc/test/src/math/RIntTest.h index b478e3f65dbc..3af7b6fe6f6d 100644 --- a/libc/test/src/math/RIntTest.h +++ b/libc/test/src/math/RIntTest.h @@ -38,7 +38,7 @@ private: const T neg_inf = T(FPBits::inf(Sign::NEG)); const T zero = T(FPBits::zero(Sign::POS)); const T neg_zero = T(FPBits::zero(Sign::NEG)); - const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1)); + const T nan = T(FPBits::build_quiet_nan()); static constexpr StorageType MIN_SUBNORMAL = FPBits::min_subnormal().uintval(); diff --git a/libc/test/src/math/RemQuoTest.h b/libc/test/src/math/RemQuoTest.h index 0ee41f4bf9ac..bbc266764c1c 100644 --- a/libc/test/src/math/RemQuoTest.h +++ b/libc/test/src/math/RemQuoTest.h @@ -28,7 +28,7 @@ class RemQuoTestTemplate : public LIBC_NAMESPACE::testing::Test { const T neg_inf = T(FPBits::inf(Sign::NEG)); const T zero = T(FPBits::zero(Sign::POS)); const T neg_zero = T(FPBits::zero(Sign::NEG)); - const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1)); + const T nan = T(FPBits::build_quiet_nan()); static constexpr StorageType MIN_SUBNORMAL = FPBits::min_subnormal().uintval(); diff --git a/libc/test/src/math/RoundToIntegerTest.h b/libc/test/src/math/RoundToIntegerTest.h index 6866c23cb99c..f75aaa348bd0 100644 --- a/libc/test/src/math/RoundToIntegerTest.h +++ b/libc/test/src/math/RoundToIntegerTest.h @@ -37,7 +37,7 @@ private: const F neg_zero = F(FPBits::zero(Sign::NEG)); const F inf = F(FPBits::inf()); const F neg_inf = F(FPBits::inf(Sign::NEG)); - const F nan = F(FPBits::build_quiet_nan(Sign::POS, 1)); + const F nan = F(FPBits::build_quiet_nan()); static constexpr StorageType MAX_NORMAL = FPBits::max_normal().uintval(); static constexpr StorageType MIN_NORMAL = FPBits::min_normal().uintval(); diff --git a/libc/test/src/math/smoke/FDimTest.h b/libc/test/src/math/smoke/FDimTest.h index c3d9cb1801cd..46df2b40e64b 100644 --- a/libc/test/src/math/smoke/FDimTest.h +++ b/libc/test/src/math/smoke/FDimTest.h @@ -24,7 +24,7 @@ public: const T neg_inf = T(FPBits::inf(Sign::NEG)); const T zero = T(FPBits::zero(Sign::POS)); const T neg_zero = T(FPBits::zero(Sign::NEG)); - const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1)); + const T nan = T(FPBits::build_quiet_nan()); void test_na_n_arg(FuncPtr func) { EXPECT_FP_EQ(nan, func(nan, inf)); diff --git a/libc/test/src/math/smoke/FmaTest.h b/libc/test/src/math/smoke/FmaTest.h index 337ce659a23e..106ba1405a96 100644 --- a/libc/test/src/math/smoke/FmaTest.h +++ b/libc/test/src/math/smoke/FmaTest.h @@ -25,7 +25,7 @@ private: const T neg_inf = T(FPBits::inf(Sign::NEG)); const T zero = T(FPBits::zero(Sign::POS)); const T neg_zero = T(FPBits::zero(Sign::NEG)); - const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1)); + const T nan = T(FPBits::build_quiet_nan()); public: void test_special_numbers(Func func) { diff --git a/libc/test/src/math/smoke/HypotTest.h b/libc/test/src/math/smoke/HypotTest.h index 67110536b962..5400fc0730d8 100644 --- a/libc/test/src/math/smoke/HypotTest.h +++ b/libc/test/src/math/smoke/HypotTest.h @@ -22,7 +22,7 @@ private: using FPBits = LIBC_NAMESPACE::fputil::FPBits; using StorageType = typename FPBits::StorageType; using Sign = LIBC_NAMESPACE::fputil::Sign; - const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1)); + const T nan = T(FPBits::build_quiet_nan()); const T inf = T(FPBits::inf(Sign::POS)); const T neg_inf = T(FPBits::inf(Sign::NEG)); const T zero = T(FPBits::zero(Sign::POS)); diff --git a/libc/test/src/math/smoke/ILogbTest.h b/libc/test/src/math/smoke/ILogbTest.h index 223de789999a..fe28fab9d777 100644 --- a/libc/test/src/math/smoke/ILogbTest.h +++ b/libc/test/src/math/smoke/ILogbTest.h @@ -28,7 +28,7 @@ public: using Sign = LIBC_NAMESPACE::fputil::Sign; EXPECT_EQ(FP_ILOGB0, func(T(FPBits::zero(Sign::POS)))); EXPECT_EQ(FP_ILOGB0, func(T(FPBits::zero(Sign::NEG)))); - EXPECT_EQ(FP_ILOGBNAN, func(T(FPBits::build_quiet_nan(Sign::POS, 1)))); + EXPECT_EQ(FP_ILOGBNAN, func(T(FPBits::build_quiet_nan()))); EXPECT_EQ(INT_MAX, func(T(FPBits::inf(Sign::POS)))); EXPECT_EQ(INT_MAX, func(T(FPBits::inf(Sign::NEG)))); } diff --git a/libc/test/src/math/smoke/LdExpTest.h b/libc/test/src/math/smoke/LdExpTest.h index 3a4baabbf10e..08a14a90c122 100644 --- a/libc/test/src/math/smoke/LdExpTest.h +++ b/libc/test/src/math/smoke/LdExpTest.h @@ -29,7 +29,7 @@ class LdExpTestTemplate : public LIBC_NAMESPACE::testing::Test { const T neg_inf = T(FPBits::inf(Sign::NEG)); const T zero = T(FPBits::zero(Sign::POS)); const T neg_zero = T(FPBits::zero(Sign::NEG)); - const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1)); + const T nan = T(FPBits::build_quiet_nan()); // A normalized mantissa to be used with tests. static constexpr StorageType MANTISSA = NormalFloat::ONE + 0x1234; diff --git a/libc/test/src/math/smoke/NextAfterTest.h b/libc/test/src/math/smoke/NextAfterTest.h index 1dd07b3d2f93..859e2c74a369 100644 --- a/libc/test/src/math/smoke/NextAfterTest.h +++ b/libc/test/src/math/smoke/NextAfterTest.h @@ -38,7 +38,7 @@ class NextAfterTestTemplate : public LIBC_NAMESPACE::testing::Test { const T neg_inf = T(FPBits::inf(Sign::NEG)); const T zero = T(FPBits::zero(Sign::POS)); const T neg_zero = T(FPBits::zero(Sign::NEG)); - const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1)); + const T nan = T(FPBits::build_quiet_nan()); static constexpr StorageType min_subnormal = FPBits::min_subnormal().uintval(); diff --git a/libc/test/src/math/smoke/NextTowardTest.h b/libc/test/src/math/smoke/NextTowardTest.h index d65cc5d84d35..c9f07b993f04 100644 --- a/libc/test/src/math/smoke/NextTowardTest.h +++ b/libc/test/src/math/smoke/NextTowardTest.h @@ -40,11 +40,11 @@ class NextTowardTestTemplate : public LIBC_NAMESPACE::testing::Test { const T neg_inf = T(FPBits::inf(Sign::NEG)); const T zero = T(FPBits::zero(Sign::POS)); const T neg_zero = T(FPBits::zero(Sign::NEG)); - const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1)); + const T nan = T(FPBits::build_quiet_nan()); const long double to_zero = ToFPBits::zero().get_val(); const long double to_neg_zero = ToFPBits::zero(Sign::NEG).get_val(); - const long double to_nan = ToFPBits::build_quiet_nan(Sign::POS, 1).get_val(); + const long double to_nan = ToFPBits::build_quiet_nan().get_val(); static constexpr StorageType min_subnormal = FPBits::min_subnormal().uintval(); diff --git a/libc/test/src/math/smoke/RIntTest.h b/libc/test/src/math/smoke/RIntTest.h index 7bbbe5430157..bd99e634badb 100644 --- a/libc/test/src/math/smoke/RIntTest.h +++ b/libc/test/src/math/smoke/RIntTest.h @@ -35,7 +35,7 @@ private: const T neg_inf = T(FPBits::inf(Sign::NEG)); const T zero = T(FPBits::zero(Sign::POS)); const T neg_zero = T(FPBits::zero(Sign::NEG)); - const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1)); + const T nan = T(FPBits::build_quiet_nan()); public: void testSpecialNumbers(RIntFunc func) { diff --git a/libc/test/src/math/smoke/RemQuoTest.h b/libc/test/src/math/smoke/RemQuoTest.h index 5f5cbd4964a6..739661f2d961 100644 --- a/libc/test/src/math/smoke/RemQuoTest.h +++ b/libc/test/src/math/smoke/RemQuoTest.h @@ -25,7 +25,7 @@ class RemQuoTestTemplate : public LIBC_NAMESPACE::testing::Test { const T neg_inf = T(FPBits::inf(Sign::NEG)); const T zero = T(FPBits::zero(Sign::POS)); const T neg_zero = T(FPBits::zero(Sign::NEG)); - const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1)); + const T nan = T(FPBits::build_quiet_nan()); public: typedef T (*RemQuoFunc)(T, T, int *); diff --git a/libc/test/src/math/smoke/RoundToIntegerTest.h b/libc/test/src/math/smoke/RoundToIntegerTest.h index 77c65aa492e2..404155604645 100644 --- a/libc/test/src/math/smoke/RoundToIntegerTest.h +++ b/libc/test/src/math/smoke/RoundToIntegerTest.h @@ -34,7 +34,7 @@ private: const F neg_zero = F(FPBits::zero(Sign::NEG)); const F inf = F(FPBits::inf(Sign::POS)); const F neg_inf = F(FPBits::inf(Sign::NEG)); - const F nan = F(FPBits::build_quiet_nan(Sign::POS, 1)); + const F nan = F(FPBits::build_quiet_nan()); static constexpr StorageType MAX_SUBNORMAL = FPBits::max_subnormal().uintval();