Mercurial > hg > graal-jvmci-8
changeset 19891:aa66d0a6f9dc
MethodHandleNode: record unique concrete method assumptions
author | Andreas Woess <andreas.woess@oracle.com> |
---|---|
date | Tue, 17 Mar 2015 15:36:09 +0100 |
parents | 3ac6b576ef70 |
children | 08233b1ae932 |
files | graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MethodHandleNode.java |
diffstat | 1 files changed, 11 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MethodHandleNode.java Tue Mar 17 14:40:35 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MethodHandleNode.java Tue Mar 17 15:36:09 2015 +0100 @@ -180,24 +180,26 @@ maybeCastArgument(receiverSkip + index, parameterType); } + if (target.canBeStaticallyBound()) { + return createTargetInvokeNode(target, intrinsicMethod); + } + // Try to get the most accurate receiver type if (intrinsicMethod == IntrinsicMethod.LINK_TO_VIRTUAL || intrinsicMethod == IntrinsicMethod.LINK_TO_INTERFACE) { ResolvedJavaType receiverType = StampTool.typeOrNull(getReceiver().stamp()); if (receiverType != null) { AssumptionResult<ResolvedJavaMethod> concreteMethod = receiverType.findUniqueConcreteMethod(target); if (concreteMethod != null) { + graph().getAssumptions().record(concreteMethod); return createTargetInvokeNode(concreteMethod.getResult(), intrinsicMethod); } } - } - - if (target.canBeStaticallyBound()) { - return createTargetInvokeNode(target, intrinsicMethod); - } - - AssumptionResult<ResolvedJavaMethod> concreteMethod = target.getDeclaringClass().findUniqueConcreteMethod(target); - if (concreteMethod != null) { - return createTargetInvokeNode(concreteMethod.getResult(), intrinsicMethod); + } else { + AssumptionResult<ResolvedJavaMethod> concreteMethod = target.getDeclaringClass().findUniqueConcreteMethod(target); + if (concreteMethod != null) { + graph().getAssumptions().record(concreteMethod); + return createTargetInvokeNode(concreteMethod.getResult(), intrinsicMethod); + } } return null;