aboutsummaryrefslogtreecommitdiff
path: root/gcc/value-range.h
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2022-11-21 23:19:02 +0100
committerAldy Hernandez <aldyh@redhat.com>2023-04-26 13:49:51 +0200
commit0ef3756adf078caf11c59470018fa56862ebc61f (patch)
tree18887f6938b351be05180b400a15af19fee79e6d /gcc/value-range.h
parent5db3d28e04e75233bca0070a0ef92bcf8eebc2f5 (diff)
downloadgcc-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.h64
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.