# HG changeset patch # User Andreas Woess # Date 1426602969 -3600 # Node ID aa66d0a6f9dc911aa3ac74067fe6f93603f51ece # Parent 3ac6b576ef70efc5fb54f142137c14a905b6b352 MethodHandleNode: record unique concrete method assumptions diff -r 3ac6b576ef70 -r aa66d0a6f9dc graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MethodHandleNode.java --- 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 concreteMethod = receiverType.findUniqueConcreteMethod(target); if (concreteMethod != null) { + graph().getAssumptions().record(concreteMethod); return createTargetInvokeNode(concreteMethod.getResult(), intrinsicMethod); } } - } - - if (target.canBeStaticallyBound()) { - return createTargetInvokeNode(target, intrinsicMethod); - } - - AssumptionResult concreteMethod = target.getDeclaringClass().findUniqueConcreteMethod(target); - if (concreteMethod != null) { - return createTargetInvokeNode(concreteMethod.getResult(), intrinsicMethod); + } else { + AssumptionResult concreteMethod = target.getDeclaringClass().findUniqueConcreteMethod(target); + if (concreteMethod != null) { + graph().getAssumptions().record(concreteMethod); + return createTargetInvokeNode(concreteMethod.getResult(), intrinsicMethod); + } } return null;