Mercurial > hg > truffle
changeset 18286:ffcbc50063a3
added HotSpotObjectConstant.getCallSiteTarget()
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Thu, 06 Nov 2014 13:50:10 +0100 |
parents | 420161aee840 |
children | b7461f7fa8a0 |
files | graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstantImpl.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java |
diffstat | 3 files changed, 36 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- 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); + }
--- 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;
--- 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; }