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)

大家都在看

  • Java动态脚本Groovy读取配置文件

    前言:请各大网友尊重本人原创知识分享,谨记本人博客: 南国以南i 核心涉及: @Value:作用是通过注解将常量、配置文件中的值、其他bean的属性值注入到变量中,作为变量的初始值…

    Linux 2023年6月14日
    081
  • Windows批处理一键添加hosts文件

    批处理一键添加hosts文件 此脚本主要用于安装一些学习软件时需屏弊一些网站,双击一键修改。 @echo off echo 获取Administrator权限 cacls.exe …

    Linux 2023年6月8日
    0107
  • gerrit系统如何配置访问控制

    .版本:v0.3作者:河东西望日期:2022-7-13. gerrit系统的上手使用有两个难点: 想要上手使用gerrit的同仁们,搭建部署好gerrit系统之后,会发现gerri…

    Linux 2023年6月7日
    0104
  • PyQt5的使用

    PyQt5 目录 Qt Designer PyQt5基本窗口控件(QMainWindow、Qwidget、Qlabel、QLineEdit、菜单、工具栏等) PyQt5高级组件(Q…

    Linux 2023年6月14日
    0107
  • 了解GFS

    参考: https://wenku.baidu.com/view/4392293517791711cc7931b765ce0508763275f2.html 论文翻译 https:…

    Linux 2023年6月7日
    0113
  • Redis使用Swap,但系统可用内存充足

    最近生产环境遇到一个很奇怪的问题,系统内存32G,redis使用8G左右,剩余的内存都被系统cache使用,从表面上看系统可用内存有20G左右。但是系统运行过程中,redis时不时…

    Linux 2023年6月14日
    098
  • 2022年5月16号开始整理habse

    关于本次整理的hbase内容是基于原理的学习的笔记 Original: https://www.cnblogs.com/yxb123/p/16277454.htmlAuthor: …

    Linux 2023年6月7日
    0122
  • Kubenertes-实战入门

    实战入门 Namespace Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现 多套环境的资源隔离。 默认情况下,kubernetes集群中…

    Linux 2023年6月13日
    098
  • DDL(操作表和数据库)

    数据定义语言,用来定义数据库对象:数据库,表,列等 readme 注意本博客中的 操作数据库 查询 show databases; 创建 创建数据库 create database…

    Linux 2023年6月7日
    086
  • 关于如何在Idea下进行多子项目及引用内部子项目情况下打包项目的方法

    近期在开发Java的时候遇到了如下的打包上的问题 需要将一个工程下面的子工程分别打包 有的子工程还包含了另一个子工程 在这种情况下打包会出现找不到子模块的情况。 JDK:1.8 开…

    Linux 2023年6月14日
    0100
  • 罗德岛

    自从转行以后就建博了,一直没有动手写内容,今天开始写。 主要记录技术上的积累和项目上的工作感悟。 这里就是罗德岛,就在这里跳。 Original: https://www.cnbl…

    Linux 2023年6月6日
    092
  • 解决nginx反向代理Mixed Content和Blockable问题

    bash;gutter:false; nginx配置https反向代理,按F12发现js等文件出现Mixed Content,Optionally-blockable 和 Bloc…

    Linux 2023年6月7日
    0144
  • 软件工程 软件需求与软件需求规约 第1篇随笔

    2、软件需求与软件需求规约 1. 何为需求? 定义问题的基本要素是 “需求” 一个需求是一个有关”要予构造”的陈述,用以描述待开发产…

    Linux 2023年6月7日
    0104
  • pycharm 设置默认换行符

    作者:Outsrkem原文链接:https://www.cnblogs.com/outsrkem/p/16488693.html本文版权归作者所有,欢迎转载,但未经作者同意必须保留…

    Linux 2023年6月6日
    0114
  • 【Java】关于Maven仓库地址

    Maven仓库地址 仓库 如果你没有配置阿里云仓库镜像源,可以到这里来找 https://mvnrepository.com/ 如果你配置了阿里云仓库镜像源,可以来这里找 http…

    Linux 2023年6月14日
    0103
  • Snap Build Your Own Blocks输入中文解决办法

    Snap Build Your Own Blocks 输入中文解决办法 Snap! (formerly BYOB) is a visual, drag-and-drop progr…

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