src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/SignExtendNode.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/SignExtendNode.java
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/SignExtendNode.java
Print this page
*** 82,113 ****
if (forValue instanceof SignExtendNode) {
// sxxx -(sign-extend)-> ssss sxxx -(sign-extend)-> ssssssss sssssxxx
// ==> sxxx -(sign-extend)-> ssssssss sssssxxx
SignExtendNode other = (SignExtendNode) forValue;
! return new SignExtendNode(other.getValue(), other.getInputBits(), getResultBits());
} else if (forValue instanceof ZeroExtendNode) {
ZeroExtendNode other = (ZeroExtendNode) forValue;
if (other.getResultBits() > other.getInputBits()) {
// sxxx -(zero-extend)-> 0000 sxxx -(sign-extend)-> 00000000 0000sxxx
// ==> sxxx -(zero-extend)-> 00000000 0000sxxx
! return new ZeroExtendNode(other.getValue(), other.getInputBits(), getResultBits());
}
}
if (forValue.stamp() instanceof IntegerStamp) {
IntegerStamp inputStamp = (IntegerStamp) forValue.stamp();
if ((inputStamp.upMask() & (1L << (getInputBits() - 1))) == 0L) {
// 0xxx -(sign-extend)-> 0000 0xxx
// ==> 0xxx -(zero-extend)-> 0000 0xxx
! return new ZeroExtendNode(forValue, getInputBits(), getResultBits());
}
}
return this;
}
@Override
public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) {
nodeValueMap.setResult(this, gen.emitSignExtend(nodeValueMap.operand(getValue()), getInputBits(), getResultBits()));
}
}
--- 82,118 ----
if (forValue instanceof SignExtendNode) {
// sxxx -(sign-extend)-> ssss sxxx -(sign-extend)-> ssssssss sssssxxx
// ==> sxxx -(sign-extend)-> ssssssss sssssxxx
SignExtendNode other = (SignExtendNode) forValue;
! return SignExtendNode.create(other.getValue(), other.getInputBits(), getResultBits());
} else if (forValue instanceof ZeroExtendNode) {
ZeroExtendNode other = (ZeroExtendNode) forValue;
if (other.getResultBits() > other.getInputBits()) {
// sxxx -(zero-extend)-> 0000 sxxx -(sign-extend)-> 00000000 0000sxxx
// ==> sxxx -(zero-extend)-> 00000000 0000sxxx
! return ZeroExtendNode.create(other.getValue(), other.getInputBits(), getResultBits());
}
}
if (forValue.stamp() instanceof IntegerStamp) {
IntegerStamp inputStamp = (IntegerStamp) forValue.stamp();
if ((inputStamp.upMask() & (1L << (getInputBits() - 1))) == 0L) {
// 0xxx -(sign-extend)-> 0000 0xxx
// ==> 0xxx -(zero-extend)-> 0000 0xxx
! return ZeroExtendNode.create(forValue, getInputBits(), getResultBits());
}
}
return this;
}
@Override
public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) {
nodeValueMap.setResult(this, gen.emitSignExtend(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/SignExtendNode.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File