# HG changeset patch # User Roland Schatz # Date 1416833594 -3600 # Node ID ca81508f2a197053a48defd02ee9b3e6e1c3c4e7 # Parent 1a21e7ced5448e89b7f35379f43f23e1b44c4503 Generalize NULL handling to work on arbitrary pointers. diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/ConstantTest.java --- a/graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/ConstantTest.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/ConstantTest.java Mon Nov 24 13:53:14 2014 +0100 @@ -36,7 +36,7 @@ @Test public void testNullIsNull() { - Assert.assertTrue(JavaConstant.NULL_OBJECT.isNull()); + Assert.assertTrue(JavaConstant.NULL_POINTER.isNull()); } @Test diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/TestConstantReflectionProvider.java --- a/graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/TestConstantReflectionProvider.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/TestConstantReflectionProvider.java Mon Nov 24 13:53:14 2014 +0100 @@ -79,7 +79,7 @@ assertEquals(Byte.valueOf((byte) 123), snippetReflection.asObject(constantReflection.boxPrimitive(JavaConstant.forByte((byte) 123)))); assertSame(Boolean.TRUE, snippetReflection.asObject(constantReflection.boxPrimitive(JavaConstant.forBoolean(true)))); - assertNull(constantReflection.boxPrimitive(JavaConstant.NULL_OBJECT)); + assertNull(constantReflection.boxPrimitive(JavaConstant.NULL_POINTER)); assertNull(constantReflection.boxPrimitive(snippetReflection.forObject("abc"))); } @@ -97,7 +97,7 @@ assertEquals(JavaConstant.forByte((byte) 123), constantReflection.unboxPrimitive(snippetReflection.forObject(Byte.valueOf((byte) 123)))); assertSame(JavaConstant.forBoolean(true), constantReflection.unboxPrimitive(snippetReflection.forObject(Boolean.TRUE))); - assertNull(constantReflection.unboxPrimitive(JavaConstant.NULL_OBJECT)); + assertNull(constantReflection.unboxPrimitive(JavaConstant.NULL_POINTER)); assertNull(constantReflection.unboxPrimitive(snippetReflection.forObject("abc"))); } diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/JavaConstant.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/JavaConstant.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/JavaConstant.java Mon Nov 24 13:53:14 2014 +0100 @@ -26,7 +26,7 @@ * Represents a constant (boxed) value, such as an integer, floating point number, or object * reference, within the compiler and across the compiler/runtime interface. Exports a set of * {@code JavaConstant} instances that represent frequently used constant values, such as - * {@link #NULL_OBJECT}. + * {@link #NULL_POINTER}. */ public interface JavaConstant extends Constant, JavaValue, Value { @@ -34,7 +34,7 @@ * Using a larger cache for integers leads to only a slight increase in cache hit ratio which is * not enough to justify the impact on startup time. */ - JavaConstant NULL_OBJECT = new NullConstant(); + JavaConstant NULL_POINTER = new NullConstant(); PrimitiveConstant INT_MINUS_1 = new PrimitiveConstant(Kind.Int, -1); PrimitiveConstant INT_0 = new PrimitiveConstant(Kind.Int, 0); PrimitiveConstant INT_1 = new PrimitiveConstant(Kind.Int, 1); @@ -346,7 +346,7 @@ case Long: return LONG_0; case Object: - return NULL_OBJECT; + return NULL_POINTER; default: throw new IllegalArgumentException(kind.toString()); } diff -r 1a21e7ced544 -r ca81508f2a19 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 Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Kind.java Mon Nov 24 13:53:14 2014 +0100 @@ -450,7 +450,7 @@ case Double: return JavaConstant.DOUBLE_0; case Object: - return JavaConstant.NULL_OBJECT; + return JavaConstant.NULL_POINTER; case Byte: case Char: case Short: diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/NullConstant.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/NullConstant.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/NullConstant.java Mon Nov 24 13:53:14 2014 +0100 @@ -23,7 +23,7 @@ package com.oracle.graal.api.meta; /** - * The implementation type of the {@link JavaConstant#NULL_OBJECT null constant}. + * The implementation type of the {@link JavaConstant#NULL_POINTER null constant}. */ final class NullConstant extends AbstractValue implements JavaConstant { diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/AbstractPointerStamp.java --- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/AbstractPointerStamp.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/AbstractPointerStamp.java Mon Nov 24 13:53:14 2014 +0100 @@ -67,6 +67,15 @@ } @Override + public Constant asConstant() { + if (alwaysNull) { + return JavaConstant.NULL_POINTER; + } else { + return null; + } + } + + @Override public Kind getStackKind() { return Kind.Illegal; } diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/ObjectStamp.java --- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/ObjectStamp.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/ObjectStamp.java Mon Nov 24 13:53:14 2014 +0100 @@ -61,15 +61,6 @@ } @Override - public JavaConstant asConstant() { - if (alwaysNull()) { - return JavaConstant.NULL_OBJECT; - } else { - return null; - } - } - - @Override public LIRKind getLIRKind(LIRKindTool tool) { return tool.getObjectKind(); } diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EscapeAnalysisTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EscapeAnalysisTest.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EscapeAnalysisTest.java Mon Nov 24 13:53:14 2014 +0100 @@ -61,7 +61,7 @@ @Test public void test3() { - testEscapeAnalysis("test3Snippet", JavaConstant.NULL_OBJECT, false); + testEscapeAnalysis("test3Snippet", JavaConstant.NULL_POINTER, false); } public static Object test3Snippet() { diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java Mon Nov 24 13:53:14 2014 +0100 @@ -406,7 +406,7 @@ @Override public void emitDeoptimizeCaller(DeoptimizationAction action, DeoptimizationReason reason) { - moveDeoptValuesToThread(getMetaAccess().encodeDeoptActionAndReason(action, reason, 0), JavaConstant.NULL_OBJECT); + moveDeoptValuesToThread(getMetaAccess().encodeDeoptActionAndReason(action, reason, 0), JavaConstant.NULL_POINTER); append(new AMD64HotSpotDeoptimizeCallerOp()); } @@ -581,7 +581,7 @@ append(new AMD64Move.NullCheckOp(load(uncompress), state)); } } else { - assert address.getKind() == Kind.Object : address + " - " + address.getKind() + " not an object!"; + assert address.getKind() == Kind.Object || address.getKind() == Kind.Long : address + " - " + address.getKind() + " not a pointer!"; append(new AMD64Move.NullCheckOp(load(address), state)); } } diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java Mon Nov 24 13:53:14 2014 +0100 @@ -183,7 +183,7 @@ @Override public void emitDeoptimizeCaller(DeoptimizationAction action, DeoptimizationReason reason) { - moveDeoptValuesToThread(getMetaAccess().encodeDeoptActionAndReason(action, reason, 0), JavaConstant.NULL_OBJECT); + moveDeoptValuesToThread(getMetaAccess().encodeDeoptActionAndReason(action, reason, 0), JavaConstant.NULL_POINTER); append(new SPARCHotSpotDeoptimizeCallerOp()); } diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java Mon Nov 24 13:53:14 2014 +0100 @@ -181,7 +181,7 @@ NodeInputList parameters = callTarget.arguments(); ValueNode receiver = parameters.size() <= 0 ? null : parameters.get(0); GuardingNode receiverNullCheck = null; - if (!callTarget.isStatic() && receiver.stamp() instanceof ObjectStamp && !StampTool.isObjectNonNull(receiver)) { + if (!callTarget.isStatic() && receiver.stamp() instanceof ObjectStamp && !StampTool.isPointerNonNull(receiver)) { receiverNullCheck = createNullCheck(receiver, invoke.asNode(), tool); invoke.setGuard(receiverNullCheck); } @@ -379,7 +379,7 @@ private static boolean addReadBarrier(UnsafeLoadNode load) { if (useG1GC() && load.graph().getGuardsStage() == StructuredGraph.GuardsStage.FIXED_DEOPTS && load.object().getKind() == Kind.Object && load.accessKind() == Kind.Object && - !StampTool.isObjectAlwaysNull(load.object())) { + !StampTool.isPointerAlwaysNull(load.object())) { ResolvedJavaType type = StampTool.typeOrNull(load.object()); if (type != null && !type.isArray()) { return true; diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCompressedNullConstant.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCompressedNullConstant.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCompressedNullConstant.java Mon Nov 24 13:53:14 2014 +0100 @@ -25,7 +25,7 @@ import com.oracle.graal.api.meta.*; /** - * The compressed representation of the {@link JavaConstant#NULL_OBJECT null constant}. + * The compressed representation of the {@link JavaConstant#NULL_POINTER null constant}. */ public final class HotSpotCompressedNullConstant extends AbstractValue implements JavaConstant, HotSpotConstant { @@ -94,7 +94,6 @@ @Override public boolean equals(Object o) { - assert o == this || !(o instanceof HotSpotCompressedNullConstant) : "null constant is a singleton"; - return o == this; + return o instanceof HotSpotCompressedNullConstant; } } diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstantImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstantImpl.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstantImpl.java Mon Nov 24 13:53:14 2014 +0100 @@ -45,7 +45,7 @@ public static JavaConstant forObject(Object object, boolean compressed) { if (object == null) { - return compressed ? HotSpotCompressedNullConstant.COMPRESSED_NULL : JavaConstant.NULL_OBJECT; + return compressed ? HotSpotCompressedNullConstant.COMPRESSED_NULL : JavaConstant.NULL_POINTER; } else { return new HotSpotObjectConstantImpl(object, compressed); } @@ -53,7 +53,7 @@ public static JavaConstant forStableArray(Object object, int stableDimension, boolean isDefaultStable) { if (object == null) { - return JavaConstant.NULL_OBJECT; + return JavaConstant.NULL_POINTER; } else { assert object.getClass().isArray(); return new HotSpotObjectConstantImpl(object, false, stableDimension, isDefaultStable); diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CompressionNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CompressionNode.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CompressionNode.java Mon Nov 24 13:53:14 2014 +0100 @@ -74,7 +74,7 @@ } private static Constant compress(Constant c, CompressEncoding encoding) { - if (JavaConstant.NULL_OBJECT.equals(c)) { + if (JavaConstant.NULL_POINTER.equals(c)) { return HotSpotCompressedNullConstant.COMPRESSED_NULL; } else if (c instanceof HotSpotObjectConstant) { return ((HotSpotObjectConstant) c).compress(); @@ -87,7 +87,7 @@ private static Constant uncompress(Constant c, CompressEncoding encoding) { if (HotSpotCompressedNullConstant.COMPRESSED_NULL.equals(c)) { - return JavaConstant.NULL_OBJECT; + return JavaConstant.NULL_POINTER; } else if (c instanceof HotSpotObjectConstant) { return ((HotSpotObjectConstant) c).uncompress(); } else if (c instanceof HotSpotMetaspaceConstant) { @@ -174,7 +174,7 @@ HotSpotLIRGenerator hsGen = (HotSpotLIRGenerator) gen.getLIRGeneratorTool(); boolean nonNull; if (getValue().stamp() instanceof AbstractObjectStamp) { - nonNull = StampTool.isObjectNonNull(getValue().stamp()); + nonNull = StampTool.isPointerNonNull(getValue().stamp()); } else { // metaspace pointers are never null nonNull = true; diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/KlassPointerStamp.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/KlassPointerStamp.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/KlassPointerStamp.java Mon Nov 24 13:53:14 2014 +0100 @@ -64,6 +64,22 @@ } @Override + public Stamp constant(Constant c, MetaAccessProvider meta) { + if (isCompressed()) { + if (HotSpotCompressedNullConstant.COMPRESSED_NULL.equals(c)) { + return new KlassPointerStamp(false, true, encoding); + } + } else { + if (JavaConstant.NULL_POINTER.equals(c)) { + return new KlassPointerStamp(false, true); + } + } + + assert c instanceof HotSpotMetaspaceConstant; + return this; + } + + @Override public LIRKind getLIRKind(LIRKindTool tool) { if (isCompressed()) { return LIRKind.value(Kind.Int); diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/MetaspacePointerStamp.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/MetaspacePointerStamp.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/MetaspacePointerStamp.java Mon Nov 24 13:53:14 2014 +0100 @@ -26,7 +26,6 @@ import com.oracle.graal.compiler.common.*; import com.oracle.graal.compiler.common.spi.*; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.hotspot.meta.*; public abstract class MetaspacePointerStamp extends AbstractPointerStamp { @@ -67,12 +66,6 @@ } @Override - public Stamp constant(Constant c, MetaAccessProvider meta) { - assert c instanceof HotSpotMetaspaceConstant; - return this; - } - - @Override public boolean isLegal() { return true; } diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/MethodPointerStamp.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/MethodPointerStamp.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/MethodPointerStamp.java Mon Nov 24 13:53:14 2014 +0100 @@ -49,6 +49,16 @@ } @Override + public Stamp constant(Constant c, MetaAccessProvider meta) { + if (JavaConstant.NULL_POINTER.equals(c)) { + return new MethodPointerStamp(false, true); + } else { + assert c instanceof HotSpotMetaspaceConstant; + return this; + } + } + + @Override public Constant readConstant(MemoryAccessProvider provider, Constant base, long displacement) { HotSpotMemoryAccessProvider hsProvider = (HotSpotMemoryAccessProvider) provider; return hsProvider.readMethodPointerConstant(base, displacement); diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierAdditionPhase.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierAdditionPhase.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierAdditionPhase.java Mon Nov 24 13:53:14 2014 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -79,12 +79,12 @@ } protected void addG1PostWriteBarrier(FixedAccessNode node, ValueNode object, ValueNode value, LocationNode location, boolean precise, StructuredGraph graph) { - final boolean alwaysNull = StampTool.isObjectAlwaysNull(value); + final boolean alwaysNull = StampTool.isPointerAlwaysNull(value); graph.addAfterFixed(node, graph.add(G1PostWriteBarrier.create(object, value, location, precise, alwaysNull))); } protected void addSerialPostWriteBarrier(FixedAccessNode node, ValueNode object, ValueNode value, LocationNode location, boolean precise, StructuredGraph graph) { - final boolean alwaysNull = StampTool.isObjectAlwaysNull(value); + final boolean alwaysNull = StampTool.isPointerAlwaysNull(value); final LocationNode loc = (precise ? location : null); graph.addAfterFixed(node, graph.add(SerialWriteBarrier.create(object, loc, precise, alwaysNull))); } diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ClassGetHubNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ClassGetHubNode.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ClassGetHubNode.java Mon Nov 24 13:53:14 2014 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -83,10 +83,7 @@ ConstantNode cn = ConstantNode.forConstant(stamp(), objectType.getObjectHub(), metaAccess); return cn; } else if (exactType instanceof HotSpotResolvedPrimitiveType) { - /* - * The constant value is null but we don't have a JavaConstant subclass to - * talk about a NULL pointer yet. - */ + return ConstantNode.forConstant(stamp(), JavaConstant.NULL_POINTER, metaAccess); } } } diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.java/src/com/oracle/graal/java/AbstractBytecodeParser.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/AbstractBytecodeParser.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/AbstractBytecodeParser.java Mon Nov 24 13:53:14 2014 +0100 @@ -520,7 +520,7 @@ } private void genIfNull(Condition cond) { - T y = appendConstant(JavaConstant.NULL_OBJECT); + T y = appendConstant(JavaConstant.NULL_POINTER); T x = frameState.apop(); genIf(x, cond, y); } @@ -927,7 +927,7 @@ // @formatter:off switch (opcode) { case NOP : /* nothing to do */ break; - case ACONST_NULL : frameState.apush(appendConstant(JavaConstant.NULL_OBJECT)); break; + case ACONST_NULL : frameState.apush(appendConstant(JavaConstant.NULL_POINTER)); break; case ICONST_M1 : // fall through case ICONST_0 : // fall through case ICONST_1 : // fall through diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Mon Nov 24 13:53:14 2014 +0100 @@ -336,7 +336,7 @@ protected void handleUnresolvedCheckCast(JavaType type, ValueNode object) { assert !graphBuilderConfig.eagerResolving(); append(FixedGuardNode.create(currentGraph.unique(IsNullNode.create(object)), Unresolved, InvalidateRecompile)); - frameState.apush(appendConstant(JavaConstant.NULL_OBJECT)); + frameState.apush(appendConstant(JavaConstant.NULL_POINTER)); } /** @@ -652,7 +652,7 @@ @Override protected void emitNullCheck(ValueNode receiver) { - if (StampTool.isObjectNonNull(receiver.stamp())) { + if (StampTool.isPointerNonNull(receiver.stamp())) { return; } BlockPlaceholderNode trueSucc = currentGraph.add(BlockPlaceholderNode.create(this)); diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.lir.hsail/src/com/oracle/graal/lir/hsail/HSAILMove.java --- a/graal/com.oracle.graal.lir.hsail/src/com/oracle/graal/lir/hsail/HSAILMove.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.lir.hsail/src/com/oracle/graal/lir/hsail/HSAILMove.java Mon Nov 24 13:53:14 2014 +0100 @@ -78,7 +78,7 @@ private void checkForNullObjectInput() { if (result.getKind() == Kind.Object && isConstant(input) && input.getKind() == Kind.Long && ((JavaConstant) input).asLong() == 0) { - input = JavaConstant.NULL_OBJECT; + input = JavaConstant.NULL_POINTER; } } diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerator.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerator.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerator.java Mon Nov 24 13:53:14 2014 +0100 @@ -362,7 +362,7 @@ case Long: return JavaConstant.forLong(dead); case Object: - return JavaConstant.NULL_OBJECT; + return JavaConstant.NULL_POINTER; default: throw new IllegalArgumentException(kind.toString()); } diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.loop/src/com/oracle/graal/loop/CountedLoopInfo.java --- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/CountedLoopInfo.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/CountedLoopInfo.java Mon Nov 24 13:53:14 2014 +0100 @@ -158,7 +158,7 @@ cond = graph.unique(IntegerLessThanNode.create(end, v1)); } overflowGuard = graph.unique(GuardNode.create(cond, BeginNode.prevBegin(loop.entryPoint()), DeoptimizationReason.LoopLimitCheck, DeoptimizationAction.InvalidateRecompile, true, - JavaConstant.NULL_OBJECT)); // TODO gd: use speculation + JavaConstant.NULL_POINTER)); // TODO gd: use speculation loop.loopBegin().setOverflowGuard(overflowGuard); return overflowGuard; } diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/ObjectStampJoinTest.java --- a/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/ObjectStampJoinTest.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/ObjectStampJoinTest.java Mon Nov 24 13:53:14 2014 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -63,7 +63,7 @@ public void testJoin3() { Stamp d = StampFactory.declared(getType(D.class)); Stamp c = StampFactory.declared(getType(C.class)); - Assert.assertTrue(StampTool.isObjectAlwaysNull(join(c, d))); + Assert.assertTrue(StampTool.isPointerAlwaysNull(join(c, d))); } @Test @@ -78,7 +78,7 @@ Stamp dExact = StampFactory.exact(getType(D.class)); Stamp c = StampFactory.declared(getType(C.class)); Stamp join = join(c, dExact); - Assert.assertTrue(StampTool.isObjectAlwaysNull(join)); + Assert.assertTrue(StampTool.isPointerAlwaysNull(join)); Assert.assertNull(StampTool.typeOrNull(join)); Assert.assertFalse(StampTool.isExactType(join)); } @@ -89,8 +89,8 @@ Stamp alwaysNull = StampFactory.alwaysNull(); Stamp join = join(alwaysNull, dExactNonNull); Assert.assertFalse(join.isLegal()); - Assert.assertFalse(StampTool.isObjectNonNull(join)); - Assert.assertFalse(StampTool.isObjectAlwaysNull(join)); + Assert.assertFalse(StampTool.isPointerNonNull(join)); + Assert.assertFalse(StampTool.isPointerAlwaysNull(join)); } @Test @@ -98,7 +98,7 @@ Stamp aExact = StampFactory.exact(getType(A.class)); Stamp e = StampFactory.declared(getType(E.class)); Stamp join = join(aExact, e); - Assert.assertTrue(StampTool.isObjectAlwaysNull(join)); + Assert.assertTrue(StampTool.isPointerAlwaysNull(join)); Assert.assertNull(StampTool.typeOrNull(join)); Assert.assertFalse(StampTool.isExactType(join)); } @@ -116,7 +116,7 @@ Stamp bExact = StampFactory.exact(getType(B.class)); Stamp dExact = StampFactory.exact(getType(D.class)); Stamp join = join(bExact, dExact); - Assert.assertTrue(StampTool.isObjectAlwaysNull(join)); + Assert.assertTrue(StampTool.isPointerAlwaysNull(join)); Assert.assertNull(StampTool.typeOrNull(join)); Assert.assertNull(StampTool.typeOrNull(join)); } diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java Mon Nov 24 13:53:14 2014 +0100 @@ -465,7 +465,7 @@ case Long: return ConstantNode.forLong(0L, graph); case Object: - return ConstantNode.forConstant(JavaConstant.NULL_OBJECT, null, graph); + return ConstantNode.forConstant(JavaConstant.NULL_POINTER, null, graph); default: return null; } diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java Mon Nov 24 13:53:14 2014 +0100 @@ -39,7 +39,7 @@ } protected DeoptimizeNode(DeoptimizationAction action, DeoptimizationReason reason) { - this(action, reason, 0, JavaConstant.NULL_OBJECT, null); + this(action, reason, 0, JavaConstant.NULL_POINTER, null); } public static DeoptimizeNode create(DeoptimizationAction action, DeoptimizationReason reason, int debugId, JavaConstant speculation, FrameState stateBefore) { diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java Mon Nov 24 13:53:14 2014 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -76,7 +76,7 @@ } protected PiNode(ValueNode object, ResolvedJavaType toType, boolean exactType, boolean nonNull) { - this(object, StampFactory.object(toType, exactType, nonNull || StampTool.isObjectNonNull(object.stamp()), true)); + this(object, StampFactory.object(toType, exactType, nonNull || StampTool.isPointerNonNull(object.stamp()), true)); } @Override diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/TypeProfileProxyNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/TypeProfileProxyNode.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/TypeProfileProxyNode.java Mon Nov 24 13:53:14 2014 +0100 @@ -112,7 +112,7 @@ return this; } lastCheckedType = type; - JavaTypeProfile newProfile = this.profile.restrict(type, StampTool.isObjectNonNull(forValue)); + JavaTypeProfile newProfile = this.profile.restrict(type, StampTool.isPointerNonNull(forValue)); if (newProfile != this.profile) { Debug.log("Improved profile via static type information."); if (newProfile.getTypes().length == 0) { diff -r 1a21e7ced544 -r ca81508f2a19 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 Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IsNullNode.java Mon Nov 24 13:53:14 2014 +0100 @@ -22,7 +22,6 @@ */ package com.oracle.graal.nodes.calc; -import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodeinfo.*; @@ -57,18 +56,15 @@ @Override public boolean verify() { assertTrue(getValue() != null, "is null input must not be null"); - assertTrue(getValue().stamp() instanceof AbstractObjectStamp, "is null input must be an object"); + assertTrue(getValue().stamp() instanceof AbstractPointerStamp, "is null input must be a pointer"); return super.verify(); } @Override public ValueNode canonical(CanonicalizerTool tool, ValueNode forValue) { - JavaConstant constant = forValue.asJavaConstant(); - if (constant != null) { - assert constant.getKind() == Kind.Object; - return LogicConstantNode.forBoolean(constant.isNull()); - } - if (StampTool.isObjectNonNull(forValue.stamp())) { + if (StampTool.isPointerAlwaysNull(forValue)) { + return LogicConstantNode.tautology(); + } else if (StampTool.isPointerNonNull(forValue)) { return LogicConstantNode.contradiction(); } return this; diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ObjectEqualsNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ObjectEqualsNode.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ObjectEqualsNode.java Mon Nov 24 13:53:14 2014 +0100 @@ -24,11 +24,9 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodeinfo.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(shortName = "==") public class ObjectEqualsNode extends PointerEqualsNode implements Virtualizable { @@ -49,20 +47,6 @@ assert y.stamp() instanceof AbstractObjectStamp; } - @Override - public ValueNode canonical(CanonicalizerTool tool, ValueNode forX, ValueNode forY) { - ValueNode result = super.canonical(tool, forX, forY); - if (result != this) { - return result; - } - if (StampTool.isObjectAlwaysNull(forX)) { - return IsNullNode.create(forY); - } else if (StampTool.isObjectAlwaysNull(forY)) { - return IsNullNode.create(forX); - } - return this; - } - private void virtualizeNonVirtualComparison(State state, ValueNode other, VirtualizerTool tool) { if (!state.getVirtualObject().hasIdentity() && state.getVirtualObject().entryKind(0) == Kind.Boolean) { if (other.isConstant()) { diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/PointerEqualsNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/PointerEqualsNode.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/PointerEqualsNode.java Mon Nov 24 13:53:14 2014 +0100 @@ -64,6 +64,10 @@ return LogicConstantNode.tautology(); } else if (forX.stamp().alwaysDistinct(forY.stamp())) { return LogicConstantNode.contradiction(); + } else if (((AbstractPointerStamp) forX.stamp()).alwaysNull()) { + return IsNullNode.create(forY); + } else if (((AbstractPointerStamp) forY.stamp()).alwaysNull()) { + return IsNullNode.create(forX); } return super.canonical(tool, forX, forY); } diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadMethodNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadMethodNode.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadMethodNode.java Mon Nov 24 13:53:14 2014 +0100 @@ -102,7 +102,7 @@ * This really represent a misuse of LoadMethod since we're loading from a class which * isn't known to implement the original method but for now at least fold it away. */ - return ConstantNode.forConstant(JavaConstant.NULL_OBJECT, null); + return ConstantNode.forConstant(JavaConstant.NULL_POINTER, null); } else { return ConstantNode.forConstant(stamp(), newMethod.getEncoding(), tool.getMetaAccess()); } diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCastNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCastNode.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCastNode.java Mon Nov 24 13:53:14 2014 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -65,7 +65,7 @@ } protected UnsafeCastNode(ValueNode object, ResolvedJavaType toType, boolean exactType, boolean nonNull) { - this(object, toType.getKind() == Kind.Object ? StampFactory.object(toType, exactType, nonNull || StampTool.isObjectNonNull(object.stamp()), true) : StampFactory.forKind(toType.getKind())); + this(object, toType.getKind() == Kind.Object ? StampFactory.object(toType, exactType, nonNull || StampTool.isPointerNonNull(object.stamp()), true) : StampFactory.forKind(toType.getKind())); } @Override diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastDynamicNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastDynamicNode.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastDynamicNode.java Mon Nov 24 13:53:14 2014 +0100 @@ -95,7 +95,7 @@ @Override public ValueNode canonical(CanonicalizerTool tool, ValueNode forObject, ValueNode forHub) { - if (StampTool.isObjectAlwaysNull(forObject)) { + if (StampTool.isPointerAlwaysNull(forObject)) { return forObject; } if (forHub.isConstant()) { diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Mon Nov 24 13:53:14 2014 +0100 @@ -114,7 +114,7 @@ // This is a check cast that will always fail condition = LogicConstantNode.contradiction(graph()); newStamp = StampFactory.declaredTrusted(type); - } else if (StampTool.isObjectNonNull(object)) { + } else if (StampTool.isPointerNonNull(object)) { condition = graph().addWithoutUnique(InstanceOfNode.create(type, object, profile)); } else { if (profile != null && profile.getNullSeen() == TriState.FALSE) { @@ -161,7 +161,7 @@ return object(); } - if (StampTool.isObjectAlwaysNull(object())) { + if (StampTool.isPointerAlwaysNull(object())) { return object(); } diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java Mon Nov 24 13:53:14 2014 +0100 @@ -67,7 +67,7 @@ } public ValueNode canonical(CanonicalizerTool tool, ValueNode forObject) { - if (usages().isEmpty() && !isVolatile() && (isStatic() || StampTool.isObjectNonNull(forObject.stamp()))) { + if (usages().isEmpty() && !isVolatile() && (isStatic() || StampTool.isPointerNonNull(forObject.stamp()))) { return null; } MetaAccessProvider metaAccess = tool.getMetaAccess(); diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java Mon Nov 24 13:53:14 2014 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -193,7 +193,7 @@ LogicNode condition = graph().unique(InstanceOfNode.create(singleImplementor, receiver, getProfile())); GuardNode guard = graph().unique( GuardNode.create(condition, BeginNode.prevBegin(invoke().asNode()), DeoptimizationReason.OptimizedTypeCheckViolated, DeoptimizationAction.InvalidateRecompile, false, - JavaConstant.NULL_OBJECT)); + JavaConstant.NULL_POINTER)); PiNode piNode = graph().unique(PiNode.create(receiver, StampFactory.declaredNonNull(singleImplementor), guard)); arguments().set(0, piNode); setInvokeKind(InvokeKind.Virtual); diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java Mon Nov 24 13:53:14 2014 +0100 @@ -81,7 +81,7 @@ int idx = indexValue.isConstant() ? indexValue.asJavaConstant().asInt() : -1; if (idx >= 0 && idx < arrayState.getVirtualObject().entryCount()) { ResolvedJavaType componentType = arrayState.getVirtualObject().type().getComponentType(); - if (componentType.isPrimitive() || StampTool.isObjectAlwaysNull(value) || componentType.getSuperclass() == null || + if (componentType.isPrimitive() || StampTool.isPointerAlwaysNull(value) || componentType.getSuperclass() == null || (StampTool.typeOrNull(value) != null && componentType.isAssignableFrom(StampTool.typeOrNull(value)))) { tool.setVirtualEntry(arrayState, idx, value(), false); tool.delete(); diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampTool.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampTool.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampTool.java Mon Nov 24 13:53:14 2014 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -174,53 +174,53 @@ } /** - * Checks whether this {@link ValueNode} represents a {@linkplain Stamp#isLegal() legal} Object + * Checks whether this {@link ValueNode} represents a {@linkplain Stamp#isLegal() legal} pointer * value which is known to be always null. * * @param node the node to check * @return true if this node represents a legal object value which is known to be always null */ - public static boolean isObjectAlwaysNull(ValueNode node) { - return isObjectAlwaysNull(node.stamp()); + public static boolean isPointerAlwaysNull(ValueNode node) { + return isPointerAlwaysNull(node.stamp()); } /** - * Checks whether this {@link Stamp} represents a {@linkplain Stamp#isLegal() legal} Object + * Checks whether this {@link Stamp} represents a {@linkplain Stamp#isLegal() legal} pointer * stamp whose values are known to be always null. * * @param stamp the stamp to check * @return true if this stamp represents a legal object stamp whose values are known to be * always null */ - public static boolean isObjectAlwaysNull(Stamp stamp) { - if (stamp instanceof AbstractObjectStamp && stamp.isLegal()) { - return ((AbstractObjectStamp) stamp).alwaysNull(); + public static boolean isPointerAlwaysNull(Stamp stamp) { + if (stamp instanceof AbstractPointerStamp && stamp.isLegal()) { + return ((AbstractPointerStamp) stamp).alwaysNull(); } return false; } /** - * Checks whether this {@link ValueNode} represents a {@linkplain Stamp#isLegal() legal} Object + * Checks whether this {@link ValueNode} represents a {@linkplain Stamp#isLegal() legal} pointer * value which is known to never be null. * * @param node the node to check * @return true if this node represents a legal object value which is known to never be null */ - public static boolean isObjectNonNull(ValueNode node) { - return isObjectNonNull(node.stamp()); + public static boolean isPointerNonNull(ValueNode node) { + return isPointerNonNull(node.stamp()); } /** - * Checks whether this {@link Stamp} represents a {@linkplain Stamp#isLegal() legal} Object + * Checks whether this {@link Stamp} represents a {@linkplain Stamp#isLegal() legal} pointer * stamp whose values known to be always null. * * @param stamp the stamp to check * @return true if this stamp represents a legal object stamp whose values are known to be * always null */ - public static boolean isObjectNonNull(Stamp stamp) { - if (stamp instanceof AbstractObjectStamp && stamp.isLegal()) { - return ((AbstractObjectStamp) stamp).nonNull(); + public static boolean isPointerNonNull(Stamp stamp) { + if (stamp instanceof AbstractPointerStamp && stamp.isLegal()) { + return ((AbstractPointerStamp) stamp).nonNull(); } return false; } diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java Mon Nov 24 13:53:14 2014 +0100 @@ -235,11 +235,11 @@ } public boolean isNull(ValueNode value) { - return StampTool.isObjectAlwaysNull(value) || knownNull.contains(GraphUtil.unproxify(value)); + return StampTool.isPointerAlwaysNull(value) || knownNull.contains(GraphUtil.unproxify(value)); } public boolean isNonNull(ValueNode value) { - return StampTool.isObjectNonNull(value) || knownNonNull.contains(GraphUtil.unproxify(value)); + return StampTool.isPointerNonNull(value) || knownNonNull.contains(GraphUtil.unproxify(value)); } @Override diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java Mon Nov 24 13:53:14 2014 +0100 @@ -121,7 +121,7 @@ private void processGuard(Node node) { GuardNode guard = (GuardNode) node; - if (guard.isNegated() && guard.condition() instanceof IsNullNode && (guard.getSpeculation() == null || guard.getSpeculation().equals(JavaConstant.NULL_OBJECT))) { + if (guard.isNegated() && guard.condition() instanceof IsNullNode && (guard.getSpeculation() == null || guard.getSpeculation().equals(JavaConstant.NULL_POINTER))) { ValueNode obj = ((IsNullNode) guard.condition()).getValue(); nullGuarded.put(obj, guard); } diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java Mon Nov 24 13:53:14 2014 +0100 @@ -154,7 +154,7 @@ handle.safeDelete(); return result; } else { - GuardNode newGuard = graph.unique(GuardNode.create(condition, guardAnchor, deoptReason, action, negated, JavaConstant.NULL_OBJECT)); + GuardNode newGuard = graph.unique(GuardNode.create(condition, guardAnchor, deoptReason, action, negated, JavaConstant.NULL_POINTER)); if (OptEliminateGuards.getValue()) { activeGuards.markAndGrow(newGuard); } diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/UseTrappingNullChecksPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/UseTrappingNullChecksPhase.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/UseTrappingNullChecksPhase.java Mon Nov 24 13:53:14 2014 +0100 @@ -100,7 +100,7 @@ for (AbstractEndNode end : merge.cfgPredecessors().snapshot()) { ValueNode thisReason = reasons != null ? reasons.get(index) : reason; ValueNode thisSpeculation = speculations != null ? speculations.get(index++) : speculation; - if (!thisReason.isConstant() || !thisSpeculation.isConstant() || !thisSpeculation.asConstant().equals(JavaConstant.NULL_OBJECT)) { + if (!thisReason.isConstant() || !thisSpeculation.isConstant() || !thisSpeculation.asConstant().equals(JavaConstant.NULL_POINTER)) { continue; } DeoptimizationReason deoptimizationReason = metaAccessProvider.decodeDeoptReason(thisReason.asJavaConstant()); @@ -113,7 +113,7 @@ if (deoptimizationReason != DeoptimizationReason.NullCheckException && deoptimizationReason != DeoptimizationReason.UnreachedCode) { return; } - if (speculation != null && !speculation.equals(JavaConstant.NULL_OBJECT)) { + if (speculation != null && !speculation.equals(JavaConstant.NULL_POINTER)) { return; } if (predecessor instanceof MergeNode) { diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/CheckCastReduction.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/CheckCastReduction.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/CheckCastReduction.java Mon Nov 24 13:53:14 2014 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -111,7 +111,7 @@ // --------- checkCast deemed redundant by subject-stamp alone --------- // --------- in particular due to stamp informing always null ---------- - boolean isRedundantPerStamp = StampTool.isObjectAlwaysNull(subject) || (subjectType != null && toType.isAssignableFrom(subjectType)); + boolean isRedundantPerStamp = StampTool.isPointerAlwaysNull(subject) || (subjectType != null && toType.isAssignableFrom(subjectType)); if (isRedundantPerStamp) { metricCheckCastRemoved.increment(); checkCast.replaceAtUsages(subject); @@ -119,7 +119,7 @@ return; } - assert !StampTool.isObjectAlwaysNull(subject) : "Null as per stamp subjects should have been handled above"; + assert !StampTool.isPointerAlwaysNull(subject) : "Null as per stamp subjects should have been handled above"; // --------- checkCast deemed unsatisfiable by subject-stamp alone --------- if (state.knownNotToPassCheckCast(subject, toType)) { diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/EquationalReasoner.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/EquationalReasoner.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/EquationalReasoner.java Mon Nov 24 13:53:14 2014 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -575,7 +575,7 @@ if (FlowUtil.isLiteralNode(object)) { return object; } - if (StampTool.isObjectAlwaysNull(object.stamp())) { + if (StampTool.isPointerAlwaysNull(object.stamp())) { return object; } @@ -696,7 +696,7 @@ if (anchor == null) { return null; } - if (object instanceof GuardedNode && StampTool.isObjectAlwaysNull(object.stamp())) { + if (object instanceof GuardedNode && StampTool.isPointerAlwaysNull(object.stamp())) { return (PiNode) object; } // notice nullConstant is wrapped, not object diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/GuardingPiReduction.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/GuardingPiReduction.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/GuardingPiReduction.java Mon Nov 24 13:53:14 2014 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -214,7 +214,7 @@ /* * GuardingPiNode succeeds if payload null */ - ValueNode replacement = StampTool.isObjectAlwaysNull(payload) ? payload : reasoner.nonTrivialNull(payload); + ValueNode replacement = StampTool.isPointerAlwaysNull(payload) ? payload : reasoner.nonTrivialNull(payload); if (replacement != null) { // replacement == null means !isKnownNull(payload) removeGuardingPiNode(envelope, replacement); @@ -274,7 +274,7 @@ return true; } - if (StampTool.isObjectNonNull(payload)) { + if (StampTool.isPointerNonNull(payload)) { // payload needs no downcasting, it satisfies as-is the GuardingPiNode's condition. if (precisionLoss(envelope, payload)) { /* @@ -334,7 +334,7 @@ return false; } - if (StampTool.isObjectAlwaysNull(d)) { + if (StampTool.isPointerAlwaysNull(d)) { removeGuardingPiNode(envelope, d); return true; } diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/State.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/State.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/State.java Mon Nov 24 13:53:14 2014 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -336,7 +336,7 @@ */ public boolean isNull(ValueNode object) { assert FlowUtil.hasLegalObjectStamp(object); - if (StampTool.isObjectAlwaysNull(object)) { + if (StampTool.isPointerAlwaysNull(object)) { return true; } ValueNode scrutinee = GraphUtil.unproxify(object); @@ -364,7 +364,7 @@ */ public boolean isNonNull(ValueNode object) { assert FlowUtil.hasLegalObjectStamp(object); - if (StampTool.isObjectNonNull(object)) { + if (StampTool.isPointerNonNull(object)) { return true; } Witness w = typeInfo(object); @@ -847,7 +847,7 @@ */ public GuardingNode nonTrivialNullAnchor(ValueNode object) { assert FlowUtil.hasLegalObjectStamp(object); - if (StampTool.isObjectAlwaysNull(object)) { + if (StampTool.isPointerAlwaysNull(object)) { return null; } ValueNode scrutinee = GraphUtil.unproxify(object); diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java Mon Nov 24 13:53:14 2014 +0100 @@ -500,7 +500,7 @@ assert !callTarget.isStatic() : callTarget.targetMethod(); StructuredGraph graph = callTarget.graph(); ValueNode firstParam = callTarget.arguments().get(0); - if (firstParam.getKind() == Kind.Object && !StampTool.isObjectNonNull(firstParam)) { + if (firstParam.getKind() == Kind.Object && !StampTool.isPointerNonNull(firstParam)) { IsNullNode condition = graph.unique(IsNullNode.create(firstParam)); Stamp stamp = firstParam.stamp().join(objectNonNull()); GuardingPiNode nonNullReceiver = graph.add(GuardingPiNode.create(firstParam, condition, true, NullCheckException, InvalidateReprofile, stamp)); diff -r 1a21e7ced544 -r ca81508f2a19 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java Mon Nov 24 13:20:02 2014 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java Mon Nov 24 13:53:14 2014 +0100 @@ -178,7 +178,7 @@ ValueNode value = storeIndexed.value(); ValueNode array = storeIndexed.array(); FixedWithNextNode checkCastNode = null; - if (elementKind == Kind.Object && !StampTool.isObjectAlwaysNull(value)) { + if (elementKind == Kind.Object && !StampTool.isPointerAlwaysNull(value)) { /* Array store check. */ ResolvedJavaType arrayType = StampTool.typeOrNull(array); if (arrayType != null && StampTool.isExactType(array)) { @@ -708,7 +708,7 @@ } protected GuardingNode createNullCheck(ValueNode object, FixedNode before, LoweringTool tool) { - if (StampTool.isObjectNonNull(object)) { + if (StampTool.isPointerNonNull(object)) { return null; } return tool.createGuard(before, before.graph().unique(IsNullNode.create(object)), DeoptimizationReason.NullCheckException, DeoptimizationAction.InvalidateReprofile, true);