Mercurial > hg > graal-compiler
changeset 14934:f83404938588
eliminate redundant FixedGuards
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Tue, 01 Apr 2014 15:49:13 -0700 |
parents | 0a7fce0ac01b |
children | 1b96d1a74514 |
files | graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java |
diffstat | 1 files changed, 7 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java Tue Apr 01 15:42:42 2014 -0700 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java Tue Apr 01 15:49:13 2014 -0700 @@ -679,7 +679,13 @@ } } else if (node instanceof FixedGuardNode) { FixedGuardNode guard = (FixedGuardNode) node; - registerCondition(!guard.isNegated(), guard.condition(), guard); + ValueNode existingGuard = guard.isNegated() ? state.falseConditions.get(guard.condition()) : state.trueConditions.get(guard.condition()); + if (existingGuard != null && existingGuard instanceof FixedGuardNode) { + guard.replaceAtUsages(existingGuard); + guard.graph().removeFixed(guard); + } else { + registerCondition(!guard.isNegated(), guard.condition(), guard); + } } else if (node instanceof CheckCastNode) { CheckCastNode checkCast = (CheckCastNode) node; ValueNode object = checkCast.object();