[PATCH] Remove type from vrange_storage::equal_p.
Aldy Hernandez
aldyh@redhat.com
Sat May 6 05:42:56 GMT 2023
On 5/3/23 13:41, Aldy Hernandez wrote:
> [Andrew, since you suggested this, is this what you had in mind?].
Pushed. You can comment when you're back from vacation :).
Aldy
>
> The equal_p method in vrange_storage is only used to compare ranges
> that are the same type. No sense passing the type if it can be
> determined from the range being compared.
>
> gcc/ChangeLog:
>
> * gimple-range-cache.cc (sbr_sparse_bitmap::set_bb_range): Do not
> pass type to vrange_storage::equal_p.
> * value-range-storage.cc (vrange_storage::equal_p): Remove type.
> (irange_storage::equal_p): Same.
> (frange_storage::equal_p): Same.
> * value-range-storage.h (class frange_storage): Same.
> ---
> gcc/gimple-range-cache.cc | 2 +-
> gcc/value-range-storage.cc | 28 +++++++++++-----------------
> gcc/value-range-storage.h | 6 +++---
> 3 files changed, 15 insertions(+), 21 deletions(-)
>
> diff --git a/gcc/gimple-range-cache.cc b/gcc/gimple-range-cache.cc
> index 92622fc5000..07c69ef858a 100644
> --- a/gcc/gimple-range-cache.cc
> +++ b/gcc/gimple-range-cache.cc
> @@ -320,7 +320,7 @@ sbr_sparse_bitmap::set_bb_range (const_basic_block bb, const vrange &r)
>
> // Loop thru the values to see if R is already present.
> for (int x = 0; x < SBR_NUM; x++)
> - if (!m_range[x] || m_range[x]->equal_p (r, m_type))
> + if (!m_range[x] || m_range[x]->equal_p (r))
> {
> if (!m_range[x])
> m_range[x] = m_range_allocator->clone (r);
> diff --git a/gcc/value-range-storage.cc b/gcc/value-range-storage.cc
> index 7d2de5e8384..1e06a7acc8d 100644
> --- a/gcc/value-range-storage.cc
> +++ b/gcc/value-range-storage.cc
> @@ -206,20 +206,22 @@ vrange_storage::fits_p (const vrange &r) const
> return false;
> }
>
> -// Return TRUE if the range in storage is equal to R.
> +// Return TRUE if the range in storage is equal to R. It is the
> +// caller's responsibility to verify that the type of the range in
> +// storage matches that of R.
>
> bool
> -vrange_storage::equal_p (const vrange &r, tree type) const
> +vrange_storage::equal_p (const vrange &r) const
> {
> if (is_a <irange> (r))
> {
> const irange_storage *s = static_cast <const irange_storage *> (this);
> - return s->equal_p (as_a <irange> (r), type);
> + return s->equal_p (as_a <irange> (r));
> }
> if (is_a <frange> (r))
> {
> const frange_storage *s = static_cast <const frange_storage *> (this);
> - return s->equal_p (as_a <frange> (r), type);
> + return s->equal_p (as_a <frange> (r));
> }
> gcc_unreachable ();
> }
> @@ -375,21 +377,17 @@ irange_storage::get_irange (irange &r, tree type) const
> }
>
> bool
> -irange_storage::equal_p (const irange &r, tree type) const
> +irange_storage::equal_p (const irange &r) const
> {
> if (m_kind == VR_UNDEFINED || r.undefined_p ())
> return m_kind == r.m_kind;
> if (m_kind == VR_VARYING || r.varying_p ())
> - return m_kind == r.m_kind && types_compatible_p (r.type (), type);
> -
> - tree rtype = r.type ();
> - if (!types_compatible_p (rtype, type))
> - return false;
> + return m_kind == r.m_kind;
>
> // ?? We could make this faster by doing the comparison in place,
> // without going through get_irange.
> int_range_max tmp;
> - get_irange (tmp, rtype);
> + get_irange (tmp, r.type ());
> return tmp == r;
> }
>
> @@ -526,17 +524,13 @@ frange_storage::get_frange (frange &r, tree type) const
> }
>
> bool
> -frange_storage::equal_p (const frange &r, tree type) const
> +frange_storage::equal_p (const frange &r) const
> {
> if (r.undefined_p ())
> return m_kind == VR_UNDEFINED;
>
> - tree rtype = type;
> - if (!types_compatible_p (rtype, type))
> - return false;
> -
> frange tmp;
> - get_frange (tmp, rtype);
> + get_frange (tmp, r.type ());
> return tmp == r;
> }
>
> diff --git a/gcc/value-range-storage.h b/gcc/value-range-storage.h
> index 4ec0da73059..f25489f32c1 100644
> --- a/gcc/value-range-storage.h
> +++ b/gcc/value-range-storage.h
> @@ -54,7 +54,7 @@ public:
> void get_vrange (vrange &r, tree type) const;
> void set_vrange (const vrange &r);
> bool fits_p (const vrange &r) const;
> - bool equal_p (const vrange &r, tree type) const;
> + bool equal_p (const vrange &r) const;
> protected:
> // Stack initialization disallowed.
> vrange_storage () { }
> @@ -68,7 +68,7 @@ public:
> static irange_storage *alloc (vrange_internal_alloc &, const irange &);
> void set_irange (const irange &r);
> void get_irange (irange &r, tree type) const;
> - bool equal_p (const irange &r, tree type) const;
> + bool equal_p (const irange &r) const;
> bool fits_p (const irange &r) const;
> void dump () const;
> private:
> @@ -111,7 +111,7 @@ class frange_storage : public vrange_storage
> static frange_storage *alloc (vrange_internal_alloc &, const frange &r);
> void set_frange (const frange &r);
> void get_frange (frange &r, tree type) const;
> - bool equal_p (const frange &r, tree type) const;
> + bool equal_p (const frange &r) const;
> bool fits_p (const frange &) const;
> private:
> frange_storage (const frange &r) { set_frange (r); }
More information about the Gcc-patches
mailing list