annotate gcc/testsuite/g++.dg/bprob/g++-bprob-1.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* Check that various C constructs (in C++) don't cause problems for
kono
parents:
diff changeset
2 * profile-directed block ordering.
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 Most of this test is the same as bprob-1.c and gcov-4.c in
kono
parents:
diff changeset
5 gcc.misc-tests. The "count" comments are left in to make comparisons
kono
parents:
diff changeset
6 easier; they are ignored for this test. */
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 extern "C" void abort (void);
kono
parents:
diff changeset
9
kono
parents:
diff changeset
10 /* Check for loops. */
kono
parents:
diff changeset
11
kono
parents:
diff changeset
12 int for_val1;
kono
parents:
diff changeset
13 int for_val2;
kono
parents:
diff changeset
14 int for_temp;
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 int
kono
parents:
diff changeset
17 test_for1 (int n)
kono
parents:
diff changeset
18 {
kono
parents:
diff changeset
19 int i;
kono
parents:
diff changeset
20 for_temp = 1; /* count(3) */
kono
parents:
diff changeset
21 for (i = 0; i < n; i++)
kono
parents:
diff changeset
22 for_temp++; /* count(9) */
kono
parents:
diff changeset
23 return for_temp; /* count(3) */
kono
parents:
diff changeset
24 }
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 int
kono
parents:
diff changeset
27 test_for2 (int m, int n, int o)
kono
parents:
diff changeset
28 {
kono
parents:
diff changeset
29 int i, j, k;
kono
parents:
diff changeset
30 for_temp = 1; /* count(6) */
kono
parents:
diff changeset
31 for (i = 0; i < n; i++)
kono
parents:
diff changeset
32 for (j = 0; j < m; j++)
kono
parents:
diff changeset
33 for (k = 0; k < o; k++)
kono
parents:
diff changeset
34 for_temp++; /* count(81) */
kono
parents:
diff changeset
35 return for_temp; /* count(6) */
kono
parents:
diff changeset
36 }
kono
parents:
diff changeset
37
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
38 void
111
kono
parents:
diff changeset
39 call_for ()
kono
parents:
diff changeset
40 {
kono
parents:
diff changeset
41 for_val1 += test_for1 (0);
kono
parents:
diff changeset
42 for_val1 += test_for1 (2);
kono
parents:
diff changeset
43 for_val1 += test_for1 (7);
kono
parents:
diff changeset
44
kono
parents:
diff changeset
45 for_val2 += test_for2 (0, 0, 0);
kono
parents:
diff changeset
46 for_val2 += test_for2 (1, 0, 0);
kono
parents:
diff changeset
47 for_val2 += test_for2 (1, 3, 0);
kono
parents:
diff changeset
48 for_val2 += test_for2 (1, 3, 1);
kono
parents:
diff changeset
49 for_val2 += test_for2 (3, 1, 5);
kono
parents:
diff changeset
50 for_val2 += test_for2 (3, 7, 3);
kono
parents:
diff changeset
51 }
kono
parents:
diff changeset
52
kono
parents:
diff changeset
53 /* Check the use of goto. */
kono
parents:
diff changeset
54
kono
parents:
diff changeset
55 int goto_val;
kono
parents:
diff changeset
56
kono
parents:
diff changeset
57 int
kono
parents:
diff changeset
58 test_goto1 (int f)
kono
parents:
diff changeset
59 {
kono
parents:
diff changeset
60 if (f) /* count(2) */
kono
parents:
diff changeset
61 goto lab1; /* count(1) */
kono
parents:
diff changeset
62 return 1; /* count(1) */
kono
parents:
diff changeset
63 lab1:
kono
parents:
diff changeset
64 return 2; /* count(1) */
kono
parents:
diff changeset
65 }
kono
parents:
diff changeset
66
kono
parents:
diff changeset
67 int
kono
parents:
diff changeset
68 test_goto2 (int f)
kono
parents:
diff changeset
69 {
kono
parents:
diff changeset
70 int i;
kono
parents:
diff changeset
71 for (i = 0; i < 10; i++) /* count(15) */
kono
parents:
diff changeset
72 if (i == f) goto lab2; /* count(14) */
kono
parents:
diff changeset
73 return 4; /* count(1) */
kono
parents:
diff changeset
74 lab2:
kono
parents:
diff changeset
75 return 8; /* count(1) */
kono
parents:
diff changeset
76 }
kono
parents:
diff changeset
77
kono
parents:
diff changeset
78 void
kono
parents:
diff changeset
79 call_goto ()
kono
parents:
diff changeset
80 {
kono
parents:
diff changeset
81 goto_val += test_goto1 (0);
kono
parents:
diff changeset
82 goto_val += test_goto1 (1);
kono
parents:
diff changeset
83 goto_val += test_goto2 (3);
kono
parents:
diff changeset
84 goto_val += test_goto2 (30);
kono
parents:
diff changeset
85 }
kono
parents:
diff changeset
86
kono
parents:
diff changeset
87 /* Check nested if-then-else statements. */
kono
parents:
diff changeset
88
kono
parents:
diff changeset
89 int ifelse_val1;
kono
parents:
diff changeset
90 int ifelse_val2;
kono
parents:
diff changeset
91 int ifelse_val3;
kono
parents:
diff changeset
92
kono
parents:
diff changeset
93 int
kono
parents:
diff changeset
94 test_ifelse1 (int i, int j)
kono
parents:
diff changeset
95 {
kono
parents:
diff changeset
96 int result = 0;
kono
parents:
diff changeset
97 if (i) /* count(5) */
kono
parents:
diff changeset
98 if (j) /* count(3) */
kono
parents:
diff changeset
99 result = 4; /* count(3) */
kono
parents:
diff changeset
100 else
kono
parents:
diff changeset
101 result = 1024;
kono
parents:
diff changeset
102 else
kono
parents:
diff changeset
103 if (j) /* count(2) */
kono
parents:
diff changeset
104 result = 1; /* count(1) */
kono
parents:
diff changeset
105 else
kono
parents:
diff changeset
106 result = 2; /* count(1) */
kono
parents:
diff changeset
107 if (i > j) /* count(5) */
kono
parents:
diff changeset
108 result *= 2; /* count(1) */
kono
parents:
diff changeset
109 if (i > 10) /* count(5) */
kono
parents:
diff changeset
110 if (j > 10) /* count(1) */
kono
parents:
diff changeset
111 result *= 4; /* count(1) */
kono
parents:
diff changeset
112 return result; /* count(5) */
kono
parents:
diff changeset
113 }
kono
parents:
diff changeset
114
kono
parents:
diff changeset
115 int
kono
parents:
diff changeset
116 test_ifelse2 (int i)
kono
parents:
diff changeset
117 {
kono
parents:
diff changeset
118 int result = 0;
kono
parents:
diff changeset
119 if (!i) /* count(6) */
kono
parents:
diff changeset
120 result = 1; /* count(1) */
kono
parents:
diff changeset
121 if (i == 1) /* count(6) */
kono
parents:
diff changeset
122 result = 1024;
kono
parents:
diff changeset
123 if (i == 2) /* count(6) */
kono
parents:
diff changeset
124 result = 2; /* count(3) */
kono
parents:
diff changeset
125 if (i == 3) /* count(6) */
kono
parents:
diff changeset
126 return 8; /* count(2) */
kono
parents:
diff changeset
127 if (i == 4) /* count(4) */
kono
parents:
diff changeset
128 return 2048;
kono
parents:
diff changeset
129 return result; /* count(4) */
kono
parents:
diff changeset
130 }
kono
parents:
diff changeset
131
kono
parents:
diff changeset
132 int
kono
parents:
diff changeset
133 test_ifelse3 (int i, int j)
kono
parents:
diff changeset
134 {
kono
parents:
diff changeset
135 int result = 1;
kono
parents:
diff changeset
136 if (i > 10 && j > i && j < 20) /* count(11) */
kono
parents:
diff changeset
137 result = 16; /* count(1) */
kono
parents:
diff changeset
138 if (i > 20) /* count(11) */
kono
parents:
diff changeset
139 if (j > i) /* count(5) */
kono
parents:
diff changeset
140 if (j < 30) /* count(2) */
kono
parents:
diff changeset
141 result = 32; /* count(1) */
kono
parents:
diff changeset
142 if (i == 3 || j == 47 || i == j) /* count(11) */
kono
parents:
diff changeset
143 result = 64; /* count(3) */
kono
parents:
diff changeset
144 return result; /* count(11) */
kono
parents:
diff changeset
145 }
kono
parents:
diff changeset
146
kono
parents:
diff changeset
147 void
kono
parents:
diff changeset
148 call_ifelse ()
kono
parents:
diff changeset
149 {
kono
parents:
diff changeset
150 ifelse_val1 += test_ifelse1 (0, 2);
kono
parents:
diff changeset
151 ifelse_val1 += test_ifelse1 (0, 0);
kono
parents:
diff changeset
152 ifelse_val1 += test_ifelse1 (1, 2);
kono
parents:
diff changeset
153 ifelse_val1 += test_ifelse1 (10, 2);
kono
parents:
diff changeset
154 ifelse_val1 += test_ifelse1 (11, 11);
kono
parents:
diff changeset
155
kono
parents:
diff changeset
156 ifelse_val2 += test_ifelse2 (0);
kono
parents:
diff changeset
157 ifelse_val2 += test_ifelse2 (2);
kono
parents:
diff changeset
158 ifelse_val2 += test_ifelse2 (2);
kono
parents:
diff changeset
159 ifelse_val2 += test_ifelse2 (2);
kono
parents:
diff changeset
160 ifelse_val2 += test_ifelse2 (3);
kono
parents:
diff changeset
161 ifelse_val2 += test_ifelse2 (3);
kono
parents:
diff changeset
162
kono
parents:
diff changeset
163 ifelse_val3 += test_ifelse3 (11, 19);
kono
parents:
diff changeset
164 ifelse_val3 += test_ifelse3 (25, 27);
kono
parents:
diff changeset
165 ifelse_val3 += test_ifelse3 (11, 22);
kono
parents:
diff changeset
166 ifelse_val3 += test_ifelse3 (11, 10);
kono
parents:
diff changeset
167 ifelse_val3 += test_ifelse3 (21, 32);
kono
parents:
diff changeset
168 ifelse_val3 += test_ifelse3 (21, 20);
kono
parents:
diff changeset
169 ifelse_val3 += test_ifelse3 (1, 2);
kono
parents:
diff changeset
170 ifelse_val3 += test_ifelse3 (32, 31);
kono
parents:
diff changeset
171 ifelse_val3 += test_ifelse3 (3, 0);
kono
parents:
diff changeset
172 ifelse_val3 += test_ifelse3 (0, 47); /* count(1) */
kono
parents:
diff changeset
173 ifelse_val3 += test_ifelse3 (65, 65); /* count(1) */
kono
parents:
diff changeset
174 }
kono
parents:
diff changeset
175
kono
parents:
diff changeset
176 /* Check switch statements. */
kono
parents:
diff changeset
177
kono
parents:
diff changeset
178 int switch_val, switch_m;
kono
parents:
diff changeset
179
kono
parents:
diff changeset
180 int
kono
parents:
diff changeset
181 test_switch (int i, int j)
kono
parents:
diff changeset
182 {
kono
parents:
diff changeset
183 int result = 0; /* count(5) */
kono
parents:
diff changeset
184
kono
parents:
diff changeset
185 switch (i) /* count(5) */
kono
parents:
diff changeset
186 {
kono
parents:
diff changeset
187 case 1:
kono
parents:
diff changeset
188 result = 2; /* count(1) */
kono
parents:
diff changeset
189 break;
kono
parents:
diff changeset
190 case 2:
kono
parents:
diff changeset
191 result = 1024;
kono
parents:
diff changeset
192 break;
kono
parents:
diff changeset
193 case 3:
kono
parents:
diff changeset
194 case 4:
kono
parents:
diff changeset
195 if (j == 2) /* count(3) */
kono
parents:
diff changeset
196 return 4; /* count(1) */
kono
parents:
diff changeset
197 result = 8; /* count(2) */
kono
parents:
diff changeset
198 break;
kono
parents:
diff changeset
199 default:
kono
parents:
diff changeset
200 result = 32; /* count(1) */
kono
parents:
diff changeset
201 switch_m++; /* count(1) */
kono
parents:
diff changeset
202 break;
kono
parents:
diff changeset
203 }
kono
parents:
diff changeset
204 return result; /* count(4) */
kono
parents:
diff changeset
205 }
kono
parents:
diff changeset
206
kono
parents:
diff changeset
207 void
kono
parents:
diff changeset
208 call_switch ()
kono
parents:
diff changeset
209 {
kono
parents:
diff changeset
210 switch_val += test_switch (1, 0);
kono
parents:
diff changeset
211 switch_val += test_switch (3, 0);
kono
parents:
diff changeset
212 switch_val += test_switch (3, 2);
kono
parents:
diff changeset
213 switch_val += test_switch (4, 0);
kono
parents:
diff changeset
214 switch_val += test_switch (16, 0);
kono
parents:
diff changeset
215 switch_val += switch_m;
kono
parents:
diff changeset
216 }
kono
parents:
diff changeset
217
kono
parents:
diff changeset
218 int
kono
parents:
diff changeset
219 main()
kono
parents:
diff changeset
220 {
kono
parents:
diff changeset
221 call_for ();
kono
parents:
diff changeset
222 call_goto ();
kono
parents:
diff changeset
223 call_ifelse ();
kono
parents:
diff changeset
224 call_switch ();
kono
parents:
diff changeset
225 if ((for_val1 != 12)
kono
parents:
diff changeset
226 || (for_val2 != 87)
kono
parents:
diff changeset
227 || (goto_val != 15)
kono
parents:
diff changeset
228 || (ifelse_val1 != 31)
kono
parents:
diff changeset
229 || (ifelse_val2 != 23)
kono
parents:
diff changeset
230 || (ifelse_val3 != 246)
kono
parents:
diff changeset
231 || (switch_val != 55))
kono
parents:
diff changeset
232 abort ();
kono
parents:
diff changeset
233 return 0;
kono
parents:
diff changeset
234 }