LTO

LTO链接时优化过程(具体gcc流程流程图待补充)

1)CC1生成带gimple信息的elf文件

2)LTO1读取多个elf文件的gimple信息建立全局调用图优化。

     (查看elf文件可以发现,里面有很多段用于将cc1的信息传递给LTO1)
  

在 LTO 常用的优化算法有

  • 不可到达代码消除
  • 过程间常数传播
  • 过程间生存期分析
  • 间接调用转换为直接调用
  • 访存优化
  • 函数内联(inline) 等
区别于传统的优化,LTO的优势有

  • 完成传统编译器无法实现的过程间优化;eg:常量传播、生存期分析等
  • 可以针对库函数在特定上下文环境做进一步优化eg:caller地方发现inline库函数更合适,就不在调用库函数了
  • LIR层级的优化:针对芯片指令集的优化,比如:cache相关(指令对齐d等)
  • 根据linke确定的地址信息做优化eg:内存L2->L1

通常很多软件不用LTO的原因(待补充)

  • 大型软件分布式编译导致周期太长
  • 钩子函数优化可能有风险
  • 调试问题


猜你喜欢

转载自blog.csdn.net/zziyou911/article/details/80953088
LTO