我正在尝试编写一个通过每个基本块的通道,并且我想确定每个基本块是否处于循环中。
我添加LoopInfo
为必需的分析:
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesCFG();
AU.addRequired<LoopInfo>();
AU.addPreserved<LoopInfo>();
}
然后调用getLoopFor
:
virtual bool runOnFunction(Function &Func) {
OptimizeBB(bb);
return false;
}
virtual void OptimizeBB(BasicBlock &bb){
LoopInfo &LI = getAnalysis<LoopInfo>();
errs()<<" \nDebug Here\n ";
Loop* innerloop=LI.getLoopFor(&bb);
if(innerloop==NULL){ errs()<<" \n(not loop)\n ";}
else { errs()<<" \n(loop)\n ";}
}
但我收到以下错误:
/home/mypass/llvm/Debug+Asserts/bin/opt:符号查找错误:/home/mypass/llvm/Debug+Asserts/lib/ReadIR.so:未定义符号:_ZNK4llvm12LoopInfoBaseINS_10BasicBlockENS_4LoopEE10getLoopForEPKS1_
我该如何解决?或者有没有其他方法可以识别基本块的循环?