Mercurial > hg > graal-compiler
changeset 8558:43ab11ee5524
counters for LoopFullUnrollPhase and TailDuplicationPhase
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Tue, 26 Mar 2013 11:28:52 +0100 |
parents | ca3a5c5d3947 |
children | af0c1352f969 |
files | graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopFullUnrollPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/TailDuplicationPhase.java |
diffstat | 2 files changed, 19 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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); } } - }
--- 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<PiNode> replacements) { + public static boolean tailDuplicate(MergeNode merge, TailDuplicationDecision decision, List<PiNode> 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; } /**