LLVM LTO Pass

今天尝试将之前写的Pass移到LTO阶段。

将一个Pass加入LTO的方法如下:

  1. 在llvm/lib/LTO/LTOCodeGenerator.cpp文件initializeLTOPasses函数中加入相应初始化函数的调用(initializeXXXPass(R););
  2. 在llvm/lib/Transforms/IPO/LLVMBuild.txt文件required_libraries字段中加入新增Pass作为依赖;
  3. 在llvm/lib/Transforms/IPO/PassManagerBuilder.cpp文件populateLTOPassManager函数中, 在合适的时机将新增Pass加入PassManager (PM.add(createXXXPass());, 需要确保有createXXXPass()函数);
  4. 新增的Pass需要作为llvm_component_library编译(CMakeLists.txt里面写add_llvm_component_library)。新增的LTO Pass代码与普通Pass放置在相同的位置似乎就可以工作。

LTO的Pass是一个ModulePass, 这个Pass看到的Module是所有被链接的对象拼在一起之后的一个大Module。

此外, clang命令行参数给LTO Pass传参数的方法为: -Wl,-plugin-opt,--xxx-yyy。Pass的参数可以在其代码中使用cl::opt定义。

我加了一些feature, 然后产生了一些bug, 正在修复。

发表评论

注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)

本文链接:https://twd2.me/archives/14259QrCode