Static Single Assignment(SSA)
在编译器设计中,Static Single Assignment(SSA) 是构建 IR(intermediate representation) 的一种方式,例如:
- 每个变量只分配一次。
- 每个变量都在使用前定义。
SSA 的主要用途是简化和改进编译器优化算法的结果,同时简化变量属性。
一些算法通过应用 SSA 改进:
Constant Propagation
将计算从运行时转换为编译时。例如:
v = 2 * 7 + 13
被视为v = 27
Value Range Propagation
查找计算可能导致的值的可能范围。
Dead Code Elimination
删除无法访问且不会对结果产生任何影响的代码。
Strength Reduction
用廉价的计算代替计算上昂贵的计算。
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)相关推荐
- [WebKit] JavaScriptCore解析--高级篇(一) SSA (static single assignment)
在编译器优化领域,数据结构的选择会直接影响程序优化的有效性.SSA是一种编译器使用的中间语言(intermediate language), 作为编译优化的基础(也是DFG JIT的基础),它和Con ...
- SSA(static single assignment)(静态单赋值)
SSA属于控制流分析,所以有些相关的概念如控制流图,控制树,n控制m,直接控制和真控制需要参考如下文章: 控制流分析 引入 例如: SSA 一个问题: 这是肯定的,有了SSA,做出上面的判断不难. 上 ...
- 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 ...
- java 优化 寄存器_JVM性能优化系列-(6) 晚期编译优化
6. 晚期编译优化 晚期编译优化主要是在运行时做的一些优化手段. 6.1 JIT编译器 在部分的商用虚拟机中,java程序最初是通过解释器(Interpreter) 进行解释执行的,当虚拟机发现某个方 ...
- Optimizing Code with GCC
现在的编译器越来越聪明,功能越来越强,从简单的函数内联,到复杂的寄存器分析,一系列代码革命使程序运行得越来越快.大多数时候,更快比更小重要,因为磁盘空间和内存都变得便宜了.但是在嵌入式系统里,更小和更 ...
- 编译器后端,寄存器分配算法
寄存器分配,是通过将程序变量尽可能地分配到寄存器,从而提高程序执行速度的一种方法.寄存器是编译器优化中最为重要的问题之一(好的寄存器分配能够提高程序执行速度超过250%):也是编译器理论中最热点的研究 ...
- 《深入理解java虚拟机》学习笔记之虚拟机即时编译详解
郑重声明:本片博客是学习<深入理解java虚拟机>一书所记录的笔记,内容基本为书中知识. Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块 ...
- 传统编译器和DL编译器的调研和理解
文章目录 Part One : 传统编译器 1.1 前端 1.2 中端 常见的优化 1.3 后端 指令的选择 寄存器分配 指令重排 1.4 总结 Part Two:深度学习编译器 2.1 为什么需要 ...
- LLVM IR 语法
译者序 目前几乎没有关于LLVM IR(中间语言)的中文资料,因此本人在看英文手册的同时尝试翻译.限于水平和时间,本文只翻译了一小部分英文手册,如果发现理解有冲突之处,请以原文为准. ...
- 译-Dart虚拟机入门(Introduction to DartVM)
原文地址: https://mrale.ph/dartvm/ 发现一篇2019年的译文: https://annatarhe.github.io/2019/01/31/introduction-to ...
最新文章
- “万人迷”小冰背后的AI故事
- htmlspecialchars() improvements in PHP 5.4
- CNN网络量化--Two-Step Quantization for Low-bit Neural Networks
- LeetCode Add Binary(二进制加法)
- 小明学习Linux运维课后习题实战A
- JavaScript的Cookie操作
- db2 日期加减一天_常用SQL系列之(八):列值累计、占比、平均值以及日期运算等...
- Android开发之百度地图定位以及简单覆盖物的实现
- Codeforces Round #491 (Div. 2)
- 怎样使set现程变得安全_使不安全变得更加安全
- 大数据与Hadoop
- 每日一题 Day8:CodeForces-996A.Hit the Lottery(贪心)
- mariadb用户群体mysql_mysql(mariadb)新建用户及用户授权管理
- Atitit 数据出入管理法v3 目录 1.1. 边界检查:web边界和sql边界	1 2. 检查条目	1 2.1. 数据种类检查 整数 小数 字符串(带长度,字符白名单校验)	1 2.2. 字符黑
- 无法启动此程序因为计算机丢失gdiplus,gdiplus.dll 丢失
- 爬虫selenium(edge屋头浏览器+规避检测风险)
- android keep倒计时,Android仿Keep运动休息倒计时圆形控件
- MATLAB各个产品概述----哪些产品需要安装?哪些产品不需要安装?阅完了然
- 空间几何-欧拉角、四元数、重投影误差
- 「冰羚」— 撑起自动驾驶未来的“中间件”
热门文章
- 微信小程序圣诞帽_完成圣诞快乐Web应用程序界面
- 1.名词(noun)
- 无人驾驶——激光雷达篇
- php中关于qq第三方登录
- Module ‘/src/components/HelloWorld.vue“‘ has no default export.Vetur(1192)
- Java实现简单四则运算
- java获取小数位数_Java获取小数位数 | 学步园
- 告马云书 -- 谈阿里云OS 删除用户应用事件
- MaaS在绽放,为人们提供出行自由:过渡到新的范式
- 【控制篇 / 策略】(5.4) ❀ 03. Explicit Web Proxy 显式web代理 ❀ FortiGate 防火墙