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