aboutsummaryrefslogtreecommitdiff
path: root/gcc/value-range.cc
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2022-09-03 15:41:06 +0200
committerAldy Hernandez <aldyh@redhat.com>2022-09-03 17:37:29 +0200
commitdae8b9e2bbb6017bf90d68c7b720c500125c8295 (patch)
tree7f82ff761e84280258ffc14750b36f84cba718f0 /gcc/value-range.cc
parent08de065293f8b08158e1089fbacce9dbaba95077 (diff)
downloadgcc-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.cc9
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;