[LLVMdev] Controlling the order of a FunctionPass

John Criswell criswell at uiuc.edu
Fri Jul 23 23:15:49 PDT 2010


Nick Lewycky wrote:
> John Criswell wrote:
>   
>> Trevor Harmon wrote:
>>     
>>> On Jul 22, 2010, at 2:05 PM, John Criswell wrote:
>>>
>>>
>>>       
>>>> If you write your pass as a ModulePass, then you can iterate over the
>>>> functions in any order that you want.
>>>>
>>>>         
>>> I had considered that, but my FunctionPass depends on other passes
>>> processing the functions first:
>>>
>>>       
>> Two things to consider:
>>
>> 1) The PassManager isn't currently designed to schedule prerequisite
>> *transform* passes (like UnifyFunctionExitNodes).  If your pass requires
>> that another transform pass be executed first, then the PassManager must
>> be explicitly told (via the PassManager.add() method) to run that pass
>> first.  If you're running your pass via the opt tool, then it means that
>> the user must manually specify the prerequisite passes in the correct
>> order (e.g., opt -load<your pass filename>  -mergereturn -<your pass
>> name>).  If you're building a separate program that schedules the
>> passes, then it needs to run the prerequisite passes first.
>>     
>
> What?? Sure it does. See all the passes which require BreakCritEdges or 
> LCSSA for examples.
>   

Interesting.  I was told that PassManager did not (in general) support 
this feature and had to refactor Automatic Pool Allocation and SAFECode 
passes to not require transform passes.  Perhaps problems only manifest 
when you have weird passes like Automatic Pool Allocation which act as 
both a transform and an analysis pass.

-- John T.




More information about the llvm-dev mailing list