changeset 5216:b64933dc4830

Peeling loop depending on their entry probability
author Gilles Duboscq <duboscq@ssw.jku.at>
date Mon, 09 Apr 2012 20:43:30 +0200
parents ae367987a18c
children c4696edb6e95 a9e4b30968d4 c4381dacfca6
files graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalOptions.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LoopTransformPhase.java
diffstat 2 files changed, 10 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalOptions.java	Mon Apr 09 20:30:41 2012 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalOptions.java	Mon Apr 09 20:43:30 2012 +0200
@@ -98,6 +98,9 @@
     //rematerialize settings
     public static float   MinimumUsageProbability            = 0.95f;
 
+    //loop transform settings
+    public static float   MinimumPeelProbability             = 0.25f;
+
     // debugging settings
     public static int     MethodEndBreakpointGuards          = 0;
     public static boolean ZapStackOnMethodEntry              = ____;
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LoopTransformPhase.java	Mon Apr 09 20:30:41 2012 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LoopTransformPhase.java	Mon Apr 09 20:43:30 2012 +0200
@@ -24,6 +24,7 @@
 
 import java.util.*;
 
+import com.oracle.graal.compiler.*;
 import com.oracle.graal.compiler.loop.*;
 import com.oracle.graal.debug.*;
 import com.oracle.graal.lir.cfg.*;
@@ -44,8 +45,12 @@
                 }
             });
             for (Loop loop : loops) {
-                LoopTransformUtil.peel(loop);
-                Debug.dump(graph, "After peeling %s", loop);
+                double entryProbability = loop.loopBegin().forwardEnd().probability();
+                if (entryProbability > GraalOptions.MinimumPeelProbability) {
+                    Debug.log("Peeling %s", loop);
+                    LoopTransformUtil.peel(loop);
+                    Debug.dump(graph, "After peeling %s", loop);
+                }
             }
         }
     }