Compiler use
SSA form construction. Loop analysis (natural loops = dominator subtrees). Data flow analysis.
Advertisement
Naive algorithm
O(V·(V+E)): for each v, check which vertices' removal disconnects root from v.
Advertisement
Lengauer-Tarjan
O((V+E) · α(V+E)) via semi-dominators + link-eval trees. Complex but linearithmic in practice.
SSA
Static Single Assignment: use dominator tree + dominance frontiers to insert φ-functions. LLVM, GCC do this.