第十章代码优化分解.ppt

  1. 1、本文档共130页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十章 代码优化 优化的概念 编译时刻为改进目标程序的质量而进行的各项工作。 空间效率 时间效率 空间效率和时间效率有时是一对矛盾,有时不能兼顾。 优化的要求: 必须是等价变换(保持功能) 为优化的努力必须是值得的。 有时优化后的代码的效率反而会下降。 优化的分类 机器相关性 机器相关优化:寄存器优化,多处理器优化,特殊指令优化,无用指令消除等。 机器无关优化: 优化范围 局部优化:单个基本块范围内的优化,常量合并优化,公共子表达式删除,计算强度削弱和无用代码删除。 全局优化:主要是基于循环的优化:循环不变优化,归纳变量删除,计算强度削减。 优化语言级 优化语言级:针对中间代码,针对机器语言。 代码优化程序的结构 控制流分析的主要目的是分析出程序的循环结构。循环结构中的代码的效率是整个程序的效率的关键。 数据流分析进行数据流信息的收集,主要是变量的值的获得和使用情况的数据流信息。 到达-定义分析;活跃变量分析;可用表达式分析; 代码变换:根据上面的分析,对内部中间代码进行等价变换。 基本块和流图 基本块中,控制流是由第一个四元式进入,到达最后一个四元式离开。 流图:把一个程序的中间表示中所有的基本块作为节点集合。有边从节点n到节点n’当且仅当控制流可能从n的最后的一个四元式到达n’的第一个四元式。 首节点:该基本块的第一个四元式是程序的第一个四元式。 流图的构造 以所有的基本块为节点集合。 有B1到B2的边(B2是B1的后继)当且仅当: B1的最后一个四元式有条件或无条件地转移到B2的第一个四元式。 B2是紧紧跟随在B1后面的四元式,且B1的最后四元式不是无条件转向语句。 流图的例子 本节所用的例子 i = m ?1; j = n; v = a[n]; (1) i := m ?1 while (1) { (2) j := n do i = i +1; while(a[i]v); (3) t1 := 4 * n do j =j ?1;while (a[j]v); (4) v := a[t1] if (i = j) break; (5) i := i + 1 x=a[i]; a[i]=a[j]; a[j]=x; (6) t2 := 4 * i } (7) t3 := a[t2] x=a[i]; a[i]=a[n]; a[n]=x; (8)if t3v goto(5) 流图的例子 本节所用的例子 i = m ?1; j = n; v = a[n]; (9) j := j ?1 while (1) { (10) t4 := 4 * j do i = i +1; while(a[i]v); (11) t5 := a[t4] do j =j ?1;while (a[j]v); (12)if t5v goto(9) if (i = j) break; (13)if i=j goto(23) x=a[i]; a[i]=a[j]; a[j]=x; (14) t6:=4 * i } (15 ) x := a[t6] x=a[i]; a[i]=a[n]; a[n]=x; . . . 流图的例子 基本块的优化 公共子表达式删除 复制传播 常量合并 无用代码删除 强度削弱 公共子表达式删除 局部公共子表达式 B5 x=a[i]; a[i]=a[j]; a[j]=x; 公共子表达式删除 局部公共子表达式 B5 x=a[i]; a[i]=a[j]; a[j]=x; 公共子表达式删除 局部公共子表达式 B5 x=a[i]; a[i]=a[j]; a[j]=x; 公共子表达式删除 全局公共子表达式 B5 x=a[i]; a[i]=a[j]; a[j]=x; 公共子表达式删除 全局公共子表达式 B5 x=a[i]; a[i]=a[j]; a[j]=x; 公共子表达式删除 B5 x=a[i]; a[i]=a[j]; a[j]=x; 公共子表达式删除 B5 x=a[i]; a[i]=a[j]; a[j]=x; 公共子表达式删除 B6 x = a[i]; a[i] = a[n]; a[n] = x; 公共子表达式删除 B6 x = a[i]; a[i] = a[n]; a[n] = x; a[t1]能否作为公共子表达式? 公共子表达式删除 复制传播 形如f := g的赋值语句叫做复制语句 优化过程中会大量引入复制 复制传播 形如f := g的赋值语句叫做复制语句 优化过程中会大量引入复制 复制传播变换的思想是在复制语句f :=

文档评论(0)

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

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

1亿VIP精品文档

相关文档