# HG changeset patch # User Gilles Duboscq # Date 1363350945 -3600 # Node ID ec8ed9925f5a16d29bf48f7c117e828170f61362 # Parent 60f90b4b6a127910cd3117a72e08e9167b3574ca Fix implicit null checks depending on themselves Dependencies can be pointing to any node Fix missing argument to guard lowering phase diff -r 60f90b4b6a12 -r ec8ed9925f5a graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Thu Mar 14 21:36:28 2013 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Fri Mar 15 13:35:45 2013 +0100 @@ -201,7 +201,7 @@ plan.runPhases(PhasePosition.LOW_LEVEL, graph); - new GuardLoweringPhase().apply(graph); + new GuardLoweringPhase(target).apply(graph); // Add safepoints to loops new SafepointInsertionPhase().apply(graph); diff -r 60f90b4b6a12 -r ec8ed9925f5a graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNode.java Thu Mar 14 21:36:28 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNode.java Fri Mar 15 13:35:45 2013 +0100 @@ -28,7 +28,6 @@ import com.oracle.graal.graph.*; import com.oracle.graal.graph.iterators.*; import com.oracle.graal.nodes.type.*; -import com.oracle.graal.nodes.type.GenericStamp.*; import com.oracle.graal.nodes.util.*; /** @@ -174,9 +173,6 @@ @Override public boolean verify() { - for (ValueNode v : dependencies().nonNull()) { - assertTrue(!(v.stamp() instanceof GenericStamp) || ((GenericStamp) v.stamp()).type() == GenericStampType.Dependency, "cannot depend on node with stamp %s", v.stamp()); - } assertTrue(kind() != null, "Should have a valid kind"); assertTrue(kind() == kind().getStackKind(), "Should have a stack kind : %s", kind()); return super.verify(); diff -r 60f90b4b6a12 -r ec8ed9925f5a graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java Thu Mar 14 21:36:28 2013 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java Fri Mar 15 13:35:45 2013 +0100 @@ -124,9 +124,9 @@ Access access = (Access) node; GuardNode guard = nullGuarded.get(access.object()); if (guard != null && isImplicitNullCheck(access.location(), target)) { + NodeInputList dependencies = ((ValueNode) access).dependencies(); + dependencies.remove(guard); if (access instanceof FloatingReadNode) { - NodeInputList dependencies = ((FloatingReadNode) access).dependencies(); - dependencies.remove(guard); ReadNode read = graph.add(new ReadNode(access.object(), access.location(), ((FloatingReadNode) access).stamp(), dependencies)); node.replaceAndDelete(read); access = read;