“这里的 $\operatorname{DF}$ 与 $\operatorname{IDF}$ 来自支配边界。新 φ 之所以回到工作表,是因为它也是 $v$ 的新定义,可能在更远处再次汇合。”
形式陈述
在单入口可达 CFG 上,给定支配关系,节点
其中
集合
可由从
直觉
若
边界不是几何距离为一的节点,也不是支配树中
例子与边界
对菱形
再看循环
DF 只看控制流结构,不看某变量是否活跃。假设
推论与应用
若变量
计算 DF 的一种常见树算法先采用没有入边的人工入口;若原入口会被回边进入,就在其前面新增这样的根。随后对每个具有至少两个前驱的块
同一循环图的SSA构造逐项算出四个块的支配边界,以迭代边界和入口活跃性确定两个φ位置,再跟踪支配树遍历中的栈顶。它也区分构造与运行:改名时访问前驱才填写其参数槽,运行时首次进入循环头只读取入口边的参数。
参考资料
- Ron Cytron, Jeanne Ferrante, Barry K. Rosen, Mark N. Wegman, and F. Kenneth Zadeck, “Efficiently Computing Static Single Assignment Form and the Control Dependence Graph,” ACM TOPLAS 13(4), 1991, pp. 451–490.
- Jeanne Ferrante, Karl J. Ottenstein, and Joe D. Warren, “The Program Dependence Graph and Its Use in Optimization,” ACM TOPLAS 9(3), 1987, pp. 319–349.
- Andrew W. Appel, Modern Compiler Implementation in ML, Cambridge University Press, 1998, Chapter 19.