在CMake项目中编译后增加自定义llvm优化命令(opt)
Add custom llvm optimization command (opt) after compilation within CMake projects
我在LLVM 3.7.0中创建了自己的LLVM优化通道。我想在一个cmake项目中使用这个通行证。我需要在clang(或clang++)执行-O2(或-O3)的所有优化传递之后,最后运行该传递。
不幸的是,我没有找到通过直接从clang传递标志来调用pass的机制(如果您指出这样做的方法,这已经很有帮助了)。
假设没有办法通过给clang一个标志来运行这个传递,我需要在我的工具链中放置一个额外的优化传递,放在编译和链接阶段之间。在整个cmake项目中我都需要它。
从两个源文件生成二进制文件所需的命令如下:clang -c -g -emit-llvm -O3 mySource0.c -o mySource0.bc
clang -c -g -emit-llvm -O3 mySource1.c -o mySource.bc
llvm-link mySource0.bc mySource1.bc -o main.bc
opt -load myAnalysis.so -myAnalysis main.bc -o main.analysis.bc
clang <libraryRelatedFlags> main.analysis.bc -o myExecutable
我的通行证注册为:
static RegisterPass<myAnalysis> X("myAnalysis", "Implement my analysis", false, false);
:http://llvm.org/docs/WritingAnLLVMPass.html basic-code-required
如果我对你的问题理解正确,你只是想添加你的通行证,以便它在-O3下运行。
您需要编辑$(llvm-dir)/tools/opt/opt.cpp
以获得运行-O3的通行证。您需要找到OptLevelO3
bool用于添加通行证的位置,并确保在那里也添加了您的通行证。
如果你只是想让你的通行证在它自己的标志上运行,你需要在注册它之前正确地初始化你的通行证。我们可以看看DependenceAnalysis.cpp,它是一个很好的例子:
INITIALIZE_PASS_BEGIN(DependenceAnalysis, "da", "Dependence Analysis", true, true)
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
INITIALIZE_PASS_END(DependenceAnalysis, "da", "Dependence Analysis", true, true)
您还提到您希望您的通行证在其他通行证之后运行。只需像DA那样标记它们:
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
确保你的传递在你想要依赖的传递之后运行。
相关文章:
- 空基优化子对象的地址
- 如何将 I->getType() 作为参数传递给 llvm 中的 CreateCall?
- 关闭||运算符优化
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 将尾部调用void(i32,..)位转换为llvm::函数以获取FnAttribute
- 返回值优化:显式移动还是隐式
- 人脸跟踪arduino代码的优化
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 是否可以将llvm::FunctionType转换为C/C++原始函数指针
- llvm构建器向基本块添加终止符
- 纯函数,为什么没有优化
- LLVM API 优化运行
- LLVM优化器无法处理简单情况?
- 如何进行llvm链接时间优化
- Apple LLVM 5.0 编译指示优化
- 如何使 llvm 优化以下浮点方程
- LLVM clang编译器优化器以一种非常奇怪的方式重新排列代码,该怎么做
- LLVM编译器优化错误或什么
- 在CMake项目中编译后增加自定义llvm优化命令(opt)
- LLVM 和安装时间优化