NJU软件分析笔记(3)

NJU Static Analysis Notes(3)——Data Flow Analysis Ⅱ

课程链接
本次课程主要内容

  1. Live Variables Analysis
  2. Available Expressions Analysis

活跃变量分析

活跃变量(live variable)分析的作用在于,能告知我们在某个程序点p的变量值v能否在CFG中沿着某条以p为起点的路径一直往后传播(may-approximation)。如果能做到则说v在p是活跃(live)的,否则说v是死(dead)的。

NJU软件分析笔记(3)
所以这条路径上v不能被redefine。活跃变量分析的一个用途就是寄存器分配,在寄存器满的情况下如何选择合适的寄存器替换,按上面的定义应该选一个dead的值。同样按照以前的抽象,采用位向量表示每个变量是否live。
NJU软件分析笔记(3)
思考这个问题的目的所在,一个好的分析方法是backward进行。即通过OUT去计算IN:
NJU软件分析笔记(3)
这里因为S1中使用了v,所以OUT[B]包含{v}, 也就是说在这一点(B之后)v是live的,那么通过这个B之前的情况如何呢?有哪些变量在B中被使用(useB),有哪些在B中被定义(defB),这些都影响到IN[B]的值。
NJU软件分析笔记(3)
所以这里我们的transfer function和control flow可以写为:
NJU软件分析笔记(3)
理解上,如果OUT[B]中含有某个变量z,但是B中有定义z=… 很显然在B之前的程序点,z不应该为live,因此OUT[B]-defB,而如果B中使用了m,那么在B之前的程序点m是live的因此并上usedB。需要注意的一种情况是,针对某个变量既有used也有def,那么就要根据顺序分析。
NJU软件分析笔记(3)
因为先定义后使用,所以v被删去;
NJU软件分析笔记(3)
因为先使用后定义,所以v仍被包含。因此针对上面公式更全面的理解:
NJU软件分析笔记(3)
那么仿照上节的reaching definition analysis可以写出algorithm of live variables analysis:
NJU软件分析笔记(3)
运行如下实例加深理解:
NJU软件分析笔记(3)

可用表达式分析

NJU软件分析笔记(3)
需要注意的关键点是,这属于must-approximation。同样采用位向量抽象表示:
NJU软件分析笔记(3)
进一步理解,这种分析针对的是表达式本身而不是表达式的值(静态分析):
NJU软件分析笔记(3)
公式与之前不同的点就在于Available Expressions Analysis是一种must-approximation,采用forwards的方式control flow应该采用交集。同样可以得到算法:
NJU软件分析笔记(3)
这里有一个值得注意的点就是对于basic block的初始化,这里初始化为U,也就是位向量中全1的形式,具体的理论原因在后续课程中会讲到。直观理解上,如果继续初始化为空集,那么在进行control flow的计算时,空集和其他集合的交集将会一直是空集。同样运行一个算法实例加深理解:
NJU软件分析笔记(3)
这里也有一点需要注意就是在B4中对于x的定义和对于e7 _x的使用。分析的方式是按照顺序,因为是先定义后使用,我们仍将e7_x加入到位向量中(先kill后used)。

总结

NJU软件分析笔记(3)
NJU软件分析笔记(3)

Original: https://www.cnblogs.com/oasisyang/p/16203537.html
Author: OasisYang
Title: NJU软件分析笔记(3)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/585675/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 智能指针

    RAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源(如内 存、文件句柄、网络连接、互斥量等等)的简单技术。…

    Linux 2023年6月13日
    072
  • final关键字

    1-1 编译期常量 定义:带有 ①编译时数值(区别于运行时数值)的 ②final ③ 基本数据类型的量。 注意: 既是static又是final的量不一定是编译期常量; publi…

    Linux 2023年6月8日
    072
  • CentOS 7安装FTP服务器

    修改 vsftpd.conf配置文件,禁用匿名用户访问ftp服务器 vim /etc/vsftpd/vsftpd.conf 将配置文件中的 anonymous_enable=YES…

    Linux 2023年5月27日
    092
  • MySQL注入 利用系统读、写文件

    MySQL能读写系统文件的前提 不同系统、不同的数据库版本有细微差异,以下实验在Windows10和Mysql 5.7.26下操作; 1.拥有该File的读权限 、 该目录写的权限…

    Linux 2023年6月6日
    0108
  • ASP.NET Core 2.2 : 二十三. 深入聊一聊配置的内部处理机制

    上一章介绍了配置的多种数据源被注册、加载和获取的过程,本节看一下这个过程系统是如何实现的。(ASP.NET Core 系列目录) 一、数据源的注册 在上一节介绍的数据源设置中,ap…

    Linux 2023年6月7日
    0130
  • PHP array_count_values()

    array_count_values array_count_values() 函数用于统计数组中所有值出现的次数。 本函数返回一个数组,其元素的键名是原数组的值,键值是该值在原数…

    Linux 2023年6月7日
    085
  • Golang 实现 Redis(6): 实现 pipeline 模式的 redis 客户端

    本文是使用 golang 实现 redis 系列的第六篇, 将介绍如何实现一个 Pipeline 模式的 Redis 客户端。 通常 TCP 客户端的通信模式都是阻塞式的: 客户端…

    Linux 2023年5月28日
    073
  • 如何配置静态路由

    1.主机A想要和主机B 进行通讯,首先会发送一个ARP的广播。 2.第一次封装包含:源IP(192.168.1.2)目的IP(192.168.2.2);源Mac(11-11)目的M…

    Linux 2023年6月6日
    099
  • 磁盘相关命令

    一、磁盘分区说明 原理介绍 Linux无论有多少分区,归根结底只有一个根目录,独立且唯一,Linux的每个分区都是用来组成整个文件系统的一部分 Linux使用一种载入处理方式,可以…

    Linux 2023年6月6日
    0104
  • MySQL — 数据操作语言

    DML 全称 Data Manipulation Language。数据操作语言,用来对数据库表中的数据进行增删改。 插入一条数据 插入多条数据 update &#x886…

    Linux 2023年6月8日
    0100
  • Java实现哈希表

    2.1、哈希冲突 冲突位置,把数据构建为链表结构。 装载因子=哈希表中的元素个数 / (散列表)哈希表的长度 装载因子越大,说明链表越长,性能就越低,那么哈希表就需要扩容,把数据迁…

    Linux 2023年6月14日
    078
  • 【操作系统真象还原】04 编写MBR分区(二)和显卡对话

    前言 通过BIOS提供的中断,我们的MBR程序在屏幕上输出了绿油油的 Hi from MBR!。但只有在 实模式 …

    Linux 2023年5月27日
    0131
  • 测试代理的墙是否是通的

    curl -v -x 代理ip:端口 目的ip:端口通过代理访问对方wget “http://目的IP:端口” -e use_proxy=yes -e ht…

    Linux 2023年6月14日
    0101
  • phpcms v9编辑器上传图片是否添加水印

    第一步:给图片上传对话框里面添加是否添加水印的多选框,找到: satics/js/ckeditor/ckeditor.js 第17554行 (需要格式化,我用的NetBeans)修…

    Linux 2023年6月13日
    089
  • Docker快速部署clickhouse

    Docker快速部署clickhouse Clickhouse特点 完备的DBMS:不仅是个数据库,也是个数据库系统 列存储和数据压缩:典型的olap数据库特性 向量化并行:利用C…

    Linux 2023年6月8日
    088
  • 《卡死你3000》批量文件复制命令详解

    卡死你3000简介: 名词解释: 批量顺序复制文件:从主控机,到从被控机1,被控机2,复制文件。有卡住问题。 批量并发复制文件:从主控机,到从被控机1,被控机2,复制文件。使用多线…

    Linux 2023年6月13日
    0115
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球