- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九章 机器无关的优化
陈 林
主要内容
优化的来源
全局公共子表达式
复制传播
死代码消除
代码移动
归纳变量和强度消减
数据流分析
到达定值分析
活跃变量分析
可用表达式分析
循环的优化
引言
代码优化
在目标代码中消除不必要的指令
把一个指令序列替换为一个完成相同功能的更快的
指令序列
全局优化
基于数据流分析技术
用以收集程序相关信息的算法
优化的主要来源
编译器只能通过一些相对低层的语义等价转换来优
化代码
冗余运算的原因
源程序中的冗余
高级程序设计语言编程的副产品
比如A[i][j].f = 0; A[i][j].k = 1;中的冗余运算
语义不变的优化
公共子表达式消除
复制传播
死代码消除
常量折叠
优化的例子(1)
快速排序算法
优化的例子(2)
三地址代码
Quicksort的流图
循环:
B
2
B
3
B 、B 、B 、B
2 3 4 5
全局公共子表达式
如果E
在某次出现之前必然已经被计
算过,且
E的分量在该次计算之后一直
没有被改变,
那么E的本次出现就是一个公
共子表达式
如果上一次E的值赋给了x,
且x的值至今没有被修改过,
那么我们就可以使用x,而不
需要计算E
全局公共子表达式的例子
右图
在B 、B 中计算了4*i和4*j
2 3
到达B 之前必然经过B 、B
5 2 3
t2、t4在赋值之后没有被改变
过,因此B5中可直接使用它们
t4在替换t8之后,B :a[t8]和
5
B3:a[t4]又相同
同样:
B 中赋给x的值和B 中赋给t3的
5 2
值相同
B 中的a[t13]和B 中的a[t1]不
6 1
同,因为B5中可能改变a的值
消除公共子表达式后
复制传播
形如u=v的复制语句使得语句后面的
程序点上,u的值等于v的值
如果在某个位置上u一定等于v,那么
可以把u替换为v
有时可以彻底消除对u的使用,从而消
除对u的赋值语句
右图所示,消除公共子表达式时引入
了复制语句
如果尽可能用t来替换c,可能就不需
要c=t这个语句了
复制传播的例子
右图显示了对B 进行复制传播
5
处理的情况
可能消除所有对x的使用
死代码消除
如果一个变量在某个程序点上的值可能会在之
后被使用,那么这个变量在这个点上活跃;否
则这个变量就是死的,此时对这个变量的赋值
就是没有用的死代码
死代码多半是因为前面的优化而形成的
比如,B 中的x=t3就是死代码
5
消除后得到
x=t3 a[t2] = t5
a[t2] = t5 a[t4] = t3
文档评论(0)