执行代价举例 n对三地址代码A:=B+C n 指令 执行代价 n若B,C分别在Ro,R1,且B值 以后不用,则 n LD Ro,R1 (0+1) 1 (1)ADD Ro,R1 (0+1)1 n LD R1,M (1+1) 2 n若B在Ro,C在内存,且B值 n ST RL,TI (1+1) 2 以后不用,则 ADD R1,#1 n (1+1) 2 (2)ADD Ro,C (1+1)2 n ADD Ro,*R1 (1+1)2 或(3)LDR1,C n LD Ro,*M (2+1)3 ADD Ro,R1 (1+2) 3 n第(3)种特别适合于C值在块内还要被引用的情况, 虽然它的执行代价比前两种形式都高,但由于以 后可从寄存器中取得C值,故从总程序的执行代价 上看,仍是合算的 2023/2/28 章节目录国)6
2023/2/28 6 执行代价举例 n 指令 执行代价 n LD R0,R1 (0+1) 1 n LD R1,M (1+1) 2 n ST R1,T1 (1+1) 2 n ADD R1,#1 (1+1) 2 n ADD R0,*R1 (1+1) 2 n LD R0,*M (2+1) 3 n 对三地址代码A:=B+C n 若B,C分别在R0,R1,且B值 以后不用,则 (1)ADD R0,R1 (0+1) 1 n 若B在R0,C在内存,且B值 以后不用,则 (2)ADD R0,C (1+1) 2 或(3)LD R1,C ADD R0,R1 (1+2) 3 n 第(3)种特别适合于C值在块内还要被引用的情况, 虽然它的执行代价比前两种形式都高,但由于以 后可从寄存器中取得C值,故从总程序的执行代价 上看,仍是合算的 章节目录
10.4.2一个简单的代码生成器p282 n概述 n寄存器描述和地址描述 n简单代码生成算法 2023/2/28 章节目录国16
2023/2/28 10.4.2 一个简单的代码生成器 p282 n 概述 n 寄存器描述和地址描述 n 简单代码生成算法 章节目录 7/16
概述p283 n算法策略 u依次把每条中间代码变换成目标代码 u在一个基本块范围内充分利用寄存器 n如何充分利用寄存器—做到 u尽可能地让变量(存结果)的值保留在寄存器中 ù尽可能引用变量(操作数)在寄存器中的值,直到 该寄存器必须用来存放别的变量值或者已到达基本 块出口为止 n为了生成高效的目标代码,充分利用寄存器, 代码生成器需要了解如下信息 u哪些变量以后还会被引用一待用信息 u 变量的值当前在何处一 寄存器描述和地址描述 2023/2/28 8/16
2023/2/28 概述 p283 n 算法策略 u 依次把每条中间代码变换成目标代码 u 在一个基本块范围内充分利用寄存器 n 如何充分利用寄存器——做到 u 尽可能地让变量(存结果)的值保留在寄存器中 u 尽可能引用变量(操作数)在寄存器中的值,直到 该寄存器必须用来存放别的变量值或者已到达基本 块出口为止 n 为了生成高效的目标代码,充分利用寄存器, 代码生成器需要了解如下信息 u 哪些变量以后还会被引用——待用信息 u 变量的值当前在何处——寄存器描述和地址描述 8/16