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