changeset 9469:8c37649cbb62

Fixes for probability calculation.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Wed, 01 May 2013 17:05:14 +0200
parents d80d5e8e29ef
children 225fc5463430
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java
diffstat 2 files changed, 7 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java	Wed May 01 16:49:14 2013 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java	Wed May 01 17:05:14 2013 +0200
@@ -122,7 +122,7 @@
     }
 
     public void setTrueSuccessorProbability(double prob) {
-        assert prob >= 0.0 && prob <= 1.0;
+        assert prob >= 0.0 && prob <= 1.0 : "Probability out of bounds: " + prob;
         trueSuccessorProbability = prob;
     }
 
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java	Wed May 01 16:49:14 2013 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java	Wed May 01 17:05:14 2013 +0200
@@ -653,7 +653,12 @@
                     assert concretesProbability >= 0.0;
                     probability[i] = concretesProbability;
                     if (i > 0) {
-                        probability[i] = Math.max(0.0, probability[i] / 1.0 - probability[i - 1]);
+                        double prevProbability = probability[i - 1];
+                        if (prevProbability == 1.0) {
+                            probability[i] = 1.0;
+                        } else {
+                            probability[i] = Math.max(0.0, probability[i] / (1.0 - prevProbability));
+                        }
                     }
                 }