[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