changeset 11262:c4703de83626

Fix Switch probability if simplification leaves no non-zero probability successor
author Gilles Duboscq <duboscq@ssw.jku.at>
date Tue, 06 Aug 2013 14:44:36 +0200
parents 51dad16d84c4
children acf09b065eba
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IntegerSwitchNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SwitchNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeSwitchNode.java
diffstat 3 files changed, 9 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IntegerSwitchNode.java	Tue Aug 06 14:01:43 2013 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IntegerSwitchNode.java	Tue Aug 06 14:44:36 2013 +0200
@@ -150,6 +150,10 @@
                         for (int i = 0; i < current; i++) {
                             newKeyProbabilities[i] /= totalProbability;
                         }
+                    } else {
+                        for (int i = 0; i < current; i++) {
+                            newKeyProbabilities[i] = 1.0 / current;
+                        }
                     }
 
                     for (int i = 0; i < blockSuccessorCount(); i++) {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SwitchNode.java	Tue Aug 06 14:01:43 2013 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SwitchNode.java	Tue Aug 06 14:44:36 2013 +0200
@@ -61,7 +61,7 @@
             total += d;
             assert d >= 0.0 : "Cannot have negative probabilities in switch node: " + d;
         }
-        assert total > 0.999 && total < 1.001;
+        assert total > 0.999 && total < 1.001 : "Total " + total;
         return true;
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeSwitchNode.java	Tue Aug 06 14:01:43 2013 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeSwitchNode.java	Tue Aug 06 14:44:36 2013 +0200
@@ -136,6 +136,10 @@
                         for (int i = 0; i < current; i++) {
                             newKeyProbabilities[i] /= totalProbability;
                         }
+                    } else {
+                        for (int i = 0; i < current; i++) {
+                            newKeyProbabilities[i] = 1.0 / current;
+                        }
                     }
 
                     for (int i = 0; i < blockSuccessorCount(); i++) {