控制依赖图可以有循环吗?

时间:2012-01-27 14:42:14

标签: compiler-construction graph controls

我试图准确理解控制依赖图的概念。假设我有以下控制流程图(以DOT表示法):

graph g {
1 -> 2;
2 -> 3;
3 -> 2;
2 -> 4;
1 -> 4
}

它具有唯一的入口节点(1)和唯一的出口节点(4),以及循环2 - > 3 - > 2。

我的问题是:这个CFG的控制依赖图是否包含从2到自身的循环边缘?

艾伦&肯尼迪的“优化现代架构的编译器”有一种算法可以产生这样的循环边缘。然而,Muchnick的“编译器设计和实现”的控制依赖算法并没有产生这样的优势。此外,我在文献中找不到任何用这样的循环边缘绘制CDG的例子。我倾向于认为没有这样的优势,但是根据控制依赖的正式定义并且根据Allen&肯尼迪的算法,它应该!

如果你能指出我在CDG中有这样一个循环的例子(最好是在同行评审的论文中,或者某些教授的讲义等),或者如果你能说出为什么Allen&肯尼迪的算法应该是不正确的,我很高兴知道。

2 个答案:

答案 0 :(得分:3)

这种依赖图的效用决定了如何订购操作,对吧?从这个意义上说,知道一个元素依赖于自身是没有帮助的。如果你愿意,你可以绘制循环,但真正重要的是所有其他边缘。

答案 1 :(得分:2)

根据Ferrante 1987,可以存在控制依赖循环。在第325页的案例2中,作者指定

  

从A到B的路径上的后支配树中的所有节点,   包括A和B,应该取决于A.(这种情况   捕获循环依赖。)

因此,在这种情况下,节点A会有一个循环。

相关问题