[LLVMdev] Pass management

Fernando Magno Quintao Pereira fernando at CS.UCLA.EDU
Sat Apr 7 15:16:05 PDT 2007


Dear guys,

     I need help fixing a little piece of code. I have a pass that I really 
want to execute after the TwoAddressinstructionPass. But if I write 
"AU.addRequiredID(TwoAddressInstructionPassID);" in my pass' 
getAnalysisUsage, I end up getting the infamous:


PassManagerT.h:387: failed assertion `getAnalysisOrNullUp(P) && 
dynamic_cast<ImmutablePass*>(getAnalysisOrNullUp(P)) && "Pass available 
but not found! " "Perhaps this is a module pass requiring a function 
pass?"'


Well, without requiring TwoAddressPass, LLVM's pass manager schedules my 
pass to run before TwoAddress, and, because TwoAddress does not preserve 
it, the pass manager call my pass again. That is what I want to avoid. I 
wish I could require TwoAddress in my pass. Could someone tell me how to 
avoid that error message? My getAnalysis method is:


void DefUseSites_Fer::getAnalysisUsage(AnalysisUsage &AU) const {
     AU.addRequired<LoopInfo>();
//    AU.addRequiredID(TwoAddressInstructionPassID);
     AU.addRequired<SplitPhiGroups_Fer>();
     AU.setPreservesAll();
}


Thanks a lot,

Fernando



More information about the llvm-dev mailing list