diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2022-08-01 20:19:49 +0200 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2022-08-02 14:50:25 +0200 |
commit | 5e4f26441bdc89e95f0c257bc6649eed0142b939 (patch) | |
tree | a2c2cec0453097fe70d4432306ec043fed9ee0c1 /gcc/value-range.cc | |
parent | 0f3514756e0b4d8993ee43dcd958974eb1424061 (diff) | |
download | gcc-5e4f26441bdc89e95f0c257bc6649eed0142b939.zip gcc-5e4f26441bdc89e95f0c257bc6649eed0142b939.tar.gz gcc-5e4f26441bdc89e95f0c257bc6649eed0142b939.tar.bz2 |
More frange::set cleanups.
gcc/ChangeLog:
* value-range.cc (frange::set): Initialize m_props and cleanup.
Diffstat (limited to 'gcc/value-range.cc')
-rw-r--r-- | gcc/value-range.cc | 47 |
1 files changed, 28 insertions, 19 deletions
diff --git a/gcc/value-range.cc b/gcc/value-range.cc index dc06f8b..dd5a430 100644 --- a/gcc/value-range.cc +++ b/gcc/value-range.cc @@ -292,38 +292,47 @@ frange::set (tree min, tree max, value_range_kind kind) m_kind = kind; m_type = TREE_TYPE (min); - - // Mark NANness. - if (real_isnan (TREE_REAL_CST_PTR (min)) - || real_isnan (TREE_REAL_CST_PTR (max))) - { - gcc_checking_assert (operand_equal_p (min, max)); - m_props.nan_set_yes (); - } - else - m_props.nan_set_no (); + m_props.set_varying (); bool is_min = vrp_val_is_min (min); bool is_max = vrp_val_is_max (max); + bool is_nan = (real_isnan (TREE_REAL_CST_PTR (min)) + || real_isnan (TREE_REAL_CST_PTR (max))); - // Mark when the endpoints can't be INF. - if (!is_min) - m_props.ninf_set_no (); - if (!is_max) - m_props.inf_set_no (); + // Ranges with a NAN and a non-NAN endpoint are nonsensical. + gcc_checking_assert (!is_nan || operand_equal_p (min, max)); - // Mark when the endpoints are definitely INF. + // The properties for singletons can be all set ahead of time. if (operand_equal_p (min, max)) { + // Set INF properties. if (is_min) m_props.ninf_set_yes (); - else if (is_max) + else + m_props.ninf_set_no (); + if (is_max) m_props.inf_set_yes (); + else + m_props.inf_set_no (); + // Set NAN property. + if (is_nan) + m_props.nan_set_yes (); + else + m_props.nan_set_no (); + } + else + { + // Mark when the endpoints can't be +-INF. + if (!is_min) + m_props.ninf_set_no (); + if (!is_max) + m_props.inf_set_no (); } // Check for swapped ranges. - gcc_checking_assert (m_props.nan_yes_p () - || tree_compare (LE_EXPR, min, max)); + gcc_checking_assert (is_nan || tree_compare (LE_EXPR, min, max)); + + normalize_kind (); if (flag_checking) verify_range (); |