Mercurial > hg > graal-compiler
changeset 23161:dfae34f1fe9b
Enable pending test elimination for non-integer stamps.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Sun, 13 Dec 2015 11:27:37 +0100 |
parents | cca72677127b |
children | 59bb4f5ec80e |
files | graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConditionalEliminationTest5.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DominatorConditionalEliminationPhase.java |
diffstat | 2 files changed, 38 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConditionalEliminationTest5.java Tue Dec 08 20:47:09 2015 -0800 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConditionalEliminationTest5.java Sun Dec 13 11:27:37 2015 +0100 @@ -24,6 +24,8 @@ import org.junit.Test; +import com.oracle.graal.api.directives.GraalDirectives; + /** * Collection of tests for * {@link com.oracle.graal.phases.common.DominatorConditionalEliminationPhase} including those that @@ -43,16 +45,14 @@ static final class DistinctB { } - @SuppressWarnings("all") - public static int reference1Snippet(A a, B b) { + public static int reference1Snippet(Object a) { if (a instanceof B) { return 1; } return 2; } - @SuppressWarnings("all") - public static int test1Snippet(A a, B b) { + public static int test1Snippet(Object a) { if (a instanceof B) { if (a instanceof A) { return 1; @@ -117,4 +117,37 @@ public void test3() { testConditionalElimination("test3Snippet", "reference3Snippet", true); } + + public static int reference4Snippet(Object a) { + if (!(a instanceof B)) { + GraalDirectives.deoptimize(); + } + return 1; + } + + public static int test4Snippet1(Object a) { + if (!(a instanceof B)) { + GraalDirectives.deoptimize(); + } + if (!(a instanceof A)) { + GraalDirectives.deoptimize(); + } + return 1; + } + + public static int test4Snippet2(Object a) { + if (!(a instanceof A)) { + GraalDirectives.deoptimize(); + } + if (!(a instanceof B)) { + GraalDirectives.deoptimize(); + } + return 1; + } + + @Test + public void test4() { + testConditionalElimination("test4Snippet1", "reference4Snippet"); + testConditionalElimination("test4Snippet2", "reference4Snippet"); + } }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DominatorConditionalEliminationPhase.java Tue Dec 08 20:47:09 2015 -0800 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DominatorConditionalEliminationPhase.java Sun Dec 13 11:27:37 2015 +0100 @@ -648,7 +648,7 @@ return rewireGuards(foldResult.first.getGuard(), result.toBoolean(), rewireGuardFunction); } } - if (thisGuard != null && unaryLogicNode.stamp() instanceof IntegerStamp) { + if (thisGuard != null) { Stamp newStamp = unaryLogicNode.getSucceedingStampForValue(thisGuard.isNegated()); if (newStamp != null && foldPendingTest(thisGuard, value, newStamp, rewireGuardFunction)) { return true;