boolean (ControlFlowGraph graph) { GenericDominatorEngine engine = new GenericDominatorEngine(new IGraph() { @Override public List<? extends IGraphNode> getReversePostOrderList() { return graph.getReversePostOrder(); } @Override public Set<? extends IGraphNode> getRoots() { return new HashSet<>(Collections.singletonList(graph.getFirst())); } }); engine.initialize(); boolean found; while (true) { found = false; boolean splitted = false; for (ExceptionRangeCFG range : graph.getExceptions()) { Set<BasicBlock> setEntries = getRangeEntries(range); if (setEntries.size() > 1) { // multiple-entry protected range found = true; if (splitExceptionRange(range, setEntries, graph, engine)) { splitted = true; break; } } } if (!splitted) { break; } } return !found; }