无图数据流分析方法:新算法的优势与实践
1. 经典迭代算法
经典迭代算法用于计算数据流问题的最大固定点(MFP)解。其输入为数据流问题 (P, L, ![.!], a0)
,其中 P = I0 ... In
是程序指令序列, L = ⟨A, ⊓, ⊔⟩
是格结构。输出是 MFP 解 s0, ..., sn ∈ A
。
以下是该算法的伪代码:
Input: Data–flow problem (P, L, ![.!], a0)
where P = I0 . . . In, L = ⟨A, ⊓, ⊔⟩
Output: MFP solution s0, . . . , sn ∈A
G = (BB(P), E, B0) := BBG(P)
a[B0] := a0
for each B ∈BB(P) −B0 do a[B] := ⊤
W := BB(P)
while W ̸= ∅do
choose B ∈W
W := W −B
new := a[B]
for each B′ ∈predG(B) do new := new⊓
if new ̸= a[B] then
a[B] := new;
for each B′ ∈succG(B) do W := W + B′
end
end
for each B ∈BB(P) do
with B = Ik . . . Il do
sk :=