T4:=A+B-(E-(C+D) TI: =A+B MOV ARO T2: =C+D ADD BRO T3: =E-T2 MOV CRI T4:=T1-T ADD DRI MOV RO.TI MOE。R0 SUB RI.RO MOV TI.RI SUB RO,RI MOV RI. T4
T4:=A+B-(E-(C+D)) T1:= A+B MOV A,R0 T2:=C+D ADD B,R0 T3:=E-T2 MOV C,R1 T4:=T1-T3 ADD D,R1 MOV R0,T1 MOV E, R0 SUB R1,R0 MOV T1,R1 SUB R0,R1 MOV R1, T4
T2: =C+D MOV CRO T3 = E-T2 ADD DRO TI: =A+B MOV ERI T4:=T1-T3 SUB RO.RI MOV ARO ADD B RO SUB RI.RO MOV RO.T4
T2:=C+D MOV C,R0 T3:=E-T2 ADD D,R0 T1:= A+B MOV E,R1 T4:=T1-T3 SUB R0,R1 MOV A,R0 ADD B, R0 SUB R1,R0 MOV R0,T4
简单的代码生成器(基本块内) 在一个基本块范围内考虑如何充分利用寄存器的问题 尽可能地让该变量的值保留在寄存器中 尽可能引用变量在寄存器中的值 待用信息:若在一个基本块中,变量在四元式i中被定 值,在i后面的四元式中要引用A值,且从i到j之间没有其 它对A的定值点,这时我们称四元式i中对变量A的待用 信息或称下次引用信息,同时也称是活跃的,,若A被多次 引用则可构成待用信息链与活跃信息链。 可从基本块的出口由后向前扫描,对每个变量建立相应的待用 信息链和活跃变量信息链
. 简单的代码生成器(基本块内) 在一个基本块范围内考虑如何充分利用寄存器的问题: l 尽可能地让该变量的值保留在寄存器中 l 尽可能引用变量在寄存器中的值 待用信息:若在一个基本块中,变量A在四元式i 中被定 值,在i 后面的四元式j 中要引用A 值,且从i 到 j 之间没有其 它对A的定值点,这时我们称j是四元式i 中对变量A 的待用 信息或称下次引用信息,同时也称A 是活跃的,,若A 被多次 引用则可构成待用信息链与活跃信息链。 可从基本块的出口由后向前扫描,对每个变量建立相应的待用 信息链和活跃变量信息链
计算待用信息的算法: 符号表中增加“待用信息”栏和“活跃信息” 栏 对各基本块的符号表中的待用信息”栏和活跃信息 栏置初值,即把待用信息”栏置“非待用”,对“活跃 信息”栏按在基本块出口处是否为活跃而置成活跃”或 “非活跃”。这里假定变量都是活跃的,临时变量都是非 活跃的
计算待用信息的算法: 对各基本块的符号表中的“待用信息”栏和“活跃信息” 栏置初值,即把“待用信息”栏置 “非待用”,对“活跃 信息”栏按在基本块出口处是否为活跃而置成“活跃”或 “非活跃”。这里假定变量都是活跃的,临时变量都是非 活跃的。 符号表中增加“待用信息”栏和“活跃信息” 栏
从基本块出口到基本块入口由后向前依次处理每个四元 式。对每个四元式:A:=BopC,依次执行下述步骤: a)把符号表中变量A的待用信息和活跃信息附加到四元式i b)把符号表中变量A的待用信息栏和活跃信息栏分别置为 非待用”和“非活跃”。(由于在i中对A的定值只能 在i以后的四元式才能引用,因而对以前的四元式来说A 是不活跃也不可能是待用的) c)把符号表中变量B和C的待用信息和活跃信息附加到四元 式i上 d)把符号表中变量B和C的待用信息栏置为“i,活跃信 息栏置为“活跃”。 注意,以上a)和b),c)和d)的次序不能颠倒
从基本块出口到基本块入口由后向前依次处理每个四元 式。对每个四元式i: A:=B op C,依次执行下述步骤: a) 把符号表中变量A的待用信息和活跃信息附加到四元式i 上。 b) 把符号表中变量A的待用信息栏和活跃信息栏分别置为 “非待用”和 “非活跃” 。 (由于在i 中对A的定值只能 在 i 以后的四元式才能引用,因而对 i以前的四元式来说A 是不活跃也不可能是待用的) c)把符号表中变量B和 C 的待用信息和活跃信息附加到四元 式 i 上。 d) 把符号表中变量B和 C的待用信息栏置为“ i”,活跃信 息栏置为“活跃” 。 注意,以上a)和b),c)和d)的次序不能颠倒