Hi Andrew,

On Tue, 17 May 2022 14:38:39 -0400
Andrew MacLeod via Gcc-patches <gcc-patches@gcc.gnu.org> wrote:

> commit b7501739f3b14ac7749aace93f636d021fd607f7
> Author: Andrew MacLeod <amacl...@redhat.com>
> Date:   Mon May 9 15:35:14 2022 -0400

> diff --git a/gcc/gimple-range-cache.cc b/gcc/gimple-range-cache.cc
> index d3cf8be9bd8..56f4577cfbb 100644
> --- a/gcc/gimple-range-cache.cc
> +++ b/gcc/gimple-range-cache.cc
> @@ -1545,81 +1426,42 @@ ranger_cache::range_from_dom (irange &r, tree name, 
> basic_block start_bb,

>  void
> -ranger_cache::update_to_nonnull (basic_block bb, tree name)
> +ranger_cache::apply_side_effects (gimple *s)
>  {

> -  if (TREE_CODE (op) == MEM_REF || TREE_CODE (op) == TARGET_MEM_REF)
> +  // Do not update the on-netry cache for block ending stmts.

s/on-netry/on-entry/

> diff --git a/gcc/gimple-range-side-effect.cc b/gcc/gimple-range-side-effect.cc
> new file mode 100644
> index 00000000000..2c8c77dc569
> --- /dev/null
> +++ b/gcc/gimple-range-side-effect.cc

> +// -------------------------------------------------------------------------
> +
> +// This class is an element in list of side effect ranges.

s/in list/in the list/

> +// Construct a side effects manager.  DO_SEARCH indicates whether an 
> immediate
> +// use scan should be made the first time a name is processed.  This is for
> +// on-demand clients who may not visit every statement and may miss uses.

may otherwise miss uses, i suppose. But ok.

> diff --git a/gcc/gimple-range-side-effect.h b/gcc/gimple-range-side-effect.h
> new file mode 100644
> index 00000000000..848d94ba6d7
> --- /dev/null
> +++ b/gcc/gimple-range-side-effect.h
> @@ -0,0 +1,82 @@

> +// New side effects should added in the constructor of this class.

s/should added/should be added/

> +
> +class stmt_side_effects
> +{

> +};
> +
> +// This class manages a list of side effect ranges for each basic block.
> +// As side effects are seen, they can be registered to a block and later
> +// queried.  WHen constructed with a TRUE flag, immediate uses chains are
> +// followed the first time a name is referenced and block populated if
> +// thre are any side effects.

s/WHen/When/
s/thre are/there are/

> +
> +class side_effect_manager
> +{

> diff --git a/gcc/gimple-range.cc b/gcc/gimple-range.cc
> index 1fdee026a4b..f5e9e77bc71 100644
> --- a/gcc/gimple-range.cc
> +++ b/gcc/gimple-range.cc

> @@ -118,9 +118,11 @@ gimple_ranger::range_of_expr (irange &r, tree expr, 
> gimple *stmt)
>        // If name is defined in this block, try to get an range from S.
>        if (def_stmt && gimple_bb (def_stmt) == bb)
>       {
> -       // Check for a definition override from a block walk.
> -       if (!POINTER_TYPE_P (TREE_TYPE (expr))
> -           || !m_cache.block_range (r, bb, expr, false))
> +       // Declared in ths block, if it has a global set, check for an
> +       // override from a block walk, otherwise calculate it.

s/ths/this/

And, btw, i see
In file included from ../../../src/gcc-13.mine/gcc/tree-vrp.h:23,
                 from ../../../src/gcc-13.mine/gcc/ssa.h:28,
                 from ../../../src/gcc-13.mine/gcc/gimple-warn-types.cc:30:
../../../src/gcc-13.mine/gcc/value-range.h: In member function ‘unsigned int 
irange::num_pairs() const’:
../../../src/gcc-13.mine/gcc/value-range.h:217:22: warning: Function 
‘num_pairs’ could return ‘unsigned char’ [--all-warnings]
  217 | irange::num_pairs () const
      |                      ^~~~~
      |                      unsigned char
../../../src/gcc-13.mine/gcc/value-range.h:217:22: note: with a range of [0,255]

The C++ member function decl result locations are all wrong, i know,
but i think the warning is correct. We've got:
class GTY((user)) irange
{
  unsigned char m_num_ranges;
}
but
inline unsigned
irange::num_pairs () const
{ 
  if (m_kind == VR_ANTI_RANGE)
    return constant_p () ? 2 : 1;
  else
    return m_num_ranges;
}

thanks,

Reply via email to