使用方式
选项-flto=
编译选项中加入此选项开启LTO。可通过-flto=n指定LTO的并发数,如使用auto可以指定与GNU make一致(如果可以获取)或是与当前机器线程数一致的并发数。
选项-ffat-lto-objects
该选项将生成同时包含汇编信息和LTO信息的目标文件。并且在-ffat-lto-objects开启的情况下,允许通过-fno-lto选项,使用目标对象文件的汇编信息,来完成常规的链接,而不执行链接时优化。
选项-flto-partion=1to1|balanced|max|one|none
该选项可以通过引入不同的分区策略从而加快编译速度。 1to1意味着分区与源文件一一对应; balanced控制每个分区在规模上相等; max会为每一个符号创建一个分区; one会尽量生成一个分区; none会直接跳过全程序分以及分区的环节。
选项-flto-compresson-level=n
该选项用以控制LTO对性文件中IR信息的压缩等级。
DEMO
// four.c int four() { return 4; }
// five.c int five() { return 5; }
// test.c extern int four(); extern int five(); int main() { return four() + five(); }
gcc -O2 -flto test.c four.c five.c # 或者 gcc -O2 -flto -c test.c gcc -O2 -flto -c four.c gcc -O2 -flto -c five.c gcc test.o four.o five.o

对于上面这个案例,在使用 LTO 生成的可执行文件中,four() + five()会被内敛+常量折叠优化为立即数9,省略了函数调用与计算的步骤,这在非 LTO 模式下是无法实现的。 如果仅对four.c和test.c生成了 LTO 对象文件,最终结果便成了4 + five(),仅部分lto对象文件参与了局部范围内的链接时优化。
父主题: LTO