Clang 不使用opt工具运行LLVM过程

Clang 不使用opt工具运行LLVM过程,clang,llvm,llvm-clang,Clang,Llvm,Llvm Clang,我是编写LLVM通行证的初学者,我正在阅读有关编写自己的LLVM通行证的文档,然后使用opt工具运行它,即 /llvm/bin/opt -load /llvm/lib/LLVMHello.so -hello input.ll 这里,我的通行证是Hello.cpp,在input.C中有一个C函数,它通过叮当声转换为input.ll 我的问题是,我们是否可以在不使用opt工具的情况下运行pass,即 ./hello input.ll 是否有任何方法可以像上述方法一样运行pass?在获得有效的模

我是编写LLVM通行证的初学者,我正在阅读有关编写自己的LLVM通行证的文档,然后使用opt工具运行它,即

/llvm/bin/opt -load /llvm/lib/LLVMHello.so  -hello input.ll
这里,我的通行证是
Hello.cpp
,在
input.C
中有一个C函数,它通过叮当声转换为
input.ll

我的问题是,我们是否可以在不使用
opt
工具的情况下运行pass,即

./hello input.ll

是否有任何方法可以像上述方法一样运行pass?

在获得有效的
模块后,例如,通过
llvm::parseBitcodeFile
,您需要的所有操作都只是创建
llvm::legacy::Passmanager
,调用
llvm::legacy::Passmanager::add
添加过程,最后在模块上调用
llvm::legacy::Passmanager::run


opt
使用从
llvm::legacy::Passmanager
派生的类,但实际调用基类中的方法来处理模块。

如果您只是为了方便起见,也许一个shell脚本就足够了?opt依赖于许多llvm库,在nerd语言中,它就像任天堂的nes控制台,可以使用许多游戏的nes盒带(llvm通行证)。您可以使用opt本身中的api钩子并与llvm库链接,为您的过程创建一个独立的opt工具二进制文件,但这不是一个好的设计,也不值得花费时间,但这取决于您,您可以开始查看tools/opt/CMakeLists.txt中的api钩子依赖项和源文件。