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();
             }
         }