]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/params.h
[Ada] Revert change for gnatprove that is no longer needed
[thirdparty/gcc.git] / gcc / params.h
CommitLineData
9a33a2e8 1/* params.h - Run-time parameters.
fbd26352 2 Copyright (C) 2001-2019 Free Software Foundation, Inc.
9a33a2e8 3 Written by Mark Mitchell <mark@codesourcery.com>.
4
f12b58b3 5This file is part of GCC.
9a33a2e8 6
f12b58b3 7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
8c4c00c1 9Software Foundation; either version 3, or (at your option) any later
f12b58b3 10version.
9a33a2e8 11
f12b58b3 12GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15for more details.
9a33a2e8 16
17You should have received a copy of the GNU General Public License
8c4c00c1 18along 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 41struct 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
66extern param_info *compiler_params;
67
c9036234 68/* Returns the number of entries in the table, for the use by plugins. */
69extern size_t get_num_compiler_params (void);
70
9a33a2e8 71/* Add the N PARAMS to the current list of compiler parameters. */
72
1a97be37 73extern 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 79extern 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 85enum compiler_param
9a33a2e8 86{
0a259d8d 87#include "params.list"
9a33a2e8 88 LAST_PARAM
b3e7c666 89};
9a33a2e8 90
df423ec7 91extern bool find_param (const char *, enum compiler_param *);
26a2e993 92extern const char *find_param_fuzzy (const char *name);
df423ec7 93extern 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 103extern 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
109extern 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
114extern void global_init_params (void);
115
56f280c4 116/* Note that all parameters have been added and all default values
117 set. */
118extern void finish_params (void);
119
415309e2 120/* Reset all state in params.c */
121
122extern void params_c_finalize (void);
123
56f280c4 124/* Return the default value of parameter NUM. */
125
126extern int default_param_value (compiler_param num);
127
128/* Initialize an array PARAMS with default values of the
129 parameters. */
130extern 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 */