# HG changeset patch # User Lukas Stadler # Date 1364293732 -3600 # Node ID 43ab11ee55246bbb68856d52b07b4aab6ea66799 # Parent ca3a5c5d3947a77431e157008b841ad45cdf2e81 counters for LoopFullUnrollPhase and TailDuplicationPhase diff -r ca3a5c5d3947 -r 43ab11ee5524 graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopFullUnrollPhase.java --- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopFullUnrollPhase.java Mon Mar 25 11:21:43 2013 +0100 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopFullUnrollPhase.java Tue Mar 26 11:28:52 2013 +0100 @@ -34,12 +34,17 @@ private static final DebugMetric FULLY_UNROLLED_LOOPS = Debug.metric("FullUnrolls"); private final GraalCodeCacheProvider runtime; private final Assumptions assumptions; + private int unrollCount; public LoopFullUnrollPhase(GraalCodeCacheProvider runtime, Assumptions assumptions) { this.runtime = runtime; this.assumptions = assumptions; } + public int getUnrollCount() { + return unrollCount; + } + @Override protected void run(StructuredGraph graph) { if (graph.hasLoops()) { @@ -55,11 +60,11 @@ FULLY_UNROLLED_LOOPS.increment(); Debug.dump(graph, "After fullUnroll %s", loop); peeled = true; + unrollCount++; break; } } } while (peeled); } } - } diff -r ca3a5c5d3947 -r 43ab11ee5524 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/TailDuplicationPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/TailDuplicationPhase.java Mon Mar 25 11:21:43 2013 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/TailDuplicationPhase.java Tue Mar 26 11:28:52 2013 +0100 @@ -128,13 +128,21 @@ } }; + private int tailDuplicationCount; + + public int getTailDuplicationCount() { + return tailDuplicationCount; + } + @Override protected void run(StructuredGraph graph) { // A snapshot is taken here, so that new MergeNode instances aren't considered for tail // duplication. for (MergeNode merge : graph.getNodes(MergeNode.class).snapshot()) { if (!(merge instanceof LoopBeginNode) && merge.probability() >= GraalOptions.TailDuplicationProbability) { - tailDuplicate(merge, DEFAULT_DECISION, null); + if (tailDuplicate(merge, DEFAULT_DECISION, null)) { + tailDuplicationCount++; + } } } } @@ -155,7 +163,7 @@ * {@link PiNode}, and is used to replace {@link PiNode#object()} with the * {@link PiNode} in the duplicated branch that corresponds to the entry. */ - public static void tailDuplicate(MergeNode merge, TailDuplicationDecision decision, List replacements) { + public static boolean tailDuplicate(MergeNode merge, TailDuplicationDecision decision, List replacements) { assert !(merge instanceof LoopBeginNode); assert replacements == null || replacements.size() == merge.forwardEndCount(); FixedNode fixed = merge; @@ -179,15 +187,18 @@ if (decision.doTransform(merge, fixedCount)) { metricDuplicationEndPerformed.increment(); new DuplicationOperation(merge, replacements).duplicate(); + return true; } } else if (merge.stateAfter() != null) { metricDuplicationOther.increment(); if (decision.doTransform(merge, fixedCount)) { metricDuplicationOtherPerformed.increment(); new DuplicationOperation(merge, replacements).duplicate(); + return true; } } } + return false; } /**