190075Sobrien/* params.h - Run-time parameters. 2169689Skan Copyright (C) 2001, 2003, 2004, 2005 Free Software Foundation, Inc. 390075Sobrien Written by Mark Mitchell <mark@codesourcery.com>. 490075Sobrien 590075SobrienThis file is part of GCC. 690075Sobrien 790075SobrienGCC is free software; you can redistribute it and/or modify it under 890075Sobrienthe terms of the GNU General Public License as published by the Free 990075SobrienSoftware Foundation; either version 2, or (at your option) any later 1090075Sobrienversion. 1190075Sobrien 1290075SobrienGCC is distributed in the hope that it will be useful, but WITHOUT ANY 1390075SobrienWARRANTY; without even the implied warranty of MERCHANTABILITY or 1490075SobrienFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1590075Sobrienfor more details. 1690075Sobrien 1790075SobrienYou should have received a copy of the GNU General Public License 1890075Sobrienalong with GCC; see the file COPYING. If not, write to the Free 19169689SkanSoftware Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 20169689Skan02110-1301, USA. 2190075Sobrien 2290075Sobrien*/ 2390075Sobrien 2490075Sobrien/* This module provides a means for setting integral parameters 2590075Sobrien dynamically. Instead of encoding magic numbers in various places, 2690075Sobrien use this module to organize all the magic numbers in a single 2790075Sobrien place. The values of the parameters can be set on the 2890075Sobrien command-line, thereby providing a way to control the amount of 2990075Sobrien effort spent on particular optimization passes, or otherwise tune 3090075Sobrien the behavior of the compiler. 3190075Sobrien 3290075Sobrien Since their values can be set on the command-line, these parameters 3390075Sobrien should not be used for non-dynamic memory allocation. */ 3490075Sobrien 3590075Sobrien#ifndef GCC_PARAMS_H 3690075Sobrien#define GCC_PARAMS_H 3790075Sobrien 3890075Sobrien/* No parameter shall have this value. */ 3990075Sobrien 4090075Sobrien#define INVALID_PARAM_VAL (-1) 4190075Sobrien 4290075Sobrien/* The information associated with each parameter. */ 4390075Sobrien 4490075Sobrientypedef struct param_info 4590075Sobrien{ 4690075Sobrien /* The name used with the `--param <name>=<value>' switch to set this 4790075Sobrien value. */ 4890075Sobrien const char *const option; 4990075Sobrien /* The associated value. */ 5090075Sobrien int value; 51169689Skan 52169689Skan /* Minimum acceptable value. */ 53169689Skan int min_value; 54169689Skan 55169689Skan /* Maximum acceptable value, if greater than minimum */ 56169689Skan int max_value; 57169689Skan 5890075Sobrien /* A short description of the option. */ 5990075Sobrien const char *const help; 6090075Sobrien} param_info; 6190075Sobrien 6290075Sobrien/* An array containing the compiler parameters and their current 6390075Sobrien values. */ 6490075Sobrien 6590075Sobrienextern param_info *compiler_params; 6690075Sobrien 6790075Sobrien/* Add the N PARAMS to the current list of compiler parameters. */ 6890075Sobrien 69132718Skanextern void add_params (const param_info params[], size_t n); 7090075Sobrien 7190075Sobrien/* Set the VALUE associated with the parameter given by NAME. */ 7290075Sobrien 73132718Skanextern void set_param_value (const char *name, int value); 7490075Sobrien 7590075Sobrien 7690075Sobrien/* The parameters in use by language-independent code. */ 7790075Sobrien 7890075Sobrientypedef enum compiler_param 7990075Sobrien{ 80169689Skan#define DEFPARAM(enumerator, option, msgid, default, min, max) \ 8190075Sobrien enumerator, 8290075Sobrien#include "params.def" 83117395Skan#undef DEFPARAM 8490075Sobrien LAST_PARAM 8590075Sobrien} compiler_param; 8690075Sobrien 8790075Sobrien/* The value of the parameter given by ENUM. */ 8890075Sobrien#define PARAM_VALUE(ENUM) \ 8990075Sobrien (compiler_params[(int) ENUM].value) 90117395Skan 9190075Sobrien/* Macros for the various parameters. */ 92169689Skan#define SALIAS_MAX_IMPLICIT_FIELDS \ 93169689Skan PARAM_VALUE (PARAM_SALIAS_MAX_IMPLICIT_FIELDS) 94169689Skan#define SALIAS_MAX_ARRAY_ELEMENTS \ 95169689Skan PARAM_VALUE (PARAM_SALIAS_MAX_ARRAY_ELEMENTS) 96169689Skan#define SRA_MAX_STRUCTURE_SIZE \ 97169689Skan PARAM_VALUE (PARAM_SRA_MAX_STRUCTURE_SIZE) 98169689Skan#define SRA_MAX_STRUCTURE_COUNT \ 99169689Skan PARAM_VALUE (PARAM_SRA_MAX_STRUCTURE_COUNT) 100169689Skan#define SRA_FIELD_STRUCTURE_RATIO \ 101169689Skan PARAM_VALUE (PARAM_SRA_FIELD_STRUCTURE_RATIO) 102117395Skan#define MAX_INLINE_INSNS_SINGLE \ 103117395Skan PARAM_VALUE (PARAM_MAX_INLINE_INSNS_SINGLE) 10490075Sobrien#define MAX_INLINE_INSNS \ 10590075Sobrien PARAM_VALUE (PARAM_MAX_INLINE_INSNS) 106117395Skan#define MAX_INLINE_SLOPE \ 107117395Skan PARAM_VALUE (PARAM_MAX_INLINE_SLOPE) 108117395Skan#define MIN_INLINE_INSNS \ 109117395Skan PARAM_VALUE (PARAM_MIN_INLINE_INSNS) 110117395Skan#define MAX_INLINE_INSNS_AUTO \ 111117395Skan PARAM_VALUE (PARAM_MAX_INLINE_INSNS_AUTO) 112169689Skan#define MAX_VARIABLE_EXPANSIONS \ 113169689Skan PARAM_VALUE (PARAM_MAX_VARIABLE_EXPANSIONS) 11490075Sobrien#define MAX_DELAY_SLOT_INSN_SEARCH \ 11590075Sobrien PARAM_VALUE (PARAM_MAX_DELAY_SLOT_INSN_SEARCH) 11690075Sobrien#define MAX_DELAY_SLOT_LIVE_SEARCH \ 11790075Sobrien PARAM_VALUE (PARAM_MAX_DELAY_SLOT_LIVE_SEARCH) 11890075Sobrien#define MAX_PENDING_LIST_LENGTH \ 11990075Sobrien PARAM_VALUE (PARAM_MAX_PENDING_LIST_LENGTH) 12090075Sobrien#define MAX_GCSE_MEMORY \ 12190075Sobrien ((size_t) PARAM_VALUE (PARAM_MAX_GCSE_MEMORY)) 12290075Sobrien#define MAX_GCSE_PASSES \ 12390075Sobrien PARAM_VALUE (PARAM_MAX_GCSE_PASSES) 124169689Skan#define GCSE_AFTER_RELOAD_PARTIAL_FRACTION \ 125169689Skan PARAM_VALUE (PARAM_GCSE_AFTER_RELOAD_PARTIAL_FRACTION) 126169689Skan#define GCSE_AFTER_RELOAD_CRITICAL_FRACTION \ 127169689Skan PARAM_VALUE (PARAM_GCSE_AFTER_RELOAD_CRITICAL_FRACTION) 128117395Skan#define MAX_UNROLLED_INSNS \ 129117395Skan PARAM_VALUE (PARAM_MAX_UNROLLED_INSNS) 130169689Skan#define MAX_SMS_LOOP_NUMBER \ 131169689Skan PARAM_VALUE (PARAM_MAX_SMS_LOOP_NUMBER) 132169689Skan#define SMS_MAX_II_FACTOR \ 133169689Skan PARAM_VALUE (PARAM_SMS_MAX_II_FACTOR) 134169689Skan#define SMS_DFA_HISTORY \ 135169689Skan PARAM_VALUE (PARAM_SMS_DFA_HISTORY) 136169689Skan#define SMS_LOOP_AVERAGE_COUNT_THRESHOLD \ 137169689Skan PARAM_VALUE (PARAM_SMS_LOOP_AVERAGE_COUNT_THRESHOLD) 138169689Skan#define GLOBAL_VAR_THRESHOLD \ 139169689Skan PARAM_VALUE (PARAM_GLOBAL_VAR_THRESHOLD) 140169689Skan#define MAX_ALIASED_VOPS \ 141169689Skan PARAM_VALUE (PARAM_MAX_ALIASED_VOPS) 142169689Skan#define INTEGER_SHARE_LIMIT \ 143169689Skan PARAM_VALUE (PARAM_INTEGER_SHARE_LIMIT) 144146895Skan#define MAX_LAST_VALUE_RTL \ 145146895Skan PARAM_VALUE (PARAM_MAX_LAST_VALUE_RTL) 146169689Skan#define MIN_VIRTUAL_MAPPINGS \ 147169689Skan PARAM_VALUE (PARAM_MIN_VIRTUAL_MAPPINGS) 148169689Skan#define VIRTUAL_MAPPINGS_TO_SYMS_RATIO \ 149169689Skan PARAM_VALUE (PARAM_VIRTUAL_MAPPINGS_TO_SYMS_RATIO) 150169689Skan#define MAX_FIELDS_FOR_FIELD_SENSITIVE \ 151169689Skan ((size_t) PARAM_VALUE (PARAM_MAX_FIELDS_FOR_FIELD_SENSITIVE)) 152169689Skan#define MAX_SCHED_READY_INSNS \ 153169689Skan PARAM_VALUE (PARAM_MAX_SCHED_READY_INSNS) 15490075Sobrien#endif /* ! GCC_PARAMS_H */ 155