--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/SignExtendNode.java 2017-03-20 17:40:42.000000000 -0700 +++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/SignExtendNode.java 2017-03-20 17:40:41.000000000 -0700 @@ -84,13 +84,13 @@ // 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()); + 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 new ZeroExtendNode(other.getValue(), other.getInputBits(), getResultBits()); + return ZeroExtendNode.create(other.getValue(), other.getInputBits(), getResultBits()); } } @@ -99,7 +99,7 @@ if ((inputStamp.upMask() & (1L << (getInputBits() - 1))) == 0L) { // 0xxx -(sign-extend)-> 0000 0xxx // ==> 0xxx -(zero-extend)-> 0000 0xxx - return new ZeroExtendNode(forValue, getInputBits(), getResultBits()); + return ZeroExtendNode.create(forValue, getInputBits(), getResultBits()); } } @@ -110,4 +110,9 @@ public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { nodeValueMap.setResult(this, gen.emitSignExtend(nodeValueMap.operand(getValue()), getInputBits(), getResultBits())); } + + @Override + public boolean mayNullCheckSkipConversion() { + return true; + } }