中间表示IR-静态单赋值形式

中间表示IR-静态单赋值形式

SSA

满足两种约束则为静态单赋值形式:

  1. 每个定义都有一个不同的名字;
  2. 每次使用引用一个定义;

重要的 ϕ \phi ϕ(phi)函数

SSA中,名字唯一地对应到代码特定的定义位置;每个名字都是通过单个操作定义的,这也是SSA的来历。每次操作中使用某个名字作为参数时,该名字都编码了对应值的来源地信息;文本化名字实际上指向了一个特定的定义位置。为了使这种名字指派具有唯一性的命名规范与控制流的效应相一致,需要在不同控制流路径合并的位置插入 ϕ \phi ϕ(phi)函数,然后重命名变量,使之满足名字分派的唯一性。

Note:

ϕ \phi ϕ函数获取几个名字并将其合并,以定义一个新的名字。

关于LLVM中phi函数的细节,参考:phi-instruction

一个 ϕ \phi ϕ函数的小例子,简单的循环代码和对应的SSA代码,如下图所示:

ϕ \phi ϕ函数的行为取决于上下文。它选择其中一个参数的值来定义目标SSA的名字,该参数对应于控制流图(Control Flow Graph,CFG)中控制流进入当前块的边。在上面例子中,当控制流从循环上面的块进入循环时,循环体顶部的 ϕ \phi ϕ函数分别将 x 0 x_0 x0 y 0 y_0 y0的值复制到 x 1 x_1 x1 y 1 y_1 y1中。当控制流从循环底部的条件判断进入循环时,两个 ϕ \phi ϕ函数都会选择两个参数,即 x 2 x_2 x2 y 2 y_2 y2

参考:

《engineering a compiler》

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值