changeset 11788:88d8b348914b

Make InfopointNode a NodeWithState, it is not a StateSplit anymore
author Gilles Duboscq <duboscq@ssw.jku.at>
date Wed, 25 Sep 2013 12:08:28 +0200
parents 4fc75b6ca3dd
children bc3bb6c6ca70
files graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InfopointNode.java
diffstat 4 files changed, 13 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- 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));
     }
 }
--- 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);
--- 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;
                 }
             }
--- 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();
     }
 
 }