diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2022-09-03 15:41:06 +0200 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2022-09-03 17:37:29 +0200 |
commit | dae8b9e2bbb6017bf90d68c7b720c500125c8295 (patch) | |
tree | 7f82ff761e84280258ffc14750b36f84cba718f0 /gcc/value-range.cc | |
parent | 08de065293f8b08158e1089fbacce9dbaba95077 (diff) | |
download | gcc-dae8b9e2bbb6017bf90d68c7b720c500125c8295.zip gcc-dae8b9e2bbb6017bf90d68c7b720c500125c8295.tar.gz gcc-dae8b9e2bbb6017bf90d68c7b720c500125c8295.tar.bz2 |
[PR/middle-end 106819] NANs can never be a singleton
Possible NANs can never be a singleton, so they will never be
propagated. This was the intent, and then the signed zero code crept
in, and was mistakenly checked before the NAN.
PR/middle-end 106819
gcc/ChangeLog:
* value-range.cc (frange::singleton_p): Move NAN check to the top.
gcc/testsuite/ChangeLog:
* gcc.dg/tree-ssa/pr106819.c: New test.
Diffstat (limited to 'gcc/value-range.cc')
-rw-r--r-- | gcc/value-range.cc | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/gcc/value-range.cc b/gcc/value-range.cc index 6fd6e3b..a1c29f7 100644 --- a/gcc/value-range.cc +++ b/gcc/value-range.cc @@ -632,6 +632,10 @@ frange::singleton_p (tree *result) const { if (m_kind == VR_RANGE && real_identical (&m_min, &m_max)) { + // Return false for any singleton that may be a NAN. + if (HONOR_NANS (m_type) && !get_nan ().no_p ()) + return false; + // Return the appropriate zero if known. if (HONOR_SIGNED_ZEROS (m_type) && zero_p ()) { @@ -649,11 +653,6 @@ frange::singleton_p (tree *result) const } return false; } - - // Return false for any singleton that may be a NAN. - if (HONOR_NANS (m_type) && !get_nan ().no_p ()) - return false; - if (result) *result = build_real (m_type, m_min); return true; |