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的启发式算法。

延伸问答

NewGVN相对于GVN有哪些优势?

NewGVN能够完整处理循环,而GVN只能处理非循环代码。此外,NewGVN在内存操作的值编号方面使用MemorySSA,简化了冗余检测。

在GSoC项目中,主要贡献是什么?

主要贡献是为NewGVN开发了一个部分冗余消除(PRE)阶段,通过泛化Phi-of-Ops实现。

NewGVN的PRE实现包含哪些步骤?

PRE实现包括phi-翻译和phi-插入两个步骤。

NewGVN目前面临哪些挑战?

NewGVN面临的挑战包括缺乏关键边拆分和加载强制转换功能,以及存在一些错误。

NewGVN的性能提升如何?

我们的实现平均性能提高了0.4%,但在某些情况下表现回归,最严重的情况是jpegxl性能下降了10%。

未来的工作计划是什么?

未来的工作包括实现缺失的关键边拆分和加载强制转换功能,并优化PRE的启发式算法。

🏷️

标签

➡️

继续阅读