[LLVMdev] IR Passes and TargetTransformInfo: Straw Man

Krzysztof Parzyszek kparzysz at codeaurora.org
Wed Jul 31 10:40:42 PDT 2013

On 7/31/2013 12:20 PM, Chris Lattner wrote:
> On Jul 31, 2013, at 6:53 AM, Krzysztof Parzyszek
> <kparzysz at codeaurora.org <mailto:kparzysz at codeaurora.org>> wrote:
>> On 7/30/2013 11:44 PM, Chris Lattner wrote:
>>> The canonical form should be that loop invariants are hoisted.
>> The canonical form should not depend on the knowledge as to what is
>> invariant and what isn't.  It has more to do with preserving certain
>> "common" properties of a loop, such as header, preheader, latch
>> branch, etc.
> Canonicalization of the IR is not about guarantees, it is about what
> assumptions passes can make and what form they have to tolerate.

Then the transformations that need to assume that invariants were 
hoisted could be run after LICM.  Since loops are defined in terms of 
regions (back-edges), what makes sense is a canonical form that 
normalizes the structure into a common form.  Whether the invariants are 
hoisted or not doesn't need to be a part of that.

>>> Optimizations should not depend on perfect loops.
>> What do you mean by "perfect loops"?  I was talking about perfect nests.
> 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.

Whatever c-n does, it should not be getting in the way.


Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, 
hosted by The Linux Foundation

More information about the llvm-dev mailing list