diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2022-10-11 19:21:14 +0200 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2022-10-12 08:49:00 +0200 |
commit | 658788f3480e95f1dda0a143b60be89099e5d3c7 (patch) | |
tree | a209fd477478ea67ccc7fe3283e7408650ce8668 | |
parent | 6ce0823721d476cabb2007fecc12c07202325e17 (diff) | |
download | gcc-658788f3480e95f1dda0a143b60be89099e5d3c7.zip gcc-658788f3480e95f1dda0a143b60be89099e5d3c7.tar.gz gcc-658788f3480e95f1dda0a143b60be89099e5d3c7.tar.bz2 |
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.
-rw-r--r-- | gcc/value-range.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/gcc/value-range.h b/gcc/value-range.h index cb5e9d0..60b989b 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 |