第7章代码优化
内容
概述
代码优化的基本原则
基本块及其优化
数据流分析
循环优化
概述
中间代码是一种通用的抽象,不考虑与具体机器相关的细节内容。
高级语言编写的程序可能本身并不是优化的。
某些高级语言的特征在映射到更低层面语言时,存在多种实现方式,具有不同的时间、空间开销。
优化必须保证语义上的等价
在具有相同功能的条件下,使系统在某方面具有更好的指标。
优化的指标:
目标代码指令条数
目标代码运行效率
目标代码占用内存的多少
目标代码的功耗
……
优化的时机
中间代码生成时的优化
平台无关的优化
平台相关的优化(很多在代码生成阶段进行考虑)
本章主要关注代码优化的基本原理,不考虑具体机器的情况。
中间代码生成阶段的优化
大部分优化是在生成中间代码后进行的
在中间代码生成阶段也可进行部分优化
布尔表达式的优化。主要是短路机制的实现
控制流语句的少量优化。如书中例子里,while语句尾部的if-then-else语句在生成then部分的中间代码时,直接跳转到while开头的做法。
内置调用语句的优化,可根据已经知道的调用规律,减少不必要的开销。
代码优化的基本原则、思路和范围
代码优化的基本原则
等价原则:所谓等价原则(有的文献上称为“安全性”),就是优化前后的代码具有完全相同的功能。
有效原则:优化后产生的代码达到预期的优化目标。
合算原则:以较小的代价获得尽可能高的优化效果。
优化的基本思路
(1)冗余代码的消除
(2)重复计算的合并与提取
(3)复杂计算的简单化
优化的范围
子程序内部的优化
第一,局部优化。该范围优化针对一个基本块内的中间代码进行优化。
第二,超局部优化和区域优化。该范围的优化考虑多个基本块之间的控制流关系,能够实现跨越多个基本块边界的优化。
第三,全局优化,也称过程内优化。是针对一个完整的子程序进行的优化。全局优化的主要技术是数据流分析技术。
过程间优化(Interprocedural)
基本块及其优化方法
所谓基本块,就是只包含线性无谓词代码的最长片段。
基本块是符合以下性质的代码序列:
(1)一个基本块有唯一的入口和出口,分别对应于该块的第一个和最末一个指令;
(2)基本块内部的所有指令都是顺序执行的,不存在任何转跳(除了出口语句可以指向其他基本块的入口);
讲稿_7 来自淘豆网www.taodocs.com转载请标明出处.