# HG changeset patch # User Doug Simon # Date 1336485121 -7200 # Node ID d42425beb1d13223cae50670b917961f2ec1a41e # Parent dec5a35ddbe2825c4d24a16cd63592da0893e590 pulled AbstractStateSplit into FixedWithNextNode and made it no longer implement StateSplit. StateSplit is now implemented only by nodes that really have side effects. diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/InsertStateAfterPlaceholderPhase.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/InsertStateAfterPlaceholderPhase.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/InsertStateAfterPlaceholderPhase.java Tue May 08 15:52:01 2012 +0200 @@ -29,7 +29,7 @@ public class InsertStateAfterPlaceholderPhase extends Phase { - private static class PlaceholderNode extends AbstractStateSplit implements Node.IterableNodeType, LIRLowerable { + private static class PlaceholderNode extends FixedWithNextNode implements StateSplit, Node.IterableNodeType, LIRLowerable { public PlaceholderNode() { super(StampFactory.illegal()); } diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Tue May 08 15:52:01 2012 +0200 @@ -165,7 +165,7 @@ frameState.clearNonLiveLocals(blockMap.startBlock.localsLiveIn); // finish the start block - ((AbstractStateSplit) lastInstr).setStateAfter(frameState.create(0)); + lastInstr.setStateAfter(frameState.create(0)); if (blockMap.startBlock.isLoopHeader) { appendGoto(createTarget(blockMap.startBlock, frameState)); } else { @@ -255,7 +255,7 @@ FrameStateBuilder dispatchState = frameState.copy(); dispatchState.clearStack(); - BeginNode dispatchBegin = currentGraph.add(new BeginNode()); + BeginNode dispatchBegin = currentGraph.add(new BeginStateSplitNode()); dispatchBegin.setStateAfter(dispatchState.create(bci)); if (exceptionObject == null) { @@ -1502,7 +1502,7 @@ } if (lastInstr instanceof StateSplit) { StateSplit stateSplit = (StateSplit) lastInstr; - if (stateSplit.stateAfter() == null && stateSplit.needsStateAfter()) { + if (stateSplit.stateAfter() == null) { stateSplit.setStateAfter(frameState.create(bci)); } } diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractStateSplit.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractStateSplit.java Mon May 07 11:40:44 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package com.oracle.graal.nodes; - -import java.util.*; - -import com.oracle.graal.nodes.type.*; - -/** - * The {@code AbstractStateSplit} class is the abstract base class of all instructions - * that store an immutable copy of the frame state. - */ -public abstract class AbstractStateSplit extends FixedWithNextNode implements StateSplit { - - @Input(notDataflow = true) private FrameState stateAfter; - - @Override - public FrameState stateAfter() { - return stateAfter; - } - - @Override - public void setStateAfter(FrameState x) { - assert x == null || x.isAlive() : "frame state must be in a graph"; - updateUsages(stateAfter, x); - stateAfter = x; - } - - /** - * Creates a new state split with the specified value type. - * @param kind the type of the value that this instruction produces - */ - public AbstractStateSplit(Stamp stamp) { - super(stamp); - } - - @Override - public boolean needsStateAfter() { - return true; - } - - @Override - public Map getDebugProperties() { - Map debugProperties = super.getDebugProperties(); - if (stateAfter() != null) { - debugProperties.put("stateAfter", stateAfter().toString(Verbosity.Debugger)); - } - return debugProperties; - } -} diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java Tue May 08 15:52:01 2012 +0200 @@ -31,7 +31,7 @@ import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; -public class BeginNode extends AbstractStateSplit implements LIRLowerable, Simplifiable, Node.IterableNodeType { +public class BeginNode extends FixedWithNextNode implements LIRLowerable, Simplifiable, Node.IterableNodeType { public BeginNode() { super(StampFactory.illegal()); } diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginStateSplitNode.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginStateSplitNode.java Tue May 08 15:52:01 2012 +0200 @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.nodes; + +/** + * Base class for {@link BeginNode}s that are associated with a frame state. + */ +public class BeginStateSplitNode extends BeginNode implements StateSplit { +} diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedWithNextNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedWithNextNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedWithNextNode.java Tue May 08 15:52:01 2012 +0200 @@ -22,13 +22,38 @@ */ package com.oracle.graal.nodes; +import java.util.*; + import com.oracle.graal.nodes.type.*; /** * Base class of all nodes that are fixed within the control flow graph and have an immediate successor. + * This class also provides an implementation of {@link StateSplit} without being a {@link StateSplit} itself. */ public abstract class FixedWithNextNode extends FixedNode { + @Input(notDataflow = true) private FrameState stateAfter; + + public FrameState stateAfter() { + return stateAfter; + } + + public void setStateAfter(FrameState x) { + assert x == null || x.isAlive() : "frame state must be in a graph"; + assert this instanceof StateSplit : getClass() + " does not implement " + StateSplit.class; + updateUsages(stateAfter, x); + stateAfter = x; + } + + @Override + public Map getDebugProperties() { + Map debugProperties = super.getDebugProperties(); + if (stateAfter() != null) { + debugProperties.put("stateAfter", stateAfter().toString(Verbosity.Debugger)); + } + return debugProperties; + } + public FixedNode next() { assert scheduledNext() == null || scheduledNext() instanceof FixedNode : "next() cannot be used while the graph is scheduled"; return (FixedNode) scheduledNext(); diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java Tue May 08 15:52:01 2012 +0200 @@ -282,7 +282,7 @@ @Override public void generate(LIRGeneratorTool gen) { - // Nothing to do, frame states are processed as part of the handling of AbstractStateSplit nodes. + // Nothing to do, frame states are processed as part of the handling of StateSplit nodes. } private static String toString(FrameState frameState) { diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java Tue May 08 15:52:01 2012 +0200 @@ -34,7 +34,7 @@ /** * The {@code InvokeNode} represents all kinds of method calls. */ -public final class InvokeNode extends AbstractStateSplit implements Node.IterableNodeType, Invoke, LIRLowerable, MemoryCheckpoint { +public final class InvokeNode extends FixedWithNextNode implements StateSplit, Node.IterableNodeType, Invoke, LIRLowerable, MemoryCheckpoint { @Input private final MethodCallTargetNode callTarget; private final int bci; diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java Tue May 08 15:52:01 2012 +0200 @@ -169,11 +169,6 @@ } @Override - public boolean needsStateAfter() { - return true; - } - - @Override public void intrinsify(Node node) { MethodCallTargetNode call = callTarget; FrameState state = stateAfter(); diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopExitNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopExitNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopExitNode.java Tue May 08 15:52:01 2012 +0200 @@ -24,7 +24,7 @@ import com.oracle.graal.nodes.spi.*; -public class LoopExitNode extends BeginNode { +public class LoopExitNode extends BeginStateSplitNode { @Input(notDataflow = true) private LoopBeginNode loopBegin; public LoopExitNode(LoopBeginNode loop) { assert loop != null; diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MergeNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MergeNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MergeNode.java Tue May 08 15:52:01 2012 +0200 @@ -32,16 +32,11 @@ /** * Denotes the merging of multiple control-flow paths. */ -public class MergeNode extends BeginNode implements Node.IterableNodeType, LIRLowerable { +public class MergeNode extends BeginStateSplitNode implements Node.IterableNodeType, LIRLowerable { @Input(notDataflow = true) private final NodeInputList ends = new NodeInputList<>(this); @Override - public boolean needsStateAfter() { - return false; - } - - @Override public void generate(LIRGeneratorTool gen) { gen.visitMerge(this); } diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StateSplit.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StateSplit.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StateSplit.java Tue May 08 15:52:01 2012 +0200 @@ -22,6 +22,11 @@ */ package com.oracle.graal.nodes; +/** + * A state split is a node that has a side effect. Execution of such a node changes + * state visible to other threads. These nodes denote boundaries across which deoptimization + * points cannot be moved. + */ public interface StateSplit { /** @@ -33,11 +38,4 @@ * Sets the state of the JVM frame after execution of this node. */ void setStateAfter(FrameState x); - - /** - * Determines if the caller should create an {@link #stateAfter() after} - * frame state for this node if it doesn't already have one. - */ - boolean needsStateAfter(); - } diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java Tue May 08 15:52:01 2012 +0200 @@ -64,7 +64,7 @@ private StructuredGraph(String name, RiResolvedMethod method, long graphId) { super(name); - this.start = add(new BeginNode()); + this.start = add(new BeginStateSplitNode()); this.method = method; this.graphId = graphId; } diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AbstractCallNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AbstractCallNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AbstractCallNode.java Tue May 08 15:52:01 2012 +0200 @@ -26,7 +26,7 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.type.*; -public abstract class AbstractCallNode extends AbstractStateSplit implements MemoryCheckpoint { +public abstract class AbstractCallNode extends FixedWithNextNode implements StateSplit, MemoryCheckpoint { @Input protected final NodeInputList arguments; diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AccessNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AccessNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AccessNode.java Tue May 08 15:52:01 2012 +0200 @@ -25,7 +25,7 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.type.*; -public abstract class AccessNode extends AbstractStateSplit implements Access { +public abstract class AccessNode extends FixedWithNextNode implements Access { @Input private ValueNode object; @Input private GuardNode guard; diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BoxNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BoxNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BoxNode.java Tue May 08 15:52:01 2012 +0200 @@ -31,7 +31,7 @@ import com.oracle.graal.nodes.type.*; -public final class BoxNode extends AbstractStateSplit implements Node.IterableNodeType { +public final class BoxNode extends FixedWithNextNode implements StateSplit, Node.IterableNodeType { @Input private ValueNode source; private int bci; diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/MembarNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/MembarNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/MembarNode.java Tue May 08 15:52:01 2012 +0200 @@ -30,7 +30,7 @@ /** * Creates a memory barrier. */ -public class MembarNode extends AbstractStateSplit implements LIRLowerable, MemoryCheckpoint { +public class MembarNode extends FixedWithNextNode implements StateSplit, LIRLowerable, MemoryCheckpoint { private final int barriers; diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SafeAccessNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SafeAccessNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SafeAccessNode.java Tue May 08 15:52:01 2012 +0200 @@ -26,7 +26,7 @@ import com.oracle.graal.nodes.type.*; -public abstract class SafeAccessNode extends AbstractStateSplit { +public abstract class SafeAccessNode extends FixedWithNextNode { @Input private ValueNode object; @Input private LocationNode location; diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SafeWriteNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SafeWriteNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SafeWriteNode.java Tue May 08 15:52:01 2012 +0200 @@ -31,7 +31,7 @@ import com.oracle.max.cri.ri.*; -public class SafeWriteNode extends SafeAccessNode implements Lowerable{ +public class SafeWriteNode extends SafeAccessNode implements StateSplit, Lowerable{ @Input private ValueNode value; diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java Tue May 08 15:52:01 2012 +0200 @@ -31,7 +31,7 @@ /** * Load of a value from a location specified as an offset relative to an object. */ -public class UnsafeLoadNode extends AbstractStateSplit implements Lowerable { +public class UnsafeLoadNode extends FixedWithNextNode implements Lowerable { @Input private ValueNode object; @Input private ValueNode offset; diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java Tue May 08 15:52:01 2012 +0200 @@ -31,7 +31,7 @@ /** * Store of a value at a location specified as an offset relative to an object. */ -public class UnsafeStoreNode extends AbstractStateSplit implements Lowerable { +public class UnsafeStoreNode extends FixedWithNextNode implements StateSplit, Lowerable { @Input private ValueNode object; @Input private ValueNode offset; diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteMemoryCheckpointNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteMemoryCheckpointNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteMemoryCheckpointNode.java Tue May 08 15:52:01 2012 +0200 @@ -27,7 +27,7 @@ import com.oracle.graal.nodes.type.*; -public final class WriteMemoryCheckpointNode extends AbstractStateSplit implements LIRLowerable, MemoryCheckpoint { +public final class WriteMemoryCheckpointNode extends FixedWithNextNode implements StateSplit, LIRLowerable, MemoryCheckpoint { public WriteMemoryCheckpointNode() { this(StampFactory.illegal()); diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java Tue May 08 15:52:01 2012 +0200 @@ -28,7 +28,7 @@ import com.oracle.graal.nodes.type.*; -public final class WriteNode extends AccessNode implements LIRLowerable { +public final class WriteNode extends AccessNode implements StateSplit, LIRLowerable { @Input private ValueNode value; public ValueNode value() { diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessArrayNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessArrayNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessArrayNode.java Tue May 08 15:52:01 2012 +0200 @@ -28,7 +28,7 @@ /** * This the base class of all array operations. */ -public abstract class AccessArrayNode extends AbstractStateSplit { +public abstract class AccessArrayNode extends FixedWithNextNode { @Input private ValueNode array; diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessFieldNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessFieldNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessFieldNode.java Tue May 08 15:52:01 2012 +0200 @@ -35,7 +35,7 @@ /** * The base class of all instructions that access fields. */ -public abstract class AccessFieldNode extends AbstractStateSplit implements Lowerable { +public abstract class AccessFieldNode extends FixedWithNextNode implements Lowerable { @Input private ValueNode object; diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessMonitorNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessMonitorNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessMonitorNode.java Tue May 08 15:52:01 2012 +0200 @@ -43,7 +43,7 @@ * {@link MonitorEnterNode}. Optimization phases are free to throw {@link CiBailout} if they detect such cases. * Otherwise, they are detected during LIR construction. */ -public abstract class AccessMonitorNode extends AbstractStateSplit implements MemoryCheckpoint { +public abstract class AccessMonitorNode extends FixedWithNextNode implements StateSplit, MemoryCheckpoint { @Input private ValueNode object; private boolean eliminated; diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java Tue May 08 15:52:01 2012 +0200 @@ -33,7 +33,7 @@ * Represents an atomic compare-and-swap operation * The result is a boolean that contains whether the value matched the expected value. */ -public class CompareAndSwapNode extends AbstractStateSplit implements LIRLowerable, Lowerable, MemoryCheckpoint { +public class CompareAndSwapNode extends FixedWithNextNode implements StateSplit, LIRLowerable, Lowerable, MemoryCheckpoint { @Input private ValueNode object; @Input private ValueNode offset; diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ExceptionObjectNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ExceptionObjectNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ExceptionObjectNode.java Tue May 08 15:52:01 2012 +0200 @@ -31,7 +31,7 @@ /** * The {@code ExceptionObject} instruction represents the incoming exception object to an exception handler. */ -public class ExceptionObjectNode extends AbstractStateSplit implements LIRLowerable, MemoryCheckpoint { +public class ExceptionObjectNode extends FixedWithNextNode implements StateSplit, LIRLowerable, MemoryCheckpoint { /** * Constructs a new ExceptionObject instruction. diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java Tue May 08 15:52:01 2012 +0200 @@ -55,11 +55,6 @@ } @Override - public boolean needsStateAfter() { - return false; - } - - @Override public ValueNode canonical(CanonicalizerTool tool) { CiConstant constant = null; if (isStatic()) { diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadIndexedNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadIndexedNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadIndexedNode.java Tue May 08 15:52:01 2012 +0200 @@ -58,11 +58,6 @@ } @Override - public boolean needsStateAfter() { - return false; - } - - @Override public void lower(CiLoweringTool tool) { tool.getRuntime().lower(this, tool); } diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java Tue May 08 15:52:01 2012 +0200 @@ -31,7 +31,7 @@ /** * This node is used to perform the finalizer registration at the end of the java.lang.Object constructor. */ -public final class RegisterFinalizerNode extends AbstractStateSplit implements Canonicalizable, LIRLowerable { +public final class RegisterFinalizerNode extends FixedWithNextNode implements StateSplit, Canonicalizable, LIRLowerable { @Input private ValueNode object; diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreFieldNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreFieldNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreFieldNode.java Tue May 08 15:52:01 2012 +0200 @@ -29,7 +29,7 @@ /** * The {@code StoreFieldNode} represents a write to a static or instance field. */ -public final class StoreFieldNode extends AccessFieldNode { +public final class StoreFieldNode extends AccessFieldNode implements StateSplit { @Input private ValueNode value; diff -r dec5a35ddbe2 -r d42425beb1d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java Mon May 07 11:40:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java Tue May 08 15:52:01 2012 +0200 @@ -31,7 +31,7 @@ /** * The {@code StoreIndexedNode} represents a write to an array element. */ -public final class StoreIndexedNode extends AccessIndexedNode implements Lowerable { +public final class StoreIndexedNode extends AccessIndexedNode implements StateSplit, Lowerable { @Input private ValueNode value;