public final void computeDominanceFrontier() { resetVisited(); getEntryPoint().traversePostOrder( new Function<ControlFlowNode, Iterable<ControlFlowNode>>() { @Override public final Iterable<ControlFlowNode> apply(final ControlFlowNode input) { return input.getDominatorTreeChildren(); } }, new Block<ControlFlowNode>() { @Override public void accept(final ControlFlowNode n) { final Set<ControlFlowNode> dominanceFrontier = n.getDominanceFrontier(); dominanceFrontier.clear(); for (final ControlFlowNode s : n.getSuccessors()) { if (s.getImmediateDominator() != n) { dominanceFrontier.add(s); } } for (final ControlFlowNode child : n.getDominatorTreeChildren()) { for (final ControlFlowNode p : child.getDominanceFrontier()) { if (p.getImmediateDominator() != n) { dominanceFrontier.add(p); } } } } } ); }
public final void computeDominanceFrontier() { resetVisited(); getEntryPoint().traversePostOrder( new Function<ControlFlowNode, Iterable<ControlFlowNode>>() { @Override public final Iterable<ControlFlowNode> apply(final ControlFlowNode input) { return input.getDominatorTreeChildren(); } }, new Block<ControlFlowNode>() { @Override public void accept(final ControlFlowNode n) { final Set<ControlFlowNode> dominanceFrontier = n.getDominanceFrontier(); dominanceFrontier.clear(); for (final ControlFlowNode s : n.getSuccessors()) { if (s.getImmediateDominator() != n) { dominanceFrontier.add(s); } } for (final ControlFlowNode child : n.getDominatorTreeChildren()) { for (final ControlFlowNode p : child.getDominanceFrontier()) { if (p.getImmediateDominator() != n) { dominanceFrontier.add(p); } } } } } ); }
public final void computeDominanceFrontier() { resetVisited(); getEntryPoint().traversePostOrder( new Function<ControlFlowNode, Iterable<ControlFlowNode>>() { @Override public final Iterable<ControlFlowNode> apply(final ControlFlowNode input) { return input.getDominatorTreeChildren(); } }, new Block<ControlFlowNode>() { @Override public void accept(final ControlFlowNode n) { final Set<ControlFlowNode> dominanceFrontier = n.getDominanceFrontier(); dominanceFrontier.clear(); for (final ControlFlowNode s : n.getSuccessors()) { if (s.getImmediateDominator() != n) { dominanceFrontier.add(s); } } for (final ControlFlowNode child : n.getDominatorTreeChildren()) { for (final ControlFlowNode p : child.getDominanceFrontier()) { if (p.getImmediateDominator() != n) { dominanceFrontier.add(p); } } } } } ); }