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>(); } 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 -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20081129/b85a1cc8/attachment.html>
On Nov 29, 2008, at 8:53 PM, 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>(); > > > } > > > > 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? >You might need to have your pass inherit from the LoopPass instead of ModulePass. See some examples in lib/Transforms/Scalar. -bw
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 > > >
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 >