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: LOOP_HEADER tree code?


On Wed, 2006-10-25 at 10:31 -0700, Devang Patel wrote:
> > Hello,
> >
> > for project http://gcc.gnu.org/wiki/PreservingLoops, I am considering
> > introducing a tree LOOP_HEADER with single argument N (number of
> > iterations of the loop), that would be present in IL at the beginning of
> > header of each loop.  I have following motivations:
> >
> >1) One of the goals of the project is to avoid recomputing number of
> >   iterations of loops, and to keep this information (analysing # of
> >   iterations is fairly expensive, and we recompute this information
> >   quite a lot at the moment).  To keep the information valid, we need
> >   to prevent optimizations from destroying it (e.g., if the number
> >   is n_1 = n_2 - 1, and this is the last use of n_1, we do not want
> >   DCE to remove it); this is easy to achieve if n_1 would be the
> >   argument of LOOP_HEADER.  Without this tree node in IL, we would need
> >   to handle this specially in DCE, and possibly also other optimizers.
> >2) This statement might make it simpler to ensure that various
> >   optimizers update the loops correctly.
> 
> However, various optimizer needs to know about this special tree node.
> Or am I missing something?
Correct.  Take for example jump threading -- it can peel off a loop
iteration which would invalidate the LOOP_HEADER node.  That seems
like a recipe for disaster.

Code motion passes would have to be aware of this special node as well.
And we've seen how well that works in the RTL backend with its loop
notes -- it was a major PITA.

I'd rather not repeat the mistakes we've already made.

Jeff



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