【问题标题】:Using llvm-link before compiling编译前使用 llvm-link
【发布时间】:2019-03-20 13:08:50
【问题描述】:

我做了一个小实验,看看如果我将一堆虚拟 C 源文件编译成单个 LLVM 位代码文件,Clang 是否会产生更好的代码(首先使用 -emit-llvm 编译为 .bc 文件,然后使用 @ 987654323@ 将它们压缩到一个.bc 文件中),然后编译成一个虚拟库,而不是通常编译到要链接的单个目标文件,并且它似乎能够执行一些 WPO(整个程序优化),例如内联跨不同翻译单元的功能,否则它不会这样做。我通过-flto 了解 LTO(链接时间优化),所以这更像是我的一个小实验,看看 Clang 在这种特殊情况下的行为会有多么不同。

但是,我的问题是,以这种方式构建二进制文件是否可取?最终结果与简单地使用-flto 有什么不同吗?如果是这样,无论是在过程还是最终结果方面,会有什么不同?如果不是,这只是一种更人为的调用 LTO 的方式吗?

【问题讨论】:

    标签: clang llvm lto


    【解决方案1】:

    如果不是,这只是一种更人为的调用 LTO 的方式吗?

    基本上是的。

    最终结果与简单地使用 -flto 有什么不同

    嗯,我认为会有一些不同,但它们不应该有任何意义。当 LTO 感知链接器链接字节码并运行优化通道时,它使用来自lib/Transforms/IPO/PassManagerBuilder.cppPassManagerBuilder::addLTOOptimizationPasses 管道。而当你优化llvm-link产生的代码时,opt工具使用PassManagerBuilder::populateModulePassManager,这显然是不同的。很难说到底会有什么不同,但很可能在llvm-link+opt 的情况下,某些传球会运行两次。

    【讨论】:

      猜你喜欢
      • 2011-07-13
      • 1970-01-01
      • 2013-04-29
      • 2014-07-15
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 2018-12-28
      • 2011-12-20
      相关资源
      最近更新 更多