# HG changeset patch # User Christian Haeubl # Date 1370613739 -7200 # Node ID 3d5fdf185a67146017b575ddbc908e93b5d052e3 # Parent 8d62b9774d0cfbf3e926531099ff3d92060b9b22 Bugfix concerning ComputeProbabilityClosure. diff -r 8d62b9774d0c -r 3d5fdf185a67 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SwitchNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SwitchNode.java Fri Jun 07 14:57:36 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SwitchNode.java Fri Jun 07 16:02:19 2013 +0200 @@ -56,9 +56,12 @@ } private boolean assertProbabilities() { + double total = 0; for (double d : keyProbabilities) { + total += d; assert d >= 0.0 : "Cannot have negative probabilities in switch node: " + d; } + assert total > 0.999 && total < 1.001; return true; } diff -r 8d62b9774d0c -r 3d5fdf185a67 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/ComputeProbabilityClosure.java --- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/ComputeProbabilityClosure.java Fri Jun 07 14:57:36 2013 +0200 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/ComputeProbabilityClosure.java Fri Jun 07 16:02:19 2013 +0200 @@ -24,6 +24,7 @@ import java.util.*; +import com.oracle.graal.debug.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; @@ -102,7 +103,7 @@ for (Node pred : currentNode.cfgPredecessors()) { FixedNode fixedPred = (FixedNode) pred; - if (allSuxVisited(fixedPred, visitedNodes)) { + if (allSuxVisited(fixedPred, visitedNodes) || fixedPred instanceof InvokeWithExceptionNode) { nodes.push(fixedPred); } else { assert fixedPred instanceof ControlSplitNode : "only control splits can have more than one sux"; @@ -112,7 +113,7 @@ } while (!nodes.isEmpty()); } - private static void modifyProbabilities(Node node, NodeBitMap visitedNodes) { + private static void modifyProbabilities(ControlSplitNode node, NodeBitMap visitedNodes) { if (node instanceof IfNode) { IfNode ifNode = (IfNode) node; assert visitedNodes.isMarked(ifNode.falseSuccessor()) ^ visitedNodes.isMarked(ifNode.trueSuccessor()); @@ -134,7 +135,7 @@ } } } else { - assert !(node instanceof ControlSplitNode); + GraalInternalError.shouldNotReachHere(); } }