编泽原理 11.3一个简单的代码生成器 售将每条中间代码变换成目标代码,并在一个基本块范围内考虑充分利用寄存器问题。 例: 高级语言 A:=(B+C)*D+E 中间代码 T1:=B+C T2:=T1*D A:=T2+E 目标指令 (1) LD R,B 优化: (1) LD R,B (2) ADD R,C (2) ADD R,C (3) ST R,T1 (3) MUL R,D (4) LD R,T1 (4)ADD R,E (5) MUL R,D (5)ST R,A (6) ST R,T2 () LD R,T2 (⑧)ADD R,E (9)ST R,A 第6列
编译原理 第6页 11.3 一个简单的代码生成器 将每条中间代码变换成目标代码,并在一个基本块范围内考虑充分利用寄存器问题。 例: 高级语言 A:=(B+C)*D+E 中间代码 T1:=B+C T2:=T1*D A:=T2+E 目标指令 (1) LD R,B 优化: (1) LD R,B (2) ADD R,C (2) ADD R,C (3) ST R,T1 (3) MUL R,D (4) LD R,T1 ( 4) ADD R,E (5) MUL R,D (5) ST R,A (6) ST R,T2 (7) LD R,T2 (8) ADD R,E (9)ST R,A
编译原理 待用信息 计算变量待用信息算法 1、开始,将基本块中各变量的符号表登记项中的待用信息栏填为“非待 用”,并根据该变量在基本块出口之后是否活跃填写活跃信息栏。 2、,从基本块出口到基本块入口由后往前依次处理各中间代码,对每一中间 代码 i:A:=B o p C 依次执行: a)将符号表中变量A的待用信息和活跃信息附加到中间代码i上; b)将符号表中变量A的待用信息和活跃信息分别置为“非待用”和 “非活跃”; c)将符号表中变量B和C的待用信息和活跃信息附加到中间代码i上; )将符号表中变量B和C的待用信息均置为i,活跃信息均置为“活 跃 注意:次序不可颠倒。 如果中间代码形式为 A:=OpB或A:=B 除 不涉及C外步骤完全相同。 第7觉
编译原理 第7页 待用信息 计算变量待用信息算法 1、开始,将基本块中各变量的符号表登记项中的待用信息栏填为“非待 用”,并根据该变量在基本块出口之后是否活跃填写活跃信息栏。 2、从基本块出口到基本块入口由后往前依次处理各中间代码,对每一中间 代码 i:A:=B op C 依次执行: a)将符号表中变量A的待用信息和活跃信息附加到中间代码i上; b)将符号表中变量A的待用信息和活跃信息分别置为“非待用”和 “非活跃”; c)将符号表中变量B和C的待用信息和活跃信息附加到中间代码i上; d)将符号表中变量B和C的待用信息均置为i,活跃信息均置为“活 跃”。 注意:次序不可颠倒。 如果中间代码形式为 A:= op B 或 A:= B 除 不涉及C外步骤完全相同