[PATCH] Split ssa-dom-thread-2.c into separate files/tests
authorJeff Law <law@redhat.com>
Wed, 14 Oct 2015 17:12:40 +0000 (11:12 -0600)
committerJeff Law <law@gcc.gnu.org>
Wed, 14 Oct 2015 17:12:40 +0000 (11:12 -0600)
* gcc.dg/tree-ssa/ssa-dom-thread-2.c: Deleted.  The six functions
contained within have their own file/test now.
* gcc.dg/tree-ssa/ssa-dom-thread-2a.c: New test extracted from
ssa-dom-thread-2.c.  Tighten expected output slightly and comment
expectations a bit more.
* gcc.dg/tree-ssa/ssa-dom-thread-2b.c: Likewise.
* gcc.dg/tree-ssa/ssa-dom-thread-2c.c: Likewise.
* gcc.dg/tree-ssa/ssa-dom-thread-2d.c: Likewise.
* gcc.dg/tree-ssa/ssa-dom-thread-2e.c: Likewise.
* gcc.dg/tree-ssa/ssa-dom-thread-2f.c: Likewise.

From-SVN: r228821

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2.c [deleted file]
gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2a.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2b.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2c.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2d.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2e.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2f.c [new file with mode: 0644]

index 8009732..f45ab81 100644 (file)
@@ -1,5 +1,16 @@
 2015-10-14  Jeff Law  <law@redhat.com>
 
+       * gcc.dg/tree-ssa/ssa-dom-thread-2.c: Deleted.  The six functions
+       contained within have their own file/test now.
+       * gcc.dg/tree-ssa/ssa-dom-thread-2a.c: New test extracted from
+       ssa-dom-thread-2.c.  Tighten expected output slightly and comment
+       expectations a bit more.
+       * gcc.dg/tree-ssa/ssa-dom-thread-2b.c: Likewise.
+       * gcc.dg/tree-ssa/ssa-dom-thread-2c.c: Likewise.
+       * gcc.dg/tree-ssa/ssa-dom-thread-2d.c: Likewise.
+       * gcc.dg/tree-ssa/ssa-dom-thread-2e.c: Likewise.
+       * gcc.dg/tree-ssa/ssa-dom-thread-2f.c: Likewise.
+
         PR testsuite/67959
        * gcc.dg/tree-ssa/ssa-thread-13.c: Avoid bitfield assumptions.
 
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2.c
deleted file mode 100644 (file)
index bb697d1..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom1-stats" } */
-
-void foo();
-void bla();
-void bar();
-
-/* In the following two cases, we should be able to thread edge through
-   the loop header.  */
-
-void thread_entry_through_header (void)
-{
-  int i;
-
-  for (i = 0; i < 170; i++)
-    bla ();
-}
-
-void thread_latch_through_header (void)
-{
-  int i = 0;
-  int first = 1;
-
-  do
-    {
-      if (first)
-       foo ();
-
-      first = 0;
-      bla ();
-    } while (i++ < 100);
-}
-
-/* This is a TODO -- it is correct to thread both entry and latch edge through
-   the header, but we do not handle this case yet.  */
-
-void dont_thread_1 (void)
-{
-  int i = 0;
-  int first = 1;
-
-  do
-    {
-      if (first)
-       foo ();
-      else
-       bar ();
-
-      first = 0;
-      bla ();
-    } while (i++ < 100);
-}
-
-/* Avoid threading in the following two cases, to prevent creating subloops.  */
-
-void dont_thread_2 (int first)
-{
-  int i = 0;
-
-  do
-    {
-      if (first)
-       foo ();
-      else
-       bar ();
-
-      first = 0;
-      bla ();
-    } while (i++ < 100);
-}
-
-void dont_thread_3 (int nfirst)
-{
-  int i = 0;
-  int first = 0;
-
-  do
-    {
-      if (first)
-       foo ();
-      else
-       bar ();
-
-      first = nfirst;
-      bla ();
-    } while (i++ < 100);
-}
-
-/* Avoid threading in this case, in order to avoid creating loop with
-   multiple entries.  */
-
-void dont_thread_4 (int a, int nfirst)
-{
-  int i = 0;
-  int first;
-
-  if (a)
-    first = 0;
-  else
-    first = 1;
-
-  do
-    {
-      if (first)
-       foo ();
-      else
-       bar ();
-
-      first = nfirst;
-      bla ();
-    } while (i++ < 100);
-}
-
-/* { dg-final { scan-tree-dump-times "Jumps threaded: 1" 1 "vrp1"} } */
-/* { dg-final { scan-tree-dump-times "Jumps threaded: 2" 0 "vrp1"} } */
-/* { dg-final { scan-tree-dump-times "Jumps threaded: 1" 0 "dom1"} } */
-/* { dg-final { scan-tree-dump-times "Jumps threaded: 2" 1 "dom1"} } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2a.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2a.c
new file mode 100644 (file)
index 0000000..73d0ccf
--- /dev/null
@@ -0,0 +1,21 @@
+/* { dg-do compile } */ 
+/* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom1-stats" } */
+
+void bla();
+
+/* In the following case, we should be able to thread edge through
+   the loop header.  */
+
+void thread_entry_through_header (void)
+{
+  int i;
+
+  for (i = 0; i < 170; i++)
+    bla ();
+}
+
+/* There's a single jump thread that should be handled by the VRP
+   jump threading pass.  */
+/* { dg-final { scan-tree-dump-times "Jumps threaded: 1" 1 "vrp1"} } */
+/* { dg-final { scan-tree-dump-times "Jumps threaded: 2" 0 "vrp1"} } */
+/* { dg-final { scan-tree-dump-not "Jumps threaded" "dom1"} } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2b.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2b.c
new file mode 100644 (file)
index 0000000..2f17517
--- /dev/null
@@ -0,0 +1,30 @@
+/* { dg-do compile } */ 
+/* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom1-stats" } */
+
+void foo();
+void bla();
+
+/* In the following case, we should be able to thread edge through
+   the loop header.  */
+
+void thread_latch_through_header (void)
+{
+  int i = 0;
+  int first = 1;
+
+  do
+    {
+      if (first)
+       foo ();
+
+      first = 0;
+      bla ();
+    } while (i++ < 100);
+}
+
+/* Threading the latch to a later point in the loop is safe in this
+   case.  And we want to thread through the header as well.  These
+   are both caught by threading in DOM.  */
+/* { dg-final { scan-tree-dump-not "Jumps threaded" "vrp1"} } */
+/* { dg-final { scan-tree-dump-times "Jumps threaded: 1" 0 "dom1"} } */
+/* { dg-final { scan-tree-dump-times "Jumps threaded: 2" 1 "dom1"} } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2c.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2c.c
new file mode 100644 (file)
index 0000000..3a1f0d0
--- /dev/null
@@ -0,0 +1,32 @@
+/* { dg-do compile } */ 
+/* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom1-stats" } */
+
+void foo();
+void bla();
+void bar();
+
+/* This is a TODO -- it is correct to thread both entry and latch edge through
+   the header, but we do not handle this case yet.  */
+
+void dont_thread_1 (void)
+{
+  int i = 0;
+  int first = 1;
+
+  do
+    {
+      if (first)
+       foo ();
+      else
+       bar ();
+
+      first = 0;
+      bla ();
+    } while (i++ < 100);
+}
+
+/* In this case we can thread if and only if we thread through the
+   header and around the latch.  If one is done without the other, then
+   we create an irreducible CFG. */
+/* { dg-final { scan-tree-dump-not "Jumps threaded" "vrp1"} } */
+/* { dg-final { scan-tree-dump-not "Jumps threaded" "dom1"} } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2d.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2d.c
new file mode 100644 (file)
index 0000000..5a4b705
--- /dev/null
@@ -0,0 +1,29 @@
+/* { dg-do compile } */ 
+/* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom1-stats" } */
+
+void foo();
+void bla();
+void bar();
+
+/* Avoid threading in the following case, to prevent creating subloops.  */
+
+void dont_thread_2 (int first)
+{
+  int i = 0;
+
+  do
+    {
+      if (first)
+       foo ();
+      else
+       bar ();
+
+      first = 0;
+      bla ();
+    } while (i++ < 100);
+}
+
+/* Peeling off the first iteration would make threading through
+   the loop latch safe, but we don't do that currently.  */
+/* { dg-final { scan-tree-dump-not "Jumps threaded" "vrp1"} } */
+/* { dg-final { scan-tree-dump-not "Jumps threaded" "dom1"} } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2e.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2e.c
new file mode 100644 (file)
index 0000000..e0c7738
--- /dev/null
@@ -0,0 +1,28 @@
+/* { dg-do compile } */ 
+/* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom1-stats" } */
+
+void foo();
+void bla();
+void bar();
+
+void dont_thread_3 (int nfirst)
+{
+  int i = 0;
+  int first = 0;
+
+  do
+    {
+      if (first)
+       foo ();
+      else
+       bar ();
+
+      first = nfirst;
+      bla ();
+    } while (i++ < 100);
+}
+
+/* Threading through the loop header is not safe here.  Peeling off
+   the first iteration then unswitching the loop would be safe.  */
+/* { dg-final { scan-tree-dump-not "Jumps threaded" "vrp1"} } */
+/* { dg-final { scan-tree-dump-not "Jumps threaded" "dom1"} } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2f.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2f.c
new file mode 100644 (file)
index 0000000..e278df0
--- /dev/null
@@ -0,0 +1,34 @@
+/* { dg-do compile } */ 
+/* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom1-stats" } */
+
+void foo();
+void bla();
+void bar();
+
+/* Avoid threading in this case, in order to avoid creating loop with
+   multiple entries.  */
+
+void dont_thread_4 (int a, int nfirst)
+{
+  int i = 0;
+  int first;
+
+  if (a)
+    first = 0;
+  else
+    first = 1;
+
+  do
+    {
+      if (first)
+       foo ();
+      else
+       bar ();
+
+      first = nfirst;
+      bla ();
+    } while (i++ < 100);
+}
+
+/* { dg-final { scan-tree-dump-not "Jumps threaded" "vrp1"} } */
+/* { dg-final { scan-tree-dump-not "Jumps threaded" "dom1"} } */