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;
     }
 
     /**