编译原理讲义 (10)(全).ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:50 大小:1.4MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

编译原理讲义 (10)(全).ppt

编译原理讲义(10)(全).ppt

预览

免费试读已结束,剩余 40 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

§9代码优化优化:对程序进行等价变化,使目标程序尽可能提高运行速度,减少占用的空间,从而提高效率代码优化器:为了实现代码优化,需要在编译系统里加入一段优化程序,称代码优化器代码优化器的任务将前端产生的中间代码转换为等价的目标代码代码优化器的要求:等价变换提高目标代码的执行速度减少目标代码占用的空间优化器的地位:优化分类用户和编译器可改进的地方优化的主要种类本章主要内容9.1基本块优化一、常数合并及常数传播常数合并的实现二、删除冗余的公共表达式三、复写传播四、删除死代码五、削弱计算强度六、临时变量改名对循环结构所生成的中间代码可划分为如下几个部分:初始化部分:循环控制变量被赋予一个初值,此部分组成一个基本块,它在循环体中的语句开始之前执行一次。调节部分:循环控制变量增加或减少一个特定的量,可把这部分视为构成该循环的最后一个基本块。测试部分:测试循环控制变量以判定终止条件是否满足。这部分的位置依赖于循环语句的性质,若循环语句允许循环体执行0次,则在执行循环体之前进行测试,若循环语句要求循环体至少执行1次,则在执行循环体之后进行测试。循环体:由需要重复执行的语句构成的一个或多个基本块组成。循环结构中的调节部分和测试部分也可以与循环体中的其他语句一起出现在基本块中。一、循环展开二、频度削弱三、归纳变量的删除四、及削弱计算强度举例一、循环展开考虑C语言的循环语句:for(i:=0;i<10;i++)x[i]:=0;二、代码外提三、削弱计算强度四、删除归纳变量对B1进行优化9.3窥孔优化典型的窥孔优化技术一、冗余指令的删除死代码的删除程序里插入的跟踪调试语句二、控制流优化三、代数化简四、强度削弱五、充分利用机器的特点9.4dag在代码生成中的应用基本块的dag表示例:基本块dag的构造仅涉及如下三种形式的三地址语句的情况:(1)x:=yopz(2)x:=opy(3)x:=y例:dag的应用基本思路例:从dag生成目标代码选择计算顺序dag的启发式排序算法例:小结小结(续)小结(续)小结(续)作业