GSoC 2024:重振 NewGVN

GSoC 2024:重振 NewGVN

💡 原文英文,约1200词,阅读约需5分钟。
📝

内容提要

今年夏天,我参加了LLVM编译器基础设施的GSoC项目,目标是改进NewGVN pass,使其能够取代GVN成为LLVM中的主要值编号pass。NewGVN相对于GVN的优势在于完整处理循环,而GVN只能处理非循环代码。我们的主要贡献是为NewGVN开发了一个PRE阶段,通过泛化Phi-of-Ops来实现。我们的实现相比GVN平均性能提高了0.4%,但仍存在一些回归问题。未来的工作包括实现缺失的关键边拆分和加载强制转换功能,并优化PRE的启发式算法。

🎯

关键要点

  • 今年夏天,我参加了LLVM编译器基础设施的GSoC项目,目标是改进NewGVN pass。
  • NewGVN相对于GVN的优势在于完整处理循环,而GVN只能处理非循环代码。
  • NewGVN通过乐观假设处理循环,能够发现循环不变的值。
  • NewGVN在内存操作的值编号方面使用MemorySSA,简化了内存操作之间的冗余检测。
  • 尽管NewGVN有多项改进,但仍未广泛使用,主要是因为缺乏部分冗余消除(PRE)和存在错误。
  • 我们的主要贡献是为NewGVN开发了一个PRE阶段,通过泛化Phi-of-Ops实现。
  • PRE的实现包括phi-翻译和phi-插入两个步骤。
  • 集成PRE使得NewGVN能够免费获得循环不变代码移动(LICM)。
  • 当前PRE实现缺少关键边拆分和加载强制转换功能。
  • 我们的实现平均性能提高了0.4%,但在某些情况下表现回归。
  • 未来的工作包括实现缺失的功能并优化PRE的启发式算法。
➡️

继续阅读