From: Aldy Hernandez Date: Tue, 11 Oct 2022 17:21:14 +0000 (+0200) Subject: Add method to query the sign of a NAN. X-Git-Tag: basepoints/gcc-14~3962 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=658788f3480e95f1dda0a143b60be89099e5d3c7;p=thirdparty%2Fgcc.git Add method to query the sign of a NAN. In writing some range-op entries I noticed we don't have a way to query the sign of the NAN in a range, unless the range only contains NAN, in which case you can just use frange::signbit_p. This patch adds a method that returns TRUE if there exists the possiblity of a NAN and we know its sign. gcc/ChangeLog: * value-range.h (frange::nan_signbit_p): New. --- diff --git a/gcc/value-range.h b/gcc/value-range.h index cb5e9d0522cc..60b989b2b503 100644 --- a/gcc/value-range.h +++ b/gcc/value-range.h @@ -328,6 +328,7 @@ public: bool maybe_isnan (bool sign) const; bool maybe_isinf () const; bool signbit_p (bool &signbit) const; + bool nan_signbit_p (bool &signbit) const; private: void verify_range (); bool normalize_kind (); @@ -1358,4 +1359,20 @@ frange::signbit_p (bool &signbit) const return false; } +// If range has a NAN with a known sign, set it in SIGNBIT and return +// TRUE. + +inline bool +frange::nan_signbit_p (bool &signbit) const +{ + if (undefined_p ()) + return false; + + if (m_pos_nan == m_neg_nan) + return false; + + signbit = m_neg_nan; + return true; +} + #endif // GCC_VALUE_RANGE_H