1 /* { dg-do compile { target nonpic } } */
2 /* { dg-options "-O3 -fdump-tree-fnsplit -fdump-tree-optimized --param=builtin-expect-probability=100" } */
3 
4 struct a {int a,b;};
5 struct a make_me_big (int a);
split_me(int a)6 struct a split_me (int a)
7 {
8   struct a retval;
9   if (__builtin_expect (a!=0,1))
10     {
11       retval.a = 0;
12       retval.b = 0;
13       return retval;
14     }
15   else
16     {
17       struct a retval = make_me_big (a);
18       retval = make_me_big (a);
19       retval = make_me_big (a);
20       retval = make_me_big (a);
21       retval = make_me_big (a);
22       retval = make_me_big (a);
23       retval = make_me_big (a);
24       retval = make_me_big (a);
25       retval = make_me_big (a);
26       retval = make_me_big (a);
27       retval = make_me_big (a);
28       retval = make_me_big (a);
29       retval = make_me_big (a);
30       retval = make_me_big (a);
31       retval = make_me_big (a);
32       retval = make_me_big (a);
33       retval = make_me_big (a);
34       retval = make_me_big (a);
35       retval = make_me_big (a);
36       retval = make_me_big (a);
37       retval = make_me_big (a);
38       retval = make_me_big (a);
39       retval = make_me_big (a);
40       return retval;
41     }
42 }
43 int val;
44 void
test()45 test()
46 {
47   split_me (val);
48   split_me (val);
49   split_me (val);
50   split_me (val);
51 }
52 /* { dg-final { scan-tree-dump-times "Splitting function" 1 "fnsplit"} } */
53 /* { dg-final { scan-tree-dump "part" "optimized"} } */
54