静态单赋值(SSA)(只讲形式不讲实现)

静态单赋值(SSA)(只讲形式不讲实现)

定义

除了三地址代码之外,静态单赋值(SSA)是另一种表现形式。

区别在于:

  • 所有的赋值都是针对不同名字的变量

用途

便于目标代码的优化。(先记住这个结果,至于怎么优化,可以参见《编译原理(第二版)》

举例

假设三地址代码

p = a + b
q = p - c
p = q * d
p = e - p
q = p + q

则静态单赋值形式如下

p1 = a + b
q1 = p1 - c
p2 = q1 * d
p3 = e - p2
q2 = p3 + q1

phi函数

假设C语言代码如下

if(flag){
	x = -1;
}
else{
    x = 1;
}

x在不同分支中被定义。如果转换成三地址代码,则x会变成x1x2

if(flag){
	x1 = -1;
}
else{
	x2 = 1;
}

问题来了,请问最后究竟是用x1还是x2

这完全是由程序运行时决定的,但是总会用到一个值,不是x1就是x2,那么根据三地址代码的形式。

x3 = x1或者x2中的某一个值

这种方式在静态单赋值中用函数phi表示
x 3 = ϕ ( x 1 , x 2 ) x3 = \phi(x1,x2) x3=ϕ(x1,x2)
注意:Phi函数在编译器优化中很重要,先记住这个结论。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值