annotate gcc/testsuite/gcc.dg/long_branch.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* { dg-do run } */
kono
parents:
diff changeset
2 /* { dg-options "-O2 -fno-reorder-blocks" } */
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 void abort ();
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 __attribute__((noinline, noclone)) int
kono
parents:
diff changeset
7 restore (int a, int b)
kono
parents:
diff changeset
8 {
kono
parents:
diff changeset
9 return a * b;
kono
parents:
diff changeset
10 }
kono
parents:
diff changeset
11
kono
parents:
diff changeset
12 __attribute__((noinline, noclone)) void
kono
parents:
diff changeset
13 do_nothing (int *input)
kono
parents:
diff changeset
14 {
kono
parents:
diff changeset
15 *input = restore (*input, 1);
kono
parents:
diff changeset
16 return;
kono
parents:
diff changeset
17 }
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 #define CASE_ENTRY(n) \
kono
parents:
diff changeset
20 case n: \
kono
parents:
diff changeset
21 sum = sum / (n + 1); \
kono
parents:
diff changeset
22 sum = restore (sum, n + 1); \
kono
parents:
diff changeset
23 if (sum == (n + addend)) \
kono
parents:
diff changeset
24 break;\
kono
parents:
diff changeset
25 sum = sum / (n + 2); \
kono
parents:
diff changeset
26 sum = restore (sum, n + 2); \
kono
parents:
diff changeset
27 sum = sum / (n + 3); \
kono
parents:
diff changeset
28 sum = restore (sum, n + 3); \
kono
parents:
diff changeset
29 sum = sum / (n + 4); \
kono
parents:
diff changeset
30 sum = restore (sum, n + 4); \
kono
parents:
diff changeset
31 sum = sum / (n + 5); \
kono
parents:
diff changeset
32 sum = restore (sum, n + 5); \
kono
parents:
diff changeset
33 sum = sum / (n + 6); \
kono
parents:
diff changeset
34 sum = restore (sum, n + 6); \
kono
parents:
diff changeset
35 sum = sum / (n + 7); \
kono
parents:
diff changeset
36 sum = restore (sum, n + 7); \
kono
parents:
diff changeset
37 sum = sum / (n + 8); \
kono
parents:
diff changeset
38 sum = restore (sum, n + 8); \
kono
parents:
diff changeset
39 sum = sum / (n + 9); \
kono
parents:
diff changeset
40 sum = restore (sum, n + 9); \
kono
parents:
diff changeset
41 sum = sum / (n + 10); \
kono
parents:
diff changeset
42 sum = restore (sum, n + 10); \
kono
parents:
diff changeset
43 sum = sum / (n + 11); \
kono
parents:
diff changeset
44 sum = restore (sum, n + 11); \
kono
parents:
diff changeset
45 sum = sum / (n + 12); \
kono
parents:
diff changeset
46 sum = restore (sum, n + 12); \
kono
parents:
diff changeset
47 sum = sum / (n + 13); \
kono
parents:
diff changeset
48 sum = restore (sum, n + 13); \
kono
parents:
diff changeset
49 sum = sum / (n + 14); \
kono
parents:
diff changeset
50 sum = restore (sum, n + 14); \
kono
parents:
diff changeset
51 sum = sum / (n + 15); \
kono
parents:
diff changeset
52 sum = restore (sum, n + 15); \
kono
parents:
diff changeset
53 sum = sum / (n + 16); \
kono
parents:
diff changeset
54 sum = restore (sum, n + 16); \
kono
parents:
diff changeset
55 sum = sum / (n + 17); \
kono
parents:
diff changeset
56 sum = restore (sum, n + 17); \
kono
parents:
diff changeset
57 sum = sum / (n + 18); \
kono
parents:
diff changeset
58 sum = restore (sum, n + 18); \
kono
parents:
diff changeset
59 sum = sum / (n + 19); \
kono
parents:
diff changeset
60 sum = restore (sum, n + 19); \
kono
parents:
diff changeset
61 sum = sum / (n + 20); \
kono
parents:
diff changeset
62 sum = restore (sum, n + 20); \
kono
parents:
diff changeset
63 sum = sum / (n + 21); \
kono
parents:
diff changeset
64 sum = restore (sum, n + 21); \
kono
parents:
diff changeset
65 sum = sum / (n + 22); \
kono
parents:
diff changeset
66 sum = restore (sum, n + 22); \
kono
parents:
diff changeset
67 sum = sum / (n + 23); \
kono
parents:
diff changeset
68 sum = restore (sum, n + 23); \
kono
parents:
diff changeset
69 sum = sum / (n + 24); \
kono
parents:
diff changeset
70 sum = restore (sum, n + 24); \
kono
parents:
diff changeset
71 sum = sum / (n + 25); \
kono
parents:
diff changeset
72 sum = restore (sum, n + 25); \
kono
parents:
diff changeset
73 sum = sum / (n + 26); \
kono
parents:
diff changeset
74 sum = restore (sum, n + 26); \
kono
parents:
diff changeset
75 sum = sum / (n + 27); \
kono
parents:
diff changeset
76 sum = restore (sum, n + 27); \
kono
parents:
diff changeset
77 sum = sum / (n + 28); \
kono
parents:
diff changeset
78 sum = restore (sum, n + 28); \
kono
parents:
diff changeset
79 sum = sum / (n + 29); \
kono
parents:
diff changeset
80 sum = restore (sum, n + 29); \
kono
parents:
diff changeset
81 sum = sum / (n + 30); \
kono
parents:
diff changeset
82 sum = restore (sum, n + 30); \
kono
parents:
diff changeset
83 sum = sum / (n + 31); \
kono
parents:
diff changeset
84 sum = restore (sum, n + 31); \
kono
parents:
diff changeset
85 sum = sum / (n + 32); \
kono
parents:
diff changeset
86 sum = restore (sum, n + 32); \
kono
parents:
diff changeset
87 sum = sum / (n + 33); \
kono
parents:
diff changeset
88 sum = restore (sum, n + 33); \
kono
parents:
diff changeset
89 sum = sum / (n + 34); \
kono
parents:
diff changeset
90 sum = restore (sum, n + 34); \
kono
parents:
diff changeset
91 sum = sum / (n + 35); \
kono
parents:
diff changeset
92 sum = restore (sum, n + 35); \
kono
parents:
diff changeset
93 sum = sum / (n + 36); \
kono
parents:
diff changeset
94 sum = restore (sum, n + 36); \
kono
parents:
diff changeset
95 break;
kono
parents:
diff changeset
96
kono
parents:
diff changeset
97 __attribute__((noinline, noclone)) long long
kono
parents:
diff changeset
98 test_and_branch (int selector, int addend)
kono
parents:
diff changeset
99 {
kono
parents:
diff changeset
100 long long sum = selector + 1;
kono
parents:
diff changeset
101
kono
parents:
diff changeset
102 if (selector > 64)
kono
parents:
diff changeset
103 {
kono
parents:
diff changeset
104 start:
kono
parents:
diff changeset
105 return sum - 1;
kono
parents:
diff changeset
106 }
kono
parents:
diff changeset
107 else
kono
parents:
diff changeset
108 {
kono
parents:
diff changeset
109 switch (selector)
kono
parents:
diff changeset
110 {
kono
parents:
diff changeset
111 CASE_ENTRY (1)
kono
parents:
diff changeset
112 CASE_ENTRY (2)
kono
parents:
diff changeset
113 CASE_ENTRY (3)
kono
parents:
diff changeset
114 CASE_ENTRY (4)
kono
parents:
diff changeset
115 CASE_ENTRY (5)
kono
parents:
diff changeset
116 CASE_ENTRY (6)
kono
parents:
diff changeset
117 CASE_ENTRY (7)
kono
parents:
diff changeset
118 CASE_ENTRY (8)
kono
parents:
diff changeset
119 CASE_ENTRY (9)
kono
parents:
diff changeset
120 CASE_ENTRY (10)
kono
parents:
diff changeset
121 CASE_ENTRY (11)
kono
parents:
diff changeset
122 CASE_ENTRY (12)
kono
parents:
diff changeset
123 CASE_ENTRY (13)
kono
parents:
diff changeset
124 CASE_ENTRY (14)
kono
parents:
diff changeset
125 CASE_ENTRY (15)
kono
parents:
diff changeset
126 CASE_ENTRY (16)
kono
parents:
diff changeset
127 CASE_ENTRY (17)
kono
parents:
diff changeset
128 CASE_ENTRY (18)
kono
parents:
diff changeset
129 CASE_ENTRY (19)
kono
parents:
diff changeset
130 CASE_ENTRY (20)
kono
parents:
diff changeset
131 CASE_ENTRY (21)
kono
parents:
diff changeset
132 CASE_ENTRY (22)
kono
parents:
diff changeset
133 CASE_ENTRY (23)
kono
parents:
diff changeset
134 CASE_ENTRY (24)
kono
parents:
diff changeset
135 CASE_ENTRY (25)
kono
parents:
diff changeset
136 CASE_ENTRY (26)
kono
parents:
diff changeset
137 CASE_ENTRY (27)
kono
parents:
diff changeset
138 CASE_ENTRY (28)
kono
parents:
diff changeset
139 CASE_ENTRY (29)
kono
parents:
diff changeset
140 CASE_ENTRY (30)
kono
parents:
diff changeset
141 CASE_ENTRY (31)
kono
parents:
diff changeset
142 CASE_ENTRY (32)
kono
parents:
diff changeset
143 CASE_ENTRY (33)
kono
parents:
diff changeset
144 CASE_ENTRY (34)
kono
parents:
diff changeset
145 CASE_ENTRY (35)
kono
parents:
diff changeset
146 CASE_ENTRY (36)
kono
parents:
diff changeset
147 CASE_ENTRY (37)
kono
parents:
diff changeset
148 CASE_ENTRY (38)
kono
parents:
diff changeset
149 CASE_ENTRY (39)
kono
parents:
diff changeset
150 CASE_ENTRY (40)
kono
parents:
diff changeset
151 CASE_ENTRY (41)
kono
parents:
diff changeset
152 CASE_ENTRY (42)
kono
parents:
diff changeset
153 CASE_ENTRY (43)
kono
parents:
diff changeset
154 CASE_ENTRY (44)
kono
parents:
diff changeset
155 CASE_ENTRY (45)
kono
parents:
diff changeset
156 CASE_ENTRY (46)
kono
parents:
diff changeset
157 CASE_ENTRY (47)
kono
parents:
diff changeset
158 CASE_ENTRY (48)
kono
parents:
diff changeset
159 CASE_ENTRY (49)
kono
parents:
diff changeset
160 CASE_ENTRY (50)
kono
parents:
diff changeset
161 CASE_ENTRY (51)
kono
parents:
diff changeset
162 CASE_ENTRY (52)
kono
parents:
diff changeset
163 CASE_ENTRY (53)
kono
parents:
diff changeset
164 CASE_ENTRY (54)
kono
parents:
diff changeset
165 CASE_ENTRY (55)
kono
parents:
diff changeset
166 CASE_ENTRY (56)
kono
parents:
diff changeset
167 CASE_ENTRY (57)
kono
parents:
diff changeset
168 CASE_ENTRY (58)
kono
parents:
diff changeset
169 CASE_ENTRY (59)
kono
parents:
diff changeset
170 CASE_ENTRY (60)
kono
parents:
diff changeset
171 CASE_ENTRY (61)
kono
parents:
diff changeset
172 CASE_ENTRY (62)
kono
parents:
diff changeset
173 CASE_ENTRY (63)
kono
parents:
diff changeset
174 CASE_ENTRY (64)
kono
parents:
diff changeset
175 }
kono
parents:
diff changeset
176
kono
parents:
diff changeset
177 do_nothing ((int *)&sum);
kono
parents:
diff changeset
178
kono
parents:
diff changeset
179 if (sum & 0x40)
kono
parents:
diff changeset
180 goto start;
kono
parents:
diff changeset
181 }
kono
parents:
diff changeset
182
kono
parents:
diff changeset
183 return -1;
kono
parents:
diff changeset
184 }
kono
parents:
diff changeset
185
kono
parents:
diff changeset
186 int
kono
parents:
diff changeset
187 main (int argc, char **argv)
kono
parents:
diff changeset
188 {
kono
parents:
diff changeset
189 long long ret = test_and_branch (64, 1);
kono
parents:
diff changeset
190 if (ret != 64)
kono
parents:
diff changeset
191 abort ();
kono
parents:
diff changeset
192
kono
parents:
diff changeset
193 ret = test_and_branch (7, 1);
kono
parents:
diff changeset
194 if (ret != -1)
kono
parents:
diff changeset
195 abort ();
kono
parents:
diff changeset
196
kono
parents:
diff changeset
197 return 0;
kono
parents:
diff changeset
198 }