Mercurial > hg > truffle
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;