On Wed, Apr 22, 2020 at 11:26 AM Richard Sandiford
<richard.sandif...@arm.com> wrote:
>
> Richard Biener via Gcc-patches <gcc-patches@gcc.gnu.org> writes:
> > On Mon, Apr 20, 2020 at 3:38 PM Segher Boessenkool
> > <seg...@kernel.crashing.org> wrote:
> >>
> >> Hi!
> >>
> >> On Mon, Apr 20, 2020 at 09:56:34AM +0200, Richard Biener wrote:
> >> > On Fri, Apr 17, 2020 at 10:51 PM Segher Boessenkool
> >> > <seg...@kernel.crashing.org> wrote:
> >> > > > Yeah well, but RTL is not in SSA form
> >> > >
> >> > > "Webs" are not the *same* as SSA, in a few crucial ways; but they serve
> >> > > similar purposes: they both make code transformations easier to do.
> >> > > Both do this by having more different (independent) names.
> >> > >
> >> > > > and there's no RTL IL verification
> >> > > > in place to track degradation.
> >> > >
> >> > > Adding this isn't hard in principle.  But currently it is violated all
> >> > > over the place, including in backend code.
> >> >
> >> > It's a cheap excuse and clearly a lot of work.  But we've done it for 
> >> > GIMPLE
> >> > and it was clearly worth it.  If only for documentation purposes.
> >>
> >> Yes, I very much agree :-)  But how will we do this?  Make it warnings
> >> only, and have those opt-in (for a port) even?
> >
> > Add -fcheck-rtl, when you're ready (per port?) make it default for
> > bootstrap.  When you're even more "ready", turn it on with -fchecking
> > (or --enable-checking=xyz).
>
> What kind of condition would we be checking?  That no register has two
> definitions in the same block?  Or something stronger?

For the particular discussion no idea.  But we generally lack
verification of what is "valid" RTL and what is not.

> Testing that -fweb would have no effect is expensive, since it requires
> full UD chains.  And there's a risk that optimisations could break the
> condition accidentally.  E.g.:
>
>    if (cond)
>      {
>        x = ...;
>        ...use x...;
>      }
>    else
>      {
>        x = ...;
>        ...use x...;
>      }
>    ...use x...; // A, REG_DEAD x
>
> If anything managed to fold away the need for x in A (e.g. combine),
> it would then be required to rename x in one of the if/else blocks.
>
> In some ways it feels like it would be easier to resurrect RTL SSA :-)
>
> Thanks,
> Richard

Reply via email to