# HG changeset patch # User Gilles Duboscq # Date 1332440925 -3600 # Node ID 25903e52af483d48d90662c45d8acb56581ca311 # Parent 19a3ae027c56949ee00b31f33ff80ce41982513a Add assertion around probabilities, and fix potential problem in ComputeProbabilityPhase diff -r 19a3ae027c56 -r 25903e52af48 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/ComputeProbabilityPhase.java --- 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; diff -r 19a3ae027c56 -r 25903e52af48 graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java --- 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();