changeset 12485:b433297f21c4

Conditional Elimination should not skip registering ShortCut conditions
author Gilles Duboscq <duboscq@ssw.jku.at>
date Thu, 17 Oct 2013 18:18:05 +0200
parents 2d8a8980eda8
children cfb89901214a
files graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java
diffstat 1 files changed, 36 insertions(+), 37 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java	Thu Oct 17 18:18:05 2013 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java	Thu Oct 17 18:18:05 2013 +0200
@@ -318,44 +318,43 @@
                 ShortCircuitOrNode disjunction = (ShortCircuitOrNode) condition;
                 registerCondition(disjunction.isXNegated(), disjunction.getX(), anchor);
                 registerCondition(disjunction.isYNegated(), disjunction.getY(), anchor);
-            } else {
-                state.addCondition(isTrue, condition, anchor);
+            }
+            state.addCondition(isTrue, condition, anchor);
 
-                if (isTrue && condition instanceof InstanceOfNode) {
-                    InstanceOfNode instanceOf = (InstanceOfNode) condition;
-                    ValueNode object = instanceOf.object();
-                    state.addNullness(false, object);
-                    state.addType(instanceOf.type(), object);
-                } else if (condition instanceof IsNullNode) {
-                    IsNullNode nullCheck = (IsNullNode) condition;
-                    state.addNullness(isTrue, nullCheck.object());
-                } else if (condition instanceof ObjectEqualsNode) {
-                    ObjectEqualsNode equals = (ObjectEqualsNode) condition;
-                    ValueNode x = equals.x();
-                    ValueNode y = equals.y();
-                    if (isTrue) {
-                        if (state.isNull(x) && !state.isNull(y)) {
-                            metricObjectEqualsRegistered.increment();
-                            state.addNullness(true, y);
-                        } else if (!state.isNull(x) && state.isNull(y)) {
-                            metricObjectEqualsRegistered.increment();
-                            state.addNullness(true, x);
-                        }
-                        if (state.isNonNull(x) && !state.isNonNull(y)) {
-                            metricObjectEqualsRegistered.increment();
-                            state.addNullness(false, y);
-                        } else if (!state.isNonNull(x) && state.isNonNull(y)) {
-                            metricObjectEqualsRegistered.increment();
-                            state.addNullness(false, x);
-                        }
-                    } else {
-                        if (state.isNull(x) && !state.isNonNull(y)) {
-                            metricObjectEqualsRegistered.increment();
-                            state.addNullness(false, y);
-                        } else if (!state.isNonNull(x) && state.isNull(y)) {
-                            metricObjectEqualsRegistered.increment();
-                            state.addNullness(false, x);
-                        }
+            if (isTrue && condition instanceof InstanceOfNode) {
+                InstanceOfNode instanceOf = (InstanceOfNode) condition;
+                ValueNode object = instanceOf.object();
+                state.addNullness(false, object);
+                state.addType(instanceOf.type(), object);
+            } else if (condition instanceof IsNullNode) {
+                IsNullNode nullCheck = (IsNullNode) condition;
+                state.addNullness(isTrue, nullCheck.object());
+            } else if (condition instanceof ObjectEqualsNode) {
+                ObjectEqualsNode equals = (ObjectEqualsNode) condition;
+                ValueNode x = equals.x();
+                ValueNode y = equals.y();
+                if (isTrue) {
+                    if (state.isNull(x) && !state.isNull(y)) {
+                        metricObjectEqualsRegistered.increment();
+                        state.addNullness(true, y);
+                    } else if (!state.isNull(x) && state.isNull(y)) {
+                        metricObjectEqualsRegistered.increment();
+                        state.addNullness(true, x);
+                    }
+                    if (state.isNonNull(x) && !state.isNonNull(y)) {
+                        metricObjectEqualsRegistered.increment();
+                        state.addNullness(false, y);
+                    } else if (!state.isNonNull(x) && state.isNonNull(y)) {
+                        metricObjectEqualsRegistered.increment();
+                        state.addNullness(false, x);
+                    }
+                } else {
+                    if (state.isNull(x) && !state.isNonNull(y)) {
+                        metricObjectEqualsRegistered.increment();
+                        state.addNullness(false, y);
+                    } else if (!state.isNonNull(x) && state.isNull(y)) {
+                        metricObjectEqualsRegistered.increment();
+                        state.addNullness(false, x);
                     }
                 }
             }