第5章 代码优化

第5章 代码优化

ID:43739206

大小:909.00 KB

页数:135页

时间:2019-10-13

第5章  代码优化_第1页
第5章  代码优化_第2页
第5章  代码优化_第3页
第5章  代码优化_第4页
第5章  代码优化_第5页
资源描述:

《第5章 代码优化》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第5章代码优化5.1局部优化5.2循环优化5.3代码优化示例5.1局部优化局部优化是指对代码的每一个线性部分所进行的优化,使得在这个线性部分只存在一个入口和一个出口,而这个线性部分我们称之为基本块。5.1.1基本块的划分方法所谓基本块,是指程序中一顺序执行的语句序列,其中只有一个入口和一个出口,入口就是该序列的第一个语句,出口就是该序列的最后一个语句。对一个基本块来说,执行时只能从其入口进入,从其出口退出。对一个给定的程序,我们可以把它划分为一系列基本块,在各个基本块范围内进行的优化称为局部优化。划

2、分基本块的关键问题是准确定义入口和出口语句。下面我们给出划分四元式程序为基本块的算法:(1)从四元式序列确定满足以下条件的入口语句:①四元式序列的第一个语句;②能由条件转移语句或无条件转移语句转移到的语句;③紧跟在条件转移语句后面的语句。(2)确定满足以下条件的出口语句:①下一个入口语句的前导语句;②转移语句(包括转移语句自身);③停语句(包括停语句自身)。例如,考察下面求最大公因子的三地址代码程序:(1)readX(2) readY(3) R=X%Y(4) ifR=0goto(8)(5) X=Y(

3、6) Y=R(7)goto(3)(8) writeY(9) halt5.1.2基本块的DAG表示DAG(DirectedAcyclicGraph)是一种有向图,常常用来对基本块进行优化。一个基本块的DAG是一种其结点带有下述标记或附加信息的DAG:(1)图的叶结点(无后继的结点)以一标识符(变量名)或常数作为标记,表示该结点代表该变量或常数的值。如果叶结点用来表示一变量A的地址,则用addr(A)作为该结点的标记。通常把叶结点上作为标记的标识符加上下标0,以表示它是该变量的初值。(2)图的内部结点(

4、有后继的结点)以一运算符作为标记,表示该结点代表应用该运算符对其直接后继结点所代表的值进行运算的结果。(3)图中各个结点上可能附加一个或多个标识符,表示这些变量具有该结点所代表的值。一个基本块由一个四元式序列组成,且每一个四元式都可以用相应的DAG结点表示。图5–1给出了不同四元式和与其对应的DAG结点形式。图中,各结点圆圈中的ni是构造DAG过程中各结点的编号,而各结点下面的符号(运算符、标识符或常数)是各结点的标记,各结点右边的标识符是结点上的附加标识符。除了对应转移语句的结点右边可附加一语句位

5、置来指示转移目标外,其余各类结点的右边只允许附加标识符。除对应于数组元素赋值的结点(标记为[]=)有三个后继外,其余结点最多只有两个后继。图5–1四元式与DAG结点利用DAG进行基本块优化的基本思想是:首先按基本块内的四元式序列顺序将所有的四元式构造成一个DAG,然后按构造结点的次序将DAG还原成四元式序列。由于在构造DAG的同时已作了局部优化,所以最后所得到的是优化过的四元式序列。为了DAG构造算法的需要,我们将图5–1中的四元式按照其对应结点的后继结点个数分为四类:(1)0型四元式:后继结点个数

6、为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)

7、无定义,则构造一标记为B的叶结点并定义Node(B)为这个结点,然后根据下列情况做不同处理:①若当前四元式是0型,则记Node(B)的值为n,转(4)。②若当前四元式是1型,则转(2)①。③若当前四元式是2型,则:i.如果Node(C)无定义,则构造一标记为C的叶结点,并定义Node(C)为这个结点;ii.转(2)②。(2)①若Node(B)是以常数标记的叶结点,则转(2)③,否则转(3)①。②若Node(B)和Node(C)都是以常数标记的叶结点,则转(2)④,否则转(3)②。③执行opB(即合并

8、已知量),令得到的新常数为P。若Node(B)是处理当前四元式时新建立的结点,则删除它;若Node(P)无定义,则构造一用P做标记的叶结点n并置Node(P)=n;转(4)。④执行BopC(即合并已知量),令得到的新常数为P。若Node(B)或Node(C)是处理当前四元式时新建立的结点,则删除它;若Node(P)无定义,则构造一用P做标记的叶结点n并置Node(P)=n;转(4)。(3)①检查DAG中是否有标记为op且以Node(B)为惟一后继的结点(即查找公共子表

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

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

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