]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gcc.dg/ipa/pr91089.c
generalized IPA predicate on parameter
[thirdparty/gcc.git] / gcc / testsuite / gcc.dg / ipa / pr91089.c
1 /* { dg-do compile } */
2 /* { dg-options "-O3 -fdump-ipa-cp-details -fdump-ipa-fnsummary-details --param ipa-max-switch-predicate-bounds=10 -fno-inline" } */
3
4 int fn ();
5
6 int data;
7
8 int callee (int i)
9 {
10 switch (i % 128)
11 {
12 case -126: return i + 13;
13 case -127: return i + 5;
14 case -8: return i * i;
15 case 0: return i % 9;
16 case 5:
17 case 7:
18 case 6: return 3;
19 default:
20 fn ();
21 fn ();
22 fn ();
23 fn ();
24 fn ();
25 fn ();
26 fn ();
27 fn ();
28 fn ();
29 fn ();
30 fn ();
31 fn ();
32 fn ();
33 fn ();
34 fn ();
35 fn ();
36 fn ();
37 fn ();
38 fn ();
39 }
40
41 return data += i;
42 }
43
44 int fn2 ();
45
46 int callee_complex_predicate (int i)
47 {
48 switch (i)
49 {
50 case 0:
51 fn ();
52 fn ();
53 fn ();
54 case 1:
55 fn ();
56 fn ();
57 case -1:
58 fn ();
59 case -2:
60 fn ();
61 fn ();
62 fn ();
63 fn ();
64 fn ();
65 fn ();
66 fn ();
67 fn ();
68 fn ();
69 fn ();
70 fn ();
71 fn ();
72 fn ();
73 fn ();
74 fn ();
75 fn ();
76 data += i;
77 break;
78 }
79
80 if (i == 1000)
81 {
82 int j;
83
84 for (j = 0; j < 100; j++)
85 fn2 ();
86 }
87 return i + 3;
88 }
89
90 int caller ()
91 {
92 return callee (-127) +
93 callee (-126) +
94 callee (-8) +
95 callee (0) +
96 callee (5) +
97 callee (6) +
98 callee (7) +
99 callee (100);
100 }
101
102 /* { dg-final { scan-ipa-dump-times "Creating a specialized node of callee" 7 "cp" } } */
103 /* { dg-final { scan-ipa-dump-not "op0,\\(# % 128\\) < -127" "fnsummary" } } */
104 /* { dg-final { scan-ipa-dump "op0,\\(# % 128\\) > -126" "fnsummary" } } */
105 /* { dg-final { scan-ipa-dump "op0,\\(# % 128\\) != -8" "fnsummary" } } */
106 /* { dg-final { scan-ipa-dump "op0,\\(# % 128\\) != 0" "fnsummary" } } */
107 /* { dg-final { scan-ipa-dump "op0,\\(# % 128\\) < 5" "fnsummary" } } */
108 /* { dg-final { scan-ipa-dump "op0,\\(# % 128\\) > 7" "fnsummary" } } */
109 /* { dg-final { scan-ipa-dump "loop depth: 1 .+ time:\[ \]*\[0-9\]+ predicate: \\(op0 == 1000\\)\[\r\n]+" "fnsummary" } } */