- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第11章 代码优化 学习目标: 掌握:基本块的划分、基本块的DAG优化 理解:什么是局部优化、循环优化、全局优化 了解:循环优化技术 11.1 优化技术简介 11.2 局部优化 11.3 循环优化简介 11.1 优化技术简介 什么是优化: 所谓优化是对代码进行等价变换,使得变换后的代码的效率更高(节省运行时间、存储空间或两者兼而有之) 优化可在编译的不同阶段进行,最主要的优化有 中间代码优化(不依赖具体计算机) 目标代码优化(依赖于具体计算机) 优化的分类: 根据优化涉及的程序范围,分为: 局部优化:在只有一个入口、一个出口的基 本块上进行优化 循环优化:对循环中的代码进行优化 全局优化:在整个程序范围内进行的优化 中间代码优化常用技术 1.? 删除多余运算(删除公共子表达式) 如果子表达式E在前面计算过,且之后E中的变量值都未改变,那么E的重复出现称为公共子表达式,可避免重复计算 2. 合并已知量与复写传播 如果运算量都是已知量,则在编译时就算出它的值,称为合并已知量 若有A:=B,称为把B值复写到A。如果其后有引用A的地方,且其间A、B的值都未改变,则可把对A的引用改为对B引用,称为复写传播。 3. 删除无用赋值 有些变量的赋值从未被引用,称为无用赋值,应删除。 无用赋值分三种情况: 变量被赋值,但在程序中从未被引用(在局部范围内难判定) ?变量赋值后未被引用又重新赋值,则前面赋值是无用的 ?变量的赋值只被计算变量自己引用,其他变量都不引用它 例 (1) I:=1 (2)T1:=4 (3)T3:=T2[T1] (4)T4:=T1 (5)I:=I+1 (6)T1:=T1+4 (7)if T1≤80 goto (3) 4. 其他优化技术 以下优化技术将在循环优化中介绍: 代码外提 强度削弱 变换循环控制条件(删除归纳变量) 11.2 局部优化 局部优化是指基本块内的优化 基本块是指程序中一顺序执行的语句序列,其中只有一个入口语句和一个出口语句。执行时只能从入口语句进入,从其出口语句退出 11.2.1 基本块的划分 把程序(中间代码形成)划分成基本块的算法: 1.??求基本块的入口语句,它们是: 程序的第一个语句;或者 条件转移或无条件转移语句的转移目标语句;或者 紧跟在条件转移语句后面的语句。 2.对每一入口语句,构造其所属的基本块: 它是由该入口语句到下一入口语句(不包括下一入口语句); 或到一转移语句(包括该转移语句); 或到一停止语句(包括该停止语句) 之间的语句序列组成的。 3.凡未被纳入某一基本块的语句,是不会被执行到的语句,可以把它们删除。 例: read X read Y R:=X mod Y if R=0 goto (8) X:=Y Y:=R goto (3) write Y halt 11.3 循环优化简介 循环就是程序中那些可能反复执行的代码序列。 因为循环中的代码要反复执行,所以循环的代码优化对提高目标代码的效率将起更大的作用。 11.3.1 程序流图 把控制流的信息加到基本块集合上构成的有向图称为表示程序的流图,简称流图。 流图的构造方法: 点集:以基本块为结点,含程序第一条语句的结点为首结点。 边集:从基本块Bi向基本块Bj引有向边,仅当 Bj在程序中的位置紧跟在Bi之后, 且Bi的出口语句不是无条件转移语句或停止语句。或者 Bi的出口是转移语句 (goto (s)或if…goto (s)),并且转移目标(s)是Bj的入口语句。 例:构造以下程序的流图 (1) read X (2) read Y (3) R:=X mod Y (4) if R=0 goto (8) (5) X:=Y (6) Y:=R (7) goto (3) (8) write Y (9) halt 11.3.2 循环优化 1. 代码外提 把循环不变运算,即其结果独立于循环执行次数的表达式,提到循环的前面,使之只在循环外计算一次,这种优化称为代码外提。 循环不变运算:运算量为常量或在循环外定值,每次循环时其值不变的运算。 2. 强度削弱 强度削弱是指把程序中强度大的运算替换成强度小的运算。例如把乘法运算换成加法运算等 本章小结 主要讨论在中间代码级别上进行的优化 优化的种类:局部优化、循环优化、全局优化 基本块内的优化 删除公共子表达式、合并已知量、复写传播、删除无用赋值 循环优化 代码外提、强度削弱、变换循环控制条件 * * 中间代码优化 中间代码 源代码 编译前端 代码生成 目标代码 目标代码优化 编译的优化工作阶段 (1)和(4)中都有4*I的
您可能关注的文档
- 综合性学习:成长的烦恼.ppt
- 综合布线系统设计.pptx
- 综合测评1.docx
- 综合英语课后翻译1.doc
- 综合评价指标体系构建方法.pdf
- 综合调度月报表.doc
- 综合部部长岗位职责.docx
- 综放沿空掘巷围岩控制机理及支护技术研究.pdf
- 营销研究综述 2009 实蝇类昆虫的引诱剂和诱捕器.pdf
- 综述美国华盛顿州的“开始起跑”计划.pdf
- 2021-2022学年陕西省三原县北城中学高一月考数学试卷.docx
- 2021-2022学年吉林省辉南县第六中学高一上学期周测数学试卷.docx
- 安徽省亳州市第五完全中学2021-2022学年高一上学期期中考试历史试题.doc
- 2021-2022学年黑龙江绥化市第一中学高一上学期期中考试数学试卷.doc
- 2021-2022学年河南省商丘一中高一上学期期中语文试题.docx
- 2020-2021学年河北省衡水市第二中学高一上学期期中语文试题(解析版).doc
- 2020-2021学年河北省衡水市第二中学高一上学期期中语文试题.doc
- 2020-2021学年四川省资阳市高一上学期期末语文试题.docx
- 2021-2022学年福建省泉州市永春县一中高一上学期期中语文试题(解析版).doc
- 2020-2021学年四川省资阳市高一下学期期末语文试题.docx
文档评论(0)