[LLVMdev] Function Pass Manager

Ivan Llopard ivanllopard at gmail.com
Fri Mar 23 09:00:32 PDT 2012


Hi,

I'm writing a function pass which is dynamically loaded by opt and I 
need some analysis and passes to be run before my pass:

     virtual void getAnalysisUsage(AnalysisUsage &AU) const {
       AU.addRequired<LoopInfo>();
       AU.addPreserved<LoopInfo>();
       AU.addRequiredID(LoopSimplifyID);
       AU.addPreservedID(LoopSimplifyID);
       AU.addRequiredID(LCSSAID);
       AU.addPreservedID(LCSSAID);
       AU.addRequired<ScalarEvolution>();
       AU.addPreserved<ScalarEvolution>();
     }

When I run it with opt -load, I'm getting the following error:

Unable to schedule 'Canonicalize natural loops' required by 'MyPass'
Unable to schedule pass

After looking at the pass manager framework, it seems that passes with 
lower level than FunctionPass (such as LoopPass in my particular case) 
cannot be scheduled on-the-fly or must be handled by specific function 
managers. This is not the case for module passes, i.e. module passes 
requiring function ones. Is it correct ?

In other words, why is addLowerLevelRequiredPass() not specialized for 
function managers ?

I think I'm misunderstanding the whole thing, is it possible to chain 
transformation passes from my pass or do I chain them explicitly from 
the command line ?

Thanks in advance,

Ivan



More information about the llvm-dev mailing list