Mercurial > hg > graal-compiler
diff graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java @ 22531:ce2b71115ade
Invert logic for recording the assumptions of an AssumptionResult to Assumptions; this allows using assumption-free AssumptionResults when compiling without speculative optimizations
author | Christian Wimmer <christian.wimmer@oracle.com> |
---|---|
date | Fri, 28 Aug 2015 11:23:08 -0700 |
parents | af6cc957bf04 |
children | b00cc0475f31 |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java Fri Aug 28 11:18:35 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java Fri Aug 28 11:23:08 2015 -0700 @@ -129,22 +129,21 @@ if (resolvedMethod != null && (resolvedMethod.canBeStaticallyBound() || StampTool.isExactType(receiver) || type.isArray())) { return resolvedMethod; } + Assumptions assumptions = receiver.graph().getAssumptions(); - if (assumptions != null) { - AssumptionResult<ResolvedJavaType> leafConcreteSubtype = type.findLeafConcreteSubtype(); - if (leafConcreteSubtype != null) { - ResolvedJavaMethod methodFromUniqueType = leafConcreteSubtype.getResult().resolveConcreteMethod(targetMethod, contextType); - if (methodFromUniqueType != null) { - assumptions.record(leafConcreteSubtype); - return methodFromUniqueType; - } + AssumptionResult<ResolvedJavaType> leafConcreteSubtype = type.findLeafConcreteSubtype(); + if (leafConcreteSubtype != null && leafConcreteSubtype.canRecordTo(assumptions)) { + ResolvedJavaMethod methodFromUniqueType = leafConcreteSubtype.getResult().resolveConcreteMethod(targetMethod, contextType); + if (methodFromUniqueType != null) { + leafConcreteSubtype.recordTo(assumptions); + return methodFromUniqueType; } + } - AssumptionResult<ResolvedJavaMethod> uniqueConcreteMethod = type.findUniqueConcreteMethod(targetMethod); - if (uniqueConcreteMethod != null) { - assumptions.record(uniqueConcreteMethod); - return uniqueConcreteMethod.getResult(); - } + AssumptionResult<ResolvedJavaMethod> uniqueConcreteMethod = type.findUniqueConcreteMethod(targetMethod); + if (uniqueConcreteMethod != null && uniqueConcreteMethod.canRecordTo(assumptions)) { + uniqueConcreteMethod.recordTo(assumptions); + return uniqueConcreteMethod.getResult(); } }