/** Print the value numbers for each node in the value graph. */ public void printValueNumbers() { for (Enumeration e = valueGraph.enumerateVertices(); e.hasMoreElements(); ) { OPT_ValueGraphVertex v = (OPT_ValueGraphVertex) e.nextElement(); int valueNumber = v.getValueNumber(); OPT_GVCongruenceClass c = (OPT_GVCongruenceClass) B.get(valueNumber); System.out.println(v.name + " " + valueNumber + " " + c.getLabel()); } }
/** * Assuming congruence class c has changed: find all other classes that might be affected, and add * them to the worklist * * @param c the congruence class that has changed */ private void addDependentClassesToWorklist(OPT_GVCongruenceClass c) { // for each element of this congruence class: for (Iterator elements = c.iterator(); elements.hasNext(); ) { OPT_ValueGraphVertex v = (OPT_ValueGraphVertex) elements.next(); // for each vertex which points to v in the value graph for (Enumeration e = v.inNodes(); e.hasMoreElements(); ) { OPT_ValueGraphVertex in = (OPT_ValueGraphVertex) e.nextElement(); int vn = in.getValueNumber(); OPT_GVCongruenceClass x = (OPT_GVCongruenceClass) B.get(vn); workList.push(x); } } }
/** * Initialize the congruence classes, assuming that all nodes with the same label are congruent. */ private void initialize() { // store a map from label -> congruenceClass HashMap labelMap = new HashMap(10); for (Enumeration e = valueGraph.enumerateVertices(); e.hasMoreElements(); ) { OPT_ValueGraphVertex v = (OPT_ValueGraphVertex) e.nextElement(); Object label = v.getLabel(); OPT_GVCongruenceClass c = findOrCreateCongruenceClass(label, labelMap); // add this node to the congruence class c.addVertex(v); // set the value number for the node v.setValueNumber(c.getValueNumber()); } }