src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/ZeroExtendNode.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/ZeroExtendNode.java

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/ZeroExtendNode.java

Print this page

        

*** 104,127 **** return new ZeroExtendNode(other.getValue(), other.getInputBits(), getResultBits()); } if (forValue instanceof NarrowNode) { NarrowNode narrow = (NarrowNode) forValue; Stamp inputStamp = narrow.getValue().stamp(); ! if (inputStamp instanceof IntegerStamp && inputStamp.isCompatible(stamp())) { IntegerStamp istamp = (IntegerStamp) inputStamp; long mask = CodeUtil.mask(PrimitiveStamp.getBits(narrow.stamp())); ! if (((istamp.upMask() | istamp.downMask()) & ~mask) == 0) { ! // The original value is in the range of the masked zero extended result so ! // simply return the original input. return narrow.getValue(); } } } return this; } @Override public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { nodeValueMap.setResult(this, gen.emitZeroExtend(nodeValueMap.operand(getValue()), getInputBits(), getResultBits())); } } --- 104,143 ---- return new ZeroExtendNode(other.getValue(), other.getInputBits(), getResultBits()); } if (forValue instanceof NarrowNode) { NarrowNode narrow = (NarrowNode) forValue; Stamp inputStamp = narrow.getValue().stamp(); ! if (inputStamp instanceof IntegerStamp) { IntegerStamp istamp = (IntegerStamp) inputStamp; long mask = CodeUtil.mask(PrimitiveStamp.getBits(narrow.stamp())); ! ! if ((istamp.upMask() & ~mask) == 0) { ! // The original value cannot change because of the narrow and zero extend. ! ! if (istamp.getBits() < resultBits) { ! // Need to keep the zero extend, skip the narrow. ! return create(narrow.getValue(), resultBits); ! } else if (istamp.getBits() > resultBits) { ! // Need to keep the narrow, skip the zero extend. ! return NarrowNode.create(narrow.getValue(), resultBits); ! } else { ! assert istamp.getBits() == resultBits; ! // Just return the original value. return narrow.getValue(); } } } + } return this; } @Override public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { nodeValueMap.setResult(this, gen.emitZeroExtend(nodeValueMap.operand(getValue()), getInputBits(), getResultBits())); } + + @Override + public boolean mayNullCheckSkipConversion() { + return true; + } }
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/ZeroExtendNode.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File