diff graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.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 14e703edb2ab
children deab43a789ad
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java	Wed Mar 11 16:06:35 2015 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java	Wed Mar 11 17:32:04 2015 -0700
@@ -26,8 +26,8 @@
 import static com.oracle.graal.api.meta.DeoptimizationReason.*;
 import static com.oracle.graal.nodes.extended.BranchProbabilityNode.*;
 
-import com.oracle.graal.api.code.*;
 import com.oracle.graal.api.meta.*;
+import com.oracle.graal.api.meta.Assumptions.AssumptionResult;
 import com.oracle.graal.compiler.common.type.*;
 import com.oracle.graal.graph.*;
 import com.oracle.graal.graph.spi.*;
@@ -72,10 +72,10 @@
         }
         assert object.stamp() instanceof ObjectStamp : object + ":" + object.stamp();
         if (assumptions != null) {
-            ResolvedJavaType uniqueConcreteType = type.findUniqueConcreteSubtype();
-            if (uniqueConcreteType != null && !uniqueConcreteType.equals(type)) {
-                assumptions.recordConcreteSubtype(type, uniqueConcreteType);
-                type = uniqueConcreteType;
+            AssumptionResult<ResolvedJavaType> uniqueConcreteType = type.findUniqueConcreteSubtype();
+            if (uniqueConcreteType != null && !uniqueConcreteType.getResult().equals(type)) {
+                assumptions.record(uniqueConcreteType);
+                type = uniqueConcreteType.getResult();
             }
         }
         return new CheckCastNode(type, object, profile, forStoreCheck);
@@ -170,11 +170,11 @@
 
         Assumptions assumptions = graph().getAssumptions();
         if (assumptions != null) {
-            ResolvedJavaType exactType = type.findUniqueConcreteSubtype();
-            if (exactType != null && !exactType.equals(type)) {
+            AssumptionResult<ResolvedJavaType> exactTypeResult = type.findUniqueConcreteSubtype();
+            if (exactTypeResult != null && !exactTypeResult.getResult().equals(type)) {
                 // Propagate more precise type information to usages of the checkcast.
-                assumptions.recordConcreteSubtype(type, exactType);
-                return new CheckCastNode(exactType, object, profile, forStoreCheck);
+                assumptions.record(exactTypeResult);
+                return new CheckCastNode(exactTypeResult.getResult(), object, profile, forStoreCheck);
             }
         }