Mercurial > hg > truffle
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; } }