changeset 17381:40dce17629ac

correct IfNode probabilities in If-Deopt situations
author Lukas Stadler <lukas.stadler@oracle.com>
date Wed, 08 Oct 2014 10:49:53 +0200
parents 4b94e5f3d823
children e1da729b3e4e
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java
diffstat 1 files changed, 14 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java	Wed Oct 08 10:49:08 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java	Wed Oct 08 10:49:53 2014 +0200
@@ -49,6 +49,8 @@
 @NodeInfo
 public class IfNode extends ControlSplitNode implements Simplifiable, LIRLowerable {
 
+    private static final DebugMetric CORRECTED_PROBABILITIES = Debug.metric("CorrectedProbabilities");
+
     @Successor BeginNode trueSuccessor;
     @Successor BeginNode falseSuccessor;
     @Input(InputType.Condition) LogicNode condition;
@@ -147,6 +149,18 @@
 
     @Override
     public void simplify(SimplifierTool tool) {
+        if (trueSuccessor().next() instanceof DeoptimizeNode) {
+            if (trueSuccessorProbability != 0) {
+                CORRECTED_PROBABILITIES.increment();
+                trueSuccessorProbability = 0;
+            }
+        } else if (falseSuccessor().next() instanceof DeoptimizeNode) {
+            if (trueSuccessorProbability != 1) {
+                CORRECTED_PROBABILITIES.increment();
+                trueSuccessorProbability = 1;
+            }
+        }
+
         if (condition() instanceof LogicNegationNode) {
             BeginNode trueSucc = trueSuccessor();
             BeginNode falseSucc = falseSuccessor();