【问题标题】:Add custom llvm optimization command (opt) after compilation within CMake projects在 CMake 项目中编译后添加自定义 llvm 优化命令(opt)
【发布时间】: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 时执行)。不幸的是,这会产生其他问题...

标签: c++ cmake llvm


【解决方案1】:

如果我正确理解您的问题,您的目标只是添加您的通行证,以便它在 -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)

确保您的通行证在您想要依赖的通行证之后运行。

【讨论】:

  • 如果答案是正确的,您介意这样标记吗? :)
  • @TheBat 我看到了一个不同的答案 (stackoverflow.com/a/29921436/577165),它需要做的事情比你在这里描述的要多。你能澄清一下吗?
  • 您是否使用 opt -load /path/to/your/shared/lib -flag /path/to/your/bcfile 运行此通道?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
  • 1970-01-01
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多