基于证明转换的寄存器分配方法
在计算机编程中,寄存器分配是一个关键的优化步骤,它直接影响程序的执行效率。本文将介绍一种基于证明转换的寄存器分配方法,该方法通过一系列的步骤,包括代码语言的证明系统定义、活性分析、证明重构、优化以及最终的寄存器分配,为寄存器分配问题提供了一种系统的解决方案。
1. 代码语言的证明系统与活性分析
为了介绍该方法,我们首先定义一种简单的代码语言。设 $x, y, \cdots$ 遍历给定的可数无限变量集,$c$ 遍历给定的原子常量集。我们考虑以下指令(用 $I$ 表示)、基本块(用 $B$ 表示)和程序(用 $P$ 表示):
- $I ::= x = y | x = c | x = y + z | if x goto l$
- $B ::= returnx | goto l | I; B$
- $P ::= {l : B, \cdots, l : B}$
在这个代码语言中,添加除 $+$ 之外的各种基本操作并不困难,并且通过引入必要的标签将传统的中间语言转换为这种表示形式也是常规操作。
我们基于对低级代码的证明理论解释来进行开发,其中每个指令 $I$ 被解释为以下形式的推理规则:
$\frac{\Gamma’ \vdash B : \tau}{\Gamma \vdash I; B : \tau}$
这表明指令 $I$ 将机器状态 $\Gamma$ 改变为 $\Gamma’$ 并继续执行块 $B$。注意,规则是从较小的代码形成较大的代码,因此执行方向是从下到上。如果上述规则是最后一个推理步骤,那么 $I$ 是要执行的第一个指令。“return” 指令对应于以下形式的初始序列(证明系统中的
超级会员免费看
订阅专栏 解锁全文
57

被折叠的 条评论
为什么被折叠?



