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)(静态单赋值)相关推荐

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

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

  2. 数据流分析与 SSA | 什么是静态单赋值 SSA

    什么是静态单赋值 SSA. SSA 是 static single assignment 的缩写,也就是静态单赋值形式. 顾名思义,就是每个变量只有唯一的赋值.

  3. 一文入门Go静态单赋值(SSA)

    在上一篇文章<通过实例理解Go内联优化>[1]中,我们探讨了Go编译器在编译中端进行的内联优化.内联优化基于IR中间表示进行,不过Go编译过程不止有一种IR表示,这点和龙书<编译原理 ...

  4. 静态单赋值形式-概念简介

    文章目录 前言 静态单赋值(static single assignment)的概念 静态单赋值算法 前言 视频:北大-软件分析-公开课 文档:课件' | 静态单赋值形式-wiki 这里简单记录下. ...

  5. 懵了,Java枚举单例模式比DCL和静态单例要好???

    点击关注公众号,实用技术文章及时了解 来源:liuchenyang0515.blog.csdn.net/article/ details/121049426 文章目录 双重校验锁单例(DCL) 为什么 ...

  6. 数据结构 - 静态单链表的实行(C语言)

    静态单链表的实现 1 静态链表定义 静态链表存储结构的定义如下: /* 线性表的静态链表存储结构 */ #define MAXSIZE 1000 /* 假设链表的最大长度是1000 */ typede ...

  7. java 静态对象赋值_基于Java class对象说明、Java 静态变量声明和赋值说明(详解)...

    先看下JDK中的说明: java.lang.Object java.lang.Class Instances of the class Class represent classes and inte ...

  8. 淘宝客静态单页_单页应用程序的Spring Boot静态Web资源处理

    淘宝客静态单页 诸如gulp和grunt之类的Javascript构建工具确实让我大吃一惊,我看着这些工具的构建脚本之一,发现很难理解它,并且无法想象从头开始编写其中一个构建脚本. 这就是yeoman ...

  9. springboot 注解动态赋值_SpringBoot 使用 @Value 注解读取配置文件给静态变量赋值

    1.application.properties 配置文件CxU免费资源网 mail.username=xue@163.com mail.password=xue mail.host=smtp.163 ...

最新文章

  1. sql2005配置文件服务器,SQL server服务器版的安装方法
  2. 通知:正式迁移至新博客
  3. Dumpzilla工具第615行bug的解决办法
  4. android编译.a文件,Android 7.1源码编译导入AS完整教程
  5. Lync 服务器证书 ios,iOS生成服务器所需证书pem或P12
  6. 数据分析词数统计和词的重要程度统计
  7. 如何让SAP Spartacus ng build生成的JavaScript资源附带上store ID
  8. axios-引入-常用语法-源码
  9. 一文读懂数据平台、大数据平台、数据中台
  10. 释放被束缚的页面 – V1.1.0
  11. 有消息推送服务器的手机厂家,又一家手机厂商完成统一推送服务适配
  12. 概率论与数理统计 第四版 浙江大学 盛骤,谢式千,潘承毅 个人阅读笔记
  13. java心得体会2000字_java的学习心得体会
  14. 一元线性回归原理及代码实现
  15. 半导体物理 第七章 金属半导体接触整流理论
  16. 16 《万用之物:盐的故事》-豆瓣评分7.5
  17. java ean13_【求大神指导】java实现EAN13条形码识别
  18. 细粒度的、安全高效的基于区块链数据溯源系统 Fine Grained, Secure and Efficient Data Provenance on Blockchain Systems(一)
  19. 最新爬取携程酒店信息代码
  20. Java数据库连接池

热门文章

  1. 如果可以,我想给这本书打十星!
  2. 为了我心中的女神,我竟然转行做了程序员
  3. Windows系统管理大师、畅销书作者William R.Stanek的又一经典力作
  4. Linux服务器网络故障诊断
  5. 《图像分类》概述,李飞飞经典CS231N2021《卷积神经网络视觉识别》课程第二讲!...
  6. 微软亚洲研究院周明:从语言智能到代码智能
  7. 疫情过后人工智能是否能迎来春天?
  8. 新春快乐!数据派又双叒叕送福利啦~
  9. 干货 | “青年AI自强计划项目”首节讲座视频、课件分享
  10. 数据蒋堂 | Hadoop - 一把杀鸡用的牛刀