如何在源代码中要求通过

时间:2019-06-05 19:01:37

标签: llvm llvm-ir

我正在进行优化遍历,需要循环删除一些无效的基本块。我知道通行证unreachableblockelim可以完成这项工作,但是我如何要求它在通行证中间执行?也就是说,不使用opt命令行界面:

opt -load myOptPass.dylib -unreachableblockelim ir.bc -o ir2.bc

那有可能吗?我找不到与llvm源代码中要实现的目标相似的东西。

1 个答案:

答案 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。在那种情况下,我将从迁移到新方法开始。