机器无关优化之到达定值

“到达定值”是最常见和有用的数据流模式之一。只要知道当控制到达程序中每个点的时候,每个变量-可能在程序中的哪些地方被定值,我们就可以确定很多有关x的性质。下面仅仅给出两个例子:一个编译器能够根据到达定值信息知道x在点p上的值是否为常量,而如果x在点p 上被使用,则调试器可以指出x是否未经定值就被使用。

如果存在一条从紧随在定值后面的程序点到达某一个程序点P的路径,并且在这条路径上 d没有被“杀死”,我们就说定值d到达程序点p。如果在这条路径上有对变量x的其他定值,我们就说变量x的这个定值被“杀死”了e。直观地讲,如果某个变量x的一个定值d到达点p,在点p处使用的x的值可能就是由d最后定值的。

机器无关优化之格图

把域V画成一个格图对我们会有所帮助。格图的结点是V的元素,而它的边是向下的,即如果y≤x,那么从x到y有一个边。给出了一个到达定值数据流模式的集合V。其中有三个定值:d1、d2和d3。因为半格中的偏序关系在≤是⊇,从这三个定值的集合的子集到 其所有超集有一个向下的边。因为 ≤是传递的,如果有一条从x到y的路径,我们可以按照惯例省略从x到y的边。因此,虽然在这个例子中{d1,d2,d3}≤{d1},我们并没有画出这条边,因为这个边可以用经过d1,d2的路径来表示。

有一点也很有用,即我们可以从这样的图中读出交汇值。因为x ∧y就是它们的最大下界,因此这个值总是最高的、从x和y都有向下的路径到达的元素z。比如,如果想x是 {d1}而y是{d2},那么z就是{d1,d2}。这是正确的,因为这里的交汇运算是并集运算。顶元素将出现在格图的顶部,也就是说,从T到图中的每个元素都有一条向下的路径。类似地,底元素将出现在图的底部,从每个元素都有一条边到达丄。

机器无关优化之常量传播

所有根据流模式实际上都是具有有限高度的可分配框架的简单例子。这样,迭代算法的前向或逆向版本可以用来解决这些问题,并求出每个问题的MOP解。我们将深人研究一个具有更多有趣性质的有用的数据流框架。

回忆一下常量传播(或者说“常量折叠”),即把那些在每次运行时总是得到相同常量值的表达式替换为该常量值。下面描述的常量传播框架和至今已经讨论的数据流问题都有所不同。不同之处在于:

1)它的可能数据流值的集合是无界的。即使对于一个确定的流图也是如此。

2)它不是可分配的。

«1»
最近发表
控制面板
您好,欢迎到访网站!
  [查看权限]
网站分类
搜索
Tags列表
网站收藏
图标汇集
  • 订阅本站的 RSS 2.0 新闻聚合
友情链接

热门搜索: 外链域名 高外链域名 高收录域名

Copyright www.thyst.cn. Some Rights Reserved.