Mercurial > hg > graal-compiler
changeset 10720:7cc08d83111d
correctly anchor eliminated guards during ConditionalElimination
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Fri, 12 Jul 2013 15:29:47 +0200 |
parents | 867588b3ecb4 |
children | 5fc4aedf7910 |
files | graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java |
diffstat | 1 files changed, 16 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java Fri Jul 12 12:48:06 2013 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java Fri Jul 12 15:29:47 2013 +0200 @@ -397,15 +397,24 @@ GraphUtil.killWithUnusedFloatingInputs(guard); metricGuardsRemoved.increment(); } else { - LogicNode replacement = evaluateCondition(condition, trueConstant, falseConstant); - if (replacement != null) { - guard.setCondition(replacement); - if (condition.usages().isEmpty()) { - GraphUtil.killWithUnusedFloatingInputs(condition); + ValueNode anchor = state.trueConditions.get(condition); + if (anchor != null) { + if (!guard.negated()) { + guard.replaceAtUsages(anchor); + metricGuardsRemoved.increment(); + GraphUtil.killWithUnusedFloatingInputs(guard); } - metricGuardsRemoved.increment(); } else { - registerCondition(!guard.negated(), condition, guard); + anchor = state.falseConditions.get(condition); + if (anchor != null) { + if (guard.negated()) { + guard.replaceAtUsages(anchor); + metricGuardsRemoved.increment(); + GraphUtil.killWithUnusedFloatingInputs(guard); + } + } else { + registerCondition(!guard.negated(), condition, guard); + } } } }