rat编译器:用584行代码重写寄存器分配

Rat's Register Allocator

我的编译器rat曾依赖1392行的线性扫描算法,如今我将其重构为仅584行的优先级装箱分配器。通过按重要性处理live ranges并采用贪心策略,新算法生成的代码更优,且无需复杂的分裂或驱逐逻辑。最令我惊喜的是,它无需显式指令,就能自动将跨越函数调用的变量分配到callee-saved寄存器,完美契合System V AMD64 ABI规则。这种极简设计不仅大幅减少了代码量,还证明了在寄存器分配领域,简单的启发式算法往往能取得意想不到的效果。

没有任何代码显式要求'将跨越调用的值放入callee-saved寄存器',这完全是设计自然产生的结果,也是我最喜欢的部分。

同日更多故事

2026-10-11