ImageVerifierCode 换一换
格式:PPT , 页数:25 ,大小:182KB ,
资源ID:8023653      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-8023653.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理(清华)第十一章代码优化.ppt)为本站会员(tkhy51908)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

编译原理(清华)第十一章代码优化.ppt

1、第11章 代码优化,学习目标: 掌握:基本块的划分、基本块的DAG优化 理解:什么是局部优化、循环优化、全局优化 了解:循环优化技术,11.1 优化技术简介 11.2 局部优化 11.3 循环优化简介,11.1 优化技术简介,什么是优化:所谓优化是对代码进行等价变换,使得变换后的代码的效率更高(节省运行时间、存储空间或两者兼而有之) 优化可在编译的不同阶段进行,最主要的优化有 中间代码优化(不依赖具体计算机) 目标代码优化(依赖于具体计算机),中间代码优化,中间代码,源代码,编译前端,代码生成,目标代码,目标代码优化,编译的优化工作阶段,优化的分类:根据优化涉及的程序范围,分为: 局部优化:在

2、只有一个入口、一个出口的基 本块上进行优化 循环优化:对循环中的代码进行优化 全局优化:在整个程序范围内进行的优化,中间代码优化常用技术 1. 删除多余运算(删除公共子表达式) 如果子表达式E在前面计算过,且之后E中的变量值都未改变,那么E的重复出现称为公共子表达式,可避免重复计算,(1)和(4)中都有4*I的运算, (1)到(4)之间无对I的赋值,显然两次计算的值是相等的, (4)的运算是多余的,例 (1) T1 :=4*I (2) T2 :=addr(A)4 (3) T3 :=T2T1 T4 :=4*I (5) ,2. 合并已知量与复写传播 如果运算量都是已知量,则在编译时就算出它的值,称

3、为合并已知量 若有A:=B,称为把B值复写到A。如果其后有引用A的地方,且其间A、B的值都未改变,则可把对A的引用改为对B引用,称为复写传播。,例: (1)I:=1 (2)T1:=4*I (3)T4:=T1 (4)T6:=T5T4,I是已知量,把T1的值复写到T4,3. 删除无用赋值 有些变量的赋值从未被引用,称为无用赋值,应删除。 无用赋值分三种情况: 变量被赋值,但在程序中从未被引用(在局部范围内难判定)变量赋值后未被引用又重新赋值,则前面赋值是无用的变量的赋值只被计算变量自己引用,其他变量都不引用它,例 (1) I:=1 (2)T1:=4 (3)T3:=T2T1 (4)T4:=T1 (5

4、)I:=I+1 (6)T1:=T1+4 (7)if T180 goto (3),(4)中对T4赋值,但T4未被引用; (1)和(5)对I赋值,但只有(5)中计算I时引用I 如果程序其他地方不需要引用T4和I,则(4)、(1)和(5)是无用赋值,可删除。,4. 其他优化技术 以下优化技术将在循环优化中介绍: 代码外提 强度削弱 变换循环控制条件(删除归纳变量),11.2 局部优化,局部优化是指基本块内的优化 基本块是指程序中一顺序执行的语句序列,其中只有一个入口语句和一个出口语句。执行时只能从入口语句进入,从其出口语句退出,11.2.1 基本块的划分,把程序(中间代码形成)划分成基本块的算法:

5、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,(1)、(3)、(5)和(8)是入口语句,分别构成基

6、本块 B1 (1)、(2) B2 (3)、(4) B3 (5)、(6)、(7) B4 (8)、(9) ,read X,R:=X mod Y,X:=Y,write Y,11.3 循环优化简介,循环就是程序中那些可能反复执行的代码序列。 因为循环中的代码要反复执行,所以循环的代码优化对提高目标代码的效率将起更大的作用。,11.3.1 程序流图,把控制流的信息加到基本块集合上构成的有向图称为表示程序的流图,简称流图。 流图的构造方法: 点集:以基本块为结点,含程序第一条语句的结点为首结点。 边集:从基本块Bi向基本块Bj引有向边,仅当 Bj在程序中的位置紧跟在Bi之后, 且Bi的出口语句不是无条件转

7、移语句或停止语句。或者 Bi的出口是转移语句 (goto (s)或ifgoto (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. 代码外提 把循环不变运算,即其结果独立于循环执行次数的表达式,提到循环的前面,使之只在循环外计算一次,这种优化称为代码外提。 循环不变运算:运算量为常量或在循环外定值,每次循环时其值不变的运算。,(4)

8、中的运算量addr(A)是分配的数组A的首地址,是个常量,4也是常量,因而(4)是循环不变运算,同样(7)也是循环不变运算,(4)、(7) 都可提到循环前,2. 强度削弱 强度削弱是指把程序中强度大的运算替换成强度小的运算。例如把乘法运算换成加法运算等,I和T1始终保持T1:=4*I的线性关系 这样把(12)的循环控制条件 I20变换成T180,程序的运行结果不变 这种变换称为变换循环控制条件 经过这一变换,循环中I的值不被引用,四元式(11)可被删去,这是变换的目的所在。,变换循环控制条件,本章小结 主要讨论在中间代码级别上进行的优化 优化的种类:局部优化、循环优化、全局优化 基本块内的优化 删除公共子表达式、合并已知量、复写传播、删除无用赋值 循环优化代码外提、强度削弱、变换循环控制条件,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报