changeset 9878:d0a007fb65af

simplify FrameStateAssignmentPhase, add guarantee that every DeoptimizingNode has a FrameState
author Lukas Stadler <lukas.stadler@jku.at>
date Wed, 05 Jun 2013 11:50:07 +0200
parents fe02e8159afa
children bf6943c12840
files graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FrameStateAssignmentPhase.java
diffstat 1 files changed, 5 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FrameStateAssignmentPhase.java	Wed Jun 05 11:47:46 2013 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FrameStateAssignmentPhase.java	Wed Jun 05 11:50:07 2013 +0200
@@ -41,6 +41,7 @@
             if (node instanceof DeoptimizingNode) {
                 DeoptimizingNode deopt = (DeoptimizingNode) node;
                 if (deopt.canDeoptimize() && deopt.getDeoptimizationState() == null) {
+                    GraalInternalError.guarantee(currentState != null, "no FrameState at DeoptimizingNode %s", deopt);
                     deopt.setDeoptimizationState(currentState);
                 }
             }
@@ -58,10 +59,7 @@
 
         @Override
         protected FrameState merge(MergeNode merge, List<FrameState> states) {
-            if (merge.stateAfter() != null) {
-                return merge.stateAfter();
-            }
-            return singleFrameState(merge, states);
+            return merge.stateAfter() != null ? merge.stateAfter() : singleFrameState(merge, states);
         }
 
         @Override
@@ -73,7 +71,6 @@
         protected Map<LoopExitNode, FrameState> processLoop(LoopBeginNode loop, FrameState initialState) {
             return ReentrantNodeIterator.processLoop(this, loop, initialState).exitStates;
         }
-
     }
 
     @Override
@@ -93,33 +90,12 @@
     }
 
     private static FrameState singleFrameState(@SuppressWarnings("unused") MergeNode merge, List<FrameState> states) {
-        if (states.size() == 0) {
-            return null;
-        }
-        FrameState firstState = states.get(0);
-        FrameState singleState = firstState;
-        if (singleState == null) {
-            return null;
-        }
-        int singleBci = singleState.bci;
+        FrameState singleState = states.get(0);
         for (int i = 1; i < states.size(); ++i) {
-            FrameState cur = states.get(i);
-            if (cur == null) {
+            if (states.get(i) != singleState) {
                 return null;
             }
-
-            if (cur != singleState) {
-                singleState = null;
-            }
-
-            if (cur.bci != singleBci) {
-                singleBci = FrameState.INVALID_FRAMESTATE_BCI;
-            }
-
         }
-        if (singleState != null) {
-            return singleState;
-        }
-        return null;
+        return singleState;
     }
 }