如何在源代码中要求通过

吉尔赫姆

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

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

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

阿恩特

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章