changeset 18721:d747b9e5695c

ConditionalElimination: Eliminate ShortCircuitOr condition if first input is known to be false
author Andreas Woess <andreas.woess@jku.at>
date Thu, 18 Dec 2014 18:31:19 +0100
parents ab9d3ff6829b
children f88692118a85
files graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java
diffstat 1 files changed, 11 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java	Thu Dec 18 09:17:22 2014 -0800
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java	Thu Dec 18 18:31:19 2014 +0100
@@ -51,6 +51,7 @@
     private static final DebugMetric metricNullCheckRemoved = Debug.metric("NullCheckRemoved");
     private static final DebugMetric metricObjectEqualsRemoved = Debug.metric("ObjectEqualsRemoved");
     private static final DebugMetric metricGuardsRemoved = Debug.metric("GuardsRemoved");
+    private static final DebugMetric metricShortCircuitOrRemoved = Debug.metric("ShortCircuitOrRemoved");
 
     private StructuredGraph graph;
 
@@ -633,6 +634,16 @@
                         metricObjectEqualsRemoved.increment();
                         return trueValue;
                     }
+                } else if (condition instanceof ShortCircuitOrNode) {
+                    ShortCircuitOrNode shortCircuitOr = (ShortCircuitOrNode) condition;
+                    T xResult = evaluateCondition(shortCircuitOr.getX(), trueValue, falseValue);
+                    if (xResult != null) {
+                        if (xResult == (shortCircuitOr.isXNegated() ? trueValue : falseValue)) {
+                            // x condition is false => short circuit result is false
+                            metricShortCircuitOrRemoved.increment();
+                            return falseValue;
+                        }
+                    }
                 }
             }
             return null;