2

我想在从 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 的信息太少了。任何帮助将非常感激!

4

0 回答 0