[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