编译原理教程05代码优化

编译原理教程05代码优化

ID:46514836

大小:2.79 MB

页数:139页

时间:2019-11-24

编译原理教程05代码优化_第1页
编译原理教程05代码优化_第2页
编译原理教程05代码优化_第3页
编译原理教程05代码优化_第4页
编译原理教程05代码优化_第5页
资源描述:

《编译原理教程05代码优化》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、5.1局部优化5.2循环优化*5.3全局优化概述*5.4代码优化示例习题五第5章 代码优化代码优化的含义进行代码优化的时间代码优化的种类源程序经过词法分析、语法分析、语义分析等阶段的编译工作,得到了与源程序功能等价的中间代码。但是,由于这种中间代码是“机械生成”的结果,因而必然存在效率不高和有冗余代码的现象,还需进行代码优化。代码优化的含义是:对代码进行等价变换,使得变换后的代码具有更高的时间效率和空间效率。代码优化的目的是提高目标程序的质量。1.代码优化的含义优化可以在编译的不同阶段进行,但最主要的一类优化是在目标代码生成以前进行的,即对语义分析后的中间代码进行优化,这种优化的优

2、点是不依赖于具体的计算机。另一类重要的优化是在生成目标代码时进行的,它在很大程度上依赖于具体的计算机。本章讨论前一种与机器无关的中间代码优化。2.进行代码优化的时间根据优化对象所涉及的程序范围,优化又分为局部优化、循环优化和全局优化。一个程序从结构上看,作为结点的基本块是其基础。因为基本块的结构最简单、因素最单纯,所以它也是优化的基础,对基本块的优化就是局部优化。循环是程序中要反复执行的部分,优化的效益当然很大,所以循环优化是优化工作的一个重点。针对整个程序的优化即全局优化,它涉及到对程序数据流分析的问题。3.代码优化的种类5.1局部优化基本块的划分方法基本块的DAG表示5.1.1

3、基本块的划分方法所谓基本块,是指程序中一顺序执行的语句序列,其中只有一个入口和一个出口,入口就是该序列的第一个语句,出口就是该序列的最后一个语句。对一个基本块来说,执行时只能从其入口进入,从其出口退出。对一个给定的程序,我们可以把它划分为一系列基本块,在各个基本块范围内进行的优化称为局部优化。划分基本块的关键问题是准确定义入口和出口语句。下面我们给出划分四元式程序为基本块的算法:(1)从四元式序列确定满足以下条件的入口语句:①四元式序列的第一个语句;②能由条件转移语句或无条件转移语句转移到的语句;③紧跟在条件转移语句后面的语句。(2)确定满足以下条件的出口语句:①下一个入口语句的前

4、导语句;②转移语句(包括转移语句自身);③停语句(包括停语句自身)。例如,考察下面求最大公因子的三地址代码程序:(1) readX(2) readY(3) R=X%Y(4) ifR=0goto(8)(5) X=Y(6) Y=R(7) goto(3)(8) writeY(9) halt根据上述划分基本块的算法可确定四元式(1)、(3)、(5)、(8)是入口语句,而四个基本块分别是:(1)(2),(3)(4),(5)(6)(7),(8)(9)。5.1.2基本块的DAG表示DAG(DirectedAcyclicGraph)是一种有向图,常常用来对基本块进行优化。一个基本块的DAG是一种其

5、结点带有下述标记或附加信息的DAG:(1)图的叶结点(无后继的结点)以一标识符(变量名)或常数作为标记,表示该结点代表该变量或常数的值。如果叶结点用来表示一变量A的地址,则用addr(A)作为该结点的标记。通常把叶结点上作为标记的标识符加上下标0,以表示它是该变量的初值。(2)图的内部结点(有后继的结点)以一运算符作为标记,表示该结点代表应用该运算符对其直接后继结点所代表的值进行运算的结果。(3)图中各个结点上可能附加一个或多个标识符,表示这些变量具有该结点所代表的值。一个基本块由一个四元式序列组成,且每一个四元式都可以用相应的DAG结点表示。图5–1给出了不同四元式和与其对应的D

6、AG结点形式。图中,各结点圆圈中的ni是构造DAG过程中各结点的编号,而各结点下面的符号(运算符、标识符或常数)是各结点的标记,各结点右边的标识符是结点上的附加标识符。除了对应转移语句的结点右边可附加一语句位置来指示转移目标外,其余各类结点的右边只允许附加标识符。除对应于数组元素赋值的结点(标记为[]=)有三个后继外,其余结点最多只有两个后继。图5–1四元式与DAG结点利用DAG进行基本块优化的基本思想是:首先按基本块内的四元式序列顺序将所有的四元式构造成一个DAG,然后按构造结点的次序将DAG还原成四元式序列。由于在构造DAG的同时已做了局部优化,所以最后所得到的是优化过的四元式

7、序列。为了DAG构造算法的需要,我们将图5–1中的四元式按照其对应结点的后继结点个数分为四类:(1) 0型四元式:后继结点个数为0,如图5–1(1)所示;(2) 1型四元式:有一个后继结点,如图5–1(2)所示;(3) 2型四元式:有两个后继结点,如图5–1(3)、(4)、(5)所示;(4) 3型四元式:有三个后继结点,如图5–1(6)所示。我们规定:用大写字母(如A、B等)表示四元式中的变量名(或常数);用函数Node(A)表示A在DAG中的相应结点,其值可为n或者

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。