# HG changeset patch # User Roland Schatz # Date 1401875269 -7200 # Node ID 0497ead7ec50be0c3cfcd46a8195fcdc9e28fd59 # Parent dd11a7036c6eeda6cfb7cc884f098acf32027f84 Support null check directly on compressed oops. diff -r dd11a7036c6e -r 0497ead7ec50 graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Kind.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Kind.java Tue Jun 03 22:19:31 2014 +0200 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Kind.java Wed Jun 04 11:47:49 2014 +0200 @@ -436,4 +436,27 @@ throw new IllegalArgumentException("illegal call to bits on " + this); } } + + public Constant getDefaultValue() { + switch (this) { + case Boolean: + return Constant.FALSE; + case Int: + return Constant.INT_0; + case Long: + return Constant.LONG_0; + case Float: + return Constant.FLOAT_0; + case Double: + return Constant.DOUBLE_0; + case Object: + return Constant.NULL_OBJECT; + case Byte: + case Char: + case Short: + return new PrimitiveConstant(this, 0); + default: + throw new IllegalArgumentException("illegal call to getDefaultValue on " + this); + } + } } diff -r dd11a7036c6e -r 0497ead7ec50 graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/PlatformKind.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/PlatformKind.java Tue Jun 03 22:19:31 2014 +0200 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/PlatformKind.java Wed Jun 04 11:47:49 2014 +0200 @@ -28,4 +28,6 @@ public interface PlatformKind { String name(); + + Constant getDefaultValue(); } diff -r dd11a7036c6e -r 0497ead7ec50 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java Tue Jun 03 22:19:31 2014 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java Wed Jun 04 11:47:49 2014 +0200 @@ -455,7 +455,7 @@ private void emitNullCheckBranch(IsNullNode node, LabelRef trueSuccessor, LabelRef falseSuccessor, double trueSuccessorProbability) { PlatformKind kind = gen.getPlatformKind(node.object().stamp()); - gen.emitCompareBranch(kind, operand(node.object()), Constant.NULL_OBJECT, Condition.EQ, false, trueSuccessor, falseSuccessor, trueSuccessorProbability); + gen.emitCompareBranch(kind, operand(node.object()), kind.getDefaultValue(), Condition.EQ, false, trueSuccessor, falseSuccessor, trueSuccessorProbability); } public void emitCompareBranch(CompareNode compare, LabelRef trueSuccessor, LabelRef falseSuccessor, double trueSuccessorProbability) { @@ -483,7 +483,7 @@ if (node instanceof IsNullNode) { IsNullNode isNullNode = (IsNullNode) node; PlatformKind kind = gen.getPlatformKind(isNullNode.object().stamp()); - return gen.emitConditionalMove(kind, operand(isNullNode.object()), Constant.NULL_OBJECT, Condition.EQ, false, trueValue, falseValue); + return gen.emitConditionalMove(kind, operand(isNullNode.object()), kind.getDefaultValue(), Condition.EQ, false, trueValue, falseValue); } else if (node instanceof CompareNode) { CompareNode compare = (CompareNode) node; PlatformKind kind = gen.getPlatformKind(compare.x().stamp()); diff -r dd11a7036c6e -r 0497ead7ec50 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/NarrowOopStamp.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/NarrowOopStamp.java Tue Jun 03 22:19:31 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/NarrowOopStamp.java Wed Jun 04 11:47:49 2014 +0200 @@ -26,6 +26,7 @@ import com.oracle.graal.compiler.common.spi.*; import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.hotspot.HotSpotVMConfig.CompressEncoding; +import com.oracle.graal.hotspot.meta.*; public class NarrowOopStamp extends AbstractObjectStamp { @@ -39,6 +40,10 @@ public String toString() { return name(); } + + public Constant getDefaultValue() { + return HotSpotCompressedNullConstant.COMPRESSED_NULL; + } }; private final CompressEncoding encoding; diff -r dd11a7036c6e -r 0497ead7ec50 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IsNullNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IsNullNode.java Tue Jun 03 22:19:31 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IsNullNode.java Wed Jun 04 11:47:49 2014 +0200 @@ -53,7 +53,7 @@ @Override public boolean verify() { assertTrue(object() != null, "is null input must not be null"); - assertTrue(object().stamp() instanceof ObjectStamp || object().stamp() instanceof IllegalStamp, "is null input must be an object"); + assertTrue(object().stamp() instanceof AbstractObjectStamp, "is null input must be an object"); return super.verify(); }