[LLVMdev] Controlling the order of a FunctionPass

Devang Patel devang.patel at gmail.com
Mon Jul 26 11:44:59 PDT 2010

On Fri, Jul 23, 2010 at 9:26 PM, Nick Lewycky <nicholas at mxc.ca> 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.

Its not recommended. Note, all the interfaces are .. "getAnalysis..."
and never "getTransformation..." :)

More information about the llvm-dev mailing list