总结:编译原理-- 第九章 机器无关优化

第九章  机器无关优化

如果我们简单地把每个高级语言结构独立地翻译成为机器代码,那么会带来相当大的运行时刻的开销。本章讨论如何消除这样的低效率因素。

  • 全局公共子表达式:一个重要的优化方法是寻找同一个表达式在两个不同基本块中的计算过程。
  • 复制传播:一个复制语句 u = v 把一个变量 v 赋值给另一个变量 u。
  • 代码移动:另一种优化方法是把一个计算过程移动到它所在的循环之外。
  • 归纳变量:很多循环都有归纳变量。
  • 数据流分析:一个数据流分析模式在程序的每个点上都定义了一个值。
  • 基本块的数据流分析:因为数据流值在一个基本块内的传播过程通常很简单,所以数据流方程通常给每个基本块设置两个值,称为 IN 值和 OUT 值。
  • 到达定值:到达定值数据流框架的数据流值是程序中的语句的集合。
  • 活跃变量:另一个重要的数据流框架计算了在各个程序点上活跃的变量。
  • 可用表达式:为了寻找全局公共子表达式,我们要确定各个程序点上的可用表达式。
  • 数据流问题的抽象:常见的数据流问题,比如前面提到过的那些,都可以用一个通用的数学结构表达。
  • 单调框架:每个半格都有一个<=关系 a<=b 当且仅当 a ∧ b = a。
  • 可分配框架:这种框架满足下面的条件:对于所有的格元素 a 和 b 以及传递函数 f,f(a ∧ b)=f(a)∧ f(b)。
  • 抽象框架的迭代解法:所有的单调数据流框架可以通过一个迭代算法来解决。
  • 常量传播框架:虽然诸如到达值这类的基本框架都是可分配的,但存在一些单调但不可分配的框架。
  • 部分冗余消除:很多有用的优化,比如代码移动和全局公共子表达式消除,可以被扩展为同一个问题。
  • 支配结点:如果在一个流图中所有到达某结点的路径都必须经过另一个结点,那么后一个结点就支配前一个结点。
  • 流图的深度优化排序:如果我们从一个流图的人口结点开始对它进行深度优化搜索,我们会得到一个深度优先生成树。
  • 边的分类:当我们构造一个深度优先生成树之后,相应流图的全部边可以分成三大类:前进边、后退边和交叉边。
  • 回边:回边就是其头结点支配尾结点的边。
  • 可归约流图:如果不管选择哪个深度优先生成树,该树的每个后退边都是一条回边,那么这个流图就是可归约的。
  • 自然循环:一个自然循环是一个结点的集合。
  • 深度优化排序提高了迭代算法的效率:如果沿着无环路径传播信息足以得到正确结果,即环路不会增加信息,那么相应的迭代算法只需要很少几次迭代就可以得到正确结果。
  • 区域:区域是一个结点和边的集合。
  • 区域和可归的流图:可归约流图可以被扫描分析成为一个由区域组成的层次结构。
  • 基于区域的数据流分析:不同于迭代方法的另一种数据流分析方法是沿着区域层次结构向上然后再向下扫描,计算从各个区域的头到达该区域中各个结点的传递函数。
  • 基于区域的归纳变量检测:基于区域的分析技术的重要应用之一是用以寻找归纳变量的数据流框架。

希望我的总结可以帮助大家,感谢阅读我的博客!

猜你喜欢

转载自blog.csdn.net/weixin_42558631/article/details/81270642