[tree-ssa] Out of SSA status and issues
Diego Novillo
dnovillo@redhat.com
Tue May 13 13:11:00 GMT 2003
On Tue, 2003-05-13 at 08:56, Michael Matz wrote:
> Hi,
>
> On 13 May 2003, Diego Novillo wrote:
>
> > Why?
> >
> > 1. foo()
> > 2. {
> > 3. int i, *p;
> > 4.
> > 5. p = malloc();
> > 6. i = *p;
> > 7. return i + 9;
> > 8. }
> >
> > I see nothing wrong in replacing 'i + 9' with '*p + 9'.
>
> I do. *p could have been changed in between 6 and 7.
>
The above is a complete program, *p has not changed between 6 and 7 nor
it is volatile.
> I.e. *p is not a register but an expression, and a copy instruction copies
> registers to registers.
>
Not in tree-ssa. INDIRECT_REFs are first-class variables. Since in
GIMPLE pointers can only be one level deep, we can maintain SSA version
numbers for the pointer and the pointed-to memory location. Granted, it
is somewhat painful (see my other message in this thread) and I'm
starting to think that it may not be sufficiently worth the pain.
> > Not that tree-ssa will do anything with this code, the default
> > type-based aliasing is too conservative, but PTA may disambiguate this.
>
> Of course you _can_ optimize such cases, but it's not a subset of copy
> propagation but, hmm, un-PRE or something like that.
>
It is if INDIRECT_REFs are treated as regular variables, like we
currently do. I agree that otherwise you need to treat them as
expressions. If we stopped dealing with INDIRECT_REFs as first-class
variables, we would probably move this in to the hands of SSAPRE.
Diego.
More information about the Gcc
mailing list