c++: robustify testcase [PR109752]
[official-gcc.git] / gcc / testsuite / g++.dg / tree-prof / pr63581.C
blobc8caf0765841803e92c7bdee6dcc23ea196a933e
1 // { dg-require-effective-target freorder }
2 /* { dg-options "-O2 -g -fno-peel-loops" } */
4 struct page {
5   int i;
6 } global;
8 __attribute__((noinline)) static struct page* find_page1 (int i)
10   if ( i< 150)
11       return 0;
12   global.i = i;
13   return &global;
16 __attribute__((noinline)) static struct page* find_page2 (int i)
18   global.i = i;
19   return &global;
22 volatile int ii;
23 __attribute__((noinline)) static int zero (void)
25   return ii;
28 static inline int uptodate (struct page* p)
30   return (p->i < 709);
33 static struct page* bar(int i)
35   struct page *page;
37 repeat:
38   page = find_page1 (i);
39   if (!page) {
40     page = find_page2 (i);
41     if (!page)
42       return 0;
43     if (zero () ) {
44       zero ();
45       goto repeat;
46     }
47   }
48   return page;
51 __attribute__((noinline)) int foo (int n)
53   struct page *page;
55 retry:
56   page = bar (n);
57   if (page == 0)
58     return 0;
59   if (uptodate (page))
60     goto out;
62    zero ();
63    if (page->i < 0) {
64      zero ();
65      goto retry;
66    }
67 out:
68    return 1;
71 __attribute__((noinline)) int hot (void)
73   int i;
74   int sum = 0;
76   for (i = 0; i < 433038; i++)
77     sum+=i;
79   return sum;
82 int main(void)
84   int i;
86   global.i = hot ();
87   for (i = 0; i < 858; i++)
88     foo (i);
90   return 0;