【发布时间】:2021-05-09 13:52:58
【问题描述】:
我被要求为以下代码编写到达定义,我想知道我的解决方案是否正确?我什至走在正确的轨道上吗?我真的很感激任何帮助或提示。谢谢。
代码:
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 集
| BLOCK | GEN | KILL |
|---|---|---|
| 1 | a1 | a3 |
| 2 | ∅ | ∅ |
| 3 | b3, c3, a3 | a1 |
| 4 | ∅ | ∅ |
第 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 集
| BLOCK | GEN | KILL | IN | OUT |
|---|---|---|---|---|
| ENTRY | ∅ | |||
| 1 | a1 | a3 | ∅ | a1 |
| 2 | ∅ | ∅ | a1 | a1 |
| 3 | b3, c3, a3 | a1 | a1 | b3, c3, a3 |
| 4 | ∅ | ∅ | b3, c3, a3, a1 | b3, c3, a3, a1 |
| EXIT | b3, c3, a3, a1 | b3, c3, a3, a1 |
【问题讨论】:
标签: compiler-construction compiler-optimization rda