changeset 19753:dde8a89e7f92

Add conditional elimination test cases.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Tue, 10 Mar 2015 15:52:07 +0100
parents 15bb034480d7
children 37969636e6f8
files graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConditionalEliminationTest5.java graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConditionalEliminationTestBase.java
diffstat 2 files changed, 49 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- 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);
+    }
 }
--- 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);
     }