changeset 23367:1f75da663952

traverse usages in branch probability node only once for fixed guard and conditional nodes.
author Manuel Rigger <rigger.manuel@gmail.com>
date Tue, 02 Feb 2016 15:54:14 +0100
parents fa2f41c11e98
children 02bb6d11986c
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BranchProbabilityNode.java
diffstat 1 files changed, 8 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BranchProbabilityNode.java	Sun Jan 31 22:40:03 2016 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BranchProbabilityNode.java	Tue Feb 02 15:54:14 2016 +0100
@@ -22,10 +22,9 @@
  */
 package com.oracle.graal.nodes.extended;
 
-import jdk.vm.ci.common.JVMCIError;
-
 import com.oracle.graal.compiler.common.calc.Condition;
 import com.oracle.graal.graph.NodeClass;
+import com.oracle.graal.graph.iterators.NodePredicates;
 import com.oracle.graal.graph.spi.Simplifiable;
 import com.oracle.graal.graph.spi.SimplifierTool;
 import com.oracle.graal.nodeinfo.NodeInfo;
@@ -39,6 +38,8 @@
 import com.oracle.graal.nodes.spi.Lowerable;
 import com.oracle.graal.nodes.spi.LoweringTool;
 
+import jdk.vm.ci.common.JVMCIError;
+
 /**
  * Instances of this node class will look for a preceding if node and put the given probability into
  * the if node's taken probability. Then the branch probability node will be removed. This node is
@@ -92,8 +93,7 @@
                  */
                 return;
             }
-            boolean couldSet = false;
-            boolean isExcused = false;
+            boolean usageFound = false;
             for (IntegerEqualsNode node : this.usages().filter(IntegerEqualsNode.class)) {
                 if (node.condition() == Condition.EQ) {
                     ValueNode other = node.getX();
@@ -106,16 +106,16 @@
                             probabilityToSet = 1.0 - probabilityToSet;
                         }
                         for (IfNode ifNodeUsages : node.usages().filter(IfNode.class)) {
-                            couldSet = true;
+                            usageFound = true;
                             ifNodeUsages.setTrueSuccessorProbability(probabilityToSet);
                         }
-                        if (!couldSet) {
-                            isExcused = node.usages().filter(ConditionalNode.class).isNotEmpty() || node.usages().filter(FixedGuardNode.class).isNotEmpty();
+                        if (!usageFound) {
+                            usageFound = node.usages().filter(NodePredicates.isA(FixedGuardNode.class).or(ConditionalNode.class)).isNotEmpty();
                         }
                     }
                 }
             }
-            if (couldSet || isExcused) {
+            if (usageFound) {
                 ValueNode currentCondition = condition;
                 replaceAndDelete(currentCondition);
                 if (tool != null) {