# HG changeset patch # User Miguel Garcia # Date 1398784489 -7200 # Node ID 0f919919fd63bc2dbe597f3cc243b24cafe91d5a # Parent 97e0f9ec5752a13bab21e275da41522aab2b6143 [flow-sensitive] NullCheckNode turned into equivalent FixedGuardNode diff -r 97e0f9ec5752 -r 0f919919fd63 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/FlowSensitiveReduction.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/FlowSensitiveReduction.java Tue Apr 29 16:55:05 2014 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/FlowSensitiveReduction.java Tue Apr 29 17:14:49 2014 +0200 @@ -26,6 +26,7 @@ import com.oracle.graal.graph.Node; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.FloatingNode; +import com.oracle.graal.nodes.calc.IsNullNode; import com.oracle.graal.nodes.extended.LoadHubNode; import com.oracle.graal.nodes.extended.NullCheckNode; import com.oracle.graal.nodes.java.*; @@ -37,6 +38,7 @@ import java.lang.reflect.Modifier; +import static com.oracle.graal.api.meta.DeoptimizationAction.InvalidateReprofile; import static com.oracle.graal.api.meta.DeoptimizationReason.*; /** @@ -437,6 +439,8 @@ * * *

@@ -459,7 +463,17 @@ graph.removeFixed(ncn); return; } - // TODO ANCHOR NEEDED: state.trackNN(object, ncn); + /* + * Lower the NullCheckNode to a FixedGuardNode which then allows using it as anchor for + * state-tracking. TODO the assumption here is that the code emitted for the resulting + * FixedGuardNode is as efficient as for NullCheckNode. + */ + IsNullNode isNN = graph.unique(new IsNullNode(object)); + reasoner.added.add(isNN); + FixedGuardNode nullCheck = graph.add(new FixedGuardNode(isNN, UnreachedCode, InvalidateReprofile, true)); + graph.replaceFixedWithFixed(ncn, nullCheck); + + state.trackNN(object, nullCheck); } /**