[LLVMdev] Error when using getAnalysis

Jeff Yeong-Peng Hao jeffhao at umich.edu
Tue Dec 2 10:40:29 PST 2008


Hi,

I had a question about this as well.  The documentation about writing a
pass shows an example like what John wrote, calling a function pass within
a module pass on a per function basis.  However, if I code it that way, I
still get the same error: 

opt: /x/jeffhao/llvm/llvm/include/llvm/PassAnalysisSupport.h:232:
AnalysisType& llvm::Pass::getAnalysisID(const llvm::PassInfo*,
llvm::Function&) [with AnalysisType = llvm::LoopInfo]: Assertion
`ResultPass && "getAnalysis*() called on an analysis that was not "
"'required' by pass!"' failed.

If I remove the addRequired from getAnalysisUsage, I get this error:

opt: /x/jeffhao/llvm/llvm-2.4/lib/VMCore/PassManager.cpp:1440: virtual
llvm::Pass* llvm::MPPassManager::getOnTheFlyPass(llvm::Pass*, const
llvm::PassInfo*, llvm::Function&): Assertion `FPP && "Unable to find on the
fly pass"' failed.

What else needs to be added to make the code run?

Jeff

On Mon, 1 Dec 2008 09:38:26 -0600, John Criswell <criswell at cs.uiuc.edu>
wrote:
> nitisha warkari wrote:
>> Hi,
>>
>> I'm trying to use the function getAnalysis. This is the code I'm using :
>>
>>  void getAnalysisUsage(AnalysisUsage &AU) const {
>>       AU.addRequired<LoopInfo>();
>>       AU.setPreservesAll();
>>     }
>>
>>  virtual bool runOnModule(Module &M) {
>>      LoopInfo &LI = getAnalysis<LoopInfo>();
>>
>>
>>    }
>>   
> The LoopInfo pass is a FunctionPass, whereas your pass is a ModulePass.  
> This means that your pass needs to determine which function it wants 
> LoopInfo information for and run it for each of those functions.
> 
> For example, you might do something like this:
> 
> virtual bool runOnModule (Module &M) {
>     Function * F = M.getFunction ("functionname");
>     LoopInfo &LI = getAnalysis<LoopInfo>(*F);
> }
> 
> If you need to process all functions within a Module, then look at the 
> Module::iterator on the LLVM doxygen web pages: 
> http://llvm.org/doxygen/hierarchy.html
> 
> -- John T.
> 
>>
>>
>> I get following error when I try to run my pass :
>>
>> opt:
>>
/net/hc295/nwarkari/llvm/llvm-2.3/include/llvm/PassAnalysisSupport.h:193:
>> AnalysisType& llvm::Pass::getAnalysisID(const llvm::PassInfo*) const
>> [with AnalysisType = llvm::LoopInfo]: Assertion `ResultPass &&
>> "getAnalysis*() called on an analysis that was not " "'required' by
>> pass!"' failed.
>> opt[0x83cfa9d]
>> /lib/tls/libc.so.6(abort+0xe9)[0x15d289]
>> /lib/tls/libc.so.6(__assert_fail+0x101)[0x154da1]
>>
opt(_ZNK4llvm4Pass13getAnalysisIDINS_8LoopInfoEEERT_PKNS_8PassInfoE+0x54)[0x81294a0]
>>
>> Could someone please help me out with this?
>>
>> Thanks!
>> Nitisha
>>
>>
>>   
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> 



More information about the llvm-dev mailing list