diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2022-11-21 23:19:02 +0100 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2023-04-26 13:49:51 +0200 |
commit | 0ef3756adf078caf11c59470018fa56862ebc61f (patch) | |
tree | 18887f6938b351be05180b400a15af19fee79e6d /gcc/value-range.h | |
parent | 5db3d28e04e75233bca0070a0ef92bcf8eebc2f5 (diff) | |
download | gcc-0ef3756adf078caf11c59470018fa56862ebc61f.zip gcc-0ef3756adf078caf11c59470018fa56862ebc61f.tar.gz gcc-0ef3756adf078caf11c59470018fa56862ebc61f.tar.bz2 |
Remove legacy range support.
This patch removes all the code paths guarded by legacy_mode_p(), thus
allowing us to re-use the int_range<1> idiom for a range of one
sub-range. This allows us to represent these simple ranges in a more
efficient manner.
gcc/ChangeLog:
* range-op.cc (range_op_cast_tests): Remove legacy support.
* value-range-storage.h (vrange_allocator::alloc_irange): Same.
* value-range.cc (irange::operator=): Same.
(get_legacy_range): Same.
(irange::copy_legacy_to_multi_range): Delete.
(irange::copy_to_legacy): Delete.
(irange::irange_set_anti_range): Delete.
(irange::set): Remove legacy support.
(irange::verify_range): Same.
(irange::legacy_lower_bound): Delete.
(irange::legacy_upper_bound): Delete.
(irange::legacy_equal_p): Delete.
(irange::operator==): Remove legacy support.
(irange::singleton_p): Same.
(irange::value_inside_range): Same.
(irange::contains_p): Same.
(intersect_ranges): Delete.
(irange::legacy_intersect): Delete.
(union_ranges): Delete.
(irange::legacy_union): Delete.
(irange::legacy_verbose_union_): Delete.
(irange::legacy_verbose_intersect): Delete.
(irange::irange_union): Remove legacy support.
(irange::irange_intersect): Same.
(irange::intersect): Same.
(irange::invert): Same.
(ranges_from_anti_range): Delete.
(gt_pch_nx): Adjust for legacy removal.
(gt_ggc_mx): Same.
(range_tests_legacy): Delete.
(range_tests_misc): Adjust for legacy removal.
(range_tests): Same.
* value-range.h (class irange): Same.
(irange::legacy_mode_p): Delete.
(ranges_from_anti_range): Delete.
(irange::nonzero_p): Adjust for legacy removal.
(irange::lower_bound): Same.
(irange::upper_bound): Same.
(irange::union_): Same.
(irange::intersect): Same.
(irange::set_nonzero): Same.
(irange::set_zero): Same.
* vr-values.cc (simplify_using_ranges::legacy_fold_cond_overflow): Same.
Diffstat (limited to 'gcc/value-range.h')
-rw-r--r-- | gcc/value-range.h | 64 |
1 files changed, 6 insertions, 58 deletions
diff --git a/gcc/value-range.h b/gcc/value-range.h index b47540d..c37b6ef 100644 --- a/gcc/value-range.h +++ b/gcc/value-range.h @@ -120,7 +120,6 @@ class GTY((user)) irange : public vrange { friend value_range_kind get_legacy_range (const irange &, tree &, tree &); friend class vrange_allocator; - friend class irange_storage_slot; // For legacy_mode_p checks. public: // In-place setters. virtual void set (tree, tree, value_range_kind = VR_RANGE) override; @@ -170,8 +169,6 @@ public: // Deprecated legacy public methods. tree min () const; // DEPRECATED tree max () const; // DEPRECATED - bool legacy_verbose_union_ (const class irange *); // DEPRECATED - bool legacy_verbose_intersect (const irange *); // DEPRECATED protected: irange (tree *, unsigned); @@ -190,16 +187,8 @@ protected: void normalize_kind (); - bool legacy_mode_p () const; - bool legacy_equal_p (const irange &) const; - void legacy_union (irange *, const irange *); - void legacy_intersect (irange *, const irange *); void verify_range (); - wide_int legacy_lower_bound (unsigned = 0) const; - wide_int legacy_upper_bound (unsigned) const; int value_inside_range (tree) const; - void copy_to_legacy (const irange &); - void copy_legacy_to_multi_range (const irange &); private: friend void gt_ggc_mx (irange *); @@ -242,12 +231,6 @@ private: template <unsigned X> friend void gt_pch_nx (int_range<X> *, gt_pointer_operator, void *); - // ?? These stubs are for ipa-prop.cc which use a value_range in a - // hash_traits. hash-traits.h defines an extern of gt_ggc_mx (T &) - // instead of picking up the gt_ggc_mx (T *) version. - friend void gt_ggc_mx (int_range<1> *&); - friend void gt_pch_nx (int_range<1> *&); - tree m_ranges[N*2]; }; @@ -485,15 +468,7 @@ public: virtual void visit (const unsupported_range &) const { } }; -// This is a special int_range<1> with only one pair, plus -// VR_ANTI_RANGE magic to describe slightly more than can be described -// in one pair. It is described in the code as a "legacy range" (as -// opposed to multi-ranges which have multiple sub-ranges). It is -// provided for backward compatibility with code that has not been -// converted to multi-range irange's. -// -// There are copy operators to seamlessly copy to/fro multi-ranges. -typedef int_range<1> value_range; +typedef int_range<2> value_range; // This is an "infinite" precision irange for use in temporary // calculations. @@ -662,15 +637,6 @@ Value_Range::supports_type_p (const_tree type) return irange::supports_p (type) || frange::supports_p (type); } -// Returns true for an old-school value_range as described above. -inline bool -irange::legacy_mode_p () const -{ - return m_max_ranges == 1; -} - -extern bool ranges_from_anti_range (const value_range *, - value_range *, value_range *); extern value_range_kind get_legacy_range (const irange &, tree &min, tree &max); extern void dump_value_range (FILE *, const vrange *); extern bool vrp_val_is_min (const_tree); @@ -810,7 +776,7 @@ irange::nonzero_p () const return false; tree zero = build_zero_cst (type ()); - return *this == int_range<1> (zero, zero, VR_ANTI_RANGE); + return *this == int_range<2> (zero, zero, VR_ANTI_RANGE); } inline bool @@ -977,8 +943,6 @@ irange::set_varying (tree type) inline wide_int irange::lower_bound (unsigned pair) const { - if (legacy_mode_p ()) - return legacy_lower_bound (pair); gcc_checking_assert (m_num_ranges > 0); gcc_checking_assert (pair + 1 <= num_pairs ()); return wi::to_wide (tree_lower_bound (pair)); @@ -990,8 +954,6 @@ irange::lower_bound (unsigned pair) const inline wide_int irange::upper_bound (unsigned pair) const { - if (legacy_mode_p ()) - return legacy_upper_bound (pair); gcc_checking_assert (m_num_ranges > 0); gcc_checking_assert (pair + 1 <= num_pairs ()); return wi::to_wide (tree_upper_bound (pair)); @@ -1010,21 +972,13 @@ irange::upper_bound () const inline bool irange::union_ (const vrange &r) { - dump_flags_t m_flags = dump_flags; - dump_flags &= ~TDF_DETAILS; - bool ret = irange::legacy_verbose_union_ (&as_a <irange> (r)); - dump_flags = m_flags; - return ret; + return irange_union (as_a <irange> (r)); } inline bool irange::intersect (const vrange &r) { - dump_flags_t m_flags = dump_flags; - dump_flags &= ~TDF_DETAILS; - bool ret = irange::legacy_verbose_intersect (&as_a <irange> (r)); - dump_flags = m_flags; - return ret; + return irange_intersect (as_a <irange> (r)); } // Set value range VR to a nonzero range of type TYPE. @@ -1033,10 +987,7 @@ inline void irange::set_nonzero (tree type) { tree zero = build_int_cst (type, 0); - if (legacy_mode_p ()) - set (zero, zero, VR_ANTI_RANGE); - else - irange_set_anti_range (zero, zero); + irange_set_anti_range (zero, zero); } // Set value range VR to a ZERO range of type TYPE. @@ -1045,10 +996,7 @@ inline void irange::set_zero (tree type) { tree z = build_int_cst (type, 0); - if (legacy_mode_p ()) - set (z, z); - else - irange_set (z, z); + irange_set (z, z); } // Normalize a range to VARYING or UNDEFINED if possible. |