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