if (trackValueNumbers) { frame.setKnownValue(replaceMe, replacementValue); }
	private IsNullValueFrame replaceValues(IsNullValueFrame origFrame, IsNullValueFrame frame,	                                       ValueNumber replaceMe, ValueNumberFrame prevVnaFrame, ValueNumberFrame targetVnaFrame, 	                                      IsNullValue replacementValue) {		// If required, make a copy of the frame		frame = modifyFrame(origFrame, frame);		assert frame.getNumSlots() == targetVnaFrame.getNumSlots();		// The VNA frame may have more slots than the IsNullValueFrame		// if it was produced by an IF comparison (whose operand or operands		// are subsequently popped off the stack).		final int targetNumSlots = targetVnaFrame.getNumSlots();		final int prefixNumSlots = Math.min(frame.getNumSlots(), prevVnaFrame.getNumSlots());		// Here's the deal:		// - "replaceMe" is the value number from the previous frame (at the if branch)		//   which indicates a value that we have updated is-null information about		// - in the target value number frame (at entry to the target block),		//   we find the value number in the stack slot corresponding to the "replaceMe"		//   value; this is the "corresponding" value		// - all instances of the "corresponding" value in the target frame have		//   their is-null information updated to "replacementValue"		// This should thoroughly make use of the updated information.		for (int i = 0; i < prefixNumSlots; ++i) {			if (prevVnaFrame.getValue(i).equals(replaceMe)) {				ValueNumber corresponding = targetVnaFrame.getValue(i);				for (int j = 0; j < targetNumSlots; ++j) {					if (targetVnaFrame.getValue(j).equals(corresponding))						frame.setValue(j, replacementValue);				}			}		}		return frame;	}