在编译器设计中,Static Single Assignment(SSA) 是构建 IR(intermediate representation) 的一种方式,例如:

  1. 每个变量只分配一次。
  2. 每个变量都在使用前定义。

SSA 的主要用途是简化和改进编译器优化算法的结果,同时简化变量属性。

一些算法通过应用 SSA 改进:

  1. Constant Propagation

    将计算从运行时转换为编译时。例如:v = 2 * 7 + 13 被视为 v = 27

  2. Value Range Propagation

    查找计算可能导致的值的可能范围。

  3. Dead Code Elimination

    删除无法访问且不会对结果产生任何影响的代码。

  4. Strength Reduction

    用廉价的计算代替计算上昂贵的计算。

  5. Register Allocation

    优化使用寄存器进行计算。

任何代码都可以转换为 SSA 形式,只需简单地将每个代码段的目标变量替换为新变量,并将变量的每次使用都替换为到达该点的新版本的变量。 版本是通过拆分 IR 中存在的原始变量来创建的,并由带有下标的原始名称表示,这样每个变量都有自己的版本。

Example: Convert the following code segment to SSA form:

x = y - z
s = x + s
x = s + p
s = z * q
s = x * s

Solution:

# x 的不同版本是 x2;s 的不同版本是 s2,s3,s4
x = y - z
s2 = x + s
x2 = s2 + p
s3 = z * q
s4 = x2 * s3

Static Single Assignment(SSA)相关推荐

  1. [WebKit] JavaScriptCore解析--高级篇(一) SSA (static single assignment)

    在编译器优化领域,数据结构的选择会直接影响程序优化的有效性.SSA是一种编译器使用的中间语言(intermediate language), 作为编译优化的基础(也是DFG JIT的基础),它和Con ...

  2. SSA(static single assignment)(静态单赋值)

    SSA属于控制流分析,所以有些相关的概念如控制流图,控制树,n控制m,直接控制和真控制需要参考如下文章: 控制流分析 引入 例如: SSA 一个问题: 这是肯定的,有了SSA,做出上面的判断不难. 上 ...

  3. ONNX-Simpler报错:Graph must be in single static assignment (SSA) form

    Graph must be in single static assignment (SSA) form, however '848' has been used as output names mu ...

  4. java 优化 寄存器_JVM性能优化系列-(6) 晚期编译优化

    6. 晚期编译优化 晚期编译优化主要是在运行时做的一些优化手段. 6.1 JIT编译器 在部分的商用虚拟机中,java程序最初是通过解释器(Interpreter) 进行解释执行的,当虚拟机发现某个方 ...

  5. Optimizing Code with GCC

    现在的编译器越来越聪明,功能越来越强,从简单的函数内联,到复杂的寄存器分析,一系列代码革命使程序运行得越来越快.大多数时候,更快比更小重要,因为磁盘空间和内存都变得便宜了.但是在嵌入式系统里,更小和更 ...

  6. 编译器后端,寄存器分配算法

    寄存器分配,是通过将程序变量尽可能地分配到寄存器,从而提高程序执行速度的一种方法.寄存器是编译器优化中最为重要的问题之一(好的寄存器分配能够提高程序执行速度超过250%):也是编译器理论中最热点的研究 ...

  7. 《深入理解java虚拟机》学习笔记之虚拟机即时编译详解

    郑重声明:本片博客是学习<深入理解java虚拟机>一书所记录的笔记,内容基本为书中知识. Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块 ...

  8. 传统编译器和DL编译器的调研和理解

    文章目录 Part One : 传统编译器 1.1 前端 1.2 中端 常见的优化 1.3 后端 指令的选择 寄存器分配 指令重排 1.4 总结 Part Two:深度学习编译器 2.1 为什么需要 ...

  9. LLVM IR 语法

    译者序     目前几乎没有关于LLVM IR(中间语言)的中文资料,因此本人在看英文手册的同时尝试翻译.限于水平和时间,本文只翻译了一小部分英文手册,如果发现理解有冲突之处,请以原文为准.     ...

  10. 译-Dart虚拟机入门(Introduction to DartVM)

    原文地址:  https://mrale.ph/dartvm/ 发现一篇2019年的译文: https://annatarhe.github.io/2019/01/31/introduction-to ...

最新文章

  1. “万人迷”小冰背后的AI故事
  2. htmlspecialchars() improvements in PHP 5.4
  3. CNN网络量化--Two-Step Quantization for Low-bit Neural Networks
  4. LeetCode Add Binary(二进制加法)
  5. 小明学习Linux运维课后习题实战A
  6. JavaScript的Cookie操作
  7. db2 日期加减一天_常用SQL系列之(八):列值累计、占比、平均值以及日期运算等...
  8. Android开发之百度地图定位以及简单覆盖物的实现
  9. Codeforces Round #491 (Div. 2)
  10. 怎样使set现程变得安全_使不安全变得更加安全
  11. 大数据与Hadoop
  12. 每日一题 Day8:CodeForces-996A.Hit the Lottery(贪心)
  13. mariadb用户群体mysql_mysql(mariadb)新建用户及用户授权管理
  14. Atitit 数据出入管理法v3 目录 1.1. 边界检查:web边界和sql边界 1 2. 检查条目 1 2.1. 数据种类检查 整数 小数 字符串(带长度,字符白名单校验) 1 2.2. 字符黑
  15. 无法启动此程序因为计算机丢失gdiplus,gdiplus.dll 丢失
  16. 爬虫selenium(edge屋头浏览器+规避检测风险)
  17. android keep倒计时,Android仿Keep运动休息倒计时圆形控件
  18. MATLAB各个产品概述----哪些产品需要安装?哪些产品不需要安装?阅完了然
  19. 空间几何-欧拉角、四元数、重投影误差
  20. 「冰羚」— 撑起自动驾驶未来的“中间件”

热门文章

  1. 微信小程序圣诞帽_完成圣诞快乐Web应用程序界面
  2. 1.名词(noun)
  3. 无人驾驶——激光雷达篇
  4. php中关于qq第三方登录
  5. Module ‘/src/components/HelloWorld.vue“‘ has no default export.Vetur(1192)
  6. Java实现简单四则运算
  7. java获取小数位数_Java获取小数位数 | 学步园
  8. 告马云书 -- 谈阿里云OS 删除用户应用事件
  9. MaaS在绽放,为人们提供出行自由:过渡到新的范式
  10. 【控制篇 / 策略】(5.4) ❀ 03. Explicit Web Proxy 显式web代理 ❀ FortiGate 防火墙