[LLVMdev] IR Passes and TargetTransformInfo: Straw Man
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
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