数据流分析之Liveness Analysis

本文详细介绍了Liveness Analysis,包括其定义、作用和实现方式。Liveness Analysis用于确定程序点上的活跃变量,有助于死代码去除和优化寄存器分配。信息传播规则分为通过指令时和汇聚时的变化,通过这些规则可以求解活跃变量集合。
摘要由CSDN通过智能技术生成

目录

 

(1)什么是Liveness?

(2)什么是Liveness Analysis?

(3)Liveness Analysis有何用处?

 (4)如何实现Liveness Analysis?

- 信息在通过指令时的传播规则

 - 信息在汇聚时的传播规则

- 信息传播规则的形式化表述

- 基于信息传播规则,求解活跃变量集合


(1)什么是Liveness?

我们说,变量v在程序点p处是活跃的,如果:

a. 变量v在程序点p'处被使用,且程序点p和p'之间存在一条路径;

b. 变量v在上述路径中没有被定义过;

示意图如下:

(2)什么是Liveness Analysis?

LA是针对程序中的每个程序点(通常是一条指令的前后处),分析出活跃于此处的所有变量。

    从 Liveness的定义可看出,LA分析出的活跃变量在程序执行过程中不一定是活跃的,原因在于LA分析中程序点p和p'之间可能存在多条路径,假设变量v在其中一条路径中未被定义过,而在另一条路径中被定义过,那么依据 Liveness的定义,变量v在p处仍是活跃的。但在程序实际执行过程中,被执行的从p到p'的路径,可能恰好是变量v被定义过的那一条,那么此时变量v是非活跃的。 由此可以看出,LA属于may分析。

(3)Liveness Analysis有何用处?

举两个例子来说明

a. 死代码去除。针对每个程序点处的活跃变量集合和程序中出现的每个变量,若某变量v在某程序点之前被赋值过,但v又不在此程序点的活跃变量集合中,这就说明赋予v的值没有被使用过,故此赋值语句没有任何意义,可直接删除以优化程序;

b. 优化寄存器分配。当进行运算时,运算所需的变量需要从内存读取到寄存器中。如果此时所有寄存器已被装满,那么需要将部分变量从寄

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值