Mercurial > hg > truffle
changeset 16012:0497ead7ec50
Support null check directly on compressed oops.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Wed, 04 Jun 2014 11:47:49 +0200 |
parents | dd11a7036c6e |
children | dd5c15b85f78 |
files | graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Kind.java graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/PlatformKind.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/NarrowOopStamp.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IsNullNode.java |
diffstat | 5 files changed, 33 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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); + } + } }
--- 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(); }
--- 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());
--- 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;
--- 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(); }