changeset 23317:15296f7da135

Branch probability fix for usage in ConditionalNode.
author Manuel Rigger <rigger.manuel@gmail.com>
date Mon, 18 Jan 2016 18:37:09 +0100
parents 52f4acf6f365
children 0adc3361952c
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BranchProbabilityNode.java
diffstat 1 files changed, 5 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BranchProbabilityNode.java	Mon Jan 18 10:29:19 2016 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BranchProbabilityNode.java	Mon Jan 18 18:37:09 2016 +0100
@@ -33,6 +33,7 @@
 import com.oracle.graal.nodes.IfNode;
 import com.oracle.graal.nodes.ReturnNode;
 import com.oracle.graal.nodes.ValueNode;
+import com.oracle.graal.nodes.calc.ConditionalNode;
 import com.oracle.graal.nodes.calc.FloatingNode;
 import com.oracle.graal.nodes.calc.IntegerEqualsNode;
 import com.oracle.graal.nodes.spi.Lowerable;
@@ -92,6 +93,7 @@
                 return;
             }
             boolean couldSet = false;
+            boolean isExcused = false;
             for (IntegerEqualsNode node : this.usages().filter(IntegerEqualsNode.class)) {
                 if (node.condition() == Condition.EQ) {
                     ValueNode other = node.getX();
@@ -107,14 +109,13 @@
                             couldSet = true;
                             ifNodeUsages.setTrueSuccessorProbability(probabilityToSet);
                         }
-
-                        if (!couldSet && node.usages().filter(FixedGuardNode.class).isNotEmpty()) {
-                            couldSet = true;
+                        if (!couldSet) {
+                            isExcused = node.usages().filter(ConditionalNode.class).isNotEmpty() || node.usages().filter(FixedGuardNode.class).isNotEmpty();
                         }
                     }
                 }
             }
-            if (couldSet) {
+            if (couldSet || isExcused) {
                 ValueNode currentCondition = condition;
                 replaceAndDelete(currentCondition);
                 if (tool != null) {