如何在 Module Pass 中获取 loopinfo
How to get loopinfo in Module Pass
我想通过遍历 Module Pass 中的函数来获取每个函数中的循环信息。我的代码如下:
for (auto &F:M) {
if(!F.isDeclaration()){
LoopInfo &LI = getAnalysis<LoopInfoWrapperPass>(F).getLoopInfo();
}
}
但是有错误,我觉得我的变量设置应该符合第一个函数定义,我应该怎么解决。
clang-12: /llvmtest/llvm/lib/IR/LegacyPassManager.cpp:1645: virtual
std::tuple<llvm::Pass*, bool>
{anonymous}::MPPassManager::getOnTheFlyPass(llvm::Pass*,
llvm::AnalysisID, llvm::Function&): Assertion `FPP && “Unable to find
on the fly pass”’ failed. PLEASE submit a bug report to
https://bugs.llvm.org/ and include the crash backtrace, preprocessed
source, and associated run script.
旧版通行证管理器无法执行此操作。在旧版传递管理器中,每个传递只能从 same-scoped 传递中获取信息——模块从模块、函数从函数、循环从循环,加上允许函数传递从模块传递获取数据的异常。
使用新的传递管理器,您将创建一个 LoopAnalysisManager 并添加您想要的分析传递和 运行 它。参见 https://llvm.org/docs/NewPassManager.html#using-analyses。
请注意,目前编写的大部分 LLVM 都是为了同时支持这两种传递管理器。如果你这样做,你需要编写你的传递与大多数 LLVM 的传递不同,你不能使用名称如“WrapperPass”的类型来支持旧的和新的传递管理器。
我想通过遍历 Module Pass 中的函数来获取每个函数中的循环信息。我的代码如下:
for (auto &F:M) {
if(!F.isDeclaration()){
LoopInfo &LI = getAnalysis<LoopInfoWrapperPass>(F).getLoopInfo();
}
}
但是有错误,我觉得我的变量设置应该符合第一个函数定义,我应该怎么解决。
clang-12: /llvmtest/llvm/lib/IR/LegacyPassManager.cpp:1645: virtual std::tuple<llvm::Pass*, bool> {anonymous}::MPPassManager::getOnTheFlyPass(llvm::Pass*, llvm::AnalysisID, llvm::Function&): Assertion `FPP && “Unable to find on the fly pass”’ failed. PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace, preprocessed source, and associated run script.
旧版通行证管理器无法执行此操作。在旧版传递管理器中,每个传递只能从 same-scoped 传递中获取信息——模块从模块、函数从函数、循环从循环,加上允许函数传递从模块传递获取数据的异常。
使用新的传递管理器,您将创建一个 LoopAnalysisManager 并添加您想要的分析传递和 运行 它。参见 https://llvm.org/docs/NewPassManager.html#using-analyses。
请注意,目前编写的大部分 LLVM 都是为了同时支持这两种传递管理器。如果你这样做,你需要编写你的传递与大多数 LLVM 的传递不同,你不能使用名称如“WrapperPass”的类型来支持旧的和新的传递管理器。