# HG changeset patch # User Lukas Stadler # Date 1412758193 -7200 # Node ID 40dce17629ac50a3406606e21a78a85c8848893c # Parent 4b94e5f3d823b4087569046d237aa5650da340e9 correct IfNode probabilities in If-Deopt situations diff -r 4b94e5f3d823 -r 40dce17629ac graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java --- 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();