# HG changeset patch # User Lukas Stadler # Date 1373635787 -7200 # Node ID 7cc08d83111dfe6d8b8dc3ae266b152c6d0bc67b # Parent 867588b3ecb423e8f6f8493c30cd4398140c264a correctly anchor eliminated guards during ConditionalElimination diff -r 867588b3ecb4 -r 7cc08d83111d graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java --- 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); + } } } }