[LLVMdev] PassManager

Chris Lattner sabre at nondot.org
Tue Nov 7 11:56:55 PST 2006


On Tue, 7 Nov 2006, Vikram Adve wrote:
> I read Chris's notes so I got all this information there already.  My
> comments were in response to that.

It's unclear what you're missing then: fusion can be easily handled by the 
framework.  Unimodular transform support is orthogonal to the pass 
framework and could be built as a later step.  Am I misunderstanding your 
question?

-Chris

> On Nov 7, 2006, at 12:34 PM, Devang Patel wrote:
>
>> Hi Vikram,
>>
>> On Nov 7, 2006, at 10:19 AM, Vikram Adve wrote:
>>
>>> Chris and Devang,
>>>
>>> Before you implement the LoopPassManager class, I'd like to discuss
>>> this a little bit.  I have a suggestion and a question; we can
>>> discuss this now or later, as you wish:
>>>
>>> 1. The LoopPassManager might become much simpler if the more complex
>>> loop passes are given control over how they iterate over the loops,
>>> rather always rely on the manager to enumerate the loops in some
>>> fixed order.  Then the pass could be responsible for making sure that
>>> it handles issues like loops that are deleted during the pass.
>>
>> LoopPassManager will manage the LoopInfo. It will maintain loop
>> priority queue and expose APIs to add/remove loops that
>> transformations can use.
>>
>>
>>> For
>>> example, some algorithms make internal decisions about which loops to
>>> handle together and also what order to visit them.  For example, the
>>> LoopFusion class may need to inspect loop headers to decide which
>>> subsets of loops to fuse and then fuse them as it goes.
>>
>> LoopPassManager will expose two virtual methods.
>>
>> 1) runOnLoop(Loop &L, LoopPassManger &LPM)
>>
>>       Loop transformation can override to process this particular
>> loop.
>>
>> 2) runOnFunctionBody(Function &F, Loop&L, LoopPassManager &LPM)
>>
>>      LoopFusion and others can override this to to analyze and process
>> multiple loops.
>>
>>>
>>> I think you could do this just by adding an iterator method somewhere
>>> that enumerates sets of loops (i.e,. returns a vector of Loop
>>> objects).  The bottom-up iterator could just be a default choice.
>>>
>>> 2. The question is how you plan to handle unimodular
>>> transformations.  I think it's a very nice abstraction and a number
>>> of loop transforms should be implemented using that rather than more
>>> ad hoc code, e.g., interchange, reversal, skewing.  But that requires
>>> implementing support for unimodular transforms before those passes
>>> are implemented.
>>
>> I have not yet spent enough time to think about unimodular
>> transformation framework implementation.
>>
>> -
>> Devang
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>

-Chris

-- 
http://nondot.org/sabre/
http://llvm.org/



More information about the llvm-dev mailing list