第11章 代码优化的.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第11章 代码优化的

第11章 代码优化;【学习目标】 通过本章学习: ◇ 理解所谓代码优化是指什麽? ◇ 知道最常用的代码优化技术有哪些? ◇ 知道实现代码优化要进行哪些工作? 【学习指南】 所谓代码优化是指对程序代码进行等价变换。程序代码可以是中间代码(如四元式代码),也可以是目标代码。优化的含义是最终生成的目标代码短(而运行速度快),时空效率优化。最常用的代码优化技术有删除多余运算,循环不变代码外提,强度削弱,变换循环控制条件,合并已知量与复写传播,以及删除无用赋值等等。 【难重点】 从概念上理解什么是代码优化,编译过程中可进行哪些优化,以及进行优化所需要的基础都没有难点,但在实现上是有相当复杂的工作。;11.0 概述 ;优化可在编译的不同阶段进行,对同一阶段,涉及的程序范围也有所不同,在同一范围内,可进行多种优化。目前编译程序的优化工作一般是在中间代码生成之后和(或)目标代码生成之后进行。如图11.1所示。;中间代码的优化是对中间代码进行等价变换。目标代码的优化是在目标代码生成之后进行的,因为生成的目标代码对应于具体的计算机,因此,这一类优化在很大程度上依赖于具体的机器,我们不做详细讨论。; 编译程序的优化工作旨在生成较好性能的目标代码,为此,编译程序需要对代码(中间代码或目标代码)进行各种方式的变换。变换的宗旨是:;11.1 代码优化技术 ;图11.2 中间代码段;1)删除多余运算(删除公共子表达式) ;2)代码外提 ;3)强度削弱 ;4)变换循环控制条件 ;图11.4中,四元式(3)可变为T1=4,这种变换称为合并已知量。 图11.4中,四元式(6)把T1的值复写到T4中,四元式(8)要引用T4的值,而从四元式(6)到四元式(8)之间未改变T4和T1的值,则将四元式(8)改为T6∶=T5[T1],这种变换称为复写传播.复写传播之后运算结果保持不变。 图11.4经过变换循环控制条件,合并已知量和复写传播等变换后,变为图11.5。 ;6)删除无用赋值;11.2 局部优化;11.2.1 基本块的划分;划分中间代码(四元式程序)为基本块的算法: ;我们以下述四元式程序为例来说明如何划分基本块的。 例11.1:有四元式程序如下,构造其基本块。 (1) read (C) (2) A:= 0 (3) B:= 1 (4) L1: A:=A + B (5) if B= C goto L2 (6) B:=B+1 (7) goto L1 (8) L2: write (A) (9) halt; 先求出四元式程序中各个基本块的入口语句: 语句(1)是程序的第一个语句,因此它是入口语句。 语句(4)和语句(8)是条件转移语句或无条件转移语句的转移目标语句,因此是入口语句。 语句(6)是紧跟在条件转移语句后面的语句,因此是入口语句。;11.2.2 基本块内的优化变换 ;对于删除公共子表达式和删除无用代码这两种优化技术,我们在11.1中已经讨论过,这里简单介绍重新命名临时变量和交换语句次序是什么含义。 重新命名临时变量:假如有语句t∶=b+c,其中t是临时变量。如果把这个语句改为u∶=b+c,其中u是新的临时变量,并且把这个t的所有引用改成u,那么基本块的运算结果不变。 ;代数变换可以把基本块计算的表达式集合变换成代数等价的集合。 其中常用的变换是那些可以简化表达式或用较快运算代替较慢运算的变换。 例如: x∶=x+0或x∶=x*1 这样的语句可以从基本块中删除而不改变它计算的表达式集合, 又如 x∶=y**2 的指数算符通常要用函数调用来实现,使用代数变换,这个语句可由快速、等价的语句 x∶=y*y来代替。;我们从下面例子理解这些变换。;再进行合并已知量变换后得到: t2 := 1 t3 := a * t2 t4 := t3 * 2 t5 := b + t4 c := t5 * t5 ;再使用代数变换: t4 := a + a t5 := b + t4 c := t5 * t5;11.2.3 基本块的DAG表示;图11.8的有向图就是一个DAG。在DAG中,如果(n1,n2,…,nk)是其中一条通路,则称结点n1为结点nk的祖先,结点nk为结点n1的后代。图11.8中结点n6就是结点n9的祖先,n9是n6的后代。 ;我们要用到的有向图,是一种其结点带有下述标记或附加信息的DAG: ;基本块的DAG表示与构造: ;(3)A:=B[C] (=[ ],B[C],-,A) ;Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 A

文档评论(0)

ayangjiayu5 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档