[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.

From-SVN: r228821
This commit is contained in:
Jeff Law 2015-10-14 11:12:40 -06:00 committed by Jeff Law
parent cb62081c07
commit bb1125df53
8 changed files with 185 additions and 117 deletions

View 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.

View file

@ -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"} } */

View file

@ -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"} } */

View file

@ -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"} } */

View file

@ -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"} } */

View file

@ -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"} } */

View file

@ -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"} } */

View file

@ -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"} } */