changeset 4629:29da09bf4930

Fix a problem with having a MemoryCheckpoint that is also a ControlSplit (InvokeWithException), the ANY_LOCATION can not be this control split in both branches because it may lead to scheduling problems : make ExceptionObject a MemoryCheckpoint
author Gilles Duboscq <duboscq@ssw.jku.at>
date Fri, 17 Feb 2012 13:54:39 +0100
parents d882b9baea6e
children ef0ff914c10f
files graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/SchedulePhase.java graal/com.oracle.max.graal.nodes/src/com/oracle/max/graal/nodes/java/ExceptionObjectNode.java
diffstat 2 files changed, 5 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/SchedulePhase.java	Fri Feb 17 13:17:42 2012 +0100
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/SchedulePhase.java	Fri Feb 17 13:54:39 2012 +0100
@@ -275,7 +275,9 @@
                 // scheduler is used for debug printing in early compiler phases. This was annoying during debugging
                 // when an excpetion breakpoint is set for assertion errors, so I changed it to a bailout.
                 if (b.getEndNode() instanceof ControlSplitNode) {
-                    throw new GraalInternalError("Schedule is not possible : needs to move a node after the last node of the block whcih can not be move");
+                    throw new GraalInternalError("Schedule is not possible : needs to move a node after the last node of the block whcih can not be move").
+                    addContext(lastSorted).
+                    addContext(b.getEndNode());
                 }
                 //assert !(b.lastNode() instanceof ControlSplitNode);
 
--- a/graal/com.oracle.max.graal.nodes/src/com/oracle/max/graal/nodes/java/ExceptionObjectNode.java	Fri Feb 17 13:17:42 2012 +0100
+++ b/graal/com.oracle.max.graal.nodes/src/com/oracle/max/graal/nodes/java/ExceptionObjectNode.java	Fri Feb 17 13:54:39 2012 +0100
@@ -24,13 +24,14 @@
 
 import com.oracle.max.cri.ci.*;
 import com.oracle.max.graal.nodes.*;
+import com.oracle.max.graal.nodes.extended.*;
 import com.oracle.max.graal.nodes.spi.*;
 import com.oracle.max.graal.nodes.type.*;
 
 /**
  * The {@code ExceptionObject} instruction represents the incoming exception object to an exception handler.
  */
-public final class ExceptionObjectNode extends AbstractStateSplit implements LIRLowerable {
+public final class ExceptionObjectNode extends AbstractStateSplit implements LIRLowerable, MemoryCheckpoint {
 
     /**
      * Constructs a new ExceptionObject instruction.