llvm-share-dominatortree
llvm-share-dominatortree
Dominator Tree
https://blog.csdn.net/dashuniuniu/article/details/52224882
Def 支配了所有的user
如果每一条从流图的入口结点到结点 n 的路径都经过结点 d, 我们就说 d 支配(dominate)n,记为 d dom n。请注意,在这个定义下每个结点都支配它自己。-《编译原理》
d dom i if all paths from entry to node i include d.
考虑下面的图示, 结点 1 定义了一个值 x := 3,这个值可以传播到结点 1 所支配的所有结点(除了 entry 的所有结点)中,只有在到达结点 1 的支配边界的时候,才需要考虑其他路径是否有对 x 的定义并且插入适当的 Φ-function。
虽然从结点1的角度来看,它支配结点(例如9,10,11)可能会用到x:3,但并不意味着这些节点里不需要插入? \phi?-function的。
结点 5 定义了值 x := 4,结点 5 没有支配结点并且结点 9 就是结点 5 的支配边界,在这里需要考虑从从其他路径传播到此的对变量 x 的其他定义,也就是结点 1 中的定义 x := 3。所以在结点 9 需要插入一个关于变量 x 的 Φ-function。同理在结点 10 的开头也需要插入一个 Φ-function,另外由于 Φ-function 会产生新的定义,所以也需要在结点 9 的支配边界结点 11 的开头插入 Φ-function。
计算domain tree的一个算法