comparison graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java @ 19800:3362ba500371

Connect required Assumptions with answer to CHA query
author Tom Rodriguez <tom.rodriguez@oracle.com>
date Wed, 11 Mar 2015 17:32:04 -0700
parents d57ca11a6883
children deab43a789ad
comparison
equal deleted inserted replaced
19799:00c4aa355659 19800:3362ba500371
20 * or visit www.oracle.com if you need additional information or have any 20 * or visit www.oracle.com if you need additional information or have any
21 * questions. 21 * questions.
22 */ 22 */
23 package com.oracle.graal.nodes.java; 23 package com.oracle.graal.nodes.java;
24 24
25 import com.oracle.graal.api.code.*;
26 import com.oracle.graal.api.meta.*; 25 import com.oracle.graal.api.meta.*;
26 import com.oracle.graal.api.meta.Assumptions.AssumptionResult;
27 import com.oracle.graal.compiler.common.type.*; 27 import com.oracle.graal.compiler.common.type.*;
28 import com.oracle.graal.graph.*; 28 import com.oracle.graal.graph.*;
29 import com.oracle.graal.graph.spi.*; 29 import com.oracle.graal.graph.spi.*;
30 import com.oracle.graal.nodeinfo.*; 30 import com.oracle.graal.nodeinfo.*;
31 import com.oracle.graal.nodes.*; 31 import com.oracle.graal.nodes.*;
124 if (resolvedMethod != null && (resolvedMethod.canBeStaticallyBound() || StampTool.isExactType(receiver) || type.isArray())) { 124 if (resolvedMethod != null && (resolvedMethod.canBeStaticallyBound() || StampTool.isExactType(receiver) || type.isArray())) {
125 return resolvedMethod; 125 return resolvedMethod;
126 } 126 }
127 Assumptions assumptions = receiver.graph().getAssumptions(); 127 Assumptions assumptions = receiver.graph().getAssumptions();
128 if (assumptions != null) { 128 if (assumptions != null) {
129 ResolvedJavaType uniqueConcreteType = type.findUniqueConcreteSubtype(); 129 AssumptionResult<ResolvedJavaType> uniqueConcreteType = type.findUniqueConcreteSubtype();
130 if (uniqueConcreteType != null) { 130 if (uniqueConcreteType != null) {
131 ResolvedJavaMethod methodFromUniqueType = uniqueConcreteType.resolveConcreteMethod(targetMethod, contextType); 131 ResolvedJavaMethod methodFromUniqueType = uniqueConcreteType.getResult().resolveConcreteMethod(targetMethod, contextType);
132 if (methodFromUniqueType != null) { 132 if (methodFromUniqueType != null) {
133 assumptions.recordConcreteSubtype(type, uniqueConcreteType); 133 assumptions.record(uniqueConcreteType);
134 return methodFromUniqueType; 134 return methodFromUniqueType;
135 } 135 }
136 } 136 }
137 137
138 ResolvedJavaMethod uniqueConcreteMethod = type.findUniqueConcreteMethod(targetMethod); 138 AssumptionResult<ResolvedJavaMethod> uniqueConcreteMethod = type.findUniqueConcreteMethod(targetMethod);
139 if (uniqueConcreteMethod != null) { 139 if (uniqueConcreteMethod != null) {
140 assumptions.recordConcreteMethod(targetMethod, type, uniqueConcreteMethod); 140 assumptions.record(uniqueConcreteMethod);
141 return uniqueConcreteMethod; 141 return uniqueConcreteMethod.getResult();
142 } 142 }
143 } 143 }
144 } 144 }
145 145
146 return null; 146 return null;