活跃变量分析(一) :基于后向问题的数据流方程、迭代算法

活跃变量分析

1。概念

      对于变量x和程序点p,x在点p上的值是否会在流图中的某条从点p出发的路径中使用,如果是,我们就说x在p上是活跃的,如果不是就说x在p上是死的。

     对于给定的变量x和程序中给定的点p,活跃变量问题确定沿着此点到出口的路径上是否存在对该变量的使用

2。用途

     1)为基本块进行寄存器的分配,在一个值被计算并保存到一个寄存器中后,它很可能在基本块中使用。如果他在基本块的结尾是死的,就没有必要在结尾处保存这个值。另外,在所有寄存器都被占用时,如果我们还需要申请一个寄存器的话,那么应该考虑使用一个存放了已经死亡的值的寄存器。因为这个值不需要保存到内存。

     2)  异构平台,如果一个值在某个任务的基本块的结尾处是死亡的,就不需要写回主存中。

 

数据流方程

  • 基本术语

1)in(B)表示紧靠基本块B之前的活跃变量集合,out(B)表示紧随B之后的点上的活跃变量集合。

2)格:采用位向量,变量的每一个使用在位向量中有一个位置。

3)后向问题

4)初始化。in(exit)=Φ  描述边界条件,即程序的出口处没有变量是活跃的。

5)传递函数    use(B)∪(x-def(B))

  use(B)指如下变量的集合,它们的值可能在B中先于任何对它们的定值被使用。

   def(B)指如下变量的集合,这些变量在B中的定值,先于任何对它们的使用。

一个变量要在进入一个基本块时活跃,必须要满足以下两个条件中的一个:

         5.1  变量在基本块中被重新(之前有过定义)定义之前就被使用。

         5.2  变量在离开基本块时活跃且在基本块中没有对它重新定值。

  • 数据流方程组

或者单个方程:

上述的代表位向量运算的∪(并运算)。

  • 迭代算法

按照逆前序初始化工作表,N所有的节点,exit出口节点,F流函数,dfout(B):表示从B出口时的数据流信息

procedure Worklist_Iterate(N,exit,F,dfout,Init)

  N: in set of Node

  exit: in Node

  F : in Node → L

  dfout: out Node → L

  Init : in L

begin

  B,P: Node

  Worklist : set of Node

  effect, totaleffect : L

 dfout(exit) := Init

  Worklist := N –{exit}

  For each B ∈ N do

    dfout(B) := Т

  od

  repeat

    B := ◆Worklist

    Worklist -= {B}

    totaleffect := Т

    for each P ∈ Succ(B) do

      effect := F(P,dfout(P))

      totaleffect ∩= effect

      if dfout(B) ≠ totaleffect then

        dfout(B) := totaleffect

        Worklist ∪= {B}

      fi

    od

  until Worklist = Φ

end  || Worklist_Iterate

 

龙书上计算活跃变量的迭代算法。

In(exit)=Φ;

for(除exit之外的每个基本块) in(B)=Φ;

while(某个in值发生了改变)

        for(除exit之外的每个基本块B){

           out(B)=∪ s∈Succ(B)IN(S);

          in(B)=useB∪(out(B)-def(B));

}

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值