On Tue, May 27, 2025 at 5:14 AM Richard Biener
<richard.guent...@gmail.com> wrote:
>
> On Tue, May 27, 2025 at 5:02 AM Andrew Pinski <quic_apin...@quicinc.com> 
> wrote:
> >
> > This was noticed in the review of copy propagation for aggregates
> > patch, instead of checking for a NULL or a non-ssa name of vuse,
> > we should instead check if it the vuse is a default name and stop
> > then.
> >
> > Bootstrapped and tested on x86_64-linux-gnu.
> >
> > gcc/ChangeLog:
> >
> >         * tree-ssa-forwprop.cc (optimize_memcpy_to_memset): Change check
> >         from NULL/non-ssa name to default name.
> >
> > Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>
> > ---
> >  gcc/tree-ssa-forwprop.cc | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc
> > index 4c048a9a298..e457a69ed48 100644
> > --- a/gcc/tree-ssa-forwprop.cc
> > +++ b/gcc/tree-ssa-forwprop.cc
> > @@ -1226,7 +1226,8 @@ optimize_memcpy_to_memset (gimple_stmt_iterator 
> > *gsip, tree dest, tree src, tree
> >    gimple *defstmt;
> >    unsigned limit = param_sccvn_max_alias_queries_per_access;
> >    do {
> > -    if (vuse == NULL || TREE_CODE (vuse) != SSA_NAME)
> > +    /* If the vuse is the default definition, then there is no stores 
> > beforhand. */
> > +    if (SSA_NAME_IS_DEFAULT_DEF (vuse))
>
> Since forwprop does update_ssa in the end I was wondering whether any
> bare non-SSA VUSE/VDEFs sneak in - for this the != SSA_NAME check
> would be useful.  On a GIMPLE stmt gimple_vuse () will return NULL
> when it's not a load or store (or with a novops call), as you are using
> gimple_store_p/gimple_assign_load_p there might be a disconnect
> between those predicates and the presence of a vuse (I hope not, but ...)
>
> The patch looks OK to me, the comments above apply to the copy propagation 
> case.

The copy prop case should be ok too since the vuse/vdef on the
statement does not change when doing the prop; only the rhs of the
statement. There is no inserting of a statement.  This is unless we
remove the statement and then unlink_stmt_vdef will prop the vuse into
the vdef of the statement which we are removing.

I did test the copy prop using just SSA_NAME_IS_DEFAULT_DEF and there
were no regressions there either.

When optimize_memcpy_to_memset was part of fold_stmt, a NULL vuse
and/or a non-SSA vuse was common due to running before ssa. This was
why there was a check for non-SSA.
I am not sure why there was a check for NULLness was there when it was
part of fold-all-builtins though.

On a side note I think many passes have TODO_update_ssa on them when
they already keep the ssa up to date now. I wonder if most of that
dates from the days of VMUST_DEF/VMAY_DEF and multiple names on them
rather than one virtual name.

Thanks,
Andrew


>
> Thanks,
> Richard.
>
> >        return false;
> >      defstmt = SSA_NAME_DEF_STMT (vuse);
> >      if (is_a <gphi*>(defstmt))
> > --
> > 2.43.0
> >

Reply via email to