Mercurial > hg > graal-compiler
changeset 10803:4532725151cc
make MergeableState an abstract class instead of an interface
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Thu, 18 Jul 2013 12:04:09 +0200 |
parents | e6bb7edcc66c |
children | 32d93a799694 |
files | graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/ComputeProbabilityClosure.java graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/MergeableState.java |
diffstat | 3 files changed, 35 insertions(+), 33 deletions(-) [+] |
line wrap: on
line diff
--- 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<State> { + public static class State extends MergeableState<State> { private IdentityHashMap<ValueNode, ResolvedJavaType> knownTypes; private HashSet<ValueNode> knownNonNull; @@ -208,18 +208,6 @@ } @Override - public void loopBegin(LoopBeginNode loopBegin) { - } - - @Override - public void loopEnds(LoopBeginNode loopBegin, List<State> loopEndStates) { - } - - @Override - public void afterSplit(AbstractBeginNode node) { - } - - @Override public State clone() { return new State(this); }
--- 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<Probability> { + private class Probability extends MergeableState<Probability> { public double probability; public HashSet<LoopInfo> loops; @@ -310,7 +310,7 @@ } } - private class LoopCount implements MergeableState<LoopCount> { + private class LoopCount extends MergeableState<LoopCount> { public double count; @@ -342,16 +342,6 @@ public void loopBegin(LoopBeginNode loopBegin) { count *= loopBegin.loopFrequency(); } - - @Override - public void loopEnds(LoopBeginNode loopBegin, List<LoopCount> loopEndStates) { - // nothing to do... - } - - @Override - public void afterSplit(AbstractBeginNode node) { - // nothing to do... - } } private class PropagateLoopFrequency extends PostOrderNodeIterator<LoopCount> {
--- 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<T> { +public abstract class MergeableState<T> { + + @Override + public abstract T clone(); + + public abstract boolean merge(MergeNode merge, List<T> withStates); - T clone(); - - boolean merge(MergeNode merge, List<T> 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<T> loopEndStates) { + // empty default implementation + } - void loopEnds(LoopBeginNode loopBegin, List<T> 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 + } }