我正在进行优化遍历,需要循环删除一些无效的基本块。我知道通行证unreachableblockelim
可以完成这项工作,但是我如何要求它在通行证中间执行?也就是说,不使用opt命令行界面:
opt -load myOptPass.dylib -unreachableblockelim ir.bc -o ir2.bc
那有可能吗?我找不到与llvm源代码中要实现的目标相似的东西。
答案 0 :(得分:3)
LLVM目前包含两个通道管理器。您想要的通行证使用新的通行证(其特征是继承PassInfoMixin的通行证),并且在新的PM通行证中使用它需要将其头文件包括在通行证的.cpp文件中:
#include "llvm/CodeGen/UnreachableBlockElim.h"
您的过程将包含一个名为run()的函数,该函数可能看起来像这样:
PreservedAnalyses MyPAss::run(Function &F, FunctionAnalysisManager &FAM) {
// some of your code goes here
UnreachableBlockElimPass ube;
ube.run(F, FAM);
// more of your code here
}
如果您的通行证使用旧的通行证管理器(以继承FunctionPass,ModulePass等为特征),则涉及的内容更多,因为您需要自己提供那个FunctionAnalysisManager。在那种情况下,我将从迁移到新方法开始。