【发布时间】:2015-10-23 09:46:21
【问题描述】:
我在 LLVM 3.7.0 中创建了自己的 LLVM 优化通道。 我想在 cmake 项目中使用此通行证。 在-O2(或-O3)的所有优化通道都由clang(或clang++)执行之后,我需要最后运行该通道。
不幸的是,我没有找到通过直接从 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
【问题讨论】:
-
我对自定义 llvm 通行证一点也不熟悉,但是 adriansampson.net/blog/clangpass.html 可以帮忙吗?
-
我试过了......但我没有成功生成通过 clang 启用/禁用我的通行证的可能性。按照这个程序,我想,我将我的传递集成到一个优化级别(例如,我的传递总是在给出 -O3 时执行)。不幸的是,这会产生其他问题...