??? ?? ??? ????? ??? ???? ?????啊?? ???? ??啊?? ????? ??编译原理代码生成授课:胡静42020222004年12月28日1编译器的结构出错处理语法分析程序语义分析程序目标代码生成程序词法分析程序中间代码生成程序代码优化程序表格管理42020222编译原理5.1基本块的DAG表示(cont.)基本块的DAG表示使我们可以对基本块所代表的代码进行一些转
目标代码中间代码序列2 t = a bt = t ct = t d目标机器模型目标指令序列基本块与流图i = 1j = 1t1 = 10 it2 = t1 jt3 = 8 t2t4 = t3 – 88a[t4] = = j 1if j <= 10 goto (3) i = i 1 if i <= 10 goto (2) i = 1 t5 = i – 1 t6 = 88 t5 a
??? ?? ??? ????? ??? ???? ?????啊?? ???? ??啊?? ????? ??编译原理代码生成授课:胡静42020222004年12月28日1编译器的结构出错处理语法分析程序语义分析程序目标代码生成程序词法分析程序中间代码生成程序代码优化程序表格管理42020222编译原理概述代码生成阶段的功能输入:编译器前端生成的中间表示(IR)和相关的符号表信息输出:语义等价的目
单击此处编辑母版标题样式单击此处编辑母版文本样式第二级第三级第四级第五级代码生成代码生成代码生成的输入-各种中间代码形式目标代码与目标机器模型简单的代码生成器基本块DAG图及代码生成目标代码绝对地址目标代码可重定位的目标- linkerloader汇编代码- assembler目标机器模型指令形式op 源目的寻址模式- 绝对地址:op M R ? R op (M)?R- 寄存器:op R1R2
1编译原理第十一章代码生成2词法分析器语法分析器语义分析与中间代码生成器优化段表格管理出错处理目标代码生成器编译程序总框3第十一章代码生成基本问题目标机器模型一个简单代码生成器4第十一章代码生成基本问题目标机器模型一个简单代码生成器5代码生成代码生成把语法分析后或优化后的中间代码变换成目标代码目标代码的三种形式绝对指令代码:能够立即执行的机器语言代码,所有地址已经定位可重新定位指令代码:待装配的机
单击此处编辑母版标题样式单击此处编辑母版文本样式第二级第三级第四级第五级代码生成(I)代码生成代码生成目标-任务-设计目标机器模型基本块与流图简单的代码生成器寄存器分配与指派树重写与动态规划代码生成技术代码生成目标与任务代码生成器的位置代码生成器的任务指令选择寄存器分配与指派指令排序源程序前端中间代码代码优化器中间代码代码生成器目标代码代码生成器设计中若干问题输入形式三地址码: x = y z
单击此处编辑母版标题样式单击此处编辑母版文本样式第二级第三级第四级第五级单击此处编辑母版标题样式单击此处编辑母版文本样式第二级第三级第四级第五级代码生成(III)代码生成代码生成目标-任务-设计目标机器模型基本块与流图简单的代码生成器寄存器分配与指派树重写与动态规划代码生成技术简单的代码生成器针对基本块的代码生成算法--逐个为基本块中三地址代码生成:可能的加载指令运算指令可能的保存指令机器指令形式
代码生成需要考虑的主要问题地址方式R间接索引(变址)T1:= AB MOV A R0T2:= CD ADD B R0T3:= E-T2 MOV C R1T4:= T1-T3 ADD D R1 MOV R0 T1
下次使用信息示例0非下次使用信息示例0非4活3活2活基本块内的局部优化:b0c0a从DAG中删除那些旁边没有附加活跃变量的根结点(即没有父结点的结点换言之其本身不再作为其他结点的子结点而出现)反复此过程删除所有对应死代码的结点 如有基本块代码如下: a = b c b = b – d c = c d e = b cbd0-DAG示例:数组访问y0从DAG重组基本块i0i
4返回9g的基本用法1.指定最终生成文件名的选项2.中间编译选项 3.错误和警告选项 4.将警告变成错误 5.优化代码 6.可移植性选项 2.中间编译选项222528优化虽然会给程序带来更加优异的表现但为什么编译器不直接产生最快最紧凑的代码呢原因是存在如下一些潜在的危险和问题读者必须清楚地意识到首先需对其不加任何优化选项地进行编译生成可运行代码 g -o a0 <Enter> time .a0
违法有害信息,请在下方选择原因提交举报