寄存器分配中的图着色与合并优化
1. 合并(Coalescing)策略
在寄存器分配过程中,使用干涉图可以轻松消除冗余的移动指令。若移动指令的源和目标节点在干涉图中无干涉边,则可将两节点合并为新节点,新节点的边为被合并节点边的并集。
不过,随意合并可能使原本可着色的图变得不可着色。因此,有两种安全的合并策略:
- Briggs 策略 :若合并后的节点 ab 与重要度(即边数 ≥K)邻居数少于 K,则可合并节点 a 和 b。此策略保证不会将 K 可着色图变为非 K 可着色图。
- George 策略 :若对于节点 a 的每个邻居 t,要么 t 已与 b 干涉,要么 t 重要度低,则可合并节点 a 和 b。
以下是一个简单的流程说明:
graph LR
A[开始] --> B[构建干涉图并分类节点]
B --> C[简化:移除低重要度非移动相关节点]
C --> D{是否有可合并移动指令?}
D -->|是| E[合并]
D -->|否| F{是否有低重要度移动相关节点?}
F -->|是| G[冻结移动指令]
F -->|否| H[选择溢出节点]
E --> D
G --> D
H --> D
D --> I{是否所有工作列表为空?}
I -->|是| J[分配颜色]
I -->|否| C
J --> K{是否有
超级会员免费看
订阅专栏 解锁全文
4773

被折叠的 条评论
为什么被折叠?



