编译器后端 rat 的寄存器分配器:从 1392 行到 584 行
来源:hexrat.cc — 2026-10-12
📋 概述
rat 是作者的小型编译器后端(带半可用的 C99 前端),要把无限多的虚拟寄存器映射到有限物理寄存器或栈槽。它长期使用线性扫描分配器,边修边长到 1392 行;作者测量各部分的实际收益后推倒重写为 584 行的优先装箱分配器:按重要度遍历活跃区间,放进第一个容得下的寄存器,思路接近 LLVM 的 greedy 分配器但去掉大量难点,生成的代码反而更好。文中还讨论了调用约定带来的 caller-saved 约束与溢出的存取成本。
🔑 核心要点
- 线性扫描分配器一路修到 1392 行后整体重写
- 新方案是 584 行的优先装箱分配器
- 按重要度遍历活跃区间,放进第一个容得下的寄存器
- 思路接近 LLVM greedy 分配器,但砍掉大量难点
- 最优分配是 NP-hard,实用方案只能用启发式
💡 金句
So I measured which of its parts helped, threw the rest away and wrote a priority bin-packing allocator in 584 lines.
👍 0
👎 0
← 返回 Hacker News 首页