Static Single Assignment Form
静态单一分配形式,每个变量只赋值一次
intermediate representation(IR): 中间代码表示
作用
- 常数传播(constant propagation)
- 值域传播(value range propagation)
- 稀疏有条件的常数传播(sparse conditional constant propagation)
- 消除无用的程式码(dead code elimination)
- 全域数值编号(global value numbering)
- 消除部分的冗余(partial redundancy elimination)
- 强度折减(strength reduction)
- 寄存器分配(register allocation)
demo
x = 1 y = x
变成了
y = 1
转化
全域数值编号 + 静态单一分配形式 转化代码
全域数值编号把每个静态量都编号了,也保证每个静态量一定是静态的是单一的,只被赋值一次单最后出现了 y 的编号不知道是多少的问题
所以在最后一步加入了
Φ (Phi) function.
y3 = Φ(y1,y2)
所以转换以后为
SSA 的主要作用是对代码进行优化,所以它是编译器后端的一部分
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于