第九章机器无关的优化.PDF

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 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)

zhaojf9409 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档