CP-Homework9
:material-circle-edit-outline: 约 527 个字 :fontawesome-solid-code: 15 行代码 :material-clock-time-two-outline: 预计阅读时间 2 分钟
[!ABSTRACT] Modern Compiler Implementation in C.pdf
3220104929 250514
11.1

f : c ←r3
p ←r1
if p = 0 goto L1
r1 ← M[p]
call f (uses r1,defines r1,r2)
s ←r1
r1 ← M[p+4]
call f (uses r1,defines r1,r2)
t ←r1
u ←s+t
goto L2
L1 : u ←1
L2 : r1 ←u
r3 ← c
return (uses r1,r3)
首先算出各指令的 in 与 out 集合:
| 行号 | In | Out |
|---|---|---|
| 1 | r1, r3 | c, r1 |
| 2 | c, r1 | c, p |
| 3 | c, p | c, p |
| 4 | c, p | c, p, r1 |
| 5 | c, p, r1 | c, p, r1 |
| 6 | c, p, r1 | s, c, p |
| 7 | s, c, p | s, c, r1 |
| 8 | s, c, r1 | s, c, r1 |
| 9 | s, c, r1 | s, t, c |
| 10 | s, t, c | c |
| 12 | c | c, u |
| 13 | c, u | r1, c |
| 14 | r1, c | r1, r3 |
| 15 | r1, r3 |
基于此画出干涉图
K = 3,发现没有 degree 小于 3 的无合并边的结点,所以直接进行 coalescing,采用 George
然后溢出 s,然后简化 p,然后简化 r3, c,然后简化 r1, u, t,得到空图与 stack

然后开始分配颜色,发现 s 无法分配
改写原程序:
f : c1 ←r3
M[cloc]←c1
p ←r1
if p = 0 goto L1
r1 ← M[p]
call f (uses r1,defines r1,r2)
s ←r1
r1 ← M[p+4]
call f (uses r1,defines r1,r2)
t ←r1
u ←s+t
goto L2
L1 : u ←1
L2 : r1 ←u
c2←M[cloc]
r3 ← c2
return (uses r1,r3)
算出各指令的 in 与 out 集合:
| 行号 | In | Out |
|---|---|---|
| 1 | r1, r3 | c1, r1 |
| 2 | c1, r1 | r1 |
| 3 | r1 | p |
| 4 | p | p |
| 5 | p | p, r1 |
| 6 | p, r1 | p, r1 |
| 7 | p, r1 | s, p |
| 8 | s, p | s, r1 |
| 9 | s, r1 | s, r1 |
| 10 | s, r1 | s, t |
| 11 | s, t | |
| 13 | u | |
| 14 | u | r1 |
| 15 | r1 | r1, c2 |
| 16 | r1, c2 | r1, r3 |
| 17 | r1, r3 |
基于此画出干涉图
K = 3,发现没有 degree 小于 3 的无合并边的结点,所以直接进行 coalescing,采用 George
然后简化 p,然后简化 s,然后简化 r1, u, t,然后简化 c1, c2, r3,得到空图与 stack

然后开始分配颜色
| Node | Color |
|---|---|
| c1 | r3 |
| c2 | r3 |
| r1 | r1 |
| r2 | r2 |
| r3 | r3 |
| p | r3 |
| s | r2 |
| t | r1 |
| u | r1 |
11.3

a
先 spill 掉 a,然后 stack 如下:
| g |
|---|
| f |
| e |
| d |
| c |
| b |
| a |
然后染色:
| Node | Color |
|---|---|
| g | 4 |
| f | 4 |
| e | 3 |
| d | 2 |
| c | 1 |
| b | 2 |
| a | 1 |
能够全部染色,故有一个 potential spill,无 actual spill
b
如果 Briggs criterion 发现可合并 f 和 g
stack 如下:
| b |
|---|
| a |
| f, g |
| e |
| c |
| b |
然后染色:
| Node | Color |
|---|---|
| b | 4 |
| c | 1 |
| e | 2 |
| f, g | 3 |
| a | 2 |
| b | 1 |
能够全部染色,故无 potential spill,无 actual spill