annotate gcc/params.c @ 132:d34655255c78

update gcc-8.2
author mir3636
date Thu, 25 Oct 2018 10:21:07 +0900
parents 84e7813d76e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 /* params.c - Run-time parameters.
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2 Copyright (C) 2001-2018 Free Software Foundation, Inc.
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 Written by Mark Mitchell <mark@codesourcery.com>.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 This file is part of GCC.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 GCC is free software; you can redistribute it and/or modify it under
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 the terms of the GNU General Public License as published by the Free
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 Software Foundation; either version 3, or (at your option) any later
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 version.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 for more details.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 along with GCC; see the file COPYING3. If not see
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 <http://www.gnu.org/licenses/>. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 #include "config.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 #include "system.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 #include "coretypes.h"
111
kono
parents: 67
diff changeset
24 #include "common/common-target.h"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 #include "params.h"
111
kono
parents: 67
diff changeset
26 #include "params-enum.h"
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
27 #include "diagnostic-core.h"
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
28 #include "diagnostic.h"
111
kono
parents: 67
diff changeset
29 #include "spellcheck.h"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 /* An array containing the compiler parameters and their current
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 values. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 param_info *compiler_params;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 /* The number of entries in the table. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 static size_t num_compiler_params;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
39 /* Whether the parameters have all been initialized and had their
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
40 default values determined. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
41 static bool params_finished;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
42
111
kono
parents: 67
diff changeset
43 #define DEFPARAM(ENUM, OPTION, HELP, DEFAULT, MIN, MAX)
kono
parents: 67
diff changeset
44 #define DEFPARAMENUM5(ENUM, OPTION, HELP, DEFAULT, V0, V1, V2, V3, V4) \
kono
parents: 67
diff changeset
45 static const char *values_ ## ENUM [] = { #V0, #V1, #V2, #V3, #V4, NULL };
kono
parents: 67
diff changeset
46 #include "params.def"
kono
parents: 67
diff changeset
47 #undef DEFPARAMENUM5
kono
parents: 67
diff changeset
48 #undef DEFPARAM
kono
parents: 67
diff changeset
49
kono
parents: 67
diff changeset
50 static const param_info lang_independent_params[] = {
kono
parents: 67
diff changeset
51 #define DEFPARAM(ENUM, OPTION, HELP, DEFAULT, MIN, MAX) \
kono
parents: 67
diff changeset
52 { OPTION, DEFAULT, MIN, MAX, HELP, NULL },
kono
parents: 67
diff changeset
53 #define DEFPARAMENUM5(ENUM, OPTION, HELP, DEFAULT, \
kono
parents: 67
diff changeset
54 V0, V1, V2, V3, V4) \
kono
parents: 67
diff changeset
55 { OPTION, (int)ENUM ## _KIND_ ## DEFAULT, 0, 4, HELP, values_ ## ENUM },
kono
parents: 67
diff changeset
56 #include "params.def"
kono
parents: 67
diff changeset
57 #undef DEFPARAM
kono
parents: 67
diff changeset
58 #undef DEFPARAMENUM5
kono
parents: 67
diff changeset
59 { NULL, 0, 0, 0, NULL, NULL }
kono
parents: 67
diff changeset
60 };
kono
parents: 67
diff changeset
61
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
62 static bool
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
63 validate_param (const int value, const param_info param, const int index);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
64
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
65
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 /* Add the N PARAMS to the current list of compiler parameters. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 void
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 add_params (const param_info params[], size_t n)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 {
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
71 gcc_assert (!params_finished);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
72
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 /* Allocate enough space for the new parameters. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 compiler_params = XRESIZEVEC (param_info, compiler_params,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 num_compiler_params + n);
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
76 param_info *dst_params = compiler_params + num_compiler_params;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
77
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 /* Copy them into the table. */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
79 memcpy (dst_params, params, n * sizeof (param_info));
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
80
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 /* Keep track of how many parameters we have. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 num_compiler_params += n;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
83
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
84 /* Initialize the pretty printing machinery in case we need to print an error,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
85 but be sure not to initialize it if something else already has, e.g. a
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
86 language front-end like cc1. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
87 if (!diagnostic_ready_p ())
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
88 diagnostic_initialize (global_dc, 0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
89
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
90 /* Now perform some validation and validation failures trigger an error so
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
91 initialization will stop. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
92 for (size_t i = num_compiler_params - n; i < n; i++)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
93 validate_param (params[i].default_value, params[i], (int)i);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
95
111
kono
parents: 67
diff changeset
96 /* Add all parameters and default values that can be set in both the
kono
parents: 67
diff changeset
97 driver and the compiler proper. */
kono
parents: 67
diff changeset
98
kono
parents: 67
diff changeset
99 void
kono
parents: 67
diff changeset
100 global_init_params (void)
kono
parents: 67
diff changeset
101 {
kono
parents: 67
diff changeset
102 gcc_assert (!params_finished);
kono
parents: 67
diff changeset
103
kono
parents: 67
diff changeset
104 add_params (lang_independent_params, LAST_PARAM);
kono
parents: 67
diff changeset
105 targetm_common.option_default_params ();
kono
parents: 67
diff changeset
106 }
kono
parents: 67
diff changeset
107
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
108 /* Note that all parameters have been added and all default values
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
109 set. */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
110
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 void
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
112 finish_params (void)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
113 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
114 params_finished = true;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
115 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
116
111
kono
parents: 67
diff changeset
117 /* Reset all state within params.c so that we can rerun the compiler
kono
parents: 67
diff changeset
118 within the same process. For use by toplev::finalize. */
kono
parents: 67
diff changeset
119
kono
parents: 67
diff changeset
120 void
kono
parents: 67
diff changeset
121 params_c_finalize (void)
kono
parents: 67
diff changeset
122 {
kono
parents: 67
diff changeset
123 XDELETEVEC (compiler_params);
kono
parents: 67
diff changeset
124 compiler_params = NULL;
kono
parents: 67
diff changeset
125 num_compiler_params = 0;
kono
parents: 67
diff changeset
126 params_finished = false;
kono
parents: 67
diff changeset
127 }
kono
parents: 67
diff changeset
128
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
129 /* Set the value of the parameter given by NUM to VALUE in PARAMS and
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
130 PARAMS_SET. If EXPLICIT_P, this is being set by the user;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
131 otherwise it is being set implicitly by the compiler. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
132
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
133 static void
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
134 set_param_value_internal (compiler_param num, int value,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
135 int *params, int *params_set,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
136 bool explicit_p)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
137 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
138 size_t i = (size_t) num;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
139
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
140 gcc_assert (params_finished);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
141
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
142 params[i] = value;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
143 if (explicit_p)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
144 params_set[i] = true;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
145 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
146
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
147 /* Validate PARAM and write an error if invalid. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
148
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
149 static bool
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
150 validate_param (const int value, const param_info param, const int index)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
151 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
152 /* These paremeters interpret bounds of 0 to be unbounded, as such don't
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
153 perform any range validation on 0 parameters. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
154 if (value < param.min_value && param.min_value != 0)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
155 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
156 error ("minimum value of parameter %qs is %u",
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
157 param.option, param.min_value);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
158 return false;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
159 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
160 else if (param.max_value > param.min_value && value > param.max_value)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
161 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
162 error ("maximum value of parameter %qs is %u",
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
163 param.option, param.max_value);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
164 return false;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
165 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
166 else if (targetm_common.option_validate_param (value, index))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
167 return true;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
168
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
169 return false;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
170 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
171
111
kono
parents: 67
diff changeset
172 /* Return true if it can find the matching entry for NAME in the parameter
kono
parents: 67
diff changeset
173 table, and assign the entry index to INDEX. Return false otherwise. */
kono
parents: 67
diff changeset
174
kono
parents: 67
diff changeset
175 bool
kono
parents: 67
diff changeset
176 find_param (const char *name, enum compiler_param *index)
kono
parents: 67
diff changeset
177 {
kono
parents: 67
diff changeset
178 for (size_t i = 0; i < num_compiler_params; ++i)
kono
parents: 67
diff changeset
179 if (strcmp (compiler_params[i].option, name) == 0)
kono
parents: 67
diff changeset
180 {
kono
parents: 67
diff changeset
181 *index = (enum compiler_param) i;
kono
parents: 67
diff changeset
182 return true;
kono
parents: 67
diff changeset
183 }
kono
parents: 67
diff changeset
184
kono
parents: 67
diff changeset
185 return false;
kono
parents: 67
diff changeset
186 }
kono
parents: 67
diff changeset
187
kono
parents: 67
diff changeset
188 /* Look for the closest match for NAME in the parameter table, returning it
kono
parents: 67
diff changeset
189 if it is a reasonable suggestion for a misspelling. Return NULL
kono
parents: 67
diff changeset
190 otherwise. */
kono
parents: 67
diff changeset
191
kono
parents: 67
diff changeset
192 const char *
kono
parents: 67
diff changeset
193 find_param_fuzzy (const char *name)
kono
parents: 67
diff changeset
194 {
kono
parents: 67
diff changeset
195 best_match <const char *, const char *> bm (name);
kono
parents: 67
diff changeset
196 for (size_t i = 0; i < num_compiler_params; ++i)
kono
parents: 67
diff changeset
197 bm.consider (compiler_params[i].option);
kono
parents: 67
diff changeset
198 return bm.get_best_meaningful_candidate ();
kono
parents: 67
diff changeset
199 }
kono
parents: 67
diff changeset
200
kono
parents: 67
diff changeset
201 /* Return true if param with entry index INDEX should be defined using strings.
kono
parents: 67
diff changeset
202 If so, return the value corresponding to VALUE_NAME in *VALUE_P. */
kono
parents: 67
diff changeset
203
kono
parents: 67
diff changeset
204 bool
kono
parents: 67
diff changeset
205 param_string_value_p (enum compiler_param index, const char *value_name,
kono
parents: 67
diff changeset
206 int *value_p)
kono
parents: 67
diff changeset
207 {
kono
parents: 67
diff changeset
208 param_info *entry = &compiler_params[(int) index];
kono
parents: 67
diff changeset
209 if (entry->value_names == NULL)
kono
parents: 67
diff changeset
210 return false;
kono
parents: 67
diff changeset
211
kono
parents: 67
diff changeset
212 *value_p = -1;
kono
parents: 67
diff changeset
213
kono
parents: 67
diff changeset
214 for (int i = 0; entry->value_names[i] != NULL; ++i)
kono
parents: 67
diff changeset
215 if (strcmp (entry->value_names[i], value_name) == 0)
kono
parents: 67
diff changeset
216 {
kono
parents: 67
diff changeset
217 *value_p = i;
kono
parents: 67
diff changeset
218 return true;
kono
parents: 67
diff changeset
219 }
kono
parents: 67
diff changeset
220
kono
parents: 67
diff changeset
221 return true;
kono
parents: 67
diff changeset
222 }
kono
parents: 67
diff changeset
223
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
224 /* Set the VALUE associated with the parameter given by NAME in PARAMS
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
225 and PARAMS_SET. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
226
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
227 void
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
228 set_param_value (const char *name, int value,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
229 int *params, int *params_set)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
230 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 size_t i;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
232
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
233 /* Make sure nobody tries to set a parameter to an invalid value. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
234 gcc_assert (value != INVALID_PARAM_VAL);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
235
111
kono
parents: 67
diff changeset
236 enum compiler_param index;
kono
parents: 67
diff changeset
237 if (!find_param (name, &index))
kono
parents: 67
diff changeset
238 {
kono
parents: 67
diff changeset
239 /* If we didn't find this parameter, issue an error message. */
kono
parents: 67
diff changeset
240 error ("invalid parameter %qs", name);
kono
parents: 67
diff changeset
241 return;
kono
parents: 67
diff changeset
242 }
kono
parents: 67
diff changeset
243 i = (size_t)index;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
244
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
245 if (validate_param (value, compiler_params[i], i))
111
kono
parents: 67
diff changeset
246 set_param_value_internal ((compiler_param) i, value,
kono
parents: 67
diff changeset
247 params, params_set, true);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
248 }
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
249
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
250 /* Set the value of the parameter given by NUM to VALUE in PARAMS and
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
251 PARAMS_SET, implicitly, if it has not been set explicitly by the
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
252 user either via the commandline or configure. */
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
253
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
254 void
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
255 maybe_set_param_value (compiler_param num, int value,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
256 int *params, int *params_set)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
257 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
258 if (!params_set[(int) num])
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
259 set_param_value_internal (num, value, params, params_set, false);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
260 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
261
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
262 /* Set the default value of a parameter given by NUM to VALUE, before
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
263 option processing. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
264
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
265 void
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
266 set_default_param_value (compiler_param num, int value)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
267 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
268 gcc_assert (!params_finished);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
269
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
270 compiler_params[(int) num].default_value = value;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
271 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
272
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
273 /* Return the default value of parameter NUM. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
274
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
275 int
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
276 default_param_value (compiler_param num)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
277 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
278 return compiler_params[(int) num].default_value;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
279 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
280
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
281 /* Initialize an array PARAMS with default values of the
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
282 parameters. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
283
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
284 void
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
285 init_param_values (int *params)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
286 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
287 size_t i;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
288
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
289 gcc_assert (params_finished);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
290
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
291 for (i = 0; i < num_compiler_params; i++)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
292 params[i] = compiler_params[i].default_value;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
293 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
294
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
295 /* Return the current value of num_compiler_params, for the benefit of
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
296 plugins that use parameters as features. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
297
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
298 size_t
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
299 get_num_compiler_params (void)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
300 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
301 return num_compiler_params;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
302 }