2

我被要求为以下代码编写到达定义,我想知道我的解决方案是否正确?我什至走在正确的轨道上吗?我真的很感激任何帮助或提示。谢谢你。

代码:

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
4

1 回答 1

0

看看这个例子:https ://engineering.purdue.edu/~milind/ece573/2011spring/ps8-sol.pdf

该示例中分析的代码比您的代码稍微复杂一些,但对整个解决方案进行了非常详细的解释。

于 2021-02-08T15:45:35.100 回答