You might need to have your pass inherit from the LoopPass instead of
ModulePass. See some examples in lib/Transforms/Scalar.
-bw
_______________________________________________
LLVM Developers mailing list
LLV...@cs.uiuc.edu http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
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
>
>
>
_______________________________________________
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 <cris...@cs.uiuc.edu>
wrote:
>
> 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?
Is it possible for you to provide a reproducible test case to help us
understand what is going on ?
Thanks,
-
Devang
Jeff
Just add !isDeclaration() check before requesting loop info. In your
example, there is not any way to get loopinfo for printf whose
definition is not available.
if (!F.isDeclaration())
LoopInfo &LI = getAnalysis<LoopInfo>(F);
-
Devang
> ModuleLoop
> .cpp
> >
> <
> ModuleLoop
> .h
> ><simple.c><simple.bc>_______________________________________________