OSDN Git Service

PR rtl-optimization/52139
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / tree-ssa / pr21559.c
1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fdump-tree-vrp1-details" } */
3
4 static int blocksize = 4096;
5
6 int bar (int);
7
8 void foo (void)
9 {
10   int toread;
11   int bytes;
12   static char eof_reached = 0;
13
14   toread = blocksize;
15   bytes = 1;
16
17   while (toread != 0)
18     {
19       bytes = bar (toread);
20       if (bytes <= 0)
21         {
22           if (bytes < 0)
23             continue;
24           break;
25         }
26       toread -= bytes;
27     }
28
29   if (bytes == 0)
30     eof_reached = 1;
31 }
32
33
34 /* First, we should simplify the bits < 0 test within the loop.  */
35 /* { dg-final { scan-tree-dump-times "Simplified relational" 1 "vrp1" } } */
36
37 /* Second, we should thread the edge out of the loop via the break
38    statement.  We also realize that the final bytes == 0 test is useless,
39    and thread over it.  */
40 /* { dg-final { scan-tree-dump-times "Threaded jump" 3 "vrp1" } } */
41
42 /* { dg-final { cleanup-tree-dump "vrp1" } } */
43