+
+ // debug routine
+ /*
+ * Iterator iter = sese2conflictGraph.entrySet().iterator(); while
+ * (iter.hasNext()) { Entry e = (Entry) iter.next(); FlatNode fn =
+ * (FlatNode) e.getKey(); ConflictGraph conflictGraph = (ConflictGraph)
+ * e.getValue();
+ * System.out.println("---------------------------------------");
+ * System.out.println("CONFLICT GRAPH for " + fn); Set<String> keySet =
+ * conflictGraph.id2cn.keySet(); for (Iterator iterator = keySet.iterator();
+ * iterator.hasNext();) { String key = (String) iterator.next();
+ * ConflictNode node = conflictGraph.id2cn.get(key);
+ * System.out.println("key=" + key + " \n" + node.toStringAllEffects()); } }
+ */
+
+ // 8th pass, calculate all possible conflicts without using reachability
+ // info
+ // and identify set of FlatNew that next disjoint reach. analysis should
+ // flag
+ Set<FlatNew> sitesToFlag = new HashSet<FlatNew>();
+ calculateConflicts(sitesToFlag, false);
+
+
+ if (!state.RCR) {
+ // 9th pass, ask disjoint analysis to compute reachability
+ // for objects that may cause heap conflicts so the most
+ // efficient method to deal with conflict can be computed
+ // later
+
+ disjointAnalysisReach =
+ new DisjointAnalysis(state, typeUtil, callGraph, liveness, arrayReferencees, sitesToFlag,
+ null, // don't do effects analysis again!
+ null // don't do effects analysis again!
+ );
+ // 10th pass, calculate conflicts with reachability info
+ calculateConflicts(null, true);
+ }