# HG changeset patch # User Gilles Duboscq # Date 1380103708 -7200 # Node ID 88d8b348914b7f4760feb444e7f8bf8cd29c5b3f # Parent 4fc75b6ca3dda368a5f10b1b1454d5e3a95e7178 Make InfopointNode a NodeWithState, it is not a StateSplit anymore diff -r 4fc75b6ca3dd -r 88d8b348914b graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java --- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Wed Sep 25 12:08:04 2013 +0200 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Wed Sep 25 12:08:28 2013 +0200 @@ -890,6 +890,6 @@ @Override public void visitInfopointNode(InfopointNode i) { - append(new InfopointOp(stateFor(i.stateAfter(), DeoptimizationReason.None), i.reason)); + append(new InfopointOp(stateFor(i.getState(), DeoptimizationReason.None), i.reason)); } } diff -r 4fc75b6ca3dd -r 88d8b348914b graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java Wed Sep 25 12:08:04 2013 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java Wed Sep 25 12:08:28 2013 +0200 @@ -526,7 +526,7 @@ @Override public void visitInfopointNode(InfopointNode i) { - if (i.stateAfter() != null && i.stateAfter().bci == FrameState.AFTER_BCI) { + if (i.getState() != null && i.getState().bci == FrameState.AFTER_BCI) { Debug.log("Ignoring InfopointNode for AFTER_BCI"); } else { super.visitInfopointNode(i); diff -r 4fc75b6ca3dd -r 88d8b348914b 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 Wed Sep 25 12:08:04 2013 +0200 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Wed Sep 25 12:08:28 2013 +0200 @@ -216,17 +216,14 @@ lastInstr = genMonitorEnter(methodSynchronizedObject); } frameState.clearNonLiveLocals(blockMap.startBlock.localsLiveIn); + ((StateSplit) lastInstr).setStateAfter(frameState.create(0)); if (graphBuilderConfig.eagerInfopointMode()) { - ((StateSplit) lastInstr).setStateAfter(frameState.create(0)); - InfopointNode ipn = currentGraph.add(new InfopointNode(InfopointReason.METHOD_START)); + InfopointNode ipn = currentGraph.add(new InfopointNode(InfopointReason.METHOD_START, frameState.create(0))); lastInstr.setNext(ipn); lastInstr = ipn; } - // finish the start block - ((StateSplit) lastInstr).setStateAfter(frameState.create(0)); - currentBlock = blockMap.startBlock; blockMap.startBlock.entryState = frameState; if (blockMap.startBlock.isLoopHeader) { @@ -1636,8 +1633,7 @@ } if (graphBuilderConfig.eagerInfopointMode()) { - InfopointNode ipn = append(new InfopointNode(InfopointReason.METHOD_END)); - ipn.setStateAfter(frameState.create(FrameState.AFTER_BCI)); + append(new InfopointNode(InfopointReason.METHOD_END, frameState.create(FrameState.AFTER_BCI))); } append(new ReturnNode(x)); @@ -1752,8 +1748,7 @@ if (graphBuilderConfig.eagerInfopointMode() && lnt != null) { currentLineNumber = lnt.getLineNumber(bci); if (currentLineNumber != previousLineNumber) { - InfopointNode ipn = append(new InfopointNode(InfopointReason.LINE_NUMBER)); - ipn.setStateAfter(frameState.create(bci)); + append(new InfopointNode(InfopointReason.LINE_NUMBER, frameState.create(bci))); previousLineNumber = currentLineNumber; } } diff -r 4fc75b6ca3dd -r 88d8b348914b graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InfopointNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InfopointNode.java Wed Sep 25 12:08:04 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InfopointNode.java Wed Sep 25 12:08:28 2013 +0200 @@ -29,13 +29,15 @@ /** * Nodes of this type are inserted into the graph to denote points of interest to debugging. */ -public class InfopointNode extends AbstractStateSplit implements LIRLowerable { +public class InfopointNode extends FixedWithNextNode implements LIRLowerable, NodeWithState { public final InfopointReason reason; + @Input private FrameState state; - public InfopointNode(InfopointReason reason) { + public InfopointNode(InfopointReason reason, FrameState state) { super(StampFactory.forVoid()); this.reason = reason; + this.state = state; } @Override @@ -43,24 +45,13 @@ generator.visitInfopointNode(this); } - @Override - public boolean hasSideEffect() { - return false; - } - - @Override - public void setStateAfter(FrameState state) { - // shield this node from frame state removal - // TODO turn InfopointNode into a FixedWithNextNode subclass with a self-maintained - // FrameState that is correctly dealt with by scheduling and partial escape analysis - if (state != null) { - super.setStateAfter(state); - } + public FrameState getState() { + return state; } @Override public boolean verify() { - return stateAfter() != null && super.verify(); + return getState() != null && super.verify(); } }