我被要求为以下代码编写到达定义,我想知道我的解决方案是否正确?我什至走在正确的轨道上吗?我真的很感激任何帮助或提示。谢谢你。
代码:
a = 0;
while (a < 100) {
b = a + 1
c = c + b
a = b * 2
}
return c;
步骤#1:查找块和标记
a = 0; // block 1 | a1
while (a < 100) // block 2 |
b = a + 1 // block 3 | b2
c = c + b | c3
a = b * 2 | a3
return c; // block 3 |
步骤 #2:为每个块找到 GEN 和 KILL 集
堵塞 | GEN | 杀 |
---|---|---|
1 | a1 | a3 |
2 | ∅</td> | ∅</td> |
3 | b3、c3、a3 | a1 |
4 | ∅</td> | ∅</td> |
第 4 步:查看算法以找到 IN 和 OUT 集
input: control flow graph CFG = (N, E, Entry, Exit)
// Boundary condition
OUT[Entry] = ∅
// Initialization for an iterative algorithm
For each basic block B other than Entry
OUT[B] = ∅
// iterate
While (changes to any OUT occur) {
For each basic block B other than Entry {
in[B] = ∪ (out[p]), for all predecessors p of B
out[B] = fB(in[B]) // out[B]=gen[B]∪(in[B]-kill[B])
}
步骤 #5 导出 IN 和 OUT 集
堵塞 | GEN | 杀 | 在 | 出去 |
---|---|---|---|---|
入口 | ∅</td> | |||
1 | a1 | a3 | ∅</td> | a1 |
2 | ∅</td> | ∅</td> | a1 | a1 |
3 | b3、c3、a3 | a1 | a1 | b3、c3、a3 |
4 | ∅</td> | ∅</td> | b3、c3、a3、a1 | b3、c3、a3、a1 |
出口 | b3、c3、a3、a1 | b3、c3、a3、a1 |