我想在从 CallGraphSCC-Pass 派生的 passLoopInfoPass
的方法中使用。runOnSCC()
更具体地说,我想在方法中判断一个基本块是否在循环中runOnSCC()
。所以,代码应该是这样的:
LoopInfo &lf = getAnalysis<LoopInfo>(F);
Loop *bbLoop = lf.getLoopFor(BB);
和 getAnalysisUsage:
void AnalyzerPass::getAnalysisUsage(AnalysisUsage &Info) const {
Info.addRequired<CallGraphWrapperPass>();
Info.addRequired<LoopInfo>();
Info.addRequired<ScalarEvolution>();
Info.addPreserved<CallGraphWrapperPass>();
Info.setPreservesCFG();
}
和初始化:
INITIALIZE_PASS_BEGIN(AnalyzerPass, "analyzer",
"analysis", false, false)
INITIALIZE_PASS_DEPENDENCY(CallGraphWrapperPass)
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
INITIALIZE_PASS_END(AnalyzerPass, "analyzer",
"analysis", false, false)
最后,我使用 PassManager:
PassManager pm;
pm.add(LoopInfo);
pm.add(ScalarEvolution);
pm.add(AnalyzerPass);
pm.run(&module);
执行时pm.run(&module)
,我收到错误:
Unable to schedule 'Natural Loop Info' for 'analysis'.
Unable to schedule pass.
我想问我哪里错了?关于如何使用 CallGraphSCC-Pass 的信息太少了。任何帮助将非常感激!