Mercurial > hg > graal-compiler
comparison graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.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 | d256b81b6335 |
comparison
equal
deleted
inserted
replaced
19799:00c4aa355659 | 19800:3362ba500371 |
---|---|
23 package com.oracle.graal.nodes.java; | 23 package com.oracle.graal.nodes.java; |
24 | 24 |
25 import static com.oracle.graal.nodes.java.ForeignCallDescriptors.*; | 25 import static com.oracle.graal.nodes.java.ForeignCallDescriptors.*; |
26 | 26 |
27 import com.oracle.graal.api.code.*; | 27 import com.oracle.graal.api.code.*; |
28 import com.oracle.graal.api.meta.*; | |
29 import com.oracle.graal.api.meta.Assumptions.AssumptionResult; | |
28 import com.oracle.graal.compiler.common.type.*; | 30 import com.oracle.graal.compiler.common.type.*; |
29 import com.oracle.graal.graph.*; | 31 import com.oracle.graal.graph.*; |
30 import com.oracle.graal.graph.spi.*; | 32 import com.oracle.graal.graph.spi.*; |
31 import com.oracle.graal.nodeinfo.*; | 33 import com.oracle.graal.nodeinfo.*; |
32 import com.oracle.graal.nodes.*; | 34 import com.oracle.graal.nodes.*; |
64 */ | 66 */ |
65 public static boolean mayHaveFinalizer(ValueNode object, Assumptions assumptions) { | 67 public static boolean mayHaveFinalizer(ValueNode object, Assumptions assumptions) { |
66 ObjectStamp objectStamp = (ObjectStamp) object.stamp(); | 68 ObjectStamp objectStamp = (ObjectStamp) object.stamp(); |
67 if (objectStamp.isExactType()) { | 69 if (objectStamp.isExactType()) { |
68 return objectStamp.type().hasFinalizer(); | 70 return objectStamp.type().hasFinalizer(); |
69 } else if (objectStamp.type() != null && !objectStamp.type().hasFinalizableSubclass()) { | 71 } else if (objectStamp.type() != null && assumptions != null) { |
70 // if either the declared type of receiver or the holder | 72 AssumptionResult<Boolean> result = objectStamp.type().hasFinalizableSubclass(); |
71 // can be assumed to have no finalizers | 73 assumptions.record(result); |
72 if (assumptions != null) { | 74 return result.getResult(); |
73 assumptions.recordNoFinalizableSubclassAssumption(objectStamp.type()); | |
74 return false; | |
75 } | |
76 } | 75 } |
77 return true; | 76 return true; |
78 } | 77 } |
79 | 78 |
80 @Override | 79 @Override |