概述 p283 ■算法策略 ◆依次把每条中间代码变换成目标代码 ·在一个基本块范围内充分利用寄存器 ■如何充分利用寄存器一做到 ◆尽可能地让变量(存结果)的值保留在寄存器中 ·尽可能引用变量(操作数)在寄存器中的值,直到 该寄存器必须用来存放别的变量值或者已到达基本 块出口为止 ■为了生成高效的目标代码,充分利用寄存器, 代码生成器需要了解如下信息 ◆哪些变量以后还会被引用—待用信息 ◆变量的值当前在何处一寄存器描述和地址描述 2025/4/2 国 6/16
2025/4/2 概述 p283 ◼ 算法策略 ◆ 依次把每条中间代码变换成目标代码 ◆ 在一个基本块范围内充分利用寄存器 ◼ 如何充分利用寄存器——做到 ◆ 尽可能地让变量(存结果)的值保留在寄存器中 ◆ 尽可能引用变量(操作数)在寄存器中的值,直到 该寄存器必须用来存放别的变量值或者已到达基本 块出口为止 ◼ 为了生成高效的目标代码,充分利用寄存器, 代码生成器需要了解如下信息 ◆ 哪些变量以后还会被引用——待用信息 ◆ 变量的值当前在何处——寄存器描述和地址描述 6/16
目 三地址代码 目标代码 寄存器描述 地址描述 标 (1)T1:=A+B LD Ro,A 代 Ro空闲 ADD Ro,B Ro含T1 T1在R0 2T2:=T1-C LD R1 Ro Ro含T1lRo,R1 T1在Ro R1空闲 生 SUB R1,C R1含T2均非空 T2在R1 (3)T3:=D+E ST Ro T1 R0T1存入内存 T1在T1 Ro 举 LD Ro,D R1含T2 T2在R1T2以后 T1最远用到 ADD Ro,E Ro含T3 不用 例 T3在R (4)T3:T2*T3R1 MUL R1,Ro R1含T3 T3在RT1在T1 (5)T4:红4T3 LD Ro,T1 R1含T3 T3在R1T3以后 RoT1存入R0 ADD Ro,R1 R0含T4 T4在R0不用 (6)T5:=T3-ER1 SUB R1,E R1含T5R0含T4 T5在R1T4在R0 (7)F:=T4*T5 MUL Ro,Ri T4以后 RoF存内存 ST Ro,F Ro含F F在RO,F 不用 假设只有R0,R1两个寄存器可用,出口处只有F活跃 2025/4/2 节目录国 7/16
2025/4/2 目 标 代 码 生 成 举 例 三地址代码 (1)T1:=A+B (2)T2:=T1-C (3)T3:=D+E (4)T3:=T2*T3 (5)T4:=T1+T3 (6)T5:=T3-E (7)F:=T4*T5 目标代码 寄存器描述 地址描述 假设只有R0 ,R1两个寄存器可用 R0空闲 LD R0 ,A ADD R0 ,B R0含T1 T1在R0 R1空闲 LD R1 ,R0 SUB R1 ,C R0含T1 R1含T2 T1在R0 T2在R1 R0,R1 均非空 R0 T1最远用到 ST R0 ,T1 R0 T1存入内存 LD R0 ,D ADD R0 ,E R1含T2 R0含T3 T1在T1 T2在R1 T3在R0 T2以后 不用 R1 MUL R1 ,R0 R1含T3 T3在R1 T1在T1 R0 LD R0 ,T1 ADD R0 ,R1 R1含T3 R0含T4 T3在R1 T4在R0 R1 SUB R1 ,E R1含T5 R0含T4 T5在R1 T4在R0 T3以后 T1存入R0 不用 T4以后 R0 不用 MUL R0 ,R1 ,出口处只有F活跃 F存内存 ST R0,F R0含F F在R0,F 节目录 7/16