# HG changeset patch # User Manuel Rigger # Date 1454424854 -3600 # Node ID 1f75da663952502403089558b1ba6eaaa8664205 # Parent fa2f41c11e98b54517b251a9078ac3e35139ec85 traverse usages in branch probability node only once for fixed guard and conditional nodes. diff -r fa2f41c11e98 -r 1f75da663952 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BranchProbabilityNode.java --- 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) {