网站大量收购独家精品文档,联系QQ:2885784924

7hh第11章 代码优化.pptx

  1. 1、本文档共114页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7hh第11章 代码优化

第11章 代码优化;根据优化对象涉及的程序范围, 优化可分为: 局部优化 循环优化 全局优化;11.1 局部优化;如何把四元式程序划分为基本块? 关键是确定入口语句和出口语句。 (1) 满足下述条件的语句为入口语句: ①四元式序列的第一个语句; ②由转移语句转移到的语句; ③紧跟在转移语句后面的语句。 (2) 满足下述条件的语句为出口语句: ① 入口语句的前导语句; ② 转移语句自身; ③ 停语句。;例 求最大公因子的三地址代码程序:   (1) ?read X   (2) ?read Y   (3) ?R=X % Y   (4) ?if R= 0 goto (8)   (5) ?X=Y   (6) ?Y=R   (7)? goto (3)   (8) ?write Y   (9) ?halt 基本块: (1)(2), (3)(4), (5)(6)(7), (8)(9);DAG(Directed Acyclic Graph)主要用于对基本块进行优化。它是一种结点带有下述标记或附加信息的有向图(树):;(2)内部结点以运算符作为标记, 表示用该运算符对其直接后继结点进行运算的结果。 (3)各个结点可附加一个或多个标识符, 表示这些变量具有该结点代表的值。;不同四元式对应的DAG结点形式: ;;注意: 转移语句结点的右边可附加一语句位置, 用于指示转移目标, 其余结点的右边只允许附加标识符; 数组元素赋值的结点有三个后继, 其余结点最多只有两个后继。;利用DAG进行优化的基本思想: 首先按基本块内四元式序列的顺序把所有四元式构造成一个DAG, 然后按构造结点的次序将DAG还原成四元式序列。 由于在构造DAG的同时作了局部优化{合并已知量、删除公共子表达式、删除无用赋值}, 因此, 得到的是优化的四元式序列。;为了便于叙述DAG构造算法, 把四元式按后继结点个数分为四类: (1) 0型四元式: 后继结点个数为0 (2) 1型四元式: 后继结点个数为1 (3) 2型四元式: 后继结点个数为2 (4) 3型四元式: 后继结点个数为3 约定: 用大写字母表示四元式中的变量名(或常数); 用Node(A)表示A在DAG中的相应结点。;DAG构造算法的基本步骤: (1) 构造叶结点 (2) 合并已知量 (3) 构造op结点 {删除公共子表达式} (4) 添加附加信息 {删除无用赋值};(1) 构造叶结点: 若Node(B)无定义, 则构造一标记为B的叶结点, 并做下述处理: ①若当前四元式是0型, 转(4); ②若当前四元式是1型, 转(2)①; ③若当前四元式是2型, 则 若Node(C)无定义, 则构造一标 记为C的叶结点; 转(2)②;;(2) 合并已知量: ①若Node(B)为常数,转(2)③, 否转(3)①; ②若Node(B)和Node(C)为常数,转(2)④, 否则转(3)②; ③执行op B, 令新常数为P。若Node(B)是处理当前四元式时新建结点, 则删之。若Node(P)无定义, 则构造一标记为P的叶 结点; 转(4); ④执行B op C, 新常数为P。若Node(B)或Node(C)是处理当前四元式时新建结点, 则删之。若Node(P)无定义, 则构造一标记为P的叶结点; 转(4); ;(3) 构造op结点: ①构造A=op B对应的op结点: 检查DAG中是否有标记为op且以Node(B)为唯一后继的结点{查找公共子表达式}, 若没有, 则构造一个op结点; 转(4); ②构造A=B op C对应的op结点: 检查DAG中是否有标记为op且其左后继为Node(B)、右后继为Node(C)的结点(查公共子表达式), 若没有, 则构造一个op结点; 转(4);;(4) 添加附加信息: 若Node(A)无定义, 则把A附加到相应结点; 若Node(A)有定义, 则先从Node(A)的附加标识符集中把A删去, 再把A附加到相应结点。{若Node(A)是叶结点, 则不删};例5.1 试构造以下基本块的DAG: (1) T0 = 3.14 (2) T1 = 2*T0 (3) T2 = R+r (4) A = T1*T2 (5) B = A (6) T3 = 2*T0 (7) T4 = R+r (8) T5 =

文档评论(0)

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

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

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档