aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2023-01-26 04:46:54 +0100
committerAldy Hernandez <aldyh@redhat.com>2023-04-18 15:22:23 +0200
commit10e481b154c5fc63e6ce4b449ce86cecb87a6015 (patch)
tree918728044c2eca9b0f877a7ed9f70ea3984bac91 /gcc
parent4d747ea3a4e5b94eda4a46dada0726eaa1b7b5fd (diff)
downloadgcc-10e481b154c5fc63e6ce4b449ce86cecb87a6015.zip
gcc-10e481b154c5fc63e6ce4b449ce86cecb87a6015.tar.gz
gcc-10e481b154c5fc63e6ce4b449ce86cecb87a6015.tar.bz2
Return true from operator== for two identical ranges containing NAN.
The == operator for ranges signifies that two ranges contain the same thing, not that they are ultimately equal. So [2,4] == [2,4], even though one may be a 2 and the other may be a 3. Similarly with two VARYING ranges. There is an oversight in frange::operator== where we are returning false for two identical NANs. This is causing us to never cache NANs in sbr_sparse_bitmap::set_bb_range. gcc/ChangeLog: * value-range.cc (frange::operator==): Adjust for NAN. (range_tests_nan): Remove some NAN tests.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/value-range.cc10
1 files changed, 0 insertions, 10 deletions
diff --git a/gcc/value-range.cc b/gcc/value-range.cc
index c14a27e..8b5d0cb 100644
--- a/gcc/value-range.cc
+++ b/gcc/value-range.cc
@@ -681,9 +681,6 @@ frange::operator== (const frange &src) const
if (varying_p ())
return types_compatible_p (m_type, src.m_type);
- if (known_isnan () || src.known_isnan ())
- return false;
-
return (real_identical (&m_min, &src.m_min)
&& real_identical (&m_max, &src.m_max)
&& m_pos_nan == src.m_pos_nan
@@ -3801,13 +3798,6 @@ range_tests_nan ()
ASSERT_TRUE (r0.maybe_isnan ());
}
- // NAN ranges are not equal to each other.
- r0.set_nan (float_type_node);
- r1 = r0;
- ASSERT_FALSE (r0 == r1);
- ASSERT_FALSE (r0 == r0);
- ASSERT_TRUE (r0 != r0);
-
// [5,6] U NAN = [5,6] NAN.
r0 = frange_float ("5", "6");
r0.clear_nan ();