# HG changeset patch # User Doug Simon # Date 1415301287 -3600 # Node ID 5415422cb32f821210253749c09b0a23da503043 # Parent e7d219e9d01f8b5406dd490f386c5913ccc94680# Parent f1a988d9213ff22e6be27b4cffa5290bdbd46468 Merge. diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Remote.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Remote.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Remote.java Thu Nov 06 20:14:47 2014 +0100 @@ -22,9 +22,19 @@ */ package com.oracle.graal.api.meta; +import java.lang.annotation.*; + /** * Marker interface for classes whose values are proxied during replay compilation capture or remote * compilation. */ public interface Remote { + + /** + * Denotes a method whose return value is determined solely by its parameter values. + */ + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + public @interface PureFunction { + } } diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCompare.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCompare.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCompare.java Thu Nov 06 20:14:47 2014 +0100 @@ -55,7 +55,8 @@ // compressed null masm.testl(asRegister(x), asRegister(x)); } else if (y instanceof HotSpotObjectConstant) { - if (HotSpotObjectConstantImpl.isCompressed(y)) { + HotSpotObjectConstant yConst = (HotSpotObjectConstant) y; + if (yConst.isCompressed()) { // compressed oop crb.recordInlineDataInCode(y); masm.cmpl(asRegister(x), 0xDEADDEAD); @@ -96,7 +97,8 @@ // compressed null masm.cmpl(address.toAddress(), 0); } else if (y instanceof HotSpotObjectConstant) { - if (HotSpotObjectConstantImpl.isCompressed(y) && crb.target.inlineObjects) { + HotSpotObjectConstant yConst = (HotSpotObjectConstant) y; + if (yConst.isCompressed() && crb.target.inlineObjects) { // compressed oop crb.recordInlineDataInCode(y); masm.cmpl(address.toAddress(), 0xDEADDEAD); diff -r f1a988d9213f -r 5415422cb32f 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 Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java Thu Nov 06 20:14:47 2014 +0100 @@ -604,7 +604,7 @@ if (HotSpotCompressedNullConstant.COMPRESSED_NULL.equals(c)) { return true; } else if (c instanceof HotSpotObjectConstant) { - return HotSpotObjectConstantImpl.isCompressed(c); + return ((HotSpotObjectConstant) c).isCompressed(); } else { return super.canInlineConstant(c); } diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotMove.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotMove.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotMove.java Thu Nov 06 20:14:47 2014 +0100 @@ -62,7 +62,7 @@ masm.movl((AMD64Address) crb.asAddress(result), 0); } } else if (input instanceof HotSpotObjectConstant) { - boolean compressed = HotSpotObjectConstantImpl.isCompressed(input); + boolean compressed = ((HotSpotObjectConstant) input).isCompressed(); if (crb.target.inlineObjects) { crb.recordInlineDataInCode(input); if (isRegister(result)) { @@ -135,7 +135,8 @@ // compressed null masm.movl(address.toAddress(), 0); } else if (input instanceof HotSpotObjectConstant) { - if (HotSpotObjectConstantImpl.isCompressed(input) && crb.target.inlineObjects) { + HotSpotObjectConstant c = (HotSpotObjectConstant) input; + if (c.isCompressed() && crb.target.inlineObjects) { // compressed oop crb.recordInlineDataInCode(input); masm.movl(address.toAddress(), 0xDEADDEAD); diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotAssembler.java --- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotAssembler.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotAssembler.java Thu Nov 06 20:14:47 2014 +0100 @@ -28,6 +28,7 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.asm.hsail.*; +import com.oracle.graal.compiler.common.*; import com.oracle.graal.hotspot.meta.*; /** @@ -39,6 +40,22 @@ super(target); } + // This means the HSAIL backend cannot (currently) be executed + // in remote/replay compilation mode. + private static Field objectField; + + private static Object getObject(JavaConstant src) { + try { + if (objectField == null) { + objectField = HotSpotObjectConstantImpl.class.getDeclaredField("object"); + } + return objectField.get(src); + } catch (Exception e) { + throw new GraalInternalError(e); + } + + } + @Override public final void mov(Register a, JavaConstant src) { String regName = "$d" + a.encoding(); @@ -46,7 +63,8 @@ if (src.isNull()) { emitString("mov_b64 " + regName + ", 0x0; // null object"); } else { - Object obj = HotSpotObjectConstantImpl.asObject(src); + assert src instanceof HotSpotObjectConstantImpl; + Object obj = getObject(src); // Get a JNI reference handle to the object. long refHandle = OkraUtil.getRefHandle(obj); // Get the clasname of the object for emitting a comment. diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLIRGenerator.java --- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLIRGenerator.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLIRGenerator.java Thu Nov 06 20:14:47 2014 +0100 @@ -235,7 +235,7 @@ protected HSAILLIRInstruction createMove(AllocatableValue dst, Value src) { if (HotSpotCompressedNullConstant.COMPRESSED_NULL.equals(src)) { return new MoveToRegOp(Kind.Int, dst, JavaConstant.INT_0); - } else if (src instanceof HotSpotObjectConstant && HotSpotObjectConstantImpl.isCompressed((JavaConstant) src)) { + } else if (src instanceof HotSpotObjectConstant && ((HotSpotObjectConstant) src).isCompressed()) { Variable uncompressed = newVariable(LIRKind.reference(Kind.Object)); append(new MoveToRegOp(Kind.Object, uncompressed, src)); CompressEncoding oopEncoding = config.getOopEncoding(); diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot.server/src/com/oracle/graal/hotspot/server/ReplacingStreams.java --- a/graal/com.oracle.graal.hotspot.server/src/com/oracle/graal/hotspot/server/ReplacingStreams.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot.server/src/com/oracle/graal/hotspot/server/ReplacingStreams.java Thu Nov 06 20:14:47 2014 +0100 @@ -30,7 +30,6 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.hotspot.logging.*; -import com.oracle.graal.hotspot.meta.*; public class ReplacingStreams { @@ -147,7 +146,7 @@ } /** - * Replaces certain cir objects that cannot easily be made Serializable. + * Replaces certain objects that cannot easily be made Serializable. */ public class ReplacingOutputStream extends ObjectOutputStream { @@ -169,29 +168,9 @@ return createRemoteCallPlaceholder(obj); } - // is the object a constant of object type? - if (obj.getClass() == JavaConstant.class) { - JavaConstant constant = (JavaConstant) obj; - if (constant.getKind() != Kind.Object) { - return obj; - } - Object contents = HotSpotObjectConstantImpl.asObject(constant); - if (contents == null) { - return obj; - } - // don't replace if the object already is a placeholder - if (contents instanceof Placeholder || contents instanceof Long) { - return obj; - } - placeholder = objectMap.get(contents); - if (placeholder != null) { - return HotSpotObjectConstantImpl.forObject(placeholder); - } - if (contents instanceof Remote) { - return HotSpotObjectConstantImpl.forObject(createRemoteCallPlaceholder(contents)); - } - return HotSpotObjectConstantImpl.forObject(createDummyPlaceholder(contents)); - } + // Remote object constants must implement Remote + assert !(obj instanceof JavaConstant) || ((JavaConstant) obj).getKind() != Kind.Object; + return obj; } } @@ -203,10 +182,4 @@ objectList.add(obj); return new NewRemoteCallPlaceholder(ProxyUtil.getAllInterfaces(obj.getClass())); } - - public Object createDummyPlaceholder(Object obj) { - objectMap.put(obj, new Placeholder(objectList.size())); - objectList.add(obj); - return new NewDummyPlaceholder(); - } } diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/AheadOfTimeCompilationTest.java --- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/AheadOfTimeCompilationTest.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/AheadOfTimeCompilationTest.java Thu Nov 06 20:14:47 2014 +0100 @@ -104,9 +104,9 @@ NodeIterable filter = getConstantNodes(result); assertDeepEquals(1, filter.count()); - Object mirror = HotSpotObjectConstantImpl.asObject(filter.first().asJavaConstant()); - assertDeepEquals(Class.class, mirror.getClass()); - assertDeepEquals(AheadOfTimeCompilationTest.class, mirror); + HotSpotObjectConstantImpl c = (HotSpotObjectConstantImpl) filter.first().asJavaConstant(); + Assert.assertEquals(Class.class, c.getObjectClass()); + Assert.assertTrue(c.isEqualTo(AheadOfTimeCompilationTest.class)); assertDeepEquals(0, result.getNodes(FloatingReadNode.class).count()); assertDeepEquals(0, result.getNodes().filter(ReadNode.class).count()); @@ -132,9 +132,9 @@ StructuredGraph result = compile("getPrimitiveClassObject", false); NodeIterable filter = getConstantNodes(result); assertDeepEquals(1, filter.count()); - Object mirror = HotSpotObjectConstantImpl.asObject(filter.first().asJavaConstant()); - assertDeepEquals(Class.class, mirror.getClass()); - assertDeepEquals(Integer.TYPE, mirror); + HotSpotObjectConstantImpl c = (HotSpotObjectConstantImpl) filter.first().asJavaConstant(); + Assert.assertEquals(Class.class, c.getObjectClass()); + Assert.assertTrue(c.isEqualTo(Integer.TYPE)); assertDeepEquals(0, result.getNodes(FloatingReadNode.class).count()); assertDeepEquals(0, result.getNodes().filter(ReadNode.class).count()); @@ -160,9 +160,9 @@ NodeIterable filter = getConstantNodes(result); assertDeepEquals(1, filter.count()); - Object mirror = HotSpotObjectConstantImpl.asObject(filter.first().asJavaConstant()); - assertDeepEquals(String.class, mirror.getClass()); - assertDeepEquals("test string", mirror); + HotSpotObjectConstantImpl c = (HotSpotObjectConstantImpl) filter.first().asJavaConstant(); + Assert.assertEquals(String.class, c.getObjectClass()); + Assert.assertTrue(c.isEqualTo("test string")); assertDeepEquals(0, result.getNodes(FloatingReadNode.class).count()); assertDeepEquals(0, result.getNodes().filter(ReadNode.class).count()); @@ -193,7 +193,9 @@ assertDeepEquals(1, getConstantNodes(result).count()); ConstantNode constant = getConstantNodes(result).first(); assertDeepEquals(Kind.Object, constant.getKind()); - assertDeepEquals(Boolean.TRUE, HotSpotObjectConstantImpl.asObject(constant.asJavaConstant())); + + HotSpotObjectConstantImpl c = (HotSpotObjectConstantImpl) constant.asJavaConstant(); + Assert.assertTrue(c.isEqualTo(Boolean.TRUE)); } private StructuredGraph compile(String test, boolean compileAOT) { diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCodeCacheProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCodeCacheProvider.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCodeCacheProvider.java Thu Nov 06 20:14:47 2014 +0100 @@ -22,6 +22,8 @@ */ package com.oracle.graal.hotspot.meta; +import static com.oracle.graal.hotspot.meta.HotSpotCompressedNullConstant.*; + import java.lang.reflect.*; import java.util.*; @@ -264,7 +266,8 @@ boolean compressed; long raw; if (constant instanceof HotSpotObjectConstant) { - compressed = HotSpotObjectConstantImpl.isCompressed(constant); + HotSpotObjectConstant c = (HotSpotObjectConstant) vmConstant; + compressed = c.isCompressed(); raw = 0xDEADDEADDEADDEADL; } else if (constant instanceof HotSpotMetaspaceConstant) { HotSpotMetaspaceConstantImpl meta = (HotSpotMetaspaceConstantImpl) constant; @@ -288,7 +291,7 @@ }; } } else if (JavaConstant.isNull(constant)) { - boolean compressed = HotSpotObjectConstantImpl.isCompressed(constant); + boolean compressed = COMPRESSED_NULL.equals(constant); size = target.getSizeInBytes(compressed ? Kind.Int : target.wordKind); builder = DataBuilder.zero(size); } else if (constant instanceof PrimitiveConstant) { diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotConstantReflectionProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotConstantReflectionProvider.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotConstantReflectionProvider.java Thu Nov 06 20:14:47 2014 +0100 @@ -53,7 +53,7 @@ return null; } - Object arrayObject = HotSpotObjectConstantImpl.asObject(array); + Object arrayObject = ((HotSpotObjectConstantImpl) array).object(); if (!arrayObject.getClass().isArray()) { return null; } @@ -65,7 +65,7 @@ Object base; long displacement; if (baseConstant.getKind() == Kind.Object) { - base = HotSpotObjectConstantImpl.asObject(baseConstant); + base = ((HotSpotObjectConstantImpl) baseConstant).object(); displacement = initialDisplacement; if (base == null) { return null; @@ -132,7 +132,7 @@ Object base; long displacement; if (baseConstant.getKind() == Kind.Object) { - base = HotSpotObjectConstantImpl.asObject(baseConstant); + base = ((HotSpotObjectConstantImpl) baseConstant).object(); displacement = initialDisplacement; if (base == null) { return null; @@ -197,7 +197,7 @@ if (array.getKind() != Kind.Object || array.isNull()) { return null; } - Object a = HotSpotObjectConstantImpl.asObject(array); + Object a = ((HotSpotObjectConstantImpl) array).object(); if (index < 0 || index >= Array.getLength(a)) { return null; @@ -223,13 +223,13 @@ if (!source.getKind().isObject()) { return null; } - return JavaConstant.forBoxedPrimitive(HotSpotObjectConstantImpl.asObject(source)); + return JavaConstant.forBoxedPrimitive(((HotSpotObjectConstantImpl) source).object()); } @Override public ResolvedJavaType asJavaType(JavaConstant constant) { if (constant instanceof HotSpotObjectConstant) { - Object obj = HotSpotObjectConstantImpl.asObject(constant); + Object obj = ((HotSpotObjectConstantImpl) constant).object(); if (obj instanceof Class) { return runtime.getHostProviders().getMetaAccess().lookupJavaType((Class) obj); } diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaAccessProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaAccessProvider.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaAccessProvider.java Thu Nov 06 20:14:47 2014 +0100 @@ -62,7 +62,7 @@ if (constant.isNull() || !(constant instanceof HotSpotObjectConstant)) { return null; } - Object o = HotSpotObjectConstantImpl.asObject(constant); + Object o = ((HotSpotObjectConstantImpl) constant).object(); return fromObjectClass(o.getClass()); } @@ -308,7 +308,7 @@ } else { if (lookupJavaType.isArray()) { // TODO(tw): Add compressed pointer support. - int length = Array.getLength(HotSpotObjectConstantImpl.asObject(constant)); + int length = Array.getLength(((HotSpotObjectConstantImpl) constant).object()); ResolvedJavaType elementType = lookupJavaType.getComponentType(); Kind elementKind = elementType.getKind(); final int headerSize = HotSpotGraalRuntime.getArrayBaseOffset(elementKind); diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java Thu Nov 06 20:14:47 2014 +0100 @@ -22,7 +22,12 @@ */ package com.oracle.graal.hotspot.meta; +import java.lang.invoke.*; + +import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.graph.*; +import com.oracle.graal.lir.*; /** * Represents a constant non-{@code null} object reference, within the compiler and across the @@ -34,4 +39,68 @@ JavaConstant uncompress(); + boolean isCompressed(); + + /** + * Gets the result of {@link Class#getClassLoader()} for the {@link Class} object represented by + * this constant. + * + * @return {@code null} if this constant does not represent a {@link Class} object + */ + @PureFunction + JavaConstant getClassLoader(); + + /** + * Gets the {@linkplain System#identityHashCode(Object) identity} has code for the object + * represented by this constant. + */ + @PureFunction + int getIdentityHashCode(); + + /** + * Gets the result of {@link NodeClass#get(Class)} for the {@link Class} object represented by + * this constant. + * + * @return {@code null} if this constant does not represent a {@link Class} object + */ + JavaConstant getNodeClass(); + + /** + * Gets the result of {@link Class#getComponentType()} for the {@link Class} object represented + * by this constant. + * + * @return {@code null} if this constant does not represent a {@link Class} object + */ + JavaConstant getComponentType(); + + /** + * Gets the result of {@link Class#getSuperclass()} for the {@link Class} object represented by + * this constant. + * + * @return {@code null} if this constant does not represent a {@link Class} object + */ + JavaConstant getSuperclass(); + + /** + * Gets the result of {@link CallSite#getTarget()} for the {@link CallSite} object represented + * by this constant. + * + * @param assumptions used to register an assumption that the {@link CallSite}'s target does not + * change + * @return {@code null} if this constant does not represent a {@link CallSite} object + */ + JavaConstant getCallSiteTarget(Assumptions assumptions); + + /** + * Gets the result of {@link CompositeValueClass#get(Class)} for the {@link Class} object + * represented by this constant. + * + * @return {@code null} if this constant does not represent a {@link Class} object + */ + JavaConstant getCompositeValueClass(); + + /** + * Determines if this constant represents an {@linkplain String#intern() interned} string. + */ + boolean isInternedString(); } diff -r f1a988d9213f -r 5415422cb32f 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 Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstantImpl.java Thu Nov 06 20:14:47 2014 +0100 @@ -22,7 +22,14 @@ */ package com.oracle.graal.hotspot.meta; +import java.lang.invoke.*; + +import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.graph.*; +import com.oracle.graal.lir.*; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Represents a constant non-{@code null} object reference, within the compiler and across the @@ -48,14 +55,6 @@ } } - public static Object asObject(Constant constant) { - if (JavaConstant.isNull(constant)) { - return null; - } else { - return ((HotSpotObjectConstantImpl) constant).object; - } - } - public static Object asBoxedValue(Constant constant) { if (JavaConstant.isNull(constant)) { return null; @@ -66,14 +65,6 @@ } } - public static boolean isCompressed(Constant constant) { - if (JavaConstant.isNull(constant)) { - return HotSpotCompressedNullConstant.NULL_OBJECT.equals(constant); - } else { - return ((HotSpotObjectConstantImpl) constant).compressed; - } - } - private final Object object; private final boolean compressed; @@ -84,6 +75,32 @@ assert object != null; } + /** + * Package-private accessor for the object represented by this constant. + */ + Object object() { + return object; + } + + /** + * Determines if the object represented by this constant is {@link Object#equals(Object) equal} + * to a given object. + */ + public boolean isEqualTo(Object obj) { + return object.equals(obj); + } + + /** + * Gets the class of the object represented by this constant. + */ + public Class getObjectClass() { + return object.getClass(); + } + + public boolean isCompressed() { + return compressed; + } + public JavaConstant compress() { assert !compressed; return new HotSpotObjectConstantImpl(object, true); @@ -94,6 +111,76 @@ return new HotSpotObjectConstantImpl(object, false); } + public JavaConstant getClassLoader() { + if (object instanceof Class) { + /* + * This is an intrinsic for getClassLoader0, which occurs after any security checks. We + * can't call that directly so just call getClassLoader. + */ + return HotSpotObjectConstantImpl.forObject(((Class) object).getClassLoader()); + } + return null; + } + + public int getIdentityHashCode() { + return System.identityHashCode(object); + } + + public JavaConstant getNodeClass() { + if (object instanceof Class) { + return HotSpotObjectConstantImpl.forObject(NodeClass.get((Class) object)); + } + return null; + } + + public JavaConstant getComponentType() { + if (object instanceof Class) { + return HotSpotObjectConstantImpl.forObject(((Class) object).getComponentType()); + } + return null; + } + + public JavaConstant getSuperclass() { + if (object instanceof Class) { + return HotSpotObjectConstantImpl.forObject(((Class) object).getSuperclass()); + } + return null; + } + + public JavaConstant getCallSiteTarget(Assumptions assumptions) { + if (object instanceof CallSite) { + CallSite callSite = (CallSite) object; + MethodHandle target = callSite.getTarget(); + if (!(callSite instanceof ConstantCallSite)) { + if (assumptions == null || !assumptions.useOptimisticAssumptions()) { + return null; + } + assumptions.record(new Assumptions.CallSiteTargetValue(callSite, target)); + } + return HotSpotObjectConstantImpl.forObject(target); + } + return null; + } + + @SuppressWarnings("unchecked") + public JavaConstant getCompositeValueClass() { + if (object instanceof Class) { + Class c = (Class) object; + assert CompositeValueClass.class.isAssignableFrom(c); + return HotSpotObjectConstantImpl.forObject(CompositeValueClass.get(c)); + } + return null; + } + + @SuppressFBWarnings(value = "ES_COMPARING_STRINGS_WITH_EQ", justification = "reference equality is what we want") + public boolean isInternedString() { + if (object instanceof String) { + String s = (String) object; + return s.intern() == s; + } + return false; + } + @Override public boolean isNull() { return false; diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaFieldImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaFieldImpl.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaFieldImpl.java Thu Nov 06 20:14:47 2014 +0100 @@ -210,7 +210,7 @@ * have a non-default value. */ assert !isStatic(); - Object object = HotSpotObjectConstantImpl.asObject(receiver); + Object object = ((HotSpotObjectConstantImpl) receiver).object(); // Canonicalization may attempt to process an unsafe read before // processing a guard (e.g. a null check or a type check) for this read @@ -268,7 +268,7 @@ return null; } else { assert !isStatic(); - assert receiver.isNonNull() && isInObject(HotSpotObjectConstantImpl.asObject(receiver)); + assert receiver.isNonNull() && isInObject(((HotSpotObjectConstantImpl) receiver).object()); return runtime().getHostProviders().getConstantReflection().readUnsafeConstant(getKind(), receiver, offset); } } diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethodImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethodImpl.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethodImpl.java Thu Nov 06 20:14:47 2014 +0100 @@ -711,7 +711,7 @@ for (int i = 0; i < arguments.length; i++) { objArguments[i] = HotSpotObjectConstantImpl.asBoxedValue(arguments[i]); } - Object objReceiver = receiver != null ? HotSpotObjectConstantImpl.asObject(receiver) : null; + Object objReceiver = receiver != null ? ((HotSpotObjectConstantImpl) receiver).object() : null; try { Object objResult = javaMethod.invoke(objReceiver, objArguments); diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectTypeImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectTypeImpl.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectTypeImpl.java Thu Nov 06 20:14:47 2014 +0100 @@ -343,7 +343,7 @@ @Override public boolean isInstance(JavaConstant obj) { if (obj.getKind() == Kind.Object && !obj.isNull()) { - return mirror().isInstance(HotSpotObjectConstantImpl.asObject(obj)); + return mirror().isInstance(((HotSpotObjectConstantImpl) obj).object()); } return false; } diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSnippetReflectionProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSnippetReflectionProvider.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSnippetReflectionProvider.java Thu Nov 06 20:14:47 2014 +0100 @@ -34,7 +34,7 @@ @Override public Object asObject(JavaConstant constant) { - return HotSpotObjectConstantImpl.asObject(constant); + return ((HotSpotObjectConstantImpl) constant).object(); } @Override diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetClassLoader0Node.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetClassLoader0Node.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetClassLoader0Node.java Thu Nov 06 20:14:47 2014 +0100 @@ -22,6 +22,7 @@ */ package com.oracle.graal.hotspot.nodes; +import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.hotspot.meta.*; @@ -55,14 +56,10 @@ public Node canonical(CanonicalizerTool tool) { ValueNode javaClass = getJavaClass(); if (javaClass.isConstant()) { - Class c = (Class) HotSpotObjectConstantImpl.asObject(javaClass.asJavaConstant()); - if (c != null) { - /* - * This is an intrinsic for getClassLoader0, which occurs after any security checks. - * We can't call that directly so just call getClassLoader. - */ - ClassLoader classLoader = c.getClassLoader(); - return ConstantNode.forConstant(HotSpotObjectConstantImpl.forObject(classLoader), tool.getMetaAccess()); + HotSpotObjectConstant c = (HotSpotObjectConstant) javaClass.asJavaConstant(); + JavaConstant classLoader = c.getClassLoader(); + if (classLoader != null) { + return ConstantNode.forConstant(classLoader, tool.getMetaAccess()); } } return this; diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetComponentTypeNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetComponentTypeNode.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetComponentTypeNode.java Thu Nov 06 20:14:47 2014 +0100 @@ -22,6 +22,7 @@ */ package com.oracle.graal.hotspot.nodes; +import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.hotspot.meta.*; @@ -54,10 +55,10 @@ public Node canonical(CanonicalizerTool tool) { ValueNode javaClass = getJavaClass(); if (javaClass.isConstant()) { - Class c = (Class) HotSpotObjectConstantImpl.asObject(javaClass.asJavaConstant()); - if (c != null) { - Class componentType = c.getComponentType(); - return ConstantNode.forConstant(HotSpotObjectConstantImpl.forObject(componentType), tool.getMetaAccess()); + HotSpotObjectConstant c = (HotSpotObjectConstant) javaClass.asJavaConstant(); + JavaConstant componentType = c.getComponentType(); + if (componentType != null) { + return ConstantNode.forConstant(componentType, tool.getMetaAccess()); } } return this; diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetModifiersNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetModifiersNode.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetModifiersNode.java Thu Nov 06 20:14:47 2014 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.hotspot.nodes; +import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; -import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.hotspot.replacements.*; import com.oracle.graal.nodeinfo.*; import com.oracle.graal.nodes.*; @@ -54,9 +54,10 @@ public Node canonical(CanonicalizerTool tool) { ValueNode javaClass = getJavaClass(); if (javaClass.isConstant()) { - Class c = (Class) HotSpotObjectConstantImpl.asObject(javaClass.asJavaConstant()); - if (c != null) { - return ConstantNode.forInt(c.getModifiers()); + ConstantReflectionProvider constantReflection = tool.getConstantReflection(); + ResolvedJavaType type = constantReflection.asJavaType(javaClass.asJavaConstant()); + if (type != null) { + return ConstantNode.forInt(type.getModifiers()); } } return this; diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetSuperclassNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetSuperclassNode.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetSuperclassNode.java Thu Nov 06 20:14:47 2014 +0100 @@ -22,6 +22,7 @@ */ package com.oracle.graal.hotspot.nodes; +import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.hotspot.meta.*; @@ -54,10 +55,10 @@ public Node canonical(CanonicalizerTool tool) { ValueNode javaClass = getJavaClass(); if (javaClass.isConstant()) { - Class c = (Class) HotSpotObjectConstantImpl.asObject(javaClass.asJavaConstant()); - if (c != null) { - Class superclass = c.getSuperclass(); - return ConstantNode.forConstant(HotSpotObjectConstantImpl.forObject(superclass), tool.getMetaAccess()); + HotSpotObjectConstant c = (HotSpotObjectConstant) javaClass.asJavaConstant(); + JavaConstant superclass = c.getSuperclass(); + if (superclass != null) { + return ConstantNode.forConstant(superclass, tool.getMetaAccess()); } } return this; diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsArrayNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsArrayNode.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsArrayNode.java Thu Nov 06 20:14:47 2014 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.hotspot.nodes; +import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; -import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.hotspot.replacements.*; import com.oracle.graal.nodeinfo.*; import com.oracle.graal.nodes.*; @@ -54,9 +54,10 @@ public Node canonical(CanonicalizerTool tool) { ValueNode javaClass = getJavaClass(); if (javaClass.isConstant()) { - Class c = (Class) HotSpotObjectConstantImpl.asObject(javaClass.asJavaConstant()); - if (c != null) { - return ConstantNode.forBoolean(c.isArray()); + ConstantReflectionProvider constantReflection = tool.getConstantReflection(); + ResolvedJavaType type = constantReflection.asJavaType(javaClass.asJavaConstant()); + if (type != null) { + return ConstantNode.forBoolean(type.isArray()); } } return this; diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInterfaceNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInterfaceNode.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInterfaceNode.java Thu Nov 06 20:14:47 2014 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.hotspot.nodes; +import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; -import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.hotspot.replacements.*; import com.oracle.graal.nodeinfo.*; import com.oracle.graal.nodes.*; @@ -54,9 +54,10 @@ public Node canonical(CanonicalizerTool tool) { ValueNode javaClass = getJavaClass(); if (javaClass.isConstant()) { - Class c = (Class) HotSpotObjectConstantImpl.asObject(javaClass.asJavaConstant()); - if (c != null) { - return ConstantNode.forBoolean(c.isInterface()); + ConstantReflectionProvider constantReflection = tool.getConstantReflection(); + ResolvedJavaType type = constantReflection.asJavaType(javaClass.asJavaConstant()); + if (type != null) { + return ConstantNode.forBoolean(type.isInterface()); } } return this; diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsPrimitiveNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsPrimitiveNode.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsPrimitiveNode.java Thu Nov 06 20:14:47 2014 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.hotspot.nodes; +import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; -import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.hotspot.replacements.*; import com.oracle.graal.nodeinfo.*; import com.oracle.graal.nodes.*; @@ -54,9 +54,10 @@ public Node canonical(CanonicalizerTool tool) { ValueNode javaClass = getJavaClass(); if (javaClass.isConstant()) { - Class c = (Class) HotSpotObjectConstantImpl.asObject(javaClass.asJavaConstant()); - if (c != null) { - return ConstantNode.forBoolean(c.isPrimitive()); + ConstantReflectionProvider constantReflection = tool.getConstantReflection(); + ResolvedJavaType type = constantReflection.asJavaType(javaClass.asJavaConstant()); + if (type != null) { + return ConstantNode.forBoolean(type.isPrimitive()); } } return this; diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/AheadOfTimeVerificationPhase.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/AheadOfTimeVerificationPhase.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/AheadOfTimeVerificationPhase.java Thu Nov 06 20:14:47 2014 +0100 @@ -31,8 +31,6 @@ import com.oracle.graal.phases.*; import com.oracle.graal.phases.tiers.*; -import edu.umd.cs.findbugs.annotations.*; - /** * Checks for illegal object constants in a graph processed for AOT compilation. The only legal * object constants are {@linkplain String#intern() interned} strings as they will be installed in @@ -74,18 +72,12 @@ return StampTool.typeOrNull(node).getName().startsWith("Ljava/lang/invoke/BoundMethodHandle"); } - @SuppressFBWarnings(value = "ES_COMPARING_STRINGS_WITH_EQ", justification = "reference equality is what we want") private static boolean isInternedString(ConstantNode node) { if (!isObject(node)) { return false; } - Object o = HotSpotObjectConstantImpl.asObject(node.asJavaConstant()); - if (!(o instanceof String)) { - return false; - } - - String s = (String) o; - return s == s.intern(); + HotSpotObjectConstant c = (HotSpotObjectConstant) node.asConstant(); + return c.isInternedString(); } } diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/LoadJavaMirrorWithKlassPhase.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/LoadJavaMirrorWithKlassPhase.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/LoadJavaMirrorWithKlassPhase.java Thu Nov 06 20:14:47 2014 +0100 @@ -60,44 +60,48 @@ } private ValueNode getClassConstantReplacement(StructuredGraph graph, PhaseContext context, JavaConstant constant) { - if (constant instanceof HotSpotObjectConstant && HotSpotObjectConstantImpl.asObject(constant) instanceof Class) { - MetaAccessProvider metaAccess = context.getMetaAccess(); - ResolvedJavaType type = metaAccess.lookupJavaType((Class) HotSpotObjectConstantImpl.asObject(constant)); - JavaConstant klass; - LocationNode location; - if (type instanceof HotSpotResolvedObjectType) { - location = ConstantLocationNode.create(CLASS_MIRROR_LOCATION, Kind.Object, classMirrorOffset, graph); - klass = ((HotSpotResolvedObjectType) type).klass(); - } else { - /* - * Primitive classes are more difficult since they don't have a corresponding Klass* - * so get them from Class.TYPE for the java box type. - */ - HotSpotResolvedPrimitiveType primitive = (HotSpotResolvedPrimitiveType) type; - ResolvedJavaType boxingClass = metaAccess.lookupJavaType(primitive.getKind().toBoxedJavaClass()); - klass = ((HotSpotResolvedObjectType) boxingClass).klass(); - HotSpotResolvedJavaField[] a = (HotSpotResolvedJavaField[]) boxingClass.getStaticFields(); - HotSpotResolvedJavaField typeField = null; - for (HotSpotResolvedJavaField f : a) { - if (f.getName().equals("TYPE")) { - typeField = f; - break; + if (constant instanceof HotSpotObjectConstant) { + ConstantReflectionProvider constantReflection = context.getConstantReflection(); + ResolvedJavaType c = constantReflection.asJavaType(constant); + if (c != null) { + MetaAccessProvider metaAccess = context.getMetaAccess(); + ResolvedJavaType type = c; + JavaConstant klass; + LocationNode location; + if (type instanceof HotSpotResolvedObjectType) { + location = ConstantLocationNode.create(CLASS_MIRROR_LOCATION, Kind.Object, classMirrorOffset, graph); + klass = ((HotSpotResolvedObjectType) type).klass(); + } else { + /* + * Primitive classes are more difficult since they don't have a corresponding + * Klass* so get them from Class.TYPE for the java box type. + */ + HotSpotResolvedPrimitiveType primitive = (HotSpotResolvedPrimitiveType) type; + ResolvedJavaType boxingClass = metaAccess.lookupJavaType(primitive.getKind().toBoxedJavaClass()); + klass = ((HotSpotResolvedObjectType) boxingClass).klass(); + HotSpotResolvedJavaField[] a = (HotSpotResolvedJavaField[]) boxingClass.getStaticFields(); + HotSpotResolvedJavaField typeField = null; + for (HotSpotResolvedJavaField f : a) { + if (f.getName().equals("TYPE")) { + typeField = f; + break; + } } - } - if (typeField == null) { - throw new GraalInternalError("Can't find TYPE field in class"); + if (typeField == null) { + throw new GraalInternalError("Can't find TYPE field in class"); + } + location = ConstantLocationNode.create(FINAL_LOCATION, Kind.Object, typeField.offset(), graph); } - location = ConstantLocationNode.create(FINAL_LOCATION, Kind.Object, typeField.offset(), graph); - } - ConstantNode klassNode = ConstantNode.forConstant(klass, metaAccess, graph); + ConstantNode klassNode = ConstantNode.forConstant(klass, metaAccess, graph); - Stamp stamp = StampFactory.exactNonNull(metaAccess.lookupJavaType(Class.class)); - FloatingReadNode freadNode = graph.unique(FloatingReadNode.create(klassNode, location, null, stamp)); + Stamp stamp = StampFactory.exactNonNull(metaAccess.lookupJavaType(Class.class)); + FloatingReadNode freadNode = graph.unique(FloatingReadNode.create(klassNode, location, null, stamp)); - if (HotSpotObjectConstantImpl.isCompressed(constant)) { - return CompressionNode.compress(freadNode, oopEncoding); - } else { - return freadNode; + if (((HotSpotObjectConstant) constant).isCompressed()) { + return CompressionNode.compress(freadNode, oopEncoding); + } else { + return freadNode; + } } } return null; diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java Thu Nov 06 20:14:47 2014 +0100 @@ -22,8 +22,6 @@ */ package com.oracle.graal.hotspot.replacements; -import java.lang.invoke.*; - import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; @@ -51,15 +49,11 @@ private ConstantNode getConstantCallTarget(MetaAccessProvider metaAccess, Assumptions assumptions) { if (getCallSite().isConstant() && !getCallSite().isNullConstant()) { - CallSite callSite = (CallSite) HotSpotObjectConstantImpl.asObject(getCallSite().asJavaConstant()); - MethodHandle target = callSite.getTarget(); - if (!(callSite instanceof ConstantCallSite)) { - if (assumptions == null || !assumptions.useOptimisticAssumptions()) { - return null; - } - assumptions.record(new Assumptions.CallSiteTargetValue(callSite, target)); + HotSpotObjectConstant c = (HotSpotObjectConstant) getCallSite().asConstant(); + JavaConstant target = c.getCallSiteTarget(assumptions); + if (target != null) { + return ConstantNode.forConstant(target, metaAccess); } - return ConstantNode.forConstant(HotSpotObjectConstantImpl.forObject(target), metaAccess, graph()); } return null; } diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CompositeValueClassSubstitutions.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CompositeValueClassSubstitutions.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CompositeValueClassSubstitutions.java Thu Nov 06 20:14:47 2014 +0100 @@ -55,13 +55,13 @@ super(invoke); } - @SuppressWarnings("unchecked") @Override protected JavaConstant evaluate(JavaConstant param, MetaAccessProvider metaAccess) { if (param.isNull() || ImmutableCode.getValue()) { return null; } - return HotSpotObjectConstantImpl.forObject(CompositeValueClass.get((Class) HotSpotObjectConstantImpl.asObject(param))); + HotSpotObjectConstant c = (HotSpotObjectConstant) param; + return c.getCompositeValueClass(); } } diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotNodeClassSubstitutions.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotNodeClassSubstitutions.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotNodeClassSubstitutions.java Thu Nov 06 20:14:47 2014 +0100 @@ -60,7 +60,8 @@ if (param.isNull() || ImmutableCode.getValue()) { return null; } - return HotSpotObjectConstantImpl.forObject(NodeClass.get((Class) HotSpotObjectConstantImpl.asObject(param))); + HotSpotObjectConstant c = (HotSpotObjectConstant) param; + return c.getNodeClass(); } } diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/SystemIdentityHashCodeNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/SystemIdentityHashCodeNode.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/SystemIdentityHashCodeNode.java Thu Nov 06 20:14:47 2014 +0100 @@ -43,6 +43,10 @@ @Override protected JavaConstant evaluate(JavaConstant param, MetaAccessProvider metaAccess) { - return ImmutableCode.getValue() || param.isNull() ? null : JavaConstant.forInt(System.identityHashCode(HotSpotObjectConstantImpl.asObject(param))); + if (ImmutableCode.getValue() || param.isNull()) { + return null; + } + HotSpotObjectConstant c = (HotSpotObjectConstant) param; + return JavaConstant.forInt(c.getIdentityHashCode()); } } diff -r f1a988d9213f -r 5415422cb32f graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/Replacements.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/Replacements.java Thu Nov 06 16:27:21 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/Replacements.java Thu Nov 06 20:14:47 2014 +0100 @@ -33,7 +33,7 @@ /** * Interface for managing replacements. */ -public interface Replacements extends Remote { +public interface Replacements extends Remote{ /** * Gets the snippet graph derived from a given method.