第八章代码生成 许畅 南京大学计算机系 2022年春季 版权所有南京大学计算机科学与技术系许畅2022春季版
许畅 南京大学计算机系 2022年春季 第八章 代码生成 版权所有 南京大学计算机科学与技术系 许畅 2022春季版 南大编译许畅
主要内容 。代码生成器的设计 目标语言 目标代码中的地址 。基本块和流图 基本块优化 大编译许畅 代码生成器 寄存器分配 2
主要内容 • 代码生成器的设计 • 目标语言 • 目标代码中的地址 • 基本块和流图 • 基本块优化 • 代码生成器 • 寄存器分配 2 南大编译许畅
代码生成器的位置 根据中间表示(R)生成代码 代码生成器之前可能有一个优化组件 代码生成器的三个任务 指令选择:选择适当的指令实现IR语句 寄存器分配和指派:把哪个值放在哪个寄存器中 指令排序:按照什么顺序安排指令执行 源程序· 前端 中间 代码优 中间 代码 目标 代码 化器 代码 生成器 程序 图8-1 代码生成器的位置 3
代码生成器的位置 • 根据中间表示 (IR) 生成代码 • 代码生成器之前可能有一个优化组件 • 代码生成器的三个任务 – 指令选择:选择适当的指令实现IR语句 – 寄存器分配和指派:把哪个值放在哪个寄存器中 – 指令排序:按照什么顺序安排指令执行 3 南大编译许畅
要解决的问题 正确性:正确的机器指令 易于实现、测试和维护 。输入IR的选择 四元式、三元式、字节代码、堆栈机代码、后缀表示、 抽象语法树、DAG图、. 输出 RISC、CISC 可重定向代码、汇编语言 4
要解决的问题 • 正确性:正确的机器指令 • 易于实现、测试和维护 • 输入IR的选择 – 四元式、三元式、字节代码、堆栈机代码、后缀表示、 抽象语法树、DAG图、… • 输出 – RISC、CISC – 可重定向代码、汇编语言 4 南大编译许畅
目标机模型 使用三地址机器的模型 。指令 加载:LD dst,addr(把地址addr中的内容加载到dst所指 的寄存器) 保存:STx,r(把寄存器r中的内容保存到x中) 计算:OP dst,,srC1vsrc2(把srC1和srC2中的值运算后将结 果存放到dst中) 无条件跳转:BRL(控制流转向标号L的指令) 条件跳转:Bcond r,L(对r中的值进行测试,如果为真 则转向L) 5
目标机模型 • 使用三地址机器的模型 • 指令 – 加载:LD dst, addr (把地址addr中的内容加载到dst所指 的寄存器) – 保存:ST x, r (把寄存器r中的内容保存到x中) – 计算:OP dst, src1 , src2 (把src1和src2中的值运算后将结 果存放到dst中) – 无条件跳转:BR L (控制流转向标号L的指令) – 条件跳转:Bcond r, L (对r中的值进行测试,如果为真 则转向L) 5 南大编译许畅