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

编译原理 教学课件 作者 康慕宁 林奕 讲稿_7.ppt

编译原理 教学课件 作者 康慕宁 林奕 讲稿_7.ppt

  1. 1、本文档共117页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LiveOut集合的计算 2、如果这组新的LiveOut集合上一轮迭代相比有所变化,则重新执行上述计算,直到所有节点的LiveOut集合都不再变化为止。 第一次迭代 LiveOut集合的计算 第二次迭代 本轮对LiveOut(B1)的计算得到了两个活跃变量b和c。其中,b是在B1的直接后继基本块B3中引用的,而c则是在B1的间接后继基本块B4中引用的(B1?B2?B4)。 考察其他LiveOut集合时可以发现,这些集合均没有发生变化。 LiveOut集合的计算 第三次迭代 重复上述计算可以看出,所有LiveOut集合都不再发生变化,因此结束活跃变量计算 LiveOut集合的计算 活跃变量的应用 结合上面的例子,对活跃变量的应用进行简要说明。 首先,根据对活跃变量集合的计算得到了以下的LiveOut集合组: LiveOut(B1) = { c, b } LiveOut(B2) = { c } LiveOut(B3) = { e } LiveOut(B4) = { e } LiveOut(B5) = ? 确定变量x是没有初始化的变量 无用变量或无用代码删除的安全性 7.5.3 过程间数据流分析 在进行数据流分析时除了需要考虑子程序内部变量、表达式的引用和定值情况之外,还需要考虑全局变量、参数传递(如C语言的指针做参数)等情况引起的子程序间变量依赖关系。 限于篇幅,本书将不再对过程间数据流分析技术进行更多介绍。 7.6 循环优化 循环虽然在程序中占有的比例并不高,但在执行时却有很高的频度。 如果能够对循环中的代码进行优化,那么即使只优化了一条指令,其效果却相当于优化了n条指令(如果循环执行n次)。 7.6.1 循环的识别 源程序和抽象语法树中可以容易得获得循环的相关信息。但有些信息只有在生成中间代码后才能方便获得。如: 只有当生成四元式或指令时,才能得到关于下标变量地址计算的详细信息 问题: 四元式序列中无法直接看出循环的构成。 因此,必须从中识别出循环。 循环语句的特点 第一,所有循环都有一个唯一的入口点。 第二,存在一个从循环内部某条语句返回循环头(入口点)的一条转跳指令(在控制流程图中,体现为一条从循环体内指向入口节点的有向边)。 第三,循环体内的所有语句都可不?经过本循环的入口节点而到达循环的末尾(末尾语句返回循环首部)。反之,如果一个语句没有通过该循环的唯一入口节点进入循环,且最终到达循环尾部,则该节点是循环体内部的节点。 识别循环的算法 首先,识别所有符合循环入口点特征的节点集合。具体方法是通过计算控制流程图中的必经节点集实现的。 其次,根据节点之间的相互依赖关系和从被控制节点指向其必经节点的有向边(称为回边),识别循环的尾部。 最后,根据循环首部和尾部的定义,以及循环体内语句必然能不经过循环首部而到达循环尾部这一事实,计算循环体所包含的所有节点。 必经节点,控制节点树 假设控制流程图中有节点n,则节点m是n的必经节点的充要条件是:如果从控制流程图的首节点到n的每条路径都包含m,则m是n的必经节点,也可称m控制或支配了n(记为m DOM n)。特别注意,任意节点k是自己的必经节点。 控制节点树 根据这一定义,我们不难给出控制?流程图中每个节点的必经节点集合。如果将这些必经节点集合以相互依赖的关系表示出来,也可得到一棵控制节点树(必经节点树,也称哈斯树)。 循环查找的例子 DOM(1) = {1} DOM(2) = {1,2} DOM(3) = {1,2,3} DOM(4) = {1,2,4} DOM(5) = {1,2,4.5} DOM(6) = {1,2,4,6} DOM(7) = {1,2,4,7} DOM(8) = {1,2,4,6,8} DOM(9) = {1,2,4,6,8,9} DOM(10) = {1,2,4,6,8,9,10} DOM(11) = {1,2,4,7,11} DOM(12) = {1,2,4,12} 识别循环出口点的方法 循环出口点可用“回边”的概念来确定 如果节点n是节点m的必经节点,且存在一条从m指向n的有向边,则称该m,n的边是回边。 上例中符合回边定义的有以下有向边:3?2,4?2,9?8和10?5。 识别循环体的方法 遍历控制流程图,找到所有不经过入口节点就能到达出口节点的语句。这些语句属于同一个循环。 上面例子中的几个循环: 对于回边3?2,不存在不经过2就能到达3的节点。因此节点2、3构成一个循环。 对于回边4?2,节点2、4构成一个循环。 对于回边9?8,节点8、9构成一个循环。 对于回边10?5,节点8、9可以不经过5就到达10。因此5、8、9、10构成一个循环。 7.6.2 循环优化技术 循环不变量的计算 归纳变量的消除

您可能关注的文档

文档评论(0)

118压缩包课件库 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档