public class CytronDominanceFrontier<N> extends java.lang.Object implements DominanceFrontier<N>
Modifier and Type | Field and Description |
---|---|
protected DominatorTree<N> |
dt |
protected java.util.Map<DominatorNode<N>,java.util.List<DominatorNode<N>>> |
nodeToFrontier |
Constructor and Description |
---|
CytronDominanceFrontier(DominatorTree<N> dt) |
Modifier and Type | Method and Description |
---|---|
protected void |
bottomUpDispatch(DominatorNode<N> node)
Make sure we visit children first.
|
java.util.List<DominatorNode<N>> |
getDominanceFrontierOf(DominatorNode<N> node) |
protected boolean |
isFrontierKnown(DominatorNode<N> node) |
protected void |
processNode(DominatorNode<N> node)
Calculate dominance frontier for a set of basic blocks.
|
protected DominatorTree<N> dt
protected java.util.Map<DominatorNode<N>,java.util.List<DominatorNode<N>>> nodeToFrontier
public CytronDominanceFrontier(DominatorTree<N> dt)
public java.util.List<DominatorNode<N>> getDominanceFrontierOf(DominatorNode<N> node)
getDominanceFrontierOf
in interface DominanceFrontier<N>
protected boolean isFrontierKnown(DominatorNode<N> node)
protected void bottomUpDispatch(DominatorNode<N> node)
protected void processNode(DominatorNode<N> node)
Uses the algorithm of Cytron et al., TOPLAS Oct. 91:
for each X in a bottom-up traversal of the dominator tree do DF(X) < - null for each Y in Succ(X) do if (idom(Y)!=X) then DF(X) <- DF(X) U Y end for each Z in {idom(z) = X} do for each Y in DF(Z) do if (idom(Y)!=X) then DF(X) <- DF(X) U Y end end