循环分裂是一种重要的编译优化技术,可有效减少循环控制开销、提升指令流水线效率,并为后续优化创造机会。针对GCC编译器现有循环分裂策略适用范围受限的问题,提出了一种改进的循环分裂优化算法,该算法基于静态单赋值形式,根据循环内条...循环分裂是一种重要的编译优化技术,可有效减少循环控制开销、提升指令流水线效率,并为后续优化创造机会。针对GCC编译器现有循环分裂策略适用范围受限的问题,提出了一种改进的循环分裂优化算法,该算法基于静态单赋值形式,根据循环内条件变量所在PHI节点的位置,将其区分为循环头PHI节点条件变量和合并PHI节点条件变量,针对这两种条件变量,算法分别进行半不变性分析,并以此选择分裂点,从而实现更通用的循环分裂优化。在申威GCC编译器中实现了该算法。在申威新一代处理器平台上的实验结果显示,相比原有的循环分裂算法,该算法使SPEC CPU 2006测试集中的470.lbm测试程序性能提升8.8%,SPEC CPU 2017测试集中的620.omnetpp_s测试程序性能提升4.3%。所提方法扩展了可优化循环结构的范围,提升了申威GCC编译器的优化效率,可助力国产申威平台的基础软件生态建设。展开更多
摘要循环分裂是一种重要的编译优化技术,可有效减少循环控制开销、提升指令流水线效率,并为后续优化创造机会。针对GCC编译器现有循环分裂策略适用范围受限的问题,提出了一种改进的循环分裂优化算法,该算法基于静态单赋值形式,根据循环内条件变量所在PHI节点的位置,将其区分为循环头PHI节点条件变量和合并PHI节点条件变量,针对这两种条件变量,算法分别进行半不变性分析,并以此选择分裂点,从而实现更通用的循环分裂优化。在申威GCC编译器中实现了该算法。在申威新一代处理器平台上的实验结果显示,相比原有的循环分裂算法,该算法使SPEC CPU 2006测试集中的470.lbm测试程序性能提升8.8%,SPEC CPU 2017测试集中的620.omnetpp_s测试程序性能提升4.3%。所提方法扩展了可优化循环结构的范围,提升了申威GCC编译器的优化效率,可助力国产申威平台的基础软件生态建设。