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();