1. RTL(Register Transfer Language)单指令与 insn 的 register allocator 语义?
请说明 GCC 中 RTL(Register Transfer Language)单指令与 insn 的语义,以及它对 register allocator(寄存器分配器)的作用?
- RTL 与 insn 的概念
- 寄存器分配对 RTL 的依赖
- RTL 是 GCC 从机器无关优化到机器相关后端的桥梁
RTL(Register Transfer Language)是 GCC 中间表示,由 insn(指令节点)组成,每个 insn 描述一条寄存器传输操作,可包含模式(mode)、操作数与副作用。RTL 是寄存器分配的主要输入:它以"无限虚拟寄存器"形式描述操作,寄存器分配器把这些虚拟寄存器映射到真实硬件寄存器,必要时产生 spill(溢出)到内存。因此 RTL 中的单指令结构(源/目的操作数、约束)直接决定了分配器如何选择寄存器、如何满足指令的寄存器约束(如某些指令要求特定寄存器)。工程上,RTL 的 insn 语义承载了后端指令选择与寄存器分配的信息,是 GCC 从机器无关到机器相关优化的桥梁。
RTL 是"寄存器分配的操作对象"。insn 提供操作数与约束,分配器据此映射虚拟寄存器到物理寄存器,RTL 的忠实度决定分配正确性。