静态单赋值(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函数在编译器优化中很重要,先记住这个结论。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-22 08:04:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-22 08:04:06       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-22 08:04:06       82 阅读
  4. Python语言-面向对象

    2023-12-22 08:04:06       91 阅读

热门阅读

  1. python类和对象

    2023-12-22 08:04:06       73 阅读
  2. Servlet技术j详解1

    2023-12-22 08:04:06       48 阅读
  3. Hive动态分区和分桶

    2023-12-22 08:04:06       60 阅读
  4. Hive-基础介绍

    2023-12-22 08:04:06       58 阅读
  5. Hive-分区与分桶详解(超详细)

    2023-12-22 08:04:06       51 阅读
  6. redis 实现队列

    2023-12-22 08:04:06       65 阅读
  7. 算法练习Day18 (Leetcode/Python-二叉树)

    2023-12-22 08:04:06       63 阅读
  8. python3+selenium 切换窗口方法

    2023-12-22 08:04:06       63 阅读
  9. 流媒体知识总结

    2023-12-22 08:04:06       62 阅读
  10. 在 Go 语言中使用 regexp 包处理正则表达式

    2023-12-22 08:04:06       48 阅读
  11. Ansible3

    Ansible3

    2023-12-22 08:04:06      59 阅读
  12. css学习笔记5

    2023-12-22 08:04:06       62 阅读