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 {