changeset 5146:25903e52af48

Add assertion around probabilities, and fix potential problem in ComputeProbabilityPhase
author Gilles Duboscq <duboscq@ssw.jku.at>
date Thu, 22 Mar 2012 19:28:45 +0100
parents 19a3ae027c56
children 3851c69bf4ea
files graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/ComputeProbabilityPhase.java graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java
diffstat 2 files changed, 12 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/ComputeProbabilityPhase.java	Thu Mar 22 18:36:52 2012 +0100
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/ComputeProbabilityPhase.java	Thu Mar 22 19:28:45 2012 +0100
@@ -145,13 +145,11 @@
                     }
                     backEdgeProb += le.probability() * factor;
                 }
-                double d = backEdgeProb;
+                double d = loopBegin.probability() - backEdgeProb;
                 if (d < EPSILON) {
                     d = EPSILON;
-                } else if (d > loopBegin.probability() - EPSILON) {
-                    d = loopBegin.probability() - EPSILON;
                 }
-                loopFrequency = loopBegin.probability() / (loopBegin.probability() - d);
+                loopFrequency = loopBegin.probability() / d;
                 loopBegin.setLoopFrequency(loopFrequency);
             }
             return loopFrequency;
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Thu Mar 22 18:36:52 2012 +0100
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Thu Mar 22 19:28:45 2012 +0100
@@ -27,7 +27,6 @@
 
 import java.lang.reflect.*;
 import java.util.*;
-import java.util.concurrent.atomic.*;
 
 import com.oracle.graal.compiler.*;
 import com.oracle.graal.compiler.phases.*;
@@ -1139,9 +1138,19 @@
                 prob[i] = 1.0d / numberOfCases;
             }
         }
+        assert allPositive(prob);
         return prob;
     }
 
+    private static boolean allPositive(double[] a) {
+        for (double d : a) {
+            if (d < 0) {
+                return false;
+            }
+        }
+        return true;
+    }
+
     private void genLookupswitch() {
         int bci = bci();
         ValueNode value = frameState.ipop();