Mercurial > hg > graal-compiler
diff graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java @ 19801:deab43a789ad
Split LeafType off from ConcreteSubtype
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Wed, 11 Mar 2015 17:45:21 -0700 |
parents | 3362ba500371 |
children | 51f2e71b57aa |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Wed Mar 11 17:32:04 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Wed Mar 11 17:45:21 2015 -0700 @@ -72,10 +72,10 @@ } assert object.stamp() instanceof ObjectStamp : object + ":" + object.stamp(); if (assumptions != null) { - AssumptionResult<ResolvedJavaType> uniqueConcreteType = type.findUniqueConcreteSubtype(); - if (uniqueConcreteType != null && !uniqueConcreteType.getResult().equals(type)) { - assumptions.record(uniqueConcreteType); - type = uniqueConcreteType.getResult(); + AssumptionResult<ResolvedJavaType> leafConcreteSubtype = type.findLeafConcreteSubtype(); + if (leafConcreteSubtype != null && !leafConcreteSubtype.getResult().equals(type)) { + assumptions.record(leafConcreteSubtype); + type = leafConcreteSubtype.getResult(); } } return new CheckCastNode(type, object, profile, forStoreCheck); @@ -170,11 +170,11 @@ Assumptions assumptions = graph().getAssumptions(); if (assumptions != null) { - AssumptionResult<ResolvedJavaType> exactTypeResult = type.findUniqueConcreteSubtype(); - if (exactTypeResult != null && !exactTypeResult.getResult().equals(type)) { + AssumptionResult<ResolvedJavaType> leafConcreteSubtype = type.findLeafConcreteSubtype(); + if (leafConcreteSubtype != null && !leafConcreteSubtype.getResult().equals(type)) { // Propagate more precise type information to usages of the checkcast. - assumptions.record(exactTypeResult); - return new CheckCastNode(exactTypeResult.getResult(), object, profile, forStoreCheck); + assumptions.record(leafConcreteSubtype); + return new CheckCastNode(leafConcreteSubtype.getResult(), object, profile, forStoreCheck); } }