public class CytronDominanceFrontier<N> extends Object implements DominanceFrontier<N>
| Modifier and Type | Field and Description |
|---|---|
protected DominatorTree<N> |
dt |
protected Map<DominatorNode<N>,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.
|
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 Map<DominatorNode<N>,List<DominatorNode<N>>> nodeToFrontier
public CytronDominanceFrontier(DominatorTree<N> dt)
public 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
Copyright © 2020 Soot OSS. All rights reserved.