南开大学编译原理第十章PPT课件.ppt

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

第十章 代码优化 学习内容 优化种类 循环 全局数据流分析 利用数据流信息进行全局优化 概述 目标机器无关的优化 找出程序中执行最频繁的部分 内层循环 数据流分析 10.1 引言 10.1.1 代码改进变换的标准 意义保持不变 提高速度,减小大小 代价适中 10.1.2 获得最佳性能 贯穿本章的例子 void quicksort(int m, int n) { int i, j; int v, x; if (n = m) return; i = m – 1; j = n; v = a[n]; while (1) { do i = i + 1; while (a[i] v); do j = j – 1; while (a[j] v); if (i = j) break; x = a[i]; a[i] = a[j]; a[j] = x; } x = a[i]; a[i] = a[n]; a[n] = x; quicksort(m, j); quicksort(i + 1, n); } 10.1.3 优化编译器的组织结构 优点 中间代码展现细节,便于优化 与目的机器无关 例10.1 10.2 主要优化种类 局部(local)优化:局限基本块内 全局(global)优化 10.2.1 保持功能的变换 10.2.2 消去公共子表达式 例10.2 10.2.3 复制传播 f := g——在随后语句中,用g替换f 10.2.4 无用代码删除 debug := false if (debug) print ... 利用复制传播,debug替换为false(常量合并,constant folding)? if语句被删除 10.2.5 循环的优化 程序中运行最频繁的部分 代码外提,code motion 删除归纳变量, induction-variable elimination 强度削弱,reduction strength 10.2.6 代码外提 表达式计算与循环次数无关(循环不变计算,loop-invariant computation)? 循环内?循环入口前 while (i = limit – 2) ? t = limit – 2; while (i t) 例10.4 强度削弱 例10.5 删除归纳变量 10.3 基本块的优化 例10.5:基本块的dag表示 dag的局限 语句1和语句4的等价性无法发现 a := b + c b := b – d c := c + d d := b + c 利用代数恒等进行优化 代数恒等 x + 0 = 0 + x = x x – 0 = x x * 1 = 1 * x = x x / 1 = x 降低强度 x ** 2 = x * x 2.0 * x = x + x x / 2 = x * 0.5 常量合并 2 * 3.14 ? 6.28 dag辅助代数优化 x * y = y * x:在dag节点创建中进行额外检查 x y —— x – y 结合 标志寄存器检测 结合率 a := b + c e := c + d + b ? a := b + c t := c + d e := t + b 优化? a := b + c e := a + d 10.4 流图中的循环 d支配(dominate)n:从流图的开始节点到n的任何路径都经过d,d dom n 10.4.2 循环的判定 具有唯一入口点,“header”,它应支配循环中所有节点,否则就不是唯一入口点 至少有一条路径返回首节点 找出回边——back edge 边a→b,b支配a 例10.7:上例流图中的回边 7→4,10→7,4→3,8→3,9→1 循环的判定(续) 自然循环,natural loop 回边n→d,d及不经过d可到达n的节点集合,d——首节点 例10.8: 10→7的自然循环:7、8、10 9→1的自然循环:所有节点 算法10.1 构造自然循环 输入:流图G和一条回边 n→d 输出:n→d对应的自然循环的节点集合 10.4.3 内层循环(inner loop) 两个循环若无相同首节点,则:或者不相交,或者嵌套 内层循环:不包含其他循环的循环 相同首节点情况:可看作一个循环 10.4.4 Pre-Header 循环L,创建前置节点,preheader 只有一个后继——L的首节点 所有L外指向首节点的边?指向前置节点 代码外提 10.4.5 可约流图 循环外到循环内的转移 流图G可约的充要条件 所有边可划分为两个不相交的集合——前向边和回边,且满足: 前向边构成一个dag,且从G的开始节点,可到达其他任何节点 回边:前面定义 例

文档评论(0)

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

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

1亿VIP精品文档

相关文档