[LLVMdev] IR Passes and TargetTransformInfo: Straw Man

Shuxin Yang shuxin.llvm at gmail.com
Wed Jul 31 11:02:56 PDT 2013

>> I'm talking about perfect loop nests, as in the classical fortran loop
>> transformation sense.
> Most nest optimizations only apply to perfect nests.  Each such 
> optimization could try to "fix" the nest for its own purposes, but it 
> would be a lot of duplicated effort.

If each L.N.O pass have to fix by itself, I would say this LNO component 
is pretty lame.
IMHO, It is natural to run a preparation pass to shape the loop nests 
into a shape such that following
LNO optimizers feel comfortable to kick in.  Such preparation/fix pass 
should include getting rid
of imperfect part, fusion, fission on individual nests or the 
neighboring nests, at appropriate nest level.

In theory, you are always possible to get rid of imperfect part by 
tugging them into the loop with
a condition like "if "iv == 1st iteration", or if possible you can 
distribute the imperfect part.
I don't think the imperfect part created by LICM need such expensive 
transformation; you just
place them back to appropriate loop.  In this sense, LICM should be 
become the culprit for disabling
some optimizers.

You might argue  running LICM early will miss the opportunities created 
by permutation. True.
But, now that permutation has detailed dep-test result, it clearly 
understand which mem-access
is invariant w.r.t which nest loop, why not move them to right place. It 
is trivial for such optimizers,
but it seems to be quite hard for following scalar optimizer, unless it 
can afford running expensive
dependence test again.

IMHO, I don't see strong disadvantage run LICM either before or after LNO.

More information about the llvm-dev mailing list