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