]>
Commit | Line | Data |
---|---|---|
9a33a2e8 | 1 | /* params.h - Run-time parameters. |
8e8f6434 | 2 | Copyright (C) 2001-2018 Free Software Foundation, Inc. |
9a33a2e8 | 3 | Written by Mark Mitchell <mark@codesourcery.com>. |
4 | ||
f12b58b3 | 5 | This file is part of GCC. |
9a33a2e8 | 6 | |
f12b58b3 | 7 | GCC is free software; you can redistribute it and/or modify it under |
8 | the terms of the GNU General Public License as published by the Free | |
8c4c00c1 | 9 | Software Foundation; either version 3, or (at your option) any later |
f12b58b3 | 10 | version. |
9a33a2e8 | 11 | |
f12b58b3 | 12 | GCC is distributed in the hope that it will be useful, but WITHOUT ANY |
13 | WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 | for more details. | |
9a33a2e8 | 16 | |
17 | You should have received a copy of the GNU General Public License | |
8c4c00c1 | 18 | along with GCC; see the file COPYING3. If not see |
19 | <http://www.gnu.org/licenses/>. */ | |
9a33a2e8 | 20 | |
21 | /* This module provides a means for setting integral parameters | |
22 | dynamically. Instead of encoding magic numbers in various places, | |
23 | use this module to organize all the magic numbers in a single | |
24 | place. The values of the parameters can be set on the | |
25 | command-line, thereby providing a way to control the amount of | |
26 | effort spent on particular optimization passes, or otherwise tune | |
21b80b12 | 27 | the behavior of the compiler. |
28 | ||
29 | Since their values can be set on the command-line, these parameters | |
30 | should not be used for non-dynamic memory allocation. */ | |
9a33a2e8 | 31 | |
2a281353 | 32 | #ifndef GCC_PARAMS_H |
33 | #define GCC_PARAMS_H | |
9a33a2e8 | 34 | |
35 | /* No parameter shall have this value. */ | |
36 | ||
37 | #define INVALID_PARAM_VAL (-1) | |
38 | ||
39 | /* The information associated with each parameter. */ | |
40 | ||
b3e7c666 | 41 | struct param_info |
9a33a2e8 | 42 | { |
43 | /* The name used with the `--param <name>=<value>' switch to set this | |
44 | value. */ | |
a324786b | 45 | const char *option; |
1d8a53f4 | 46 | |
56f280c4 | 47 | /* The default value. */ |
48 | int default_value; | |
07804af5 | 49 | |
1d8a53f4 | 50 | /* Minimum acceptable value. */ |
51 | int min_value; | |
48e1416a | 52 | |
0975351b | 53 | /* Maximum acceptable value, if greater than minimum */ |
1d8a53f4 | 54 | int max_value; |
48e1416a | 55 | |
a5d654e2 | 56 | /* A short description of the option. */ |
a324786b | 57 | const char *help; |
df423ec7 | 58 | |
59 | /* The optional names corresponding to the values. */ | |
60 | const char **value_names; | |
b3e7c666 | 61 | }; |
9a33a2e8 | 62 | |
63 | /* An array containing the compiler parameters and their current | |
64 | values. */ | |
65 | ||
66 | extern param_info *compiler_params; | |
67 | ||
c9036234 | 68 | /* Returns the number of entries in the table, for the use by plugins. */ |
69 | extern size_t get_num_compiler_params (void); | |
70 | ||
9a33a2e8 | 71 | /* Add the N PARAMS to the current list of compiler parameters. */ |
72 | ||
1a97be37 | 73 | extern void add_params (const param_info params[], size_t n); |
9a33a2e8 | 74 | |
56f280c4 | 75 | /* Set the VALUE associated with the parameter given by NAME in the |
76 | table PARAMS using PARAMS_SET to indicate which have been | |
77 | explicitly set. */ | |
9a33a2e8 | 78 | |
56f280c4 | 79 | extern void set_param_value (const char *name, int value, |
80 | int *params, int *params_set); | |
9a33a2e8 | 81 | |
82 | \f | |
83 | /* The parameters in use by language-independent code. */ | |
84 | ||
b3e7c666 | 85 | enum compiler_param |
9a33a2e8 | 86 | { |
0a259d8d | 87 | #include "params.list" |
9a33a2e8 | 88 | LAST_PARAM |
b3e7c666 | 89 | }; |
9a33a2e8 | 90 | |
df423ec7 | 91 | extern bool find_param (const char *, enum compiler_param *); |
26a2e993 | 92 | extern const char *find_param_fuzzy (const char *name); |
df423ec7 | 93 | extern bool param_string_value_p (enum compiler_param, const char *, int *); |
94 | ||
686e2769 | 95 | /* The value of the parameter given by ENUM. Not an lvalue. */ |
9a33a2e8 | 96 | #define PARAM_VALUE(ENUM) \ |
56f280c4 | 97 | ((int) global_options.x_param_values[(int) ENUM]) |
195731ad | 98 | |
686e2769 | 99 | /* Set the value of the parameter given by NUM to VALUE, implicitly, |
56f280c4 | 100 | if it has not been set explicitly by the user, in the table PARAMS |
101 | using PARAMS_SET to indicate which have been explicitly set. */ | |
686e2769 | 102 | |
56f280c4 | 103 | extern void maybe_set_param_value (compiler_param num, int value, |
104 | int *params, int *params_set); | |
686e2769 | 105 | |
106 | /* Set the default value of a parameter given by NUM to VALUE, before | |
107 | option processing. */ | |
108 | ||
109 | extern void set_default_param_value (compiler_param num, int value); | |
110 | ||
6a2fc14e | 111 | /* Add all parameters and default values that can be set in both the |
112 | driver and the compiler proper. */ | |
113 | ||
114 | extern void global_init_params (void); | |
115 | ||
56f280c4 | 116 | /* Note that all parameters have been added and all default values |
117 | set. */ | |
118 | extern void finish_params (void); | |
119 | ||
415309e2 | 120 | /* Reset all state in params.c */ |
121 | ||
122 | extern void params_c_finalize (void); | |
123 | ||
56f280c4 | 124 | /* Return the default value of parameter NUM. */ |
125 | ||
126 | extern int default_param_value (compiler_param num); | |
127 | ||
128 | /* Initialize an array PARAMS with default values of the | |
129 | parameters. */ | |
130 | extern void init_param_values (int *params); | |
07804af5 | 131 | |
9a33a2e8 | 132 | /* Macros for the various parameters. */ |
6cc4057d | 133 | #define MAX_INLINE_INSNS_SINGLE \ |
134 | PARAM_VALUE (PARAM_MAX_INLINE_INSNS_SINGLE) | |
9a33a2e8 | 135 | #define MAX_INLINE_INSNS \ |
136 | PARAM_VALUE (PARAM_MAX_INLINE_INSNS) | |
6cc4057d | 137 | #define MAX_INLINE_SLOPE \ |
138 | PARAM_VALUE (PARAM_MAX_INLINE_SLOPE) | |
139 | #define MIN_INLINE_INSNS \ | |
140 | PARAM_VALUE (PARAM_MIN_INLINE_INSNS) | |
e2b04249 | 141 | #define MAX_INLINE_INSNS_AUTO \ |
142 | PARAM_VALUE (PARAM_MAX_INLINE_INSNS_AUTO) | |
375bb675 | 143 | #define MAX_VARIABLE_EXPANSIONS \ |
144 | PARAM_VALUE (PARAM_MAX_VARIABLE_EXPANSIONS) | |
8964b5be | 145 | #define MIN_VECT_LOOP_BOUND \ |
146 | PARAM_VALUE (PARAM_MIN_VECT_LOOP_BOUND) | |
21b80b12 | 147 | #define MAX_DELAY_SLOT_INSN_SEARCH \ |
148 | PARAM_VALUE (PARAM_MAX_DELAY_SLOT_INSN_SEARCH) | |
98d5e888 | 149 | #define MAX_DELAY_SLOT_LIVE_SEARCH \ |
150 | PARAM_VALUE (PARAM_MAX_DELAY_SLOT_LIVE_SEARCH) | |
85de291e | 151 | #define MAX_PENDING_LIST_LENGTH \ |
152 | PARAM_VALUE (PARAM_MAX_PENDING_LIST_LENGTH) | |
9159979b | 153 | #define MAX_GCSE_MEMORY \ |
154 | ((size_t) PARAM_VALUE (PARAM_MAX_GCSE_MEMORY)) | |
b89c219c | 155 | #define MAX_GCSE_INSERTION_RATIO \ |
156 | ((size_t) PARAM_VALUE (PARAM_MAX_GCSE_INSERTION_RATIO)) | |
839f8415 | 157 | #define GCSE_AFTER_RELOAD_PARTIAL_FRACTION \ |
158 | PARAM_VALUE (PARAM_GCSE_AFTER_RELOAD_PARTIAL_FRACTION) | |
159 | #define GCSE_AFTER_RELOAD_CRITICAL_FRACTION \ | |
160 | PARAM_VALUE (PARAM_GCSE_AFTER_RELOAD_CRITICAL_FRACTION) | |
8b38b150 | 161 | #define GCSE_COST_DISTANCE_RATIO \ |
162 | PARAM_VALUE (PARAM_GCSE_COST_DISTANCE_RATIO) | |
163 | #define GCSE_UNRESTRICTED_COST \ | |
164 | PARAM_VALUE (PARAM_GCSE_UNRESTRICTED_COST) | |
c0939130 | 165 | #define MAX_HOIST_DEPTH \ |
166 | PARAM_VALUE (PARAM_MAX_HOIST_DEPTH) | |
0b11ae2e | 167 | #define MAX_UNROLLED_INSNS \ |
168 | PARAM_VALUE (PARAM_MAX_UNROLLED_INSNS) | |
406a73e7 | 169 | #define MAX_SMS_LOOP_NUMBER \ |
170 | PARAM_VALUE (PARAM_MAX_SMS_LOOP_NUMBER) | |
171 | #define SMS_MAX_II_FACTOR \ | |
172 | PARAM_VALUE (PARAM_SMS_MAX_II_FACTOR) | |
173 | #define SMS_DFA_HISTORY \ | |
174 | PARAM_VALUE (PARAM_SMS_DFA_HISTORY) | |
175 | #define SMS_LOOP_AVERAGE_COUNT_THRESHOLD \ | |
176 | PARAM_VALUE (PARAM_SMS_LOOP_AVERAGE_COUNT_THRESHOLD) | |
00b76131 | 177 | #define INTEGER_SHARE_LIMIT \ |
178 | PARAM_VALUE (PARAM_INTEGER_SHARE_LIMIT) | |
9c8b7028 | 179 | #define MAX_LAST_VALUE_RTL \ |
180 | PARAM_VALUE (PARAM_MAX_LAST_VALUE_RTL) | |
095dcfa3 | 181 | #define MIN_VIRTUAL_MAPPINGS \ |
182 | PARAM_VALUE (PARAM_MIN_VIRTUAL_MAPPINGS) | |
183 | #define VIRTUAL_MAPPINGS_TO_SYMS_RATIO \ | |
184 | PARAM_VALUE (PARAM_VIRTUAL_MAPPINGS_TO_SYMS_RATIO) | |
f0ee0b5b | 185 | #define MAX_FIELDS_FOR_FIELD_SENSITIVE \ |
186 | ((size_t) PARAM_VALUE (PARAM_MAX_FIELDS_FOR_FIELD_SENSITIVE)) | |
23df5e5b | 187 | #define MAX_SCHED_READY_INSNS \ |
188 | PARAM_VALUE (PARAM_MAX_SCHED_READY_INSNS) | |
07804af5 | 189 | #define PREFETCH_LATENCY \ |
190 | PARAM_VALUE (PARAM_PREFETCH_LATENCY) | |
191 | #define SIMULTANEOUS_PREFETCHES \ | |
192 | PARAM_VALUE (PARAM_SIMULTANEOUS_PREFETCHES) | |
193 | #define L1_CACHE_SIZE \ | |
194 | PARAM_VALUE (PARAM_L1_CACHE_SIZE) | |
195 | #define L1_CACHE_LINE_SIZE \ | |
196 | PARAM_VALUE (PARAM_L1_CACHE_LINE_SIZE) | |
0c916a7b | 197 | #define L2_CACHE_SIZE \ |
198 | PARAM_VALUE (PARAM_L2_CACHE_SIZE) | |
48956da3 | 199 | #define PREFETCH_DYNAMIC_STRIDES \ |
200 | PARAM_VALUE (PARAM_PREFETCH_DYNAMIC_STRIDES) | |
6dc01178 | 201 | #define PREFETCH_MINIMUM_STRIDE \ |
202 | PARAM_VALUE (PARAM_PREFETCH_MINIMUM_STRIDE) | |
a1406b2e | 203 | #define USE_CANONICAL_TYPES \ |
204 | PARAM_VALUE (PARAM_USE_CANONICAL_TYPES) | |
47dd2e78 | 205 | #define IRA_MAX_LOOPS_NUM \ |
206 | PARAM_VALUE (PARAM_IRA_MAX_LOOPS_NUM) | |
95c83f01 | 207 | #define IRA_MAX_CONFLICT_TABLE_SIZE \ |
208 | PARAM_VALUE (PARAM_IRA_MAX_CONFLICT_TABLE_SIZE) | |
e8eed2f8 | 209 | #define IRA_LOOP_RESERVED_REGS \ |
210 | PARAM_VALUE (PARAM_IRA_LOOP_RESERVED_REGS) | |
eb3db740 | 211 | #define LRA_MAX_CONSIDERED_RELOAD_PSEUDOS \ |
212 | PARAM_VALUE (PARAM_LRA_MAX_CONSIDERED_RELOAD_PSEUDOS) | |
4b69081d | 213 | #define LRA_INHERITANCE_EBB_PROBABILITY_CUTOFF \ |
214 | PARAM_VALUE (PARAM_LRA_INHERITANCE_EBB_PROBABILITY_CUTOFF) | |
a347af29 | 215 | #define SWITCH_CONVERSION_BRANCH_RATIO \ |
216 | PARAM_VALUE (PARAM_SWITCH_CONVERSION_BRANCH_RATIO) | |
86482d6b | 217 | #define LOOP_INVARIANT_MAX_BBS_IN_LOOP \ |
218 | PARAM_VALUE (PARAM_LOOP_INVARIANT_MAX_BBS_IN_LOOP) | |
37545e54 | 219 | #define SLP_MAX_INSNS_IN_BB \ |
220 | PARAM_VALUE (PARAM_SLP_MAX_INSNS_IN_BB) | |
0ab353e1 | 221 | #define MIN_INSN_TO_PREFETCH_RATIO \ |
222 | PARAM_VALUE (PARAM_MIN_INSN_TO_PREFETCH_RATIO) | |
223 | #define PREFETCH_MIN_INSN_TO_MEM_RATIO \ | |
224 | PARAM_VALUE (PARAM_PREFETCH_MIN_INSN_TO_MEM_RATIO) | |
9845d120 | 225 | #define MIN_NONDEBUG_INSN_UID \ |
226 | PARAM_VALUE (PARAM_MIN_NONDEBUG_INSN_UID) | |
ec611e12 | 227 | #define MAX_STORES_TO_SINK \ |
228 | PARAM_VALUE (PARAM_MAX_STORES_TO_SINK) | |
1cd6e20d | 229 | #define ALLOW_LOAD_DATA_RACES \ |
230 | PARAM_VALUE (PARAM_ALLOW_LOAD_DATA_RACES) | |
4bb60ec7 | 231 | #define ALLOW_STORE_DATA_RACES \ |
232 | PARAM_VALUE (PARAM_ALLOW_STORE_DATA_RACES) | |
1cd6e20d | 233 | #define ALLOW_PACKED_LOAD_DATA_RACES \ |
234 | PARAM_VALUE (PARAM_ALLOW_PACKED_LOAD_DATA_RACES) | |
235 | #define ALLOW_PACKED_STORE_DATA_RACES \ | |
236 | PARAM_VALUE (PARAM_ALLOW_PACKED_STORE_DATA_RACES) | |
bf2b7c22 | 237 | #define ASAN_STACK \ |
238 | PARAM_VALUE (PARAM_ASAN_STACK) | |
77c44489 | 239 | #define ASAN_PROTECT_ALLOCAS \ |
240 | PARAM_VALUE (PARAM_ASAN_PROTECT_ALLOCAS) | |
bf2b7c22 | 241 | #define ASAN_GLOBALS \ |
242 | PARAM_VALUE (PARAM_ASAN_GLOBALS) | |
243 | #define ASAN_INSTRUMENT_READS \ | |
244 | PARAM_VALUE (PARAM_ASAN_INSTRUMENT_READS) | |
245 | #define ASAN_INSTRUMENT_WRITES \ | |
246 | PARAM_VALUE (PARAM_ASAN_INSTRUMENT_WRITES) | |
247 | #define ASAN_MEMINTRIN \ | |
248 | PARAM_VALUE (PARAM_ASAN_MEMINTRIN) | |
249 | #define ASAN_USE_AFTER_RETURN \ | |
250 | PARAM_VALUE (PARAM_ASAN_USE_AFTER_RETURN) | |
4f86f720 | 251 | #define ASAN_INSTRUMENTATION_WITH_CALL_THRESHOLD \ |
252 | PARAM_VALUE (PARAM_ASAN_INSTRUMENTATION_WITH_CALL_THRESHOLD) | |
629b6abc | 253 | #define ASAN_PARAM_USE_AFTER_SCOPE_DIRECT_EMISSION_THRESHOLD \ |
254 | ((unsigned) PARAM_VALUE (PARAM_USE_AFTER_SCOPE_DIRECT_EMISSION_THRESHOLD)) | |
1cd6e20d | 255 | |
2a281353 | 256 | #endif /* ! GCC_PARAMS_H */ |