SSA Elimination after Register Allocation

SSA Elimination after Register Allocation
复制标题

寄存器分配后SSA消除

DOI:
--
复制
发表时间:
2009
期刊:
International Conference on Compiler Construction
影响因子:
--
通讯作者:
J. Palsberg
J. Palsberg
中科院分区:
--
文献类型:
--
作者:
Fernando Magno Quintão Pereira;J. Palsberg

文献摘要

被引文献

相似文献

诸如GCC之类的编译器使用静态单个分配(SSA)形式作为中间表示形式,通常在寄存器分配之前执行SSA消除。但是该订单也可能相反:基于SSA的寄存器分配的最新方法在登记处分配后执行SSA消除。登记之前的SSA消除是直接且标准的,而先前描述的登记处分配后SSA消除的方法存在缺点;特别是,它们在内存位置之间实现副本时存在问题。我们提出了无泄漏的SSA消除,这是一种简单有效的算法,用于在寄存器分配后消除SSA,避免增加溢出变量的数量。我们还提供了核心算法的三个优化。我们的实验表明,无泄漏的SSA消除量不到JIT编译器总编译时间的5%。我们的优化将内存访问的数量减少了9%以上,并将程序执行时间提高了1.8%以上。
Compilers such as gcc use static-single-assignment (SSA) form as an intermediate representation and usually perform SSA elimination before register allocation. But the order could as well be the opposite: the recent approach of SSA-based register allocation performs SSA elimination after register allocation. SSA elimination before register allocation is straightforward and standard, while previously described approaches to SSA elimination after register allocation have shortcomings; in particular, they have problems with implementing copies between memory locations. We present spill-free SSA elimination , a simple and efficient algorithm for SSA elimination after register allocation that avoids increasing the number of spilled variables. We also present three optimizations of the core algorithm. Our experiments show that spill-free SSA elimination takes less than five percent of the total compilation time of a JIT compiler. Our optimizations reduce the number of memory accesses by more than 9% and improve the program execution time by more than 1.8%.