# HG changeset patch # User Lukas Stadler # Date 1400760295 -7200 # Node ID 9e172511971d6acbe1743d8474c71d0c1317d64c # Parent 399aa56c636645f6400ac69ae8666f077cae62f1 make FixedNodeProbabilityCache behave better in the presence of dead code diff -r 399aa56c6366 -r 9e172511971d graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/FixedNodeProbabilityCache.java --- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/FixedNodeProbabilityCache.java Thu May 22 13:19:47 2014 +0200 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/FixedNodeProbabilityCache.java Thu May 22 14:04:55 2014 +0200 @@ -42,10 +42,14 @@ private final Map cache = newIdentityMap(); public double applyAsDouble(FixedNode node) { + assert node != null; metricComputeNodeProbability.increment(); FixedNode current = node; while (true) { + if (current == null) { + return 1D; + } Node predecessor = current.predecessor(); if (current instanceof BeginNode) { if (predecessor == null) { @@ -54,6 +58,9 @@ assert predecessor instanceof ControlSplitNode : "a FixedNode with multiple successors needs to be a ControlSplitNode: " + current + " / " + predecessor; break; } + } else if (predecessor == null) { + // this should only appear for dead code + return 1D; } current = (FixedNode) predecessor; } @@ -70,10 +77,8 @@ if (current instanceof LoopBeginNode) { probability *= ((LoopBeginNode) current).loopFrequency(); } - } else if (current instanceof StartNode) { - probability = 1D; } else { - // this should only appear for dead code + assert current instanceof StartNode; probability = 1D; } } else {