# HG changeset patch # User Doug Simon # Date 1415278210 -3600 # Node ID ffcbc50063a38c86c4119b8e89bc64b527af2cb1 # Parent 420161aee8400cd57743631b8fd998bfb50f7a63 added HotSpotObjectConstant.getCallSiteTarget() diff -r 420161aee840 -r ffcbc50063a3 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 13:48:01 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java Thu Nov 06 13:50:10 2014 +0100 @@ -22,6 +22,9 @@ */ 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.*; @@ -74,4 +77,15 @@ * @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); + } diff -r 420161aee840 -r ffcbc50063a3 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 13:48:01 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstantImpl.java Thu Nov 06 13:50:10 2014 +0100 @@ -22,6 +22,9 @@ */ 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.*; @@ -131,6 +134,21 @@ 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; + } + @Override public boolean isNull() { return false; diff -r 420161aee840 -r ffcbc50063a3 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 13:48:01 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java Thu Nov 06 13:50:10 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; }