void (SSAConstructorSparseEx ssa, DirectGraph graph) { // collect phi versions List<Set<VarVersionPair>> lst = new ArrayList<>(); for (Entry<VarVersionPair, FastSparseSet<Integer>> ent : ssa.getPhi().entrySet()) { Set<VarVersionPair> set = new HashSet<>(); set.add(ent.getKey()); for (Integer version : ent.getValue()) { set.add(new VarVersionPair(ent.getKey().var, version.intValue())); } for (int i = lst.size() - 1; i >= 0; i--) { Set<VarVersionPair> tset = lst.get(i); Set<VarVersionPair> intersection = new HashSet<>(set); intersection.retainAll(tset); if (!intersection.isEmpty()) { set.addAll(tset); lst.remove(i); } } lst.add(set); } Map<VarVersionPair, Integer> phiVersions = new HashMap<>(); for (Set<VarVersionPair> set : lst) { int min = Integer.MAX_VALUE; for (VarVersionPair paar : set) { if (paar.version < min) { min = paar.version; } } for (VarVersionPair paar : set) { phiVersions.put(new VarVersionPair(paar.var, paar.version), min); } } updateVersions(graph, phiVersions); }