- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章 高级语言及其语法描述 第二章 高级语言及其语法描述 第七章 代码优化 【学习目标】 【学习指南】 §7.1 优化概述 常用的优化技术 【例】 1、删除公共子表达式 2、代码外提 3、强度削弱 4、变换循环控制条件 5、合并已知量 6、复写传播 7、删除无用赋值 §7.2 局部优化 §7.2.1 基本块的划分 【例】划分基本块 ★ 基本块内的优化变换 ★ 1、基本块的主要保结构变换 ★ 2、代数变换 §7.2.2 基本块的DAG表示 用于基本块优化的有向图,是一种其结点带有下述标记或附加信息的DAG 利用DAG进行基本块优化的基本思想 将四元式按照其对应结点的后继结点个数分为四类 每个基本块仅含0、1、2型四元式的DAG构造算法 3. 4. 【例】构造以下基本块 G 的DAG DAG构造算法中几个步骤的作用 【例】 其它特点 进一步优化工作 §7.3 循环优化 §7.3.1 程序流图与循环 一个程序可用一个流图来表示 程序流图和基本块的DAG是不同的概念 【例】构造程序流图(最大公因子) 如何确定循环结构? 【例】 §7.3.2 循环的查找 性质 【例】计算D(n) 回边 【例】求流图的所有回边 循环的查找算法 【例】 §7.3.3 循环优化 1、代码外提 不能代码外提的情形(1) B3中i:=2是循环不变运算。 问题的原因 此外 不能代码外提的情形(2) 查找循环 L 的不变运算的算法 代码外提的算法 2、强度削弱与删除归纳变量 ★强度削弱一般在下述情况下进行 【例】 【例】强度削弱不仅可对乘法运算进行,也可对加法运算进行 【例】 ★删除归纳变量 强度削弱和删除归纳变量算法 第二步:找出循环中所有其它归纳变量 A,并找出 A 与已知基本归纳变量 X 的同族线性函数关系 FA(X) 第三步:进行强度削弱优化 第四步: 第五步:删除基本归纳变量 【例】对给定的程序流图进行删除归纳变量优化。 本章小节 1.必经结点集 为了找出程序流图中的循环,需要分析流图中结点的控制关系,为此引入必经结点和必经结点集的定义。 在程序流图中,对任意结点 m 和 n,如果从流图的首结点出发,到达 n 的任一通路都要经过 m,则称 m 是 n 的必经结点,记为 m DOM n; 流图中结点 n 的所有必经结点的集合称为结点 n 的必经结点集,记为D(n)。 显然,循环的入口结点是循环中所有结点的必经结点;此外,对任何结点 n 来说都有 n DOM n。 ni 为 nj 的必经结点示意 把 DOM 可以看作流图结点集上定义的一个关系,则由定义容易看出,它具有以下性质: 自反性:对流图中任意结点 a,有 a DOM a。 传递性:对流图中任意结点 a、b 和 c。若 a DOM b,b DOM c,则有 a DOM c。 反对称性:若 a DOM b 且 b DOM a,则必有 a=b。 因此,关系 DOM 是一个偏序关系。任何结点 n 的必经结点集是一个有序集。 首结点 1 是所有结点的必经结点;结点 2 是除去结点 1 之外所有结点的必经结点;结点 4 是结点 4、5、6、7 的必经结点;而结点 3、5、6、7 都只是其自身的必经结点。 因此,直接由定义和 DOM 的性质可求得: D(1)={1}D(2)={1,2}D(3)={1,2,3}D(4)={1,2,4}D(5)={1,2,4,5}D(6)={1,2,4,6}D(7)={1,2,4,7} 假设 a→b 是流图中的一条有向边, 如果 b DOM a, 则称 a→b 是流图中的一条回边。 6→6 ∵ D(6)={1,2,4,6} ∴ 6 DOM 6 7→4 ∵ D(7)={1,2,4,7} ∴ 4 DOM 7 4→2 ∵ D(4)={1,2,4} ∴ 2 DOM 4 所以有向边6→6、7→4、4→2是回边。 其它有向边都不是回边。 应用必经结点集,可以求出流图中的回边,利用回边,就可以找出流图中的循环。 如果已知有向边 a→b 是回边,那么就可以求出由它组成的循环。 该循环就是由结点 b 出发的、所有有通路到达结点 a 但该通路不经过 b 的结点组成,并且 b 是该循环的唯一入口结点。 流图的所有回边是 6→6、7→4、4→2 由回边 6→6 组成的循环就是{6} 由回边 7→4 组成的循环是{4,5,6,7}; 由回边 4→2 组成的循环是{2,3,4,5,6,7}。 在找出了程序流图中的循环之后,我们就可以针对每个循环进行优化工作。 因为循环内的指令是重复执行的,故而循环中进行的优化在整个优化工作中是非常重要的。 循环优化的三种重要技术是: 代码外提 删除归纳变量 强度削弱 减少循环中代码
文档评论(0)