ValueNumberCache.Entry entry = new ValueNumberCache.Entry(ins, inputValueList);
ValueNumberCache.Entry entry = new ValueNumberCache.Entry(handle, inputValueList);
	public void modelNormalInstruction(Instruction ins, int numWordsConsumed, int numWordsProduced) {		ValueNumberFrame frame = getFrame();		// Get the input operands to this instruction.		ValueNumber[] inputValueList = new ValueNumber[numWordsConsumed];		// Pop off the input operands.		try {			frame.getTopStackWords(inputValueList);			while (numWordsConsumed-- > 0) {				frame.popValue();			}		} catch (DataflowAnalysisException e) {			throw new IllegalStateException(e.toString());		}		// See if we have the output operands in the cache.		// If not, push default values for the output.		ValueNumberCache.Entry entry = new ValueNumberCache.Entry(ins, inputValueList);		ValueNumber[] outputValueList = cache.lookupOutputValues(entry);		if (outputValueList == null) {			outputValueList = new ValueNumber[numWordsProduced];			for (int i = 0; i < numWordsProduced; ++i)				outputValueList[i] = factory.createFreshValue();			cache.addOutputValues(entry, outputValueList);		}		if (outputValueList.length != numWordsProduced)			throw new IllegalStateException("cache produced wrong num words");		// Push output operands on stack.		for (int i = 0; i < outputValueList.length; ++i)			frame.pushValue(outputValueList[i]);	}