public static ControlFlowNode findCommonDominator(final ControlFlowNode a, final ControlFlowNode b) { final Set<ControlFlowNode> path1 = new LinkedHashSet<>(); ControlFlowNode node1 = a; ControlFlowNode node2 = b; while (node1 != null && path1.add(node1)) { node1 = node1.getImmediateDominator(); } while (node2 != null) { if (path1.contains(node2)) { return node2; } node2 = node2.getImmediateDominator(); } throw new IllegalStateException("No common dominator found!"); }
public static ControlFlowNode findCommonDominator(final ControlFlowNode a, final ControlFlowNode b) { final Set<ControlFlowNode> path1 = new LinkedHashSet<>(); ControlFlowNode node1 = a; ControlFlowNode node2 = b; while (node1 != null && path1.add(node1)) { node1 = node1.getImmediateDominator(); } while (node2 != null) { if (path1.contains(node2)) { return node2; } node2 = node2.getImmediateDominator(); } throw new IllegalStateException("No common dominator found!"); }
public static ControlFlowNode findCommonDominator(final ControlFlowNode a, final ControlFlowNode b) { final Set<ControlFlowNode> path1 = new LinkedHashSet<>(); ControlFlowNode node1 = a; ControlFlowNode node2 = b; while (node1 != null && path1.add(node1)) { node1 = node1.getImmediateDominator(); } while (node2 != null) { if (path1.contains(node2)) { return node2; } node2 = node2.getImmediateDominator(); } throw new IllegalStateException("No common dominator found!"); }
@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); } } } } }
@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); } } } } }
@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); } } } } }
@Override public final void accept(final ControlFlowNode b) { if (b == entryPoint) { return; } ControlFlowNode newImmediateDominator = null; for (final ControlFlowNode p : b.getPredecessors()) { if (p.isVisited() && p != b) { newImmediateDominator = p; break; } } if (newImmediateDominator == null) { throw new IllegalStateException("Could not compute new immediate dominator!"); } for (final ControlFlowNode p : b.getPredecessors()) { if (p != b && p.getImmediateDominator() != null) { newImmediateDominator = findCommonDominator(p, newImmediateDominator); } } if (b.getImmediateDominator() != newImmediateDominator) { b.setImmediateDominator(newImmediateDominator); changed.set(true); } } }
@Override public final void accept(final ControlFlowNode b) { if (b == entryPoint) { return; } ControlFlowNode newImmediateDominator = null; for (final ControlFlowNode p : b.getPredecessors()) { if (p.isVisited() && p != b) { newImmediateDominator = p; break; } } if (newImmediateDominator == null) { throw new IllegalStateException("Could not compute new immediate dominator!"); } for (final ControlFlowNode p : b.getPredecessors()) { if (p != b && p.getImmediateDominator() != null) { newImmediateDominator = findCommonDominator(p, newImmediateDominator); } } if (b.getImmediateDominator() != newImmediateDominator) { b.setImmediateDominator(newImmediateDominator); changed.set(true); } } }
@Override public final void accept(final ControlFlowNode b) { if (b == entryPoint) { return; } ControlFlowNode newImmediateDominator = null; for (final ControlFlowNode p : b.getPredecessors()) { if (p.isVisited() && p != b) { newImmediateDominator = p; break; } } if (newImmediateDominator == null) { throw new IllegalStateException("Could not compute new immediate dominator!"); } for (final ControlFlowNode p : b.getPredecessors()) { if (p != b && p.getImmediateDominator() != null) { newImmediateDominator = findCommonDominator(p, newImmediateDominator); } } if (b.getImmediateDominator() != newImmediateDominator) { b.setImmediateDominator(newImmediateDominator); changed.set(true); } } }
final ControlFlowNode immediateDominator = node.getImmediateDominator();
final ControlFlowNode immediateDominator = node.getImmediateDominator();
final ControlFlowNode immediateDominator = node.getImmediateDominator();