【发布时间】:2017-10-24 04:47:00
【问题描述】:
有谁知道如何在模块传递中迭代基本的函数循环。我正在尝试:
bool runOnModule(Module &M) override
{
for(Module::iterator f = M.begin(), fend = M.end(); f != fend; ++f)
{
LoopInfo &LI = getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
for(Loop *L : LI)
{
for(BasicBlock *BB : L->getBlocks())
{
dbgs() << "basicb name: "<< BB->getName() <<"\n";
}
}
}
return true;
}
总是报错
opt: /home/anurag/polly/llvm/include/llvm/PassAnalysisSupport.h:235: AnalysisType& llvm::Pass::getAnalysisID(llvm::AnalysisID) const [with AnalysisType = llvm::LoopInfoWrapperPass; llvm::AnalysisID = const void*]: Assertion `ResultPass && "getAnalysis*() called on an analysis that was not " "'required' by pass!"' failed.
【问题讨论】:
-
您是否已将 LoopInfoWrapperPass 添加到您的 getAnalysisUsage() 例程中?
-
是的,我已经添加了。
-
@Brian 我试过这样:void getAnalysisUsage(AnalysisUsage &AU) const override { AU.addRequired
(); }
标签: llvm llvm-ir llvm-c++-api