- 1、本文档共59页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
本章主要介绍:
优化基本概念
基本块内的局部优化
;什么是代码优化?
对程序实施各种等价变换,使得变换后程序能生成高效率的目标代码。
高效率的目标代码是指:
目标代码占用的存储空间少
目标代码运行时间短
代码优化的原则
1.等价原则:保证等价性。
2.有效原则:有明显的效果。
3.合算原则:较低的代价取得较好的优化效果。
;代码优化的种类:;;S=0;
for(i=1;i=20;i++)
S=S+A[i]*B[i];;;删除公共子表达式
(删除多余运算);;2.代码外提;;;;4.变换循环控制条件
(删除归纳变量);;5.合并已知量
已知量是指,常数或在编译时就能确定其值的变量。
合并已知量是指,若参加运算的两个对象在编译时都是已知量,则可以在编译时直接计算出它们的运算结果,不必生成目标。;;6.复写传播
是指尽量不引用那些在程序中仅仅只传递信息而不改变其值,也不影响其运行结果的变量。;;7.删除无用赋值
对赋值语句X=Y,若在程序的任何地方都不引用X,这时该语句执行与否对程序运行结果没有任何作用,这种语句称为无用赋值语句,可以删除。;7.1优化概述;(5)T3=T2[T1]
(8)T6=T5[T1]
(9)T7=T3*T6
(10)S=S+T7
(3)T1=T1+4
(12)ifT1≤80goto(5);局部优化是指局限于程序基本块范围内的一种优化。
入口语句
四元式序列的第一个语句
由条件转移语句或无条件转移语句转移到的语句
紧跟在条件语句之后的语句
出口语句
下一个入口的前导语句
转移语句
停语句
;例划分基本块,构造程序流图。
;利用DAG实现局部优化的思想:
首先对一个基本块构造一个DAG,然后按构造结点的次序将DAG还原成四元式序列。;结点带有标记的DAG:
;基本块的DAG表示:
;(5)ifBropCgoto(S);例构造以下基本块的DAG:
(1)T0=3.14
(2)T1=2*T0
(3)T2=R+r
(4)A=T1*T2
(5)B=A
(6)T3=2*T0
(7)T4=R+r
(8)T5=T3*T4
(9)T6=R-r
(10)B=T5*T6
;;;;(1)T0=3.14
(2)T1=6.28
(3)T3=6.28
(4)T2=R+r
(5)T4=T2
(6)A=6.28*T2
(7)T5=A
(8)T6=R-r
(9)B=A*T6;(1)T0=3.14
(2)T1=6.28
(3)T3=6.28
(4)T2=R+r
(5)T4=T2
(6)A=6.28*T2
(7)T5=A
(8)T6=R-r
(9)B=A*T6;设优化后的上述一组四元式序列为G,G较之优化前的一组四元式G,不但代码总数减少,而且??G中四元式(2)T1=2*T0和(6)T3=2*T0,在G中已被优化为T1=6.28,T3=6.28,这是合并已知量的结果;对G中四元式(5)B=A,直至在下一个B被赋值时都没有被引用,;显然是无用赋值,G中已被删除;对G中具有公共子表达式的四元式(3)T2=R+r,(7)T4=R+r,G中被优化为直接赋值T4=T2,避免了对公共子表达式R+r的重复计算。综上所述,利用DAG可以很方便地进行基本块内的优化处理。
;7.3循环优化;控制流程图
一个程序的控制流程图(简称为程序流图或流图)G是一个三元组
G=(N,n0,E)。其中:;N表示流图的有限结点集,流图中每一个结点对应程序中的一个基本块,因此,N实质上就是一个程序的基本块集。
n0表示唯一的首结点,流图的首结点是包含程序第一个语句的基本块。
E表示流图的有向边集。
;为了找出流图中的循环,需分析流图中结点间的控制关系。因此引入必经结点和必经结点集的概念。;必经结点
在程序流图中,对任意两个结点a和b,若从流图的首结点出发,到达a的任一通路都要经过b,则称b是a的必经结点,记为bDOMa。
;必经结点集
流图中结点a的所有必经结点的集合称为结点a的必经结点集,记为D(a);求流图中所有结点n的必经结点集D(n)的算法思想:
结点n∪n的所有前驱结点的必经结点的交,即如果某结点d是结点n的所有前驱结点的必经结点,则d为n的必经结点。;流图中各结点的必经结点集:
D(B1)={B1}
D(B2)={B1,B2}
D(B3)={B1,B2,B3}
D(B4)={B1,B2,B3,B4}
D(B5)={B1,B2,B3,B5}
D(B6)={B1,B2,B3
您可能关注的文档
- 编译原理(第5版)-课件(更新) 2025 第10章并行编译技术基本常识.pptx
- 编译原理(第5版)-课件(更新) 2025第8章 目标程序运行时的存储组织 .pptx
- 编译原理(第5版)-课件(更新)2025 第1章 编译概述.pptx
- 编译原理(第5版)-课件(更新)2025第2章 文法和语言的基本知识.pptx
- 编译原理(第5版)-课件(更新)2025第3章 词法分析与有穷自动机.pptx
- 编译原理(第5版)-课件(更新)2025第4章 语法分析 .pptx
- 编译原理(第5版)-课件(更新)2025第5章 语法制导翻译技术 中间代码生成 .pptx
- 编译原理(第5版)-课件(更新)2025第6章 符号表的组织与管理 .pptx
- 编译原理(第5版)-课件(更新)2025第9章 目标代码生成 2025.pptx
- 双职工小学家长代表发言稿.docx
文档评论(0)