【发布时间】:2014-06-20 05:51:26
【问题描述】:
我想实现Linear Scan Register Allocation algorithm proposed by Poletto and Sarkar。它非常简单,可以为每个活动间隔分配一个寄存器或堆栈位置。
仅当已分配寄存器的活动区间数等于寄存器数(即没有更多空闲寄存器)时,才会将堆栈位置分配给区间。
算法:
假设有一条 x86 指令 add a, b,其中 a 和 b 是已被此算法分配堆栈位置(溢出)的变量。没有办法用 两个 内存操作数对这条指令进行编码,因此至少有一个操作数必须驻留在寄存器中。我会在指令前插入一个mov REG, a,但据我了解该算法,此时代码中没有 no 空闲寄存器。这通常是如何解决的?
【问题讨论】:
标签: compiler-construction register-allocation