void (VarVersionPair phivar, FastSparseSet<Integer> vers, Statement stat) { FastSparseSet<Integer> versCopy = vers.getCopy(); // take into account the corresponding mm/pp node if existing int ppvers = phantomppnodes.containsKey(phivar) ? phantomppnodes.get(phivar).version : -1; // ssu graph VarVersionNode phinode = ssuversions.nodes.getWithKey(phivar); List<VarVersionEdge> lstPreds = new ArrayList<>(phinode.predecessors); if (lstPreds.size() == 1) { // not yet a phi node VarVersionEdge edge = lstPreds.get(0); edge.source.removeSuccessor(edge); phinode.removePredecessor(edge); } else { for (VarVersionEdge edge : lstPreds) { int verssrc = edge.source.predecessors.iterator().next().source.version; if (!vers.contains(verssrc) && verssrc != ppvers) { edge.source.removeSuccessor(edge); phinode.removePredecessor(edge); } else { versCopy.remove(verssrc); } } } List<VarVersionNode> colnodes = new ArrayList<>(); List<VarVersionPair> colpaars = new ArrayList<>(); for (Integer ver : versCopy) { VarVersionNode prenode = ssuversions.nodes.getWithKey(new VarVersionPair(phivar.var, ver.intValue())); Integer tempver = getNextFreeVersion(phivar.var, stat); VarVersionNode tempnode = new VarVersionNode(phivar.var, tempver); colnodes.add(tempnode); colpaars.add(new VarVersionPair(phivar.var, tempver.intValue())); VarVersionEdge edge = new VarVersionEdge(VarVersionEdge.EDGE_GENERAL, prenode, tempnode); prenode.addSuccessor(edge); tempnode.addPredecessor(edge); edge = new VarVersionEdge(VarVersionEdge.EDGE_GENERAL, tempnode, phinode); tempnode.addSuccessor(edge); phinode.addPredecessor(edge); } ssuversions.addNodes(colnodes, colpaars); }