Mercurial > hg > graal-jvmci-8
changeset 15847:9e172511971d
make FixedNodeProbabilityCache behave better in the presence of dead code
author | Lukas Stadler <lukas.stadler@oracle.com> |
---|---|
date | Thu, 22 May 2014 14:04:55 +0200 |
parents | 399aa56c6366 |
children | 11328036d854 |
files | graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/FixedNodeProbabilityCache.java |
diffstat | 1 files changed, 8 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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<FixedNode, Double> 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 {