From 29ba5b7a7c72bd5d6728af89b4d44135e17fa39f Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Tue, 7 Feb 2006 12:59:34 -0700 Subject: [PATCH] pr21559.c: New test. * gcc.dg/tree-ssa/pr21559.c: New test. From-SVN: r110713 --- gcc/testsuite/ChangeLog | 2 ++ gcc/testsuite/gcc.dg/tree-ssa/pr21559.c | 45 +++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr21559.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e9fb7d1b616..b0b39a31742 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -5,6 +5,8 @@ 2006-02-07 Jeff Law + * gcc.dg/tree-ssa/pr21559.c: New test. + * gcc.dg/tree-ssa/vrp01.c: Update dumpfile names now that we have multiple VRP passes. * gcc.dg/tree-ssa/vrp09.c: Likewise. diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr21559.c b/gcc/testsuite/gcc.dg/tree-ssa/pr21559.c new file mode 100644 index 00000000000..6ffcfa1973a --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr21559.c @@ -0,0 +1,45 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-vrp1-details" } */ + +static int blocksize = 4096; + +int bar (int); + +void foo (void) +{ + int toread; + int bytes; + static char eof_reached = 0; + + toread = blocksize; + bytes = 1; + + while (toread != 0) + { + bytes = bar (toread); + if (bytes <= 0) + { + if (bytes < 0) + continue; + break; + } + toread -= bytes; + } + + if (bytes == 0) + eof_reached = 1; +} + + +/* First, we should simplify the bits < 0 test within the loop. */ +/* { dg-final { scan-tree-dump-times "Simplified relational" 1 "vrp1" } } */ + +/* Second, we should thread the edge out of the loop via the break + statement. */ +/* { dg-final { scan-tree-dump-times "Threaded jump" 1 "vrp1" } } */ + +/* Now if we were really good, we'd realize that the final bytes == 0 + test is totally useless. That's not likely to happen anytime soon. */ + +/* { dg-final { cleanup-tree-dump "vrp1" } } */ + -- 2.30.2