快速验证支配性测试的支配树验证
在计算机科学领域,控制流图(CFG)中计算支配节点的问题至关重要,它广泛应用于程序优化、电路测试等多个方面。然而,实现高效且经过验证的支配性计算算法并非易事。本文将深入探讨如何在验证编译器中集成高效的支配性计算和测试技术。
1. 引言与相关工作
在具有单个入口节点的控制流图中,计算支配节点就是要确定图中每个节点的支配节点集合。简单来说,如果从入口节点到节点 n 的每条路径都经过节点 d ,那么节点 d 就支配节点 n 。这个问题自 1972 年以来就被广泛研究,众多算法被提出,它们在实现难度和效率之间进行了权衡。
- Allen - Cocke(AC)算法 :基于固定点表征的支配性定义,可通过 Kildall 工作集迭代求解,但直接实现的时间复杂度为 $O(|N|^2)$。
- Cooper - Harvey - Kennedy(CHK)算法 :改进了 AC 算法的数据流方法,利用立即支配节点表表征支配集,在实践中性能更好,但最坏情况下的时间复杂度仍为 $O(|N|^2)$。
- Lengauer - Tarjan(LT)算法 :现代编译器常用的算法,使用深度优先搜索和并查集数据结构,实现了接近线性的时间复杂度 $O(|N|\log|N| + |E|)$。
在编译的特定环境中,支配节点对于实现强大而高效的程序优化以及构建静态单赋值(SS
超级会员免费看
订阅专栏 解锁全文
1万+

被折叠的 条评论
为什么被折叠?



