# HG changeset patch # User Thomas Wuerthinger # Date 1399976132 -7200 # Node ID c315c86e21304e800ca3bcf2e84783702fed1520 # Parent f55153a2ca55768910f13cb6a8c0391f05fc5013 Fix exponential explosion when propagating zero probabilities. diff -r f55153a2ca55 -r c315c86e2130 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java --- 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; }