第7章代码优化研讨.ppt

  1. 1、本文档共109页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7.3 基本块的DAG表示 DAG(Directed Acyclic Graph)是一种有向图,常常用来对基本块进行优化。一个基本块的DAG是一种其结点带有下述标记或附加信息的DAG: (1) 图的叶结点(无后继的结点)以一标识符(变量名)或常数作为标记,表示该结点代表该变量或常数的值。如果叶结点用来表示一变量A的地址,则用addr(A)作为该结点的标记。通常把叶结点上作为标记的标识符加上下标0,以表示它是该变量的初值。 (2) 图的内部结点(有后继的结点)以一运算符作为标记,表示该结点代表应用该运算符对其直接后继结点所代表的值进行运算的结果。 (3) 图中各个结点上可能附加一个或多个标识符,表示这些变量具有该结点所代表的值。 一个基本块由一个四元式序列组成,且每一个四元式都可以用相应的DAG结点表示。图7–1给出了不同四元式和与其对应的DAG结点形式。图中,各结点圆圈中的ni是构造DAG过程中各结点的编号,而各结点下面的符号(运算符、标识符或常数)是各结点的标记,各结点右边的标识符是结点上的附加标识符。除了对应转移语句的结点右边可附加一语句位置来指示转移目标外,其余各类结点的右边只允许附加标识符。除对应于数组元素赋值的结点(标记为[ ]=)有三个后继外,其余结点最多只有两个后继。 利用DAG进行基本块优化的基本思想是:首先按基本块内的四元式序列顺序将所有的四元式构造成一个DAG,然后按构造结点的次序将DAG还原成四元式序列。由于在构造DAG的同时已作了局部优化,所以最后所得到的是优化过的四元式序列。 为了DAG构造算法的需要,我们将图7–1中的四元式按照其对应结点的后继结点个数分为四类: (1) 0型四元式:后继结点个数为0,如图7–1(1)所示; (2) 1型四元式:有一个后继结点,如图7–1(2)所示; (3) 2型四元式:有两个后继结点,如图7–1(3)、(4)、(5)所示; (4) ?3型四元式:有三个后继结点,如图7–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) ① 若Node(B)是以常数标记的叶结点,则转(2)③,否则转(3)①。② 若Node(B)和Node(C)都是以常数标记的叶结点,则转(2)④,否则转(3)②。③ 执行op B(即合并已知量),令得到的新常数为P。若Node(B)是处理当前四元式时新建立的结点,则删除它;若Node(P)无定义,则构造一用P做标记的叶结点n并置Node(P)= n;转(4)。 ④ 执行B op C(即合并已知量),令得到的新常数为P。若Node(B)或Node(C)是处理当前四元式时新建立的结点,则删除它;若Node(P)无定义,则构造一用P做标记的叶结点n并置Node(P)= n;转(4)。 (3) ① 检查DAG中是否有标记为op且以Node(B)为惟一后继的结点(即查找公共子表达式)。若有,则把已有的结点作为它的结点并设该结点为n;若没有,则构造一个新结点;转(4)。 ② 检查DAG中是否有标记为op且其左后继为Node(B)、右后继为Node(C)的结点(即查找公共子表达式)。若有,则把已有的结点作为它的结点并设该结点为n;若没有,则构造一个新结点;转(4)。 ? (4) 若Node(A)无定义,则把A附加在结点n上并令Node(A)= n;否则,先从Node(A)的附加标识符集中将A删去(注意,若Node(A)是叶结点,则不能将A删去),然后再把A附加到新结点n上,并令Node(A)=n。 [解答] 按照算法顺序处理每一四元式后构造出的DAG如图7–2所示,其中每一子图(1)、(2)、…、(10)分别对应四元式(1)~(10)的DAG构造。 构造过程说明如下: (1) 对应图7–2(

文档评论(0)

502992 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档