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