[LLVMdev] Running specific passes

Vladimir Prus ghost at cs.msu.su
Fri Nov 26 05:57:21 PST 2004


Hello,
in the implementation of some analysis, I need to change the program and then 
invoke Mem2Reg pass. That pass, in turn, requires other analysis, so I must 
use PassManager. Here's the code I ended up with:

        bool runOnFunction(llvm::Function& m)        
        {
            visit(m);       

            ExistingModuleProvider mp(m.getParent());
            FunctionPassManager pm(&mp);
            .....
            //m.add(createPromoteMemoryToRegister());
            pm.run(m);

There are several problems, though:

1. This looks inefficient -- the analyses necessary for Mem2Reg will be run 
again, even if they are already run by the global pass manager. But how to 
ask the global pass manager to run a pass immediately?

2. This does not work. ExistingModuleProvider takes ownership of m.getParent() 
and deletes it at the end.

3. This does not work. The Mem2Reg pass requires TargetData which does not 
seem to be available. The only reason why it requires it, is to pass to 
lib/Transforms/Utils/PromoteMemoryToRegister.cpp:isAllocaPromotable, which 
does not use that data at all.

Could anybody suggest a better solution?

- Volodya




More information about the llvm-dev mailing list