我做了一个小实验,看看如果我在编译之前将一堆虚拟 C 源文件编译成一个 LLVM 位代码文件(首先-emit-llvm
用于编译成.bc
文件,然后使用llvm-link
将它们压缩成一个.bc
文件), Clang 是否会产生更好的代码。一个虚拟库,而不是通常编译到要链接的单个目标文件,它似乎能够执行一些 WPO(整个程序优化),例如跨不同翻译单元的内联函数,否则它不会这样做。我通过 了解 LTO(链接时间优化)-flto
,所以这更像是我的一个小实验,以了解 Clang 在这种特殊情况下的行为会有多么不同。
但是,我的问题是,以这种方式构建二进制文件是否可取?最终结果与简单地使用有什么不同-flto
吗?如果是这样,无论是在过程还是最终结果方面,会有什么不同?如果不是,这只是一种更人为的调用 LTO 的方式吗?