comparison gcc/predict.def @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents 77e2b8dfacca
children 84e7813d76e9
comparison
equal deleted inserted replaced
68:561a7518be6b 111:04ced10e8804
1 /* Definitions for the branch prediction routines in the GNU compiler. 1 /* Definitions for the branch prediction routines in the GNU compiler.
2 Copyright (C) 2001, 2003, 2004, 2007, 2008 Free Software Foundation, Inc. 2 Copyright (C) 2001-2017 Free Software Foundation, Inc.
3 3
4 This file is part of GCC. 4 This file is part of GCC.
5 5
6 GCC is free software; you can redistribute it and/or modify it under 6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free 7 the terms of the GNU General Public License as published by the Free
55 analysis to set probability. We don't want to use Dempster-Shaffer 55 analysis to set probability. We don't want to use Dempster-Shaffer
56 theory here, as the predictions is exact. */ 56 theory here, as the predictions is exact. */
57 DEF_PREDICTOR (PRED_LOOP_ITERATIONS, "loop iterations", PROB_ALWAYS, 57 DEF_PREDICTOR (PRED_LOOP_ITERATIONS, "loop iterations", PROB_ALWAYS,
58 PRED_FLAG_FIRST_MATCH) 58 PRED_FLAG_FIRST_MATCH)
59 59
60 /* Hints dropped by user via __builtin_expect feature. */ 60 /* Assume that any given atomic operation has low contention,
61 and thus the compare-and-swap operation succeeds. */
62 DEF_PREDICTOR (PRED_COMPARE_AND_SWAP, "compare and swap", PROB_VERY_LIKELY,
63 PRED_FLAG_FIRST_MATCH)
64
65 /* Hints dropped by user via __builtin_expect feature. Note: the
66 probability of PROB_VERY_LIKELY is now overwritten by param
67 builtin_expect_probability with a default value of HITRATE(90).
68 Refer to param.def for details. */
61 DEF_PREDICTOR (PRED_BUILTIN_EXPECT, "__builtin_expect", PROB_VERY_LIKELY, 69 DEF_PREDICTOR (PRED_BUILTIN_EXPECT, "__builtin_expect", PROB_VERY_LIKELY,
62 PRED_FLAG_FIRST_MATCH) 70 PRED_FLAG_FIRST_MATCH)
63 71
64 /* Use number of loop iterations guessed by the contents of the loop. */ 72 /* Use number of loop iterations guessed by the contents of the loop. */
65 DEF_PREDICTOR (PRED_LOOP_ITERATIONS_GUESSED, "guessed loop iterations", 73 DEF_PREDICTOR (PRED_LOOP_ITERATIONS_GUESSED, "guessed loop iterations",
66 PROB_ALWAYS, PRED_FLAG_FIRST_MATCH) 74 PROB_ALWAYS, PRED_FLAG_FIRST_MATCH)
67 75
76 /* Use number of loop iterations guessed by the contents of the loop. */
77 DEF_PREDICTOR (PRED_LOOP_ITERATIONS_MAX, "guessed loop iterations",
78 PROB_ALWAYS, PRED_FLAG_FIRST_MATCH)
79
68 /* Branch containing goto is probably not taken. */ 80 /* Branch containing goto is probably not taken. */
69 DEF_PREDICTOR (PRED_CONTINUE, "continue", HITRATE (50), 0) 81 DEF_PREDICTOR (PRED_CONTINUE, "continue", HITRATE (67), 0)
70 82
71 /* Branch to basic block containing call marked by noreturn attribute. */ 83 /* Branch to basic block containing call marked by noreturn attribute. */
72 DEF_PREDICTOR (PRED_NORETURN, "noreturn call", PROB_VERY_LIKELY, 84 DEF_PREDICTOR (PRED_NORETURN, "noreturn call", PROB_VERY_LIKELY,
73 PRED_FLAG_FIRST_MATCH) 85 PRED_FLAG_FIRST_MATCH)
74 86
75 /* Branch to basic block containing call marked by cold function attribute. */ 87 /* Branch to basic block containing call marked by cold function attribute. */
76 DEF_PREDICTOR (PRED_COLD_FUNCTION, "cold function call", PROB_VERY_LIKELY, 88 DEF_PREDICTOR (PRED_COLD_FUNCTION, "cold function call", PROB_VERY_LIKELY,
77 PRED_FLAG_FIRST_MATCH) 89 PRED_FLAG_FIRST_MATCH)
78 90
79 /* Loopback edge is taken. */
80 DEF_PREDICTOR (PRED_LOOP_BRANCH, "loop branch", HITRATE (86),
81 PRED_FLAG_FIRST_MATCH)
82
83 /* Edge causing loop to terminate is probably not taken. */ 91 /* Edge causing loop to terminate is probably not taken. */
84 DEF_PREDICTOR (PRED_LOOP_EXIT, "loop exit", HITRATE (91), 92 DEF_PREDICTOR (PRED_LOOP_EXIT, "loop exit", HITRATE (85),
93 PRED_FLAG_FIRST_MATCH)
94
95 /* Same as LOOP_EXIT but for loops containing recursive call. */
96 DEF_PREDICTOR (PRED_LOOP_EXIT_WITH_RECURSION, "loop exit with recursion",
97 HITRATE (72), PRED_FLAG_FIRST_MATCH)
98
99 /* Edge causing loop to terminate by computing value used by later
100 conditional. */
101 DEF_PREDICTOR (PRED_LOOP_EXTRA_EXIT, "extra loop exit", HITRATE (83),
85 PRED_FLAG_FIRST_MATCH) 102 PRED_FLAG_FIRST_MATCH)
86 103
87 /* Pointers are usually not NULL. */ 104 /* Pointers are usually not NULL. */
88 DEF_PREDICTOR (PRED_POINTER, "pointer", HITRATE (85), 0) 105 DEF_PREDICTOR (PRED_POINTER, "pointer", HITRATE (70), 0)
89 DEF_PREDICTOR (PRED_TREE_POINTER, "pointer (on trees)", HITRATE (85), 0) 106 DEF_PREDICTOR (PRED_TREE_POINTER, "pointer (on trees)", HITRATE (70), 0)
90 107
91 /* NE is probable, EQ not etc... */ 108 /* NE is probable, EQ not etc... */
92 DEF_PREDICTOR (PRED_OPCODE_POSITIVE, "opcode values positive", HITRATE (79), 0) 109 DEF_PREDICTOR (PRED_OPCODE_POSITIVE, "opcode values positive", HITRATE (64), 0)
93 DEF_PREDICTOR (PRED_OPCODE_NONEQUAL, "opcode values nonequal", HITRATE (71), 0) 110 DEF_PREDICTOR (PRED_OPCODE_NONEQUAL, "opcode values nonequal", HITRATE (66), 0)
94 DEF_PREDICTOR (PRED_FPOPCODE, "fp_opcode", HITRATE (90), 0) 111 DEF_PREDICTOR (PRED_FPOPCODE, "fp_opcode", HITRATE (90), 0)
95 DEF_PREDICTOR (PRED_TREE_OPCODE_POSITIVE, "opcode values positive (on trees)", HITRATE (73), 0) 112 DEF_PREDICTOR (PRED_TREE_OPCODE_POSITIVE, "opcode values positive (on trees)",
96 DEF_PREDICTOR (PRED_TREE_OPCODE_NONEQUAL, "opcode values nonequal (on trees)", HITRATE (72), 0) 113 HITRATE (64), 0)
114 DEF_PREDICTOR (PRED_TREE_OPCODE_NONEQUAL, "opcode values nonequal (on trees)",
115 HITRATE (66), 0)
97 DEF_PREDICTOR (PRED_TREE_FPOPCODE, "fp_opcode (on trees)", HITRATE (90), 0) 116 DEF_PREDICTOR (PRED_TREE_FPOPCODE, "fp_opcode (on trees)", HITRATE (90), 0)
98 117
99 /* Branch guarding call is probably taken. */ 118 /* Branch guarding call is probably taken. */
100 DEF_PREDICTOR (PRED_CALL, "call", HITRATE (71), 0) 119 DEF_PREDICTOR (PRED_CALL, "call", HITRATE (67), 0)
120
121 /* PRED_CALL is not very reliable predictor and it turns out to be even
122 less reliable for indirect calls and polymorphic calls. For spec2k6
123 the predictio nis slightly in the direction of taking the call. */
124 DEF_PREDICTOR (PRED_INDIR_CALL, "indirect call", HITRATE (86), 0)
125 DEF_PREDICTOR (PRED_POLYMORPHIC_CALL, "polymorphic call", HITRATE (59), 0)
126
127 /* Recursive calls are usually not taken or the function will recurse
128 indefinitely. */
129 DEF_PREDICTOR (PRED_RECURSIVE_CALL, "recursive call", HITRATE (75), 0)
101 130
102 /* Branch causing function to terminate is probably not taken. */ 131 /* Branch causing function to terminate is probably not taken. */
103 DEF_PREDICTOR (PRED_TREE_EARLY_RETURN, "early return (on trees)", HITRATE (61), 0) 132 DEF_PREDICTOR (PRED_TREE_EARLY_RETURN, "early return (on trees)", HITRATE (66),
133 0)
104 134
105 /* Branch containing goto is probably not taken. */ 135 /* Branch containing goto is probably not taken. */
106 DEF_PREDICTOR (PRED_GOTO, "goto", HITRATE (70), 0) 136 DEF_PREDICTOR (PRED_GOTO, "goto", HITRATE (66), 0)
107 137
108 /* Branch ending with return constant is probably not taken. */ 138 /* Branch ending with return constant is probably not taken. */
109 DEF_PREDICTOR (PRED_CONST_RETURN, "const return", HITRATE (67), 0) 139 DEF_PREDICTOR (PRED_CONST_RETURN, "const return", HITRATE (69), 0)
110 140
111 /* Branch ending with return negative constant is probably not taken. */ 141 /* Branch ending with return negative constant is probably not taken. */
112 DEF_PREDICTOR (PRED_NEGATIVE_RETURN, "negative return", HITRATE (96), 0) 142 DEF_PREDICTOR (PRED_NEGATIVE_RETURN, "negative return", HITRATE (98), 0)
113 143
114 /* Branch ending with return; is probably not taken */ 144 /* Branch ending with return; is probably not taken */
115 DEF_PREDICTOR (PRED_NULL_RETURN, "null return", HITRATE (90), 0) 145 DEF_PREDICTOR (PRED_NULL_RETURN, "null return", HITRATE (91), 0)
116 146
117 /* Branches to a mudflap bounds check are extremely unlikely. */ 147 /* Branches to compare induction variable to a loop bound is
118 DEF_PREDICTOR (PRED_MUDFLAP, "mudflap check", PROB_VERY_LIKELY, 0) 148 extremely likely. */
149 DEF_PREDICTOR (PRED_LOOP_IV_COMPARE_GUESS, "guess loop iv compare",
150 HITRATE (98), 0)
151
152 /* Use number of loop iterations determined by # of iterations analysis
153 to set probability of branches that compares IV to loop bound variable. */
154 DEF_PREDICTOR (PRED_LOOP_IV_COMPARE, "loop iv compare", PROB_VERY_LIKELY,
155 PRED_FLAG_FIRST_MATCH)
156
157 /* In the following code
158 for (loop1)
159 if (cond)
160 for (loop2)
161 body;
162 guess that cond is unlikely. */
163 DEF_PREDICTOR (PRED_LOOP_GUARD, "loop guard", HITRATE (66), 0)
164
165 /* Same but for loops containing recursion. */
166 DEF_PREDICTOR (PRED_LOOP_GUARD_WITH_RECURSION, "loop guard with recursion",
167 HITRATE (85), 0)
168
169 /* Branches to hot labels are likely. */
170 DEF_PREDICTOR (PRED_HOT_LABEL, "hot label", HITRATE (85), 0)
171
172 /* Branches to cold labels are extremely unlikely. */
173 DEF_PREDICTOR (PRED_COLD_LABEL, "cold label", PROB_VERY_LIKELY,
174 PRED_FLAG_FIRST_MATCH)
175
176
177 /* The following predictors are used in Fortran. */
178
179 /* Branch leading to an integer overflow are extremely unlikely. */
180 DEF_PREDICTOR (PRED_FORTRAN_OVERFLOW, "Fortran overflow", PROB_ALWAYS,
181 PRED_FLAG_FIRST_MATCH)
182
183 /* Branch leading to a failure status are unlikely. This can occur for out
184 of memory. This predictor only occurs when the user explicitly asked
185 for a return status. By default, the code aborts,
186 which is handled via PRED_NORETURN. */
187 DEF_PREDICTOR (PRED_FORTRAN_FAIL_ALLOC, "Fortran fail alloc",
188 PROB_VERY_LIKELY, 0)
189
190 /* Predictor is used for an allocation of an already allocated memory or
191 deallocating an already deallocated allocatable. */
192 DEF_PREDICTOR (PRED_FORTRAN_REALLOC, "Fortran repeated allocation/deallocation",
193 PROB_LIKELY, 0)
194
195 /* Branch leading to an I/O failure status are unlikely. This predictor is
196 used for I/O failures such as for invalid unit numbers. This predictor
197 only occurs when the user explicitly asked for a return status. By default,
198 the code aborts, which is handled via PRED_NORETURN. */
199 DEF_PREDICTOR (PRED_FORTRAN_FAIL_IO, "Fortran fail IO", HITRATE (85), 0)
200
201 /* Branch leading to a run-time warning message which is printed only once
202 are unlikely. The print-warning branch itself can be likely or unlikely. */
203 DEF_PREDICTOR (PRED_FORTRAN_WARN_ONCE, "Fortran warn once", HITRATE (75), 0)
204
205 /* Branch belonging to a zero-sized array. */
206 DEF_PREDICTOR (PRED_FORTRAN_SIZE_ZERO, "Fortran zero-sized array", \
207 HITRATE (99), 0)
208
209 /* Branch belonging to an invalid bound index, in a context where it is
210 standard conform and well defined but rather pointless and, hence, rather
211 unlikely to occur. */
212 DEF_PREDICTOR (PRED_FORTRAN_INVALID_BOUND, "Fortran invalid bound", \
213 HITRATE (90), 0)
214
215 /* Branch belonging to the handling of absent optional arguments. This
216 predictor is used when an optional dummy argument, associated with an
217 absent argument, is passed on as actual argument to another procedure,
218 which in turn has an optional argument. */
219 DEF_PREDICTOR (PRED_FORTRAN_ABSENT_DUMMY, "Fortran absent dummy", \
220 HITRATE (60), 0)
221
222 /* Fortran DO statement generates a pre-header guard:
223 empty = (step > 0 ? to < from : to > from), which can be predicted
224 to be very likely. */
225 DEF_PREDICTOR (PRED_FORTRAN_LOOP_PREHEADER, "Fortran loop preheader", \
226 HITRATE (99), 0)