Mercurial > hg > graal-compiler
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) {