summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>2015-10-14 17:12:40 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>2015-10-14 17:12:40 +0000
commit3fb744110d6c2178096c32c0ec253a4e72d6764c (patch)
tree868e460d297dff1b67349c10fe24300a8bbf8f16
parentd4cea26de64877f72deb68e06cec36ea9965282a (diff)
downloadgcc-3fb744110d6c2178096c32c0ec253a4e72d6764c.tar.gz
[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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@228821 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/testsuite/ChangeLog11
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2.c117
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2a.c21
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2b.c30
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2c.c32
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2d.c29
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2e.c28
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2f.c34
8 files changed, 185 insertions, 117 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 800973287ad..f45ab81e5ca 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index bb697d16979..00000000000
--- 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 00000000000..73d0ccf0cb4
--- /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 00000000000..2f17517ea29
--- /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 00000000000..3a1f0d0ba6f
--- /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 00000000000..5a4b7055884
--- /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 00000000000..e0c7738d057
--- /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 00000000000..e278df01c00
--- /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"} } */