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?

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