LLVM LTO Pass 插件的可能性?
Possibility of an LLVM LTO Pass plugin?
我想知道目前是否可以在 LTO 时间安排 'external' (.so/.dylib) LLVM 插件(模块)传递?想要这个的原因是我想添加的模块间优化。
我也找到了这个话题;
但是单独的工具对我来说不是一个选择。
谢谢
我认为这里最有帮助的可能是了解通行证是如何 运行 以及代码在 LTO 期间的状态。
首先,当编译器将优化传递 运行 时,它们是作为已添加到 PassManager
的集合完成的。这意味着 LLVM/Clang
,当传递类似 -O3
的内容时,将创建 PassManager
的副本,并随后为其提供预期提供 O3
优化级别的传递集。这与您使用外部库所做的非常不同,外部库必须手动提供并且不能正常放入传递管道。
然后我们就有了做LTO时的状态。在 Link 时间优化期间,所有单独的翻译单元都已合并,现在是一个 Module
。这意味着对每个函数 运行 的优化将对代码库中的每个函数进行 运行。同样,每个模块的优化将 运行 完整 Module
并因此提供过程间 Analysis/Optimization.
如果您希望使用模块内通行证,则没有理由在 LTO 时间执行此操作,您只需在每个单元上制作 ModulePass
和 运行 .
我想知道目前是否可以在 LTO 时间安排 'external' (.so/.dylib) LLVM 插件(模块)传递?想要这个的原因是我想添加的模块间优化。
我也找到了这个话题;
谢谢
我认为这里最有帮助的可能是了解通行证是如何 运行 以及代码在 LTO 期间的状态。
首先,当编译器将优化传递 运行 时,它们是作为已添加到 PassManager
的集合完成的。这意味着 LLVM/Clang
,当传递类似 -O3
的内容时,将创建 PassManager
的副本,并随后为其提供预期提供 O3
优化级别的传递集。这与您使用外部库所做的非常不同,外部库必须手动提供并且不能正常放入传递管道。
然后我们就有了做LTO时的状态。在 Link 时间优化期间,所有单独的翻译单元都已合并,现在是一个 Module
。这意味着对每个函数 运行 的优化将对代码库中的每个函数进行 运行。同样,每个模块的优化将 运行 完整 Module
并因此提供过程间 Analysis/Optimization.
如果您希望使用模块内通行证,则没有理由在 LTO 时间执行此操作,您只需在每个单元上制作 ModulePass
和 运行 .