【发布时间】:2015-08-19 16:05:18
【问题描述】:
在编译翻译单元时,编译器会进行大量优化 - 内联、常量折叠/传播、别名分析、循环展开、死代码消除以及许多我从未听说过的其他优化。 在多个翻译单元之间使用 LTO/LTCG/WPO 时是否全部完成,或者只是完成了其中的一个子集(或变体)(我听说过内联)? 如果没有完成所有优化,我会考虑统一构建优于 LTO(或者当有超过 1 个统一源文件时可能同时使用它们)。
我的猜测是它不一样(统一构建具有完整的优化集),而且它在编译器之间变化很大。
每个编译器的 lto 文档并没有准确回答这个问题(或者我无法理解它)。
由于 lto 涉及将中间表示保存在目标文件中,理论上 LTO 可以进行所有优化......对吗?
请注意,我不是在询问构建速度 - 这是一个单独的问题。
编辑: 我最感兴趣的是 gcc/llvm。
【问题讨论】:
-
就像您自己说的那样,编译器之间的差异可能很大。同时回答 GCC 和 LLVM 可能是可行的,但除此之外它太宽泛了。请缩小范围。
-
@BЈовић 链接时优化(或链接时代码生成或整个程序优化)
-
这取决于编译器和目标。例如,DSP 可以通过将一些代码放在内存的第一个块中来提高性能,这通常具有更快的访问速度。
标签: c++ optimization compiler-construction g++ llvm