Mercurial > hg > CbC > CbC_gcc
diff gcc/params.c @ 67:f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
author | nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 22 Mar 2011 17:18:12 +0900 |
parents | 77e2b8dfacca |
children | 04ced10e8804 |
line wrap: on
line diff
--- a/gcc/params.c Tue May 25 18:58:51 2010 +0900 +++ b/gcc/params.c Tue Mar 22 17:18:12 2011 +0900 @@ -1,5 +1,5 @@ /* params.c - Run-time parameters. - Copyright (C) 2001, 2003, 2004, 2005, 2007, 2008 + Copyright (C) 2001, 2003, 2004, 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. Written by Mark Mitchell <mark@codesourcery.com>. @@ -24,7 +24,7 @@ #include "coretypes.h" #include "tm.h" #include "params.h" -#include "toplev.h" +#include "diagnostic-core.h" /* An array containing the compiler parameters and their current values. */ @@ -34,11 +34,17 @@ /* The number of entries in the table. */ static size_t num_compiler_params; +/* Whether the parameters have all been initialized and had their + default values determined. */ +static bool params_finished; + /* Add the N PARAMS to the current list of compiler parameters. */ void add_params (const param_info params[], size_t n) { + gcc_assert (!params_finished); + /* Allocate enough space for the new parameters. */ compiler_params = XRESIZEVEC (param_info, compiler_params, num_compiler_params + n); @@ -50,10 +56,39 @@ num_compiler_params += n; } -/* Set the VALUE associated with the parameter given by NAME. */ +/* Note that all parameters have been added and all default values + set. */ void -set_param_value (const char *name, int value) +finish_params (void) +{ + params_finished = true; +} + +/* Set the value of the parameter given by NUM to VALUE in PARAMS and + PARAMS_SET. If EXPLICIT_P, this is being set by the user; + otherwise it is being set implicitly by the compiler. */ + +static void +set_param_value_internal (compiler_param num, int value, + int *params, int *params_set, + bool explicit_p) +{ + size_t i = (size_t) num; + + gcc_assert (params_finished); + + params[i] = value; + if (explicit_p) + params_set[i] = true; +} + +/* Set the VALUE associated with the parameter given by NAME in PARAMS + and PARAMS_SET. */ + +void +set_param_value (const char *name, int value, + int *params, int *params_set) { size_t i; @@ -74,10 +109,8 @@ compiler_params[i].option, compiler_params[i].max_value); else - { - compiler_params[i].value = value; - compiler_params[i].set = true; - } + set_param_value_internal ((compiler_param) i, value, + params, params_set, true); return; } @@ -85,6 +118,51 @@ error ("invalid parameter %qs", name); } +/* Set the value of the parameter given by NUM to VALUE in PARAMS and + PARAMS_SET, implicitly, if it has not been set explicitly by the + user. */ + +void +maybe_set_param_value (compiler_param num, int value, + int *params, int *params_set) +{ + if (!params_set[(int) num]) + set_param_value_internal (num, value, params, params_set, false); +} + +/* Set the default value of a parameter given by NUM to VALUE, before + option processing. */ + +void +set_default_param_value (compiler_param num, int value) +{ + gcc_assert (!params_finished); + + compiler_params[(int) num].default_value = value; +} + +/* Return the default value of parameter NUM. */ + +int +default_param_value (compiler_param num) +{ + return compiler_params[(int) num].default_value; +} + +/* Initialize an array PARAMS with default values of the + parameters. */ + +void +init_param_values (int *params) +{ + size_t i; + + gcc_assert (params_finished); + + for (i = 0; i < num_compiler_params; i++) + params[i] = compiler_params[i].default_value; +} + /* Return the current value of num_compiler_params, for the benefit of plugins that use parameters as features. */