ssa-dom-thread-2.c is actually 6 distinct tests crammed into a single file. That's normally not a huge problem, but it can make tests hard to write when we're scanning dumps.

This patch splits it into 6 distinct tests. ssa-dom-thread-2[a-f].c. It also tightens the expected output slightly for each test and adds further comments to the tests.


Tested on x86_64-linux-gnu.  Installed on the trunk.

Jeff
commit 8715d70d2da7ab22a793437c6298c51a6fbae70f
Author: Jeff Law <l...@tor.usersys.redhat.com>
Date:   Wed Oct 14 13:09:29 2015 -0400

    [PATCH] Split ssa-dom-thread-2.c into separate files/tests
    
        * 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.

diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8009732..f45ab81 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,16 @@
 2015-10-14  Jeff Law  <l...@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
index bb697d1..0000000
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2.c
+++ /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
index 0000000..73d0ccf
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2a.c
@@ -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
index 0000000..2f17517
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2b.c
@@ -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
index 0000000..3a1f0d0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2c.c
@@ -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
index 0000000..5a4b705
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2d.c
@@ -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
index 0000000..e0c7738
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2e.c
@@ -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
index 0000000..e278df0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2f.c
@@ -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"} } */

Reply via email to