SSA 到寄存器:活跃性分析实战
An ode to livelyness analysis; SSA to registers
我正在为 purple-garden 语言开发寄存器分配器,覆盖基于寄存器的字节码虚拟机和 x86 即时编译器。文章以 gardening 算法为例,展示了如何从 C 代码到 SSA 形式的 IR 转换。通过可视化虚拟寄存器的生命周期,我实现了一个简洁的活跃性分析算法:遍历基本块,逆向扫描指令并观察虚拟寄存器的定义与使用。这套机制将 SSA 形式中的无限虚拟寄存器映射到有限的硬件资源,如 gprs、fprs 和栈,为后续的寄存器分配奠定基础。
寄存器分配是将无限数量的虚拟寄存器分配到硬件有限的存储资源的过程,具体包括通用寄存器、浮点寄存器和栈。