[计算机软件及应用]第10章 优化.ppt

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

5. Du—链 示例 (1) a := d (2)if a=b then goto B2 (3)b := 1 (4)c := 1 (5)a := a + b B1 B2 B3 B4 ? ? {5} {5} B4 {5} ? ? {5} B3 {5} ? ? {5} B2 {5} 2 5 ? ? B1 Out Kill Gen In 基本块 由上述计算过程可以 看出存在Du—链: (1) - (2)a - (5)a a 同理对于代码(3) 也存在Du—链: (3) - (5)b 对复写语句(1)来确定其所对应的Du—链 其所定值的变量为a a a a b b a := b是可以到达a的引用的唯一定值 (可由Ud—链确定) 有时可以通过用b代替对a的引用从而消除 形如a := b的复写语句。如果 则对a的引用可用对b的引用代替。 6. 用数据流分析确定复写传播 这个复写语句之后没有对b的赋值 (可通过全路径的向前流分析检查) 分析数据的值在基本块之间是如何被修改的, 这种工作就是全局数据流分析。 在优化中往往要在全局范围内考虑数据值的变化情 况以及变量的定义、使用情况等。 全局数据流分析有两种分类方法: 根据信息流与控制流的相对方向可分为: 向前流问题 (方向一致) 向后流问题 (方向相反) 根据分析时对于路径的不同要求可分为: 任意路径数据流分析 (性质在某条路径为真) 全路径数据流分析 (性质在所有可能路径为真) 数据流分析往往使用方程作为工具 数据流方程往往成对出现: 一个方程描述基本块之间的关系 一个方程描述基本块内部的关系 不同数据流分析所使用的方程不同,但方程结构十分类似 我们执行数据流分析时假定流图中 所有路径都是有可能执行的。 涉及多个基本块范围的优化通常依赖于 对程序的可能执行路径的分析。 1.概述 在全局范围来分析的话,一个变量是活跃的,如果存在一条路径使得该变量被重新定值之前它的当前值还要被引用。 不再活跃变量的值在基本块的出口处不需要保存。 所谓活跃变量就是它的当前值还将被引用 (在赋予一个新值之前) 2. 活跃变量 定义LiveIn(B)为在基本块B人口处为活跃的变量的集合 令B为一个基本块 3. 活跃变量识别——第一个方程 定义LiveOut(B)为基本块B的出口处的活跃变量的集合 令S(B)为流图中基本块B的后继的集合 一个变量在基本块的出口处是活跃的 仅当它在本基本块的某个后继的人口处为活跃的。 如果基本块没有后继,则其LiveOut为空 4. 活跃变量识别——第二个方程 令LiveUse(B)为B中被定值之前要引用的变量的集合 LiveUse(B)是一个集合常量,这个集合由基本块B中的语句唯一确定 如果v∈LiveUse(B),则v∈LiveIn(B) ;即: 令Def(B)为在B中定值的变量集合 如果一个变量在基本块B的出口处为活跃的且v?Def(B), 则它在B的人口处也是活跃的,即: 一个变量在基本块人口处为活跃的,则一定有 或者它在基本块的LiveUse集中 或者它在基本块的出口处为活跃的且在基本块中没有重新定值 因此,有下面方程 5. 活跃变量识别——举例 a := 1 if a=b goto B2 c := 1 d := a + b b := 1 ? {a, b} {a, b} {d} B4 {a, b} {a, b} ? {c} B3 {a, b} {a} ? {b} B2 {a, b} {b} {b} {a} B1 LiveOut LiveIn LiveUse Def 基本块 B1 B2 B3 B4 d := a + b B1中对a定值,故 Def(B1)= {a} a b c 同理 Def(B2)= {b} Def(B3)= {c} Def(B4)= {d} d B1中引用b,故 LiveUse(B1)= {b} b B2和B3中未引用变量,故LiveUse(B2)= ? LiveUse(B3)= ? B4中引用a、b,故 LiveUse(B4)= {a,b} a b B4无后继 LiveOut(B4)=? 据第二个方程LiveIn(B4) = LiveUse(B4)= {a, b} 据第一个方程LiveOut(B3) = LiveIn(B4)= {a, b} 据第一个方程LiveOut(B2) = LiveIn(B4)= {a, b} 据第二个方程 LiveIn(B3) = LiveOut(B3)- Def(B3)= {a, b} – {c}= {a, b} 据第二个方程 LiveIn(B2) = LiveOut(B2)- Def(B2)= {a, b}

文档评论(0)

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

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

1亿VIP精品文档

相关文档