int after = factory.getNumValuesAllocated();  if (DEBUG && after < before && before > 0) System.out.println("Value compaction: " + after + "/" + before + " (" + ((after * 100) / before) + "%)");
	public void compactValueNumbers(Dataflow<ValueNumberFrame> dataflow) {		valuesUsed = new BitSet();		numValuesUsed = 0;		// The "discovered" array tells us the mapping of old value numbers		// to new (which are based on order of discovery).  Negative values		// specify value numbers which are not actually used (and thus can		// be purged.)		discovered = new int[factory.getNumValuesAllocated()];		for (int i = 0; i < discovered.length; ++i) {			discovered[i] = -1;		}		// We can get all extant Frames by looking at the values in		// the location to value map, and also the block result values.		for (Iterator<ValueNumberFrame> i = factIterator(); i.hasNext(); ) {			ValueNumberFrame frame = i.next();			markFrameValues(frame);		}		for (Iterator<ValueNumberFrame> i = dataflow.resultFactIterator(); i.hasNext(); ) {			ValueNumberFrame frame = i.next();			markFrameValues(frame);		}		// Now the factory can modify the ValueNumbers.		factory.compact(discovered, numValuesUsed);	}