Mercurial > hg > truffle
changeset 18497:27d65fe58fef
Minor pointer stamp related fixes
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Mon, 24 Nov 2014 11:48:24 -0800 |
parents | 59ffee3765ec |
children | a65cbe5432dd |
files | graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/ClassSubstitutionsTests.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/KlassPointerStamp.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/KlassLayoutHelperNode.java |
diffstat | 3 files changed, 19 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/ClassSubstitutionsTests.java Mon Nov 24 11:40:00 2014 -0800 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/ClassSubstitutionsTests.java Mon Nov 24 11:48:24 2014 -0800 @@ -108,11 +108,10 @@ } @Test - public void testFoldComponenetType() { + public void testFoldComponentType() { testConstantReturn("foldComponentType", 1); } - @Ignore("Can't constant fold LoadHubNode == 0 yet") @Test public void testFieldIsArray() { testConstantReturn("fieldIsArray", 1);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/KlassPointerStamp.java Mon Nov 24 11:40:00 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/KlassPointerStamp.java Mon Nov 24 11:48:24 2014 -0800 @@ -32,14 +32,20 @@ public final class KlassPointerStamp extends MetaspacePointerStamp { + private static final KlassPointerStamp KLASS = new KlassPointerStamp(false, false); + + private static final KlassPointerStamp KLASS_NON_NULL = new KlassPointerStamp(true, false); + + private static final KlassPointerStamp KLASS_ALWAYS_NULL = new KlassPointerStamp(false, true); + private final CompressEncoding encoding; public static KlassPointerStamp klass() { - return new KlassPointerStamp(false, false, null); + return KLASS; } public static KlassPointerStamp klassNonNull() { - return new KlassPointerStamp(true, false, null); + return KLASS_NON_NULL; } private KlassPointerStamp(boolean nonNull, boolean alwaysNull) { @@ -71,12 +77,19 @@ } } else { if (JavaConstant.NULL_POINTER.equals(c)) { - return new KlassPointerStamp(false, true); + return KLASS_ALWAYS_NULL; } } assert c instanceof HotSpotMetaspaceConstant; - return this; + if (nonNull()) { + return this; + } + if (isCompressed()) { + return new KlassPointerStamp(true, false, encoding); + } else { + return KLASS_NON_NULL; + } } @Override
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/KlassLayoutHelperNode.java Mon Nov 24 11:40:00 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/KlassLayoutHelperNode.java Mon Nov 24 11:48:24 2014 -0800 @@ -93,8 +93,7 @@ return null; } else { if (klass.isConstant()) { - long base = klass.asJavaConstant().asLong(); - if (base != 0L) { + if (!klass.asConstant().isDefaultForKind()) { Constant constant = stamp().readConstant(tool.getConstantReflection().getMemoryAccessProvider(), klass.asJavaConstant(), runtime().getConfig().klassLayoutHelperOffset); return ConstantNode.forConstant(stamp(), constant, tool.getMetaAccess()); }