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