SSA(static single assignment)(静态单赋值)
SSA属于控制流分析,所以有些相关的概念如控制流图,控制树,n控制m,直接控制和真控制需要参考如下文章:
控制流分析
引入
例如:
SSA
一个问题:
这是肯定的,有了SSA,做出上面的判断不难。
上面都是一些简单的SSA改写,下面有分支,则更加麻烦,需要一些程序化的方法(后面介绍)。如下:
这个时候经过分支之后,对x引用,我们很难知道到底引用了哪一个x,所以我们引入了一个非常重要的PHINode也就是ϕ\phiϕ节点,从而将这个SSA的初衷完成。初衷前面已经说了,现在啰嗦一遍,即:
这样,我们引用x2的时候,我们知道x2的定义赋值就在那个ϕ\phiϕ节点,而不是不确定。
接下来,我们说出构造ϕ\phiϕ节点的具体做法。
注意:
再举一个例子。
则:
上面是不是已经够难了,下面有一个更难的:
所以,我们希望有一种程序化的方法来将这个ϕ\phiϕ节点的位置和定义都准确地输出。下面介绍这个方法。
控制边界
这里需要先介绍一个概念,控制边界(Dominance Frontier)。等下构造SSA的时候会用到。
假设有如下的控制流图:
按照上面的控制边界的定义,我们可以得到如下的结果,即我们要计算每一个节点的控制边界。
以3为例,演示一下节点3的控制边界为什么是4。DF(3)={4}。
首先,对于节点3,我们候选的只有{4,5},因为在控制流图中3的后面。考虑4节点,其前驱节点有{3,6},由于3控制3。所以满足控制边界的定义(1)。由于3不控制4,满足控制边界的定义(2)。关于控制的概念,忘记了的,可以参考本文开头的链接文章。由于满足两个定义,所以4是3的控制边界。
对于5,其前驱节点有{4,8,9},3不控制里面的任何一个,所以不满足定义(1)。
所以3的控制边界只有4。
引入ϕ\phiϕ
下面介绍如何通过已经计算好的控制边界来引入ϕ\phiϕ节点。
先给出这个算法的伪代码,先不要着急一看到伪代码就不想看,其实有的伪代码挺好懂的。
我们按照这个算法的初始化步骤,走一走就是这样。如下。再重复一遍,我们要先找到对x赋过值的基本块,这里只有{1,8,10}。所以按照那个伪代码就可以初始化3个数据结构如下图的右上角。然后开始循环,当前,1就是循环里的N。
经过若干步得到:
最后:
通过这个算法,找到了引入ϕ\phiϕ节点的位置,但是我们还需要将上面红色的x给改个名字,例如x1,x2…xn等。
重命名
翻译
以上就是SSA的全部了。
SSA(static single assignment)(静态单赋值)相关推荐
- [WebKit] JavaScriptCore解析--高级篇(一) SSA (static single assignment)
在编译器优化领域,数据结构的选择会直接影响程序优化的有效性.SSA是一种编译器使用的中间语言(intermediate language), 作为编译优化的基础(也是DFG JIT的基础),它和Con ...
- 数据流分析与 SSA | 什么是静态单赋值 SSA
什么是静态单赋值 SSA. SSA 是 static single assignment 的缩写,也就是静态单赋值形式. 顾名思义,就是每个变量只有唯一的赋值.
- 一文入门Go静态单赋值(SSA)
在上一篇文章<通过实例理解Go内联优化>[1]中,我们探讨了Go编译器在编译中端进行的内联优化.内联优化基于IR中间表示进行,不过Go编译过程不止有一种IR表示,这点和龙书<编译原理 ...
- 静态单赋值形式-概念简介
文章目录 前言 静态单赋值(static single assignment)的概念 静态单赋值算法 前言 视频:北大-软件分析-公开课 文档:课件' | 静态单赋值形式-wiki 这里简单记录下. ...
- 懵了,Java枚举单例模式比DCL和静态单例要好???
点击关注公众号,实用技术文章及时了解 来源:liuchenyang0515.blog.csdn.net/article/ details/121049426 文章目录 双重校验锁单例(DCL) 为什么 ...
- 数据结构 - 静态单链表的实行(C语言)
静态单链表的实现 1 静态链表定义 静态链表存储结构的定义如下: /* 线性表的静态链表存储结构 */ #define MAXSIZE 1000 /* 假设链表的最大长度是1000 */ typede ...
- java 静态对象赋值_基于Java class对象说明、Java 静态变量声明和赋值说明(详解)...
先看下JDK中的说明: java.lang.Object java.lang.Class Instances of the class Class represent classes and inte ...
- 淘宝客静态单页_单页应用程序的Spring Boot静态Web资源处理
淘宝客静态单页 诸如gulp和grunt之类的Javascript构建工具确实让我大吃一惊,我看着这些工具的构建脚本之一,发现很难理解它,并且无法想象从头开始编写其中一个构建脚本. 这就是yeoman ...
- springboot 注解动态赋值_SpringBoot 使用 @Value 注解读取配置文件给静态变量赋值
1.application.properties 配置文件CxU免费资源网 mail.username=xue@163.com mail.password=xue mail.host=smtp.163 ...
最新文章
- sql2005配置文件服务器,SQL server服务器版的安装方法
- 通知:正式迁移至新博客
- Dumpzilla工具第615行bug的解决办法
- android编译.a文件,Android 7.1源码编译导入AS完整教程
- Lync 服务器证书 ios,iOS生成服务器所需证书pem或P12
- 数据分析词数统计和词的重要程度统计
- 如何让SAP Spartacus ng build生成的JavaScript资源附带上store ID
- axios-引入-常用语法-源码
- 一文读懂数据平台、大数据平台、数据中台
- 释放被束缚的页面 – V1.1.0
- 有消息推送服务器的手机厂家,又一家手机厂商完成统一推送服务适配
- 概率论与数理统计 第四版 浙江大学 盛骤,谢式千,潘承毅 个人阅读笔记
- java心得体会2000字_java的学习心得体会
- 一元线性回归原理及代码实现
- 半导体物理 第七章 金属半导体接触整流理论
- 16 《万用之物:盐的故事》-豆瓣评分7.5
- java ean13_【求大神指导】java实现EAN13条形码识别
- 细粒度的、安全高效的基于区块链数据溯源系统 Fine Grained, Secure and Efficient Data Provenance on Blockchain Systems(一)
- 最新爬取携程酒店信息代码
- Java数据库连接池
热门文章
- 如果可以,我想给这本书打十星!
- 为了我心中的女神,我竟然转行做了程序员
- Windows系统管理大师、畅销书作者William R.Stanek的又一经典力作
- Linux服务器网络故障诊断
- 《图像分类》概述,李飞飞经典CS231N2021《卷积神经网络视觉识别》课程第二讲!...
- 微软亚洲研究院周明:从语言智能到代码智能
- 疫情过后人工智能是否能迎来春天?
- 新春快乐!数据派又双叒叕送福利啦~
- 干货 | “青年AI自强计划项目”首节讲座视频、课件分享
- 数据蒋堂 | Hadoop - 一把杀鸡用的牛刀