[PATCH] tree-inline: Fix TREE_READONLY of parameter replacements

Richard Biener rguenther@suse.de
Wed Jun 23 13:24:44 GMT 2021


On Wed, 23 Jun 2021, Martin Jambor wrote:

> Hi,
> 
> On Wed, Jun 23 2021, Richard Biener wrote:
> > On Wed, 23 Jun 2021, Martin Jambor wrote:
> >
> >> Hi,
> >> 
> >> tree-inline leaves behind VAR_DECLs which are TREE_READONLY (because
> >> they are copies of const parameters) but are written to because they
> >> need to be initialized.  This patch resets the flag if any
> >> initialization is performed, regardless of if the type needs
> >> construction or not.
> >
> > I wonder if even that is premature optimization - it also removes
> > a still useful comment.  So why not at the same place simply do
> >
> >   /* Even if P was TREE_READONLY, the new VAR should not be.
> >      In the original code, we would have constructed a
> >      temporary, and then the function body would have never
> >      changed the value of P.  However, now, we will be
> >      constructing VAR directly.  Therefore, it must not
> >      be TREE_READONLY.  */ 
> >   TREE_READONLY (var) = 0;
> >
> > ?  Since technically when in SSA form you wouldn't need to bother
> > either, so your placement looks both premature and not good enough
> > optimization.
> >
> > Did you check the above suggestion already and it failed for some
> > reason?
> >
> 
> No, I believe the above would work fine.  I just looked at the code and
> the TREE_READONLY resetting is now just above two early exits which only
> do an insert_init_debug_bind, so I thought it made sense to move the
> reset of TREE_READONLY only to the same branch which actually generates
> a write to var.

Yeah, but we _do_ create the var and register it as copy of p earlier

  insert_decl_map (id, p, var);

so it seems consistent to adjust things whether or not there are
actual writes.

> But only because I thought it would be more consistent, and "feel" more
> logical, not as an optimization.  I do not think it makes any difference
> in practice.  So if your feelings are different, I can certainly leave
> it where it is.
> 
> As far as the comment is concerned, I like having comments about almost
> everything, but this one seemed to me a bit too obvious, especially with
> the TYPE_NEEDS_CONSTRUCTING condition removed.  But I can certainly keep
> it too.

Yes to both please.  OK with those changes.

Thanks,
Richard.


More information about the Gcc-patches mailing list