18、寄存器分配与编译器实现的深入探讨

寄存器分配与编译器实现的深入探讨

1. 表达式树的寄存器分配

表达式树的寄存器分配相较于任意流图的寄存器分配要简单得多,无需进行全局数据流分析或构建干扰图。下面介绍几种相关的算法。

1.1 简单寄存器分配算法(SimpleAlloc)
function SimpleAlloc(t)
    for each nontrivial tile u that is a child of t
        SimpleAlloc(u)
    for each nontrivial tile u that is a child of t
        n ← n - 1
        n ← n + 1
    assign rn to hold the value at the root of t

该算法按后序遍历树,为每个图块的根分配一个寄存器。以 n 初始化为零,对根(图块 9)应用此算法,会产生如下分配结果: {tile2 → r1, tile4 → r2, tile5 → r2, tile6 → r1, tile8 → r2, tile9 → r1} 。此算法可与 Maximal Munch 结合,因为二者都是自底向上遍历。

不过,该算法并不总是能实现最优分配。例如对于如下树结构:

.+
MEM(NAME a)
*
MEM(NAME b)
MEM(NAME c)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值