第 1 部分:在 GCC-14 中迈向更大的目标

主要观点:今年的发布博客分为 3 部分,此为第 1 部分。GCC14 发布时 Arm 与社区紧密合作带来改进编译器,此次发布不同在于重新评估未来方向,GCC14 是较大版本。
关键信息

  • 技术债务:GCC 有很多技术债务,每次发布目标是改进编译器同时便于维护,今年解决了两个技术债务。
  • 简化向量零连接:改进了向量零连接的代码生成,更符合 AArch64 操作。
  • 向量化器改进:开始移除基于语句的向量化器,依赖基于 SLP 的向量化器,以更快实现新功能和添加 SVE 先进技术,如控制流向量化,已开始重构代码以支持早期中断向量化。
  • 重构剥离:始终保持 LCSSA 形式,简化了向量化过程,去除了大量代码。
  • 重构退出:解耦向量器的循环退出概念,使向量器能独立选择主退出。
  • 重构循环形状拒绝:不再基于基本块数量限制向量化,而是根据循环控制流来判断。
  • 早期中断支持:实现了早期中断支持,对循环的向量化进行了改进,但有一些限制。
  • 确定退出:向量化时可选择不同的退出作为主退出,处理有副作用的循环。
  • 移动不安全语句:检查并移动循环中在早期中断前的副作用,以保证向量化的安全性。
  • LDP/STP 传递:引入新的 AArch64 传递,更积极地形成内存加载和存储对,提高代码生成效率。
    重要细节
  • 技术债务部分详细说明了技术债务的影响及今年解决的两个债务。
  • 向量化器改进部分阐述了两种向量化策略的问题及改进计划。
  • 重构相关部分分别介绍了剥离、退出、循环形状拒绝等方面的重构过程和效果。
  • 早期中断支持部分说明了支持的条件和限制。
  • LDP/STP 传递部分说明了新传递的优势和应用示例。
阅读 12
0 条评论