据说在将中间代码转换为静态单赋值形式时,
需要计算基本块的支配者
作为方程的固定点,有些明显的方法是缓慢的
要快速完成,您需要使用相当复杂的 Lengauer-Tarjan 算法
我可以看到前两点,但我不清楚第三点背后的原因。特别是在计算前序支配树的过程中,有什么理由不能这样做吗?我已经在 JavaScript 中实现了一个版本,它似乎可以工作:
var domPreorder = [];
function doms(b) {
b.children = [];
for (var c of b[b.length - 1].targets)
if (c.i == null) {
c.i = domPreorder.length
domPreorder.push(c)
b.children.push(c)
c.parent = b
doms(c)
}
}
f[0].i = 0
domPreorder.push(f[0])
doms(f[0])
这种方法有一些我没有看到的缺点吗?