# HG changeset patch # User Lukas Stadler # Date 1374141849 -7200 # Node ID 4532725151cc7e364dc5d0ffe0e5ba1fbe3e3f3f # Parent e6bb7edcc66cdbc33c189d0b7d0821288d41ae67 make MergeableState an abstract class instead of an interface diff -r e6bb7edcc66c -r 4532725151cc graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java Thu Jul 18 12:01:17 2013 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java Thu Jul 18 12:04:09 2013 +0200 @@ -66,7 +66,7 @@ new ConditionalElimination(graph.start(), new State()).apply(); } - public static class State implements MergeableState { + public static class State extends MergeableState { private IdentityHashMap knownTypes; private HashSet knownNonNull; @@ -208,18 +208,6 @@ } @Override - public void loopBegin(LoopBeginNode loopBegin) { - } - - @Override - public void loopEnds(LoopBeginNode loopBegin, List loopEndStates) { - } - - @Override - public void afterSplit(AbstractBeginNode node) { - } - - @Override public State clone() { return new State(this); } diff -r e6bb7edcc66c -r 4532725151cc graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/ComputeProbabilityClosure.java --- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/ComputeProbabilityClosure.java Thu Jul 18 12:01:17 2013 +0200 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/ComputeProbabilityClosure.java Thu Jul 18 12:04:09 2013 +0200 @@ -202,7 +202,7 @@ } } - private class Probability implements MergeableState { + private class Probability extends MergeableState { public double probability; public HashSet loops; @@ -310,7 +310,7 @@ } } - private class LoopCount implements MergeableState { + private class LoopCount extends MergeableState { public double count; @@ -342,16 +342,6 @@ public void loopBegin(LoopBeginNode loopBegin) { count *= loopBegin.loopFrequency(); } - - @Override - public void loopEnds(LoopBeginNode loopBegin, List loopEndStates) { - // nothing to do... - } - - @Override - public void afterSplit(AbstractBeginNode node) { - // nothing to do... - } } private class PropagateLoopFrequency extends PostOrderNodeIterator { diff -r e6bb7edcc66c -r 4532725151cc graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/MergeableState.java --- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/MergeableState.java Thu Jul 18 12:01:17 2013 +0200 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/MergeableState.java Thu Jul 18 12:04:09 2013 +0200 @@ -26,15 +26,39 @@ import com.oracle.graal.nodes.*; -public interface MergeableState { +public abstract class MergeableState { + + @Override + public abstract T clone(); + + public abstract boolean merge(MergeNode merge, List withStates); - T clone(); - - boolean merge(MergeNode merge, List withStates); + /** + * This method is called before a loop is entered (before the {@link LoopBeginNode} is visited). + * + * @param loopBegin the begin node of the loop + */ + public void loopBegin(LoopBeginNode loopBegin) { + // empty default implementation + } - void loopBegin(LoopBeginNode loopBegin); + /** + * This method is called after all {@link LoopEndNode}s belonging to a loop have been visited. + * + * @param loopBegin the begin node of the loop + * @param loopEndStates the states at the loop ends, sorted according to + * {@link LoopBeginNode#orderedLoopEnds()} + */ + public void loopEnds(LoopBeginNode loopBegin, List loopEndStates) { + // empty default implementation + } - void loopEnds(LoopBeginNode loopBegin, List loopEndStates); - - void afterSplit(AbstractBeginNode node); + /** + * This method is called before the successors of a {@link ControlSplitNode} are visited. + * + * @param node the successor of the control split that is about to be visited + */ + public void afterSplit(AbstractBeginNode node) { + // empty default implementation + } }