Mercurial > hg > truffle
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.