- 1、本文档共69页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
删除归纳变量 基本归纳变量: 如果循环中对变量I只有唯一的形如I:=I ±C的赋值,且其中C为循环不变量,则称I为循环中的基本归纳变量。 归纳变量: 如果I是循环中一基本归纳变量,J在循环中的定值总是可化归为I的同一线性函数,即J:=C1*I ±C2,其中C1和C2都是循环不变量,则称J是与I同族的归纳变量。一个基本归纳变量也是一归纳变量。 一个基本归纳变量除用于自身的递归定值外,往往只在循环中用来计算其它归纳变量以及用来控制循环的进行。 I和T1始终保持T1:=4*I的线性关系 这样把(12)的循环控制条件 I≤20变换成T1≤80,程序的运行结果不变 这种变换称为变换循环控制条件 经过这一变换,循环中I的值不被引用,四元式(11)可被删去,这是变换的目的所在。 (1) P:=0 (2) I:=1 (4) T2:=addr(A) -4 (7) T5:=addr(B) -4 (3) T1:=4*I (5) T3:=T2[T1] (6) T4:=T1 (8) T6:=T5[T4] (9) T7:=T3*T6 (10) P:=P+T7 (11) I:=I+1 (3’) T1:=T1+4 (12) if I≤20 goto (5) (1) P:=0 (2) I:=1 (4) T2:=addr(A) -4 (7) T5:=addr(B) -4 (3) T1:=4*I (5) T3:=T2[T1] (6) T4:=T1 (8) T6:=T5[T4] (9) T7:=T3*T6 (10) P:=P+T7 (3’) T1:=T1+4 (12) if T1≤80 goto (5) 变换循环控制条件 中间代码段 (1) P:=0 (2) I:=1 (4) T2:=addr(A) -4 (7) T5:=addr(B) -4 (3) T1:=4*I (5) T3:=T2[T1] (6) T4:=T1 (8) T6:=T5[T4] (9) T7:=T3*T6 (10) P:=P+T7 (11) I:=I+1 (3’) T1:=T1+4 (12) if I≤20 goto (5) 删除归纳变量是在强度削弱以后进行。其算法如下: 利用循环不变运算信息,找出循环中所有基本归纳变量。 找出所有其它归纳变量,并找出与基本归纳变量的线性关系。 对上面找出的每一归纳变量进行强度削弱。 删除对归纳变量的无用赋值。 删除基本归纳变量。并用归纳变量来替换基本归纳变量作条件控制。 基本块的DAG表示 DAG(Directed Acyclic Graph)是无环路有向图的简称 基本块的DAG是一种其结点带有标记和附加信息的DAG: 标记: 叶结点(无后继的结点)以一标识符或常数作标记,表示该结点代表该变量或常数的值(通常标识符加下标0表示它是该变量的初值) 内部结点(有后继的结点)以一运算符作标记,表示该结点代表用该算符对其后继结点所代表的值进行运算的结果 标识符: 各结点都可以附加上一个或多个标识符,表示这些变量具有该结点所代表的值 基本块的DAG是实现基本块块内优化的工具. 基本块的DAG的例子 T0:=3.14 T1:=2*T0 T2:=R+r A:=T1*T2 B:=A T3:=2*T0 T4:=R+r T5:=T3*T4 T6:=R-r B:=T5*T6 - + r T6 A, B,T5 * T1,T3 T0 R 6.28 3.14 T2,T4 n5 n7 n2 n3 n4 n1 B * n6 n8 ni是结点编号,写在圈内 各结点的标记(运算符、标识符或常量)写在结点下面 结点的附加标识符 写在结点右边 2. 四元式及其相应的DAG结点形式 0型: A:=B (:=, B, -,A) B n1 A n2 n1 op B A 1型: A:=op B (op , B, -,A) 2型: A:=B op C (op , B , C , A) n3 n1 n2 B C op A 3 构造基本块的DAG的算法 算法准备: 假定 DAG各结点信息将用适当的数据结构来存放; 设有一个对应表,用来表示标识符(包括常数)与结点的对应关系。NODE(A)是描述这种对应关系的函数,它的值或为n(表示结点n上有A作为标记或附加标识符),或无定义。 算法: 首先DAG为空,对基本块的每一四元式,按其类型依次分别处理: 对0型(A:= B) Y N N Y NODE(B)有定义 构造叶结点B 令该结点为n NODE(A)有定义 从NODE(A)的附加标识符中删去A 在结点n上附加A 下一四元式 n B A 对1型(A:= op B) Y Y N N Y N Y N Y N Y N
文档评论(0)