Llvm 如何在源代码中要求通过

Llvm 如何在源代码中要求通过,llvm,llvm-ir,Llvm,Llvm Ir,我正在进行一个优化过程,我需要在一个循环中删除一些死掉的基本块。我知道PASS Buffelabl BulkLime可以做这项工作,但是我如何要求它在我的PASS中间执行呢?即,不使用opt命令行界面: opt -load myOptPass.dylib -unreachableblockelim ir.bc -o ir2.bc 这可能吗?我在llvm源代码中找不到任何类似于我试图实现的东西 LLVM目前包含两个通行证管理器。您想要的过程使用新的过程(以过程继承PassInfoMixin为特

我正在进行一个优化过程,我需要在一个循环中删除一些死掉的基本块。我知道PASS <代码> Buffelabl BulkLime<代码>可以做这项工作,但是我如何要求它在我的PASS中间执行呢?即,不使用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等为特征),那么它就更复杂了,因为您需要自己提供FunctionalysisManager。在这种情况下,我会从迁移到新的方式开始。

一个过程就是代码。如果你想在你的中间运行那个通道,你可以创建它的类的一个实例并调用它的Sun().Hi@ ARNT,谢谢你的答案。我的问题更多的是关于我如何做到这一点?具体来说,如何实例化无法访问的leblockelim过程?结果是实例化一个传递比我想象的简单。谢谢你,阿恩特!哦,你评论的时候我正在打那个答案。嗯,当问题消失的时候就好了。