This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [tree-ssa] Out of SSA status and issues


On Tue, 2003-05-13 at 08:50, Andrew MacLeod wrote:
> On Tue, 2003-05-13 at 08:42, Diego Novillo wrote:
> > On Tue, 2003-05-13 at 05:07, Michael Matz wrote:
> > 
> > > An indirect reference is not a copy.  I don't know if tree-ssa thinks it
> > > is, but it definitely shouldn't.
> > > 
> > 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'.  It would
> > probably not be efficient, but I can't see it being wrong.
> > 
> > Not that tree-ssa will do anything with this code, the default
> > type-based aliasing is too conservative, but PTA may disambiguate this.
> 
> There is nothing wrong with it, as long as you know for sure that *p
> hasn't changed between 'i = *p' and 'i+9'. Copyprop doesnt look for
> that. All it does is says 'i = *p', I can replace all occurences of i
> with *p...
> 
Yes.  After I finish the patch to proper rename INDIRECT_REFs, the code
above should be rewritten into:

     1. foo()
     2. {
     3.   int i, *p;
     4. 
     5.   p_1 = malloc();
     6.   i_2 = *(p_1)_3;
     7.   return i_2 + 9;
     8. }

Now I ask, suppose that we insert a new definition for 'p' in between
lines 6 and 7:

     1. foo()
     2. {
     3.   int i, *p;
     4. 
     5.   p_1 = malloc();
     6.   i_2 = *(p_1)_3;
     7.   p_4 = malloc();
     8.   return i_2 + 9;
     9. }

Copyprop and DCE now convert this code into:

     1. foo()
     2. {
     3.   int *p;
     4. 
     5.   p_1 = malloc();
     6.   p_4 = malloc();
     7.   return *(p_1)_3 + 9;
     8. }

Will the coalescer DTRT here?  Yes, it's a silly transformation, but I'm
wondering if we don't have a bigger problem here.  I've been toying with
the idea of not bothering with renaming INDIRECT_REFs *at all*.  We
certainly get little benefit from it because they are often aliased and
it really is somewhat painful to deal with them.


Diego.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]