changeset 15878:c315c86e2130

Fix exponential explosion when propagating zero probabilities.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Tue, 13 May 2014 12:15:32 +0200
parents f55153a2ca55
children b963148055d6
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java
diffstat 1 files changed, 5 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java	Tue May 13 03:57:06 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java	Tue May 13 12:15:32 2014 +0200
@@ -642,17 +642,19 @@
                     if (ifNode.trueSuccessorProbability == 0.0) {
                         return;
                     } else if (ifNode.trueSuccessorProbability == 1.0) {
-                        propagateZeroProbability((FixedNode) ifNode.predecessor());
+                        continue;
                     } else {
                         ifNode.setTrueSuccessorProbability(0.0);
+                        return;
                     }
                 } else if (ifNode.falseSuccessor() == prev) {
                     if (ifNode.trueSuccessorProbability == 1.0) {
                         return;
                     } else if (ifNode.trueSuccessorProbability == 0.0) {
-                        propagateZeroProbability((FixedNode) ifNode.predecessor());
+                        continue;
                     } else {
                         ifNode.setTrueSuccessorProbability(1.0);
+                        return;
                     }
                 } else {
                     throw new GraalInternalError("Illegal state");
@@ -661,6 +663,7 @@
                 for (AbstractEndNode endNode : ((MergeNode) node).cfgPredecessors()) {
                     propagateZeroProbability(endNode);
                 }
+                return;
             }
             prev = node;
         }