# HG changeset patch # User Thomas Wuerthinger # Date 1425999127 -3600 # Node ID dde8a89e7f9254c09937ff20b70afc7c494308ee # Parent 15bb034480d7be6468be47fca2a5d7f79577d8b2 Add conditional elimination test cases. diff -r 15bb034480d7 -r dde8a89e7f92 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConditionalEliminationTest5.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConditionalEliminationTest5.java Tue Mar 10 15:28:02 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConditionalEliminationTest5.java Tue Mar 10 15:52:07 2015 +0100 @@ -37,6 +37,12 @@ interface B extends A { } + static final class DistinctA { + } + + static final class DistinctB { + } + @SuppressWarnings("all") public static int reference1Snippet(A a, B b) { if (a instanceof B) { @@ -60,16 +66,14 @@ test("test1Snippet", "reference1Snippet"); } - @SuppressWarnings("all") - public static int reference2Snippet(A a, B b) { + public static int reference2Snippet(A a) { if (a instanceof B) { return 1; } return 2; } - @SuppressWarnings("all") - public static int test2Snippet(A a, B b) { + public static int test2Snippet(A a) { if (a instanceof B) { B newVal = (B) a; if (newVal != null) { @@ -83,4 +87,34 @@ public void test2() { test("test2Snippet", "reference2Snippet"); } + + @SuppressWarnings("unused") + public static int reference3Snippet(Object a, Object b) { + if (a instanceof DistinctA) { + DistinctA proxyA = (DistinctA) a; + if (b instanceof DistinctB) { + return 1; + } + } + return 2; + } + + @SuppressWarnings("all") + public static int test3Snippet(Object a, Object b) { + if (a instanceof DistinctA) { + DistinctA proxyA = (DistinctA) a; + if (b instanceof DistinctB) { + if (proxyA == b) { + return 42; + } + return 1; + } + } + return 2; + } + + @Test + public void test3() { + test("test3Snippet", "reference3Snippet", true); + } } diff -r 15bb034480d7 -r dde8a89e7f92 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConditionalEliminationTestBase.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConditionalEliminationTestBase.java Tue Mar 10 15:28:02 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConditionalEliminationTestBase.java Tue Mar 10 15:52:07 2015 +0100 @@ -40,6 +40,10 @@ public class ConditionalEliminationTestBase extends GraalCompilerTest { protected void test(String snippet, String referenceSnippet) { + test(snippet, referenceSnippet, false); + } + + protected void test(String snippet, String referenceSnippet, boolean applyConditionalEliminationOnReference) { StructuredGraph graph = parseEager(snippet, AllowAssumptions.YES); Debug.dump(graph, "Graph"); PhaseContext context = new PhaseContext(getProviders()); @@ -52,7 +56,13 @@ canonicalizer.apply(graph, context); canonicalizer.apply(graph, context); StructuredGraph referenceGraph = parseEager(referenceSnippet, AllowAssumptions.YES); - canonicalizer.apply(referenceGraph, context); + if (applyConditionalEliminationOnReference) { + new DominatorConditionalEliminationPhase(true).apply(referenceGraph, context); + canonicalizer.apply(referenceGraph, context); + canonicalizer.apply(referenceGraph, context); + } else { + canonicalizer.apply(referenceGraph, context); + } assertEquals(referenceGraph, graph); }