- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理(第四版)第5篇 章 代码优化.ppt
5.1 局部优化 5.2 循环优化 5.3 全局优化概述 5.4 代码优化示例 习题五 ; 源程序经过词法分析、语法分析、语义分析等阶段的编译工作,得到了与源程序功能等价的中间代码。但是,由于这种中间代码是“机械生成”的结果,因而必然存在效率不高和有冗余代码的现象,还需进行代码优化。代码优化的含义是:对代码进行等价变换,使得变换后的代码具有更高的时间效率和空间效率。代码优化的目的是提高目标程序的质量。 优化可以在编译的不同阶段进行,但最主要的一类优化是在目标代码生成以前进行的,即对语义分析后的中间代码进行优化,这种优化的优点是不依赖于具体的计算机。另一类重要的优化是在生成目标代码时进行的,它在很大程度上依赖于具体的计算机。本章讨论前一种与机器无关的中间代码优化。; 根据优化对象所涉及的程序范围,优化又分为局部优化、循环优化和全局优化。一个程序从结构上看,作为结点的基本块是其基础。因为基本块的结构最简单、因素最单纯,所以它也是优化的基础,对基本块的优化就是局部优化。循环是程序中要反复执行的部分,优化的效益当然很大,所以循环优化是优化工作的一个重点。针对整个程序的优化即全局优化,它涉及到对程序数据流分析的问题。我们在此主要讨论局部优化与循环优化。 为了叙述方便,从本章开始把四元式写成更为直观的三地址代码形式,如: (op, B, C, A)? A=B op C (jrop, B, C, L)? if B rop C goto L (j, _, _, L)? goto L;5.1 局 部 优 化 5.1.1 基本块的划分方法 所谓基本块,是指程序中一顺序执行的语句序列,其中只有一个入口和一个出口,入口就是该序列的第一个语句,出口就是该序列的最后一个语句。对一个基本块来说,执行时只能从其入口进入,从其出口退出。对一个给定的程序,我们可以把它划分为一系列基本块,在各个基本块范围内进行的优化称为局部优化。划分基本块的关键问题是准确定义入口和出口语句。下面我们给出划分四元式程序为基本块的算法: (1) 从四元式序列确定满足以下条件的入口语句: ① 四元式序列的第一个语句; ② 能??条件转移语句或无条件转移语句转移到的语句; ③ 紧跟在条件转移语句后面的语句。; (2) 确定满足以下条件的出口语句: ① 下一个入口语句的前导语句; ② 转移语句(包括转移语句自身); ③ 停语句(包括停语句自身)。; (3) 图中各个结点上可能附加一个或多个标识符,表示这些变量具有该结点所代表的值。 一个基本块由一个四元式序列组成,且每一个四元式都可以用相应的DAG结点表示。图5–1给出了不同四元式和与其对应的DAG结点形式。图中,各结点圆圈中的ni是构造DAG过程中各结点的编号,而各结点下面的符号(运算符、标识符或常数)是各结点的标记,各结点右边的标识符是结点上的附加标识符。除了对应转移语句的结点右边可附加一语句位置来指示转移目标外,其余各类结点的右边只允许附加标识符。除对应于数组元素赋值的结点(标记为[ ]=)有三个后继外,其余结点最多只有两个后继。;图5–1 四元式与DAG结点 ; 利用DAG进行基本块优化的基本思想是:首先按基本块内的四元式序列顺序将所有的四元式构造成一个DAG,然后按构造结点的次序将DAG还原成四元式序列。由于在构造DAG的同时已做了局部优化,所以最后所得到的是优化过的四元式序列。 为了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或者无定义,并用n表示DAG中的一个结点值。这样,每个基本块仅含0、1、2型四元式的DAG构造算法如下(对基本块的每一个四元式依次执行该算法): (1) 若Node(B)无定义,则构造一标记为B的叶结点并定义Node(B)为这个结点,然后根据下列情况做不同处理: ① 若当前四元式是0型,则记Node(B)的值为n,转(4)。 ② 若当前四元式是1型,则转(2)①。 ③ 若当前四元式是2型,则: i. 如果Node(C)无定义,则构造一标记为C的叶结点,并定义Node(C)为这个结点; ii. 转(2)②。; (2) ① 若Nod
您可能关注的文档
最近下载
- 人教版高中物理必修第一册全册教学课件.pptx
- VDA6.3-2023过程审核条例.xls VIP
- 儿童青少年近视防控宣讲课件ppt.pptx VIP
- 格大全(电气装置安装工程质量检验及评定规程).doc VIP
- 第一单元第二课《表现形式》课件++2025-2026学年人教版(2024)初中美术七年级上册.pptx VIP
- 桩基础水平承载力设计与计算-刘金砺_180.pdf VIP
- 第2课 小鸟展翅(教学设计)五年级上册信息技术海南版.docx VIP
- 钢结构检修规程.pdf VIP
- 上海万科翡翠滨江一期12#商办机电、消防工程技术标.pdf
- 医学课件:介入放射学(全套课件328页).ppt VIP
文档评论(0)