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