annotate gcc/optc-save-gen.awk @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1 # Copyright (C) 2003-2020 Free Software Foundation, Inc.
111
kono
parents:
diff changeset
2 # Contributed by Kelley Cook, June 2004.
kono
parents:
diff changeset
3 # Original code from Neil Booth, May 2003.
kono
parents:
diff changeset
4 #
kono
parents:
diff changeset
5 # This program is free software; you can redistribute it and/or modify it
kono
parents:
diff changeset
6 # under the terms of the GNU General Public License as published by the
kono
parents:
diff changeset
7 # Free Software Foundation; either version 3, or (at your option) any
kono
parents:
diff changeset
8 # later version.
kono
parents:
diff changeset
9 #
kono
parents:
diff changeset
10 # This program is distributed in the hope that it will be useful,
kono
parents:
diff changeset
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
kono
parents:
diff changeset
13 # GNU General Public License for more details.
kono
parents:
diff changeset
14 #
kono
parents:
diff changeset
15 # You should have received a copy of the GNU General Public License
kono
parents:
diff changeset
16 # along with this program; see the file COPYING3. If not see
kono
parents:
diff changeset
17 # <http://www.gnu.org/licenses/>.
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 # This Awk script reads in the option records generated from
kono
parents:
diff changeset
20 # opt-gather.awk, combines the flags of duplicate options and generates a
kono
parents:
diff changeset
21 # C file.
kono
parents:
diff changeset
22 #
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 # This program uses functions from opt-functions.awk and code from
kono
parents:
diff changeset
25 # opt-read.awk.
kono
parents:
diff changeset
26 #
kono
parents:
diff changeset
27 # Usage: awk -f opt-functions.awk -f opt-read.awk -f optc-save-gen.awk \
kono
parents:
diff changeset
28 # [-v header_name=header.h] < inputfile > options-save.c
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 # Dump that array of options into a C file.
kono
parents:
diff changeset
31 END {
kono
parents:
diff changeset
32 print "/* This file is auto-generated by optc-save-gen.awk. */"
kono
parents:
diff changeset
33 print ""
kono
parents:
diff changeset
34 n_headers = split(header_name, headers, " ")
kono
parents:
diff changeset
35 for (i = 1; i <= n_headers; i++)
kono
parents:
diff changeset
36 print "#include " quote headers[i] quote
kono
parents:
diff changeset
37 print "#include " quote "opts.h" quote
kono
parents:
diff changeset
38 print "#include " quote "intl.h" quote
kono
parents:
diff changeset
39 print ""
kono
parents:
diff changeset
40 print "#include " quote "flags.h" quote
kono
parents:
diff changeset
41 print "#include " quote "target.h" quote
kono
parents:
diff changeset
42 print "#include " quote "inchash.h" quote
kono
parents:
diff changeset
43 print "#include " quote "hash-set.h" quote
kono
parents:
diff changeset
44 print "#include " quote "vec.h" quote
kono
parents:
diff changeset
45 print "#include " quote "input.h" quote
kono
parents:
diff changeset
46 print "#include " quote "alias.h" quote
kono
parents:
diff changeset
47 print "#include " quote "symtab.h" quote
kono
parents:
diff changeset
48 print "#include " quote "inchash.h" quote
kono
parents:
diff changeset
49 print "#include " quote "tree.h" quote
kono
parents:
diff changeset
50 print "#include " quote "fold-const.h" quote
kono
parents:
diff changeset
51 print "#include " quote "tree-ssa-alias.h" quote
kono
parents:
diff changeset
52 print "#include " quote "is-a.h" quote
kono
parents:
diff changeset
53 print "#include " quote "predict.h" quote
kono
parents:
diff changeset
54 print "#include " quote "function.h" quote
kono
parents:
diff changeset
55 print "#include " quote "basic-block.h" quote
kono
parents:
diff changeset
56 print "#include " quote "gimple-expr.h" quote
kono
parents:
diff changeset
57 print "#include " quote "gimple.h" quote
kono
parents:
diff changeset
58 print "#include " quote "data-streamer.h" quote
kono
parents:
diff changeset
59 print "#include " quote "ipa-ref.h" quote
kono
parents:
diff changeset
60 print "#include " quote "cgraph.h" quote
kono
parents:
diff changeset
61 print ""
kono
parents:
diff changeset
62
kono
parents:
diff changeset
63 if (n_extra_c_includes > 0) {
kono
parents:
diff changeset
64 for (i = 0; i < n_extra_c_includes; i++) {
kono
parents:
diff changeset
65 print "#include " quote extra_c_includes[i] quote
kono
parents:
diff changeset
66 }
kono
parents:
diff changeset
67 print ""
kono
parents:
diff changeset
68 }
kono
parents:
diff changeset
69
kono
parents:
diff changeset
70 have_save = 0;
kono
parents:
diff changeset
71 if (n_extra_target_vars)
kono
parents:
diff changeset
72 have_save = 1
kono
parents:
diff changeset
73
kono
parents:
diff changeset
74 for (i = 0; i < n_opts; i++) {
kono
parents:
diff changeset
75 if (flag_set_p("Save", flags[i]))
kono
parents:
diff changeset
76 have_save = 1;
kono
parents:
diff changeset
77 }
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79 print "/* Save optimization variables into a structure. */"
kono
parents:
diff changeset
80 print "void";
kono
parents:
diff changeset
81 print "cl_optimization_save (struct cl_optimization *ptr, struct gcc_options *opts)";
kono
parents:
diff changeset
82 print "{";
kono
parents:
diff changeset
83
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
84 n_opt_char = 4;
111
kono
parents:
diff changeset
85 n_opt_short = 0;
kono
parents:
diff changeset
86 n_opt_int = 0;
kono
parents:
diff changeset
87 n_opt_enum = 0;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
88 n_opt_string = 0;
111
kono
parents:
diff changeset
89 n_opt_other = 0;
kono
parents:
diff changeset
90 var_opt_char[0] = "optimize";
kono
parents:
diff changeset
91 var_opt_char[1] = "optimize_size";
kono
parents:
diff changeset
92 var_opt_char[2] = "optimize_debug";
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
93 var_opt_char[3] = "optimize_fast";
111
kono
parents:
diff changeset
94 var_opt_range["optimize"] = "0, 255";
kono
parents:
diff changeset
95 var_opt_range["optimize_size"] = "0, 1";
kono
parents:
diff changeset
96 var_opt_range["optimize_debug"] = "0, 1";
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
97 var_opt_range["optimize_fast"] = "0, 1";
111
kono
parents:
diff changeset
98
kono
parents:
diff changeset
99 # Sort by size to mimic how the structure is laid out to be friendlier to the
kono
parents:
diff changeset
100 # cache.
kono
parents:
diff changeset
101
kono
parents:
diff changeset
102 for (i = 0; i < n_opts; i++) {
kono
parents:
diff changeset
103 if (flag_set_p("(Optimization|PerFunction)", flags[i])) {
kono
parents:
diff changeset
104 name = var_name(flags[i])
kono
parents:
diff changeset
105 if(name == "")
kono
parents:
diff changeset
106 continue;
kono
parents:
diff changeset
107
kono
parents:
diff changeset
108 if(name in var_opt_seen)
kono
parents:
diff changeset
109 continue;
kono
parents:
diff changeset
110
kono
parents:
diff changeset
111 var_opt_seen[name]++;
kono
parents:
diff changeset
112 otype = var_type_struct(flags[i]);
kono
parents:
diff changeset
113 if (otype ~ "^((un)?signed +)?int *$")
kono
parents:
diff changeset
114 var_opt_int[n_opt_int++] = name;
kono
parents:
diff changeset
115
kono
parents:
diff changeset
116 else if (otype ~ "^((un)?signed +)?short *$")
kono
parents:
diff changeset
117 var_opt_short[n_opt_short++] = name;
kono
parents:
diff changeset
118
kono
parents:
diff changeset
119 else if (otype ~ ("^enum +[_" alnum "]+ *"))
kono
parents:
diff changeset
120 var_opt_enum[n_opt_enum++] = name;
kono
parents:
diff changeset
121
kono
parents:
diff changeset
122 else if (otype ~ "^((un)?signed +)?char *$") {
kono
parents:
diff changeset
123 var_opt_char[n_opt_char++] = name;
kono
parents:
diff changeset
124 if (otype ~ "^unsigned +char *$")
kono
parents:
diff changeset
125 var_opt_range[name] = "0, 255"
kono
parents:
diff changeset
126 else if (otype ~ "^signed +char *$")
kono
parents:
diff changeset
127 var_opt_range[name] = "-128, 127"
kono
parents:
diff changeset
128 }
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
129 else if (otype ~ "^const char \\**$")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
130 var_opt_string[n_opt_string++] = name;
111
kono
parents:
diff changeset
131 else
kono
parents:
diff changeset
132 var_opt_other[n_opt_other++] = name;
kono
parents:
diff changeset
133 }
kono
parents:
diff changeset
134 }
kono
parents:
diff changeset
135
kono
parents:
diff changeset
136 for (i = 0; i < n_opt_char; i++) {
kono
parents:
diff changeset
137 name = var_opt_char[i];
kono
parents:
diff changeset
138 if (var_opt_range[name] != "")
kono
parents:
diff changeset
139 print " gcc_assert (IN_RANGE (opts->x_" name ", " var_opt_range[name] "));";
kono
parents:
diff changeset
140 }
kono
parents:
diff changeset
141
kono
parents:
diff changeset
142 print "";
kono
parents:
diff changeset
143 for (i = 0; i < n_opt_other; i++) {
kono
parents:
diff changeset
144 print " ptr->x_" var_opt_other[i] " = opts->x_" var_opt_other[i] ";";
kono
parents:
diff changeset
145 }
kono
parents:
diff changeset
146
kono
parents:
diff changeset
147 for (i = 0; i < n_opt_int; i++) {
kono
parents:
diff changeset
148 print " ptr->x_" var_opt_int[i] " = opts->x_" var_opt_int[i] ";";
kono
parents:
diff changeset
149 }
kono
parents:
diff changeset
150
kono
parents:
diff changeset
151 for (i = 0; i < n_opt_enum; i++) {
kono
parents:
diff changeset
152 print " ptr->x_" var_opt_enum[i] " = opts->x_" var_opt_enum[i] ";";
kono
parents:
diff changeset
153 }
kono
parents:
diff changeset
154
kono
parents:
diff changeset
155 for (i = 0; i < n_opt_short; i++) {
kono
parents:
diff changeset
156 print " ptr->x_" var_opt_short[i] " = opts->x_" var_opt_short[i] ";";
kono
parents:
diff changeset
157 }
kono
parents:
diff changeset
158
kono
parents:
diff changeset
159 for (i = 0; i < n_opt_char; i++) {
kono
parents:
diff changeset
160 print " ptr->x_" var_opt_char[i] " = opts->x_" var_opt_char[i] ";";
kono
parents:
diff changeset
161 }
kono
parents:
diff changeset
162
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
163 for (i = 0; i < n_opt_string; i++) {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
164 print " ptr->x_" var_opt_string[i] " = opts->x_" var_opt_string[i] ";";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
165 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
166
111
kono
parents:
diff changeset
167 print "}";
kono
parents:
diff changeset
168
kono
parents:
diff changeset
169 print "";
kono
parents:
diff changeset
170 print "/* Restore optimization options from a structure. */";
kono
parents:
diff changeset
171 print "void";
kono
parents:
diff changeset
172 print "cl_optimization_restore (struct gcc_options *opts, struct cl_optimization *ptr)";
kono
parents:
diff changeset
173 print "{";
kono
parents:
diff changeset
174
kono
parents:
diff changeset
175 for (i = 0; i < n_opt_other; i++) {
kono
parents:
diff changeset
176 print " opts->x_" var_opt_other[i] " = ptr->x_" var_opt_other[i] ";";
kono
parents:
diff changeset
177 }
kono
parents:
diff changeset
178
kono
parents:
diff changeset
179 for (i = 0; i < n_opt_int; i++) {
kono
parents:
diff changeset
180 print " opts->x_" var_opt_int[i] " = ptr->x_" var_opt_int[i] ";";
kono
parents:
diff changeset
181 }
kono
parents:
diff changeset
182
kono
parents:
diff changeset
183 for (i = 0; i < n_opt_enum; i++) {
kono
parents:
diff changeset
184 print " opts->x_" var_opt_enum[i] " = ptr->x_" var_opt_enum[i] ";";
kono
parents:
diff changeset
185 }
kono
parents:
diff changeset
186
kono
parents:
diff changeset
187 for (i = 0; i < n_opt_short; i++) {
kono
parents:
diff changeset
188 print " opts->x_" var_opt_short[i] " = ptr->x_" var_opt_short[i] ";";
kono
parents:
diff changeset
189 }
kono
parents:
diff changeset
190
kono
parents:
diff changeset
191 for (i = 0; i < n_opt_char; i++) {
kono
parents:
diff changeset
192 print " opts->x_" var_opt_char[i] " = ptr->x_" var_opt_char[i] ";";
kono
parents:
diff changeset
193 }
kono
parents:
diff changeset
194
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
195 for (i = 0; i < n_opt_string; i++) {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
196 print " opts->x_" var_opt_string[i] " = ptr->x_" var_opt_string[i] ";";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
197 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
198
111
kono
parents:
diff changeset
199 print " targetm.override_options_after_change ();";
kono
parents:
diff changeset
200 print "}";
kono
parents:
diff changeset
201
kono
parents:
diff changeset
202 print "";
kono
parents:
diff changeset
203 print "/* Print optimization options from a structure. */";
kono
parents:
diff changeset
204 print "void";
kono
parents:
diff changeset
205 print "cl_optimization_print (FILE *file,";
kono
parents:
diff changeset
206 print " int indent_to,";
kono
parents:
diff changeset
207 print " struct cl_optimization *ptr)";
kono
parents:
diff changeset
208 print "{";
kono
parents:
diff changeset
209
kono
parents:
diff changeset
210 print " fputs (\"\\n\", file);";
kono
parents:
diff changeset
211 for (i = 0; i < n_opt_other; i++) {
kono
parents:
diff changeset
212 print " if (ptr->x_" var_opt_other[i] ")";
kono
parents:
diff changeset
213 print " fprintf (file, \"%*s%s (%#lx)\\n\",";
kono
parents:
diff changeset
214 print " indent_to, \"\",";
kono
parents:
diff changeset
215 print " \"" var_opt_other[i] "\",";
kono
parents:
diff changeset
216 print " (unsigned long)ptr->x_" var_opt_other[i] ");";
kono
parents:
diff changeset
217 print "";
kono
parents:
diff changeset
218 }
kono
parents:
diff changeset
219
kono
parents:
diff changeset
220 for (i = 0; i < n_opt_int; i++) {
kono
parents:
diff changeset
221 print " if (ptr->x_" var_opt_int[i] ")";
kono
parents:
diff changeset
222 print " fprintf (file, \"%*s%s (%#x)\\n\",";
kono
parents:
diff changeset
223 print " indent_to, \"\",";
kono
parents:
diff changeset
224 print " \"" var_opt_int[i] "\",";
kono
parents:
diff changeset
225 print " ptr->x_" var_opt_int[i] ");";
kono
parents:
diff changeset
226 print "";
kono
parents:
diff changeset
227 }
kono
parents:
diff changeset
228
kono
parents:
diff changeset
229 for (i = 0; i < n_opt_enum; i++) {
kono
parents:
diff changeset
230 print " fprintf (file, \"%*s%s (%#x)\\n\",";
kono
parents:
diff changeset
231 print " indent_to, \"\",";
kono
parents:
diff changeset
232 print " \"" var_opt_enum[i] "\",";
kono
parents:
diff changeset
233 print " (int) ptr->x_" var_opt_enum[i] ");";
kono
parents:
diff changeset
234 print "";
kono
parents:
diff changeset
235 }
kono
parents:
diff changeset
236
kono
parents:
diff changeset
237 for (i = 0; i < n_opt_short; i++) {
kono
parents:
diff changeset
238 print " if (ptr->x_" var_opt_short[i] ")";
kono
parents:
diff changeset
239 print " fprintf (file, \"%*s%s (%#x)\\n\",";
kono
parents:
diff changeset
240 print " indent_to, \"\",";
kono
parents:
diff changeset
241 print " \"" var_opt_short[i] "\",";
kono
parents:
diff changeset
242 print " ptr->x_" var_opt_short[i] ");";
kono
parents:
diff changeset
243 print "";
kono
parents:
diff changeset
244 }
kono
parents:
diff changeset
245
kono
parents:
diff changeset
246 for (i = 0; i < n_opt_char; i++) {
kono
parents:
diff changeset
247 print " if (ptr->x_" var_opt_char[i] ")";
kono
parents:
diff changeset
248 print " fprintf (file, \"%*s%s (%#x)\\n\",";
kono
parents:
diff changeset
249 print " indent_to, \"\",";
kono
parents:
diff changeset
250 print " \"" var_opt_char[i] "\",";
kono
parents:
diff changeset
251 print " ptr->x_" var_opt_char[i] ");";
kono
parents:
diff changeset
252 print "";
kono
parents:
diff changeset
253 }
kono
parents:
diff changeset
254
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
255 for (i = 0; i < n_opt_string; i++) {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
256 print " if (ptr->x_" var_opt_string[i] ")";
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
257 print " fprintf (file, \"%*s%s (%s)\\n\",";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
258 print " indent_to, \"\",";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
259 print " \"" var_opt_string[i] "\",";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
260 print " ptr->x_" var_opt_string[i] ");";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
261 print "";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
262 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
263
111
kono
parents:
diff changeset
264 print "}";
kono
parents:
diff changeset
265
kono
parents:
diff changeset
266 print "";
kono
parents:
diff changeset
267 print "/* Print different optimization variables from structures provided as arguments. */";
kono
parents:
diff changeset
268 print "void";
kono
parents:
diff changeset
269 print "cl_optimization_print_diff (FILE *file,";
kono
parents:
diff changeset
270 print " int indent_to,";
kono
parents:
diff changeset
271 print " struct cl_optimization *ptr1,";
kono
parents:
diff changeset
272 print " struct cl_optimization *ptr2)";
kono
parents:
diff changeset
273 print "{";
kono
parents:
diff changeset
274
kono
parents:
diff changeset
275 print " fputs (\"\\n\", file);";
kono
parents:
diff changeset
276 for (i = 0; i < n_opt_other; i++) {
kono
parents:
diff changeset
277 print " if (ptr1->x_" var_opt_other[i] " != ptr2->x_" var_opt_other[i] ")";
kono
parents:
diff changeset
278 print " fprintf (file, \"%*s%s (%#lx/%#lx)\\n\",";
kono
parents:
diff changeset
279 print " indent_to, \"\",";
kono
parents:
diff changeset
280 print " \"" var_opt_other[i] "\",";
kono
parents:
diff changeset
281 print " (unsigned long)ptr1->x_" var_opt_other[i] ",";
kono
parents:
diff changeset
282 print " (unsigned long)ptr2->x_" var_opt_other[i] ");";
kono
parents:
diff changeset
283 print "";
kono
parents:
diff changeset
284 }
kono
parents:
diff changeset
285
kono
parents:
diff changeset
286 for (i = 0; i < n_opt_int; i++) {
kono
parents:
diff changeset
287 print " if (ptr1->x_" var_opt_int[i] " != ptr2->x_" var_opt_int[i] ")";
kono
parents:
diff changeset
288 print " fprintf (file, \"%*s%s (%#x/%#x)\\n\",";
kono
parents:
diff changeset
289 print " indent_to, \"\",";
kono
parents:
diff changeset
290 print " \"" var_opt_int[i] "\",";
kono
parents:
diff changeset
291 print " ptr1->x_" var_opt_int[i] ",";
kono
parents:
diff changeset
292 print " ptr2->x_" var_opt_int[i] ");";
kono
parents:
diff changeset
293 print "";
kono
parents:
diff changeset
294 }
kono
parents:
diff changeset
295
kono
parents:
diff changeset
296 for (i = 0; i < n_opt_enum; i++) {
kono
parents:
diff changeset
297 print " if (ptr1->x_" var_opt_enum[i] " != ptr2->x_" var_opt_enum[i] ")";
kono
parents:
diff changeset
298 print " fprintf (file, \"%*s%s (%#x/%#x)\\n\",";
kono
parents:
diff changeset
299 print " indent_to, \"\",";
kono
parents:
diff changeset
300 print " \"" var_opt_enum[i] "\",";
kono
parents:
diff changeset
301 print " (int) ptr1->x_" var_opt_enum[i] ",";
kono
parents:
diff changeset
302 print " (int) ptr2->x_" var_opt_enum[i] ");";
kono
parents:
diff changeset
303 print "";
kono
parents:
diff changeset
304 }
kono
parents:
diff changeset
305
kono
parents:
diff changeset
306 for (i = 0; i < n_opt_short; i++) {
kono
parents:
diff changeset
307 print " if (ptr1->x_" var_opt_short[i] " != ptr2->x_" var_opt_short[i] ")";
kono
parents:
diff changeset
308 print " fprintf (file, \"%*s%s (%#x/%#x)\\n\",";
kono
parents:
diff changeset
309 print " indent_to, \"\",";
kono
parents:
diff changeset
310 print " \"" var_opt_short[i] "\",";
kono
parents:
diff changeset
311 print " ptr1->x_" var_opt_short[i] ",";
kono
parents:
diff changeset
312 print " ptr2->x_" var_opt_short[i] ");";
kono
parents:
diff changeset
313 print "";
kono
parents:
diff changeset
314 }
kono
parents:
diff changeset
315
kono
parents:
diff changeset
316 for (i = 0; i < n_opt_char; i++) {
kono
parents:
diff changeset
317 print " if (ptr1->x_" var_opt_char[i] " != ptr2->x_" var_opt_char[i] ")";
kono
parents:
diff changeset
318 print " fprintf (file, \"%*s%s (%#x/%#x)\\n\",";
kono
parents:
diff changeset
319 print " indent_to, \"\",";
kono
parents:
diff changeset
320 print " \"" var_opt_char[i] "\",";
kono
parents:
diff changeset
321 print " ptr1->x_" var_opt_char[i] ",";
kono
parents:
diff changeset
322 print " ptr2->x_" var_opt_char[i] ");";
kono
parents:
diff changeset
323 print "";
kono
parents:
diff changeset
324 }
kono
parents:
diff changeset
325
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
326 for (i = 0; i < n_opt_string; i++) {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
327 name = var_opt_string[i]
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
328 print " if (ptr1->x_" name " != ptr2->x_" name "";
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
329 print " && (!ptr1->x_" name" || !ptr2->x_" name
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
330 print " || strcmp (ptr1->x_" name", ptr2->x_" name ")))";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
331 print " fprintf (file, \"%*s%s (%s/%s)\\n\",";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
332 print " indent_to, \"\",";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
333 print " \"" name "\",";
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
334 print " ptr1->x_" name " ? ptr1->x_" name " : \"(null)\",";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
335 print " ptr2->x_" name " ? ptr2->x_" name " : \"(null)\");";
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
336 print "";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
337 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
338
111
kono
parents:
diff changeset
339 print "}";
kono
parents:
diff changeset
340
kono
parents:
diff changeset
341
kono
parents:
diff changeset
342 print "";
kono
parents:
diff changeset
343 print "/* Save selected option variables into a structure. */"
kono
parents:
diff changeset
344 print "void";
kono
parents:
diff changeset
345 print "cl_target_option_save (struct cl_target_option *ptr, struct gcc_options *opts)";
kono
parents:
diff changeset
346 print "{";
kono
parents:
diff changeset
347
kono
parents:
diff changeset
348 n_target_char = 0;
kono
parents:
diff changeset
349 n_target_short = 0;
kono
parents:
diff changeset
350 n_target_int = 0;
kono
parents:
diff changeset
351 n_target_enum = 0;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
352 n_target_string = 0;
111
kono
parents:
diff changeset
353 n_target_other = 0;
kono
parents:
diff changeset
354
kono
parents:
diff changeset
355 if (have_save) {
kono
parents:
diff changeset
356 for (i = 0; i < n_opts; i++) {
kono
parents:
diff changeset
357 if (flag_set_p("Save", flags[i])) {
kono
parents:
diff changeset
358 name = var_name(flags[i])
kono
parents:
diff changeset
359 if(name == "")
kono
parents:
diff changeset
360 name = "target_flags";
kono
parents:
diff changeset
361
kono
parents:
diff changeset
362 if(name in var_save_seen)
kono
parents:
diff changeset
363 continue;
kono
parents:
diff changeset
364
kono
parents:
diff changeset
365 var_save_seen[name]++;
kono
parents:
diff changeset
366 otype = var_type_struct(flags[i])
kono
parents:
diff changeset
367 if (otype ~ "^((un)?signed +)?int *$")
kono
parents:
diff changeset
368 var_target_int[n_target_int++] = name;
kono
parents:
diff changeset
369
kono
parents:
diff changeset
370 else if (otype ~ "^((un)?signed +)?short *$")
kono
parents:
diff changeset
371 var_target_short[n_target_short++] = name;
kono
parents:
diff changeset
372
kono
parents:
diff changeset
373 else if (otype ~ ("^enum +[_" alnum "]+ *$"))
kono
parents:
diff changeset
374 var_target_enum[n_target_enum++] = name;
kono
parents:
diff changeset
375
kono
parents:
diff changeset
376 else if (otype ~ "^((un)?signed +)?char *$") {
kono
parents:
diff changeset
377 var_target_char[n_target_char++] = name;
kono
parents:
diff changeset
378 if (otype ~ "^unsigned +char *$")
kono
parents:
diff changeset
379 var_target_range[name] = "0, 255"
kono
parents:
diff changeset
380 else if (otype ~ "^signed +char *$")
kono
parents:
diff changeset
381 var_target_range[name] = "-128, 127"
kono
parents:
diff changeset
382 if (otype == var_type(flags[i]))
kono
parents:
diff changeset
383 var_target_range[name] = ""
kono
parents:
diff changeset
384 }
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
385 else if (otype ~ "^const char \\**$")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
386 var_target_string[n_target_string++] = name;
111
kono
parents:
diff changeset
387 else
kono
parents:
diff changeset
388 var_target_other[n_target_other++] = name;
kono
parents:
diff changeset
389 }
kono
parents:
diff changeset
390 }
kono
parents:
diff changeset
391 } else {
kono
parents:
diff changeset
392 var_target_int[n_target_int++] = "target_flags";
kono
parents:
diff changeset
393 }
kono
parents:
diff changeset
394
kono
parents:
diff changeset
395 have_assert = 0;
kono
parents:
diff changeset
396 for (i = 0; i < n_target_char; i++) {
kono
parents:
diff changeset
397 name = var_target_char[i];
kono
parents:
diff changeset
398 if (var_target_range[name] != "") {
kono
parents:
diff changeset
399 have_assert = 1;
kono
parents:
diff changeset
400 print " gcc_assert (IN_RANGE (opts->x_" name ", " var_target_range[name] "));";
kono
parents:
diff changeset
401 }
kono
parents:
diff changeset
402 }
kono
parents:
diff changeset
403
kono
parents:
diff changeset
404 if (have_assert)
kono
parents:
diff changeset
405 print "";
kono
parents:
diff changeset
406
kono
parents:
diff changeset
407 print " if (targetm.target_option.save)";
kono
parents:
diff changeset
408 print " targetm.target_option.save (ptr, opts);";
kono
parents:
diff changeset
409 print "";
kono
parents:
diff changeset
410
kono
parents:
diff changeset
411 for (i = 0; i < n_extra_target_vars; i++) {
kono
parents:
diff changeset
412 print " ptr->x_" extra_target_vars[i] " = opts->x_" extra_target_vars[i] ";";
kono
parents:
diff changeset
413 }
kono
parents:
diff changeset
414
kono
parents:
diff changeset
415 for (i = 0; i < n_target_other; i++) {
kono
parents:
diff changeset
416 print " ptr->x_" var_target_other[i] " = opts->x_" var_target_other[i] ";";
kono
parents:
diff changeset
417 }
kono
parents:
diff changeset
418
kono
parents:
diff changeset
419 for (i = 0; i < n_target_enum; i++) {
kono
parents:
diff changeset
420 print " ptr->x_" var_target_enum[i] " = opts->x_" var_target_enum[i] ";";
kono
parents:
diff changeset
421 }
kono
parents:
diff changeset
422
kono
parents:
diff changeset
423 for (i = 0; i < n_target_int; i++) {
kono
parents:
diff changeset
424 print " ptr->x_" var_target_int[i] " = opts->x_" var_target_int[i] ";";
kono
parents:
diff changeset
425 }
kono
parents:
diff changeset
426
kono
parents:
diff changeset
427 for (i = 0; i < n_target_short; i++) {
kono
parents:
diff changeset
428 print " ptr->x_" var_target_short[i] " = opts->x_" var_target_short[i] ";";
kono
parents:
diff changeset
429 }
kono
parents:
diff changeset
430
kono
parents:
diff changeset
431 for (i = 0; i < n_target_char; i++) {
kono
parents:
diff changeset
432 print " ptr->x_" var_target_char[i] " = opts->x_" var_target_char[i] ";";
kono
parents:
diff changeset
433 }
kono
parents:
diff changeset
434
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
435 for (i = 0; i < n_target_string; i++) {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
436 print " ptr->x_" var_target_string[i] " = opts->x_" var_target_string[i] ";";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
437 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
438
111
kono
parents:
diff changeset
439 print "}";
kono
parents:
diff changeset
440
kono
parents:
diff changeset
441 print "";
kono
parents:
diff changeset
442 print "/* Restore selected current options from a structure. */";
kono
parents:
diff changeset
443 print "void";
kono
parents:
diff changeset
444 print "cl_target_option_restore (struct gcc_options *opts, struct cl_target_option *ptr)";
kono
parents:
diff changeset
445 print "{";
kono
parents:
diff changeset
446
kono
parents:
diff changeset
447 for (i = 0; i < n_extra_target_vars; i++) {
kono
parents:
diff changeset
448 print " opts->x_" extra_target_vars[i] " = ptr->x_" extra_target_vars[i] ";";
kono
parents:
diff changeset
449 }
kono
parents:
diff changeset
450
kono
parents:
diff changeset
451 for (i = 0; i < n_target_other; i++) {
kono
parents:
diff changeset
452 print " opts->x_" var_target_other[i] " = ptr->x_" var_target_other[i] ";";
kono
parents:
diff changeset
453 }
kono
parents:
diff changeset
454
kono
parents:
diff changeset
455 for (i = 0; i < n_target_enum; i++) {
kono
parents:
diff changeset
456 print " opts->x_" var_target_enum[i] " = ptr->x_" var_target_enum[i] ";";
kono
parents:
diff changeset
457 }
kono
parents:
diff changeset
458
kono
parents:
diff changeset
459 for (i = 0; i < n_target_int; i++) {
kono
parents:
diff changeset
460 print " opts->x_" var_target_int[i] " = ptr->x_" var_target_int[i] ";";
kono
parents:
diff changeset
461 }
kono
parents:
diff changeset
462
kono
parents:
diff changeset
463 for (i = 0; i < n_target_short; i++) {
kono
parents:
diff changeset
464 print " opts->x_" var_target_short[i] " = ptr->x_" var_target_short[i] ";";
kono
parents:
diff changeset
465 }
kono
parents:
diff changeset
466
kono
parents:
diff changeset
467 for (i = 0; i < n_target_char; i++) {
kono
parents:
diff changeset
468 print " opts->x_" var_target_char[i] " = ptr->x_" var_target_char[i] ";";
kono
parents:
diff changeset
469 }
kono
parents:
diff changeset
470
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
471 for (i = 0; i < n_target_string; i++) {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
472 print " opts->x_" var_target_string[i] " = ptr->x_" var_target_string[i] ";";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
473 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
474
111
kono
parents:
diff changeset
475 # This must occur after the normal variables in case the code depends on those
kono
parents:
diff changeset
476 # variables.
kono
parents:
diff changeset
477 print "";
kono
parents:
diff changeset
478 print " if (targetm.target_option.restore)";
kono
parents:
diff changeset
479 print " targetm.target_option.restore (opts, ptr);";
kono
parents:
diff changeset
480
kono
parents:
diff changeset
481 print "}";
kono
parents:
diff changeset
482
kono
parents:
diff changeset
483 print "";
kono
parents:
diff changeset
484 print "/* Print optimization options from a structure. */";
kono
parents:
diff changeset
485 print "void";
kono
parents:
diff changeset
486 print "cl_target_option_print (FILE *file,";
kono
parents:
diff changeset
487 print " int indent,";
kono
parents:
diff changeset
488 print " struct cl_target_option *ptr)";
kono
parents:
diff changeset
489 print "{";
kono
parents:
diff changeset
490
kono
parents:
diff changeset
491 print " fputs (\"\\n\", file);";
kono
parents:
diff changeset
492 for (i = 0; i < n_target_other; i++) {
kono
parents:
diff changeset
493 print " if (ptr->x_" var_target_other[i] ")";
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
494 hwi = host_wide_int[var_target_other[i]]
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
495 if (hwi == "yes")
111
kono
parents:
diff changeset
496 print " fprintf (file, \"%*s%s (%#\" HOST_WIDE_INT_PRINT \"x)\\n\",";
kono
parents:
diff changeset
497 else
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
498 print " fprintf (file, \"%*s%s (%#lx)\\n\",";
111
kono
parents:
diff changeset
499 print " indent, \"\",";
kono
parents:
diff changeset
500 print " \"" var_target_other[i] "\",";
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
501 if (hwi == "yes")
111
kono
parents:
diff changeset
502 print " ptr->x_" var_target_other[i] ");";
kono
parents:
diff changeset
503 else
kono
parents:
diff changeset
504 print " (unsigned long)ptr->x_" var_target_other[i] ");";
kono
parents:
diff changeset
505 print "";
kono
parents:
diff changeset
506 }
kono
parents:
diff changeset
507
kono
parents:
diff changeset
508 for (i = 0; i < n_target_enum; i++) {
kono
parents:
diff changeset
509 print " if (ptr->x_" var_target_enum[i] ")";
kono
parents:
diff changeset
510 print " fprintf (file, \"%*s%s (%#x)\\n\",";
kono
parents:
diff changeset
511 print " indent, \"\",";
kono
parents:
diff changeset
512 print " \"" var_target_enum[i] "\",";
kono
parents:
diff changeset
513 print " ptr->x_" var_target_enum[i] ");";
kono
parents:
diff changeset
514 print "";
kono
parents:
diff changeset
515 }
kono
parents:
diff changeset
516
kono
parents:
diff changeset
517 for (i = 0; i < n_target_int; i++) {
kono
parents:
diff changeset
518 print " if (ptr->x_" var_target_int[i] ")";
kono
parents:
diff changeset
519 print " fprintf (file, \"%*s%s (%#x)\\n\",";
kono
parents:
diff changeset
520 print " indent, \"\",";
kono
parents:
diff changeset
521 print " \"" var_target_int[i] "\",";
kono
parents:
diff changeset
522 print " ptr->x_" var_target_int[i] ");";
kono
parents:
diff changeset
523 print "";
kono
parents:
diff changeset
524 }
kono
parents:
diff changeset
525
kono
parents:
diff changeset
526 for (i = 0; i < n_target_short; i++) {
kono
parents:
diff changeset
527 print " if (ptr->x_" var_target_short[i] ")";
kono
parents:
diff changeset
528 print " fprintf (file, \"%*s%s (%#x)\\n\",";
kono
parents:
diff changeset
529 print " indent, \"\",";
kono
parents:
diff changeset
530 print " \"" var_target_short[i] "\",";
kono
parents:
diff changeset
531 print " ptr->x_" var_target_short[i] ");";
kono
parents:
diff changeset
532 print "";
kono
parents:
diff changeset
533 }
kono
parents:
diff changeset
534
kono
parents:
diff changeset
535 for (i = 0; i < n_target_char; i++) {
kono
parents:
diff changeset
536 print " if (ptr->x_" var_target_char[i] ")";
kono
parents:
diff changeset
537 print " fprintf (file, \"%*s%s (%#x)\\n\",";
kono
parents:
diff changeset
538 print " indent, \"\",";
kono
parents:
diff changeset
539 print " \"" var_target_char[i] "\",";
kono
parents:
diff changeset
540 print " ptr->x_" var_target_char[i] ");";
kono
parents:
diff changeset
541 print "";
kono
parents:
diff changeset
542 }
kono
parents:
diff changeset
543
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
544 for (i = 0; i < n_target_string; i++) {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
545 print " if (ptr->x_" var_target_string[i] ")";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
546 print " fprintf (file, \"%*s%s (%s)\\n\",";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
547 print " indent, \"\",";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
548 print " \"" var_target_string[i] "\",";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
549 print " ptr->x_" var_target_string[i] ");";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
550 print "";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
551 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
552
111
kono
parents:
diff changeset
553 print "";
kono
parents:
diff changeset
554 print " if (targetm.target_option.print)";
kono
parents:
diff changeset
555 print " targetm.target_option.print (file, indent, ptr);";
kono
parents:
diff changeset
556 print "}";
kono
parents:
diff changeset
557
kono
parents:
diff changeset
558 print "";
kono
parents:
diff changeset
559 print "/* Print different target option variables from structures provided as arguments. */";
kono
parents:
diff changeset
560 print "void";
kono
parents:
diff changeset
561 print "cl_target_option_print_diff (FILE *file,";
kono
parents:
diff changeset
562 print " int indent ATTRIBUTE_UNUSED,";
kono
parents:
diff changeset
563 print " struct cl_target_option *ptr1 ATTRIBUTE_UNUSED,";
kono
parents:
diff changeset
564 print " struct cl_target_option *ptr2 ATTRIBUTE_UNUSED)";
kono
parents:
diff changeset
565 print "{";
kono
parents:
diff changeset
566
kono
parents:
diff changeset
567 print " fputs (\"\\n\", file);";
kono
parents:
diff changeset
568 for (i = 0; i < n_target_other; i++) {
kono
parents:
diff changeset
569 print " if (ptr1->x_" var_target_other[i] " != ptr2->x_" var_target_other[i] ")";
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
570 hwi = host_wide_int[var_target_other[i]]
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
571 if (hwi == "yes")
111
kono
parents:
diff changeset
572 print " fprintf (file, \"%*s%s (%#\" HOST_WIDE_INT_PRINT \"x/%#\" HOST_WIDE_INT_PRINT \"x)\\n\",";
kono
parents:
diff changeset
573 else
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
574 print " fprintf (file, \"%*s%s (%#lx/%#lx)\\n\",";
111
kono
parents:
diff changeset
575 print " indent, \"\",";
kono
parents:
diff changeset
576 print " \"" var_target_other[i] "\",";
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
577 if (hwi == "yes") {
111
kono
parents:
diff changeset
578 print " ptr1->x_" var_target_other[i] ",";
kono
parents:
diff changeset
579 print " ptr2->x_" var_target_other[i] ");";
kono
parents:
diff changeset
580 }
kono
parents:
diff changeset
581 else {
kono
parents:
diff changeset
582 print " (unsigned long)ptr1->x_" var_target_other[i] ",";
kono
parents:
diff changeset
583 print " (unsigned long)ptr2->x_" var_target_other[i] ");";
kono
parents:
diff changeset
584 }
kono
parents:
diff changeset
585 print "";
kono
parents:
diff changeset
586 }
kono
parents:
diff changeset
587
kono
parents:
diff changeset
588 for (i = 0; i < n_target_enum; i++) {
kono
parents:
diff changeset
589 print " if (ptr1->x_" var_target_enum[i] " != ptr2->x_" var_target_enum[i] ")";
kono
parents:
diff changeset
590 print " fprintf (file, \"%*s%s (%#x/%#x)\\n\",";
kono
parents:
diff changeset
591 print " indent, \"\",";
kono
parents:
diff changeset
592 print " \"" var_target_enum[i] "\",";
kono
parents:
diff changeset
593 print " ptr1->x_" var_target_enum[i] ",";
kono
parents:
diff changeset
594 print " ptr2->x_" var_target_enum[i] ");";
kono
parents:
diff changeset
595 print "";
kono
parents:
diff changeset
596 }
kono
parents:
diff changeset
597
kono
parents:
diff changeset
598 for (i = 0; i < n_target_int; i++) {
kono
parents:
diff changeset
599 print " if (ptr1->x_" var_target_int[i] " != ptr2->x_" var_target_int[i] ")";
kono
parents:
diff changeset
600 print " fprintf (file, \"%*s%s (%#x/%#x)\\n\",";
kono
parents:
diff changeset
601 print " indent, \"\",";
kono
parents:
diff changeset
602 print " \"" var_target_int[i] "\",";
kono
parents:
diff changeset
603 print " ptr1->x_" var_target_int[i] ",";
kono
parents:
diff changeset
604 print " ptr2->x_" var_target_int[i] ");";
kono
parents:
diff changeset
605 print "";
kono
parents:
diff changeset
606 }
kono
parents:
diff changeset
607
kono
parents:
diff changeset
608 for (i = 0; i < n_target_short; i++) {
kono
parents:
diff changeset
609 print " if (ptr1->x_" var_target_short[i] " != ptr2->x_" var_target_short[i] ")";
kono
parents:
diff changeset
610 print " fprintf (file, \"%*s%s (%#x/%#x)\\n\",";
kono
parents:
diff changeset
611 print " indent, \"\",";
kono
parents:
diff changeset
612 print " \"" var_target_short[i] "\",";
kono
parents:
diff changeset
613 print " ptr1->x_" var_target_short[i] ",";
kono
parents:
diff changeset
614 print " ptr2->x_" var_target_short[i] ");";
kono
parents:
diff changeset
615 print "";
kono
parents:
diff changeset
616 }
kono
parents:
diff changeset
617
kono
parents:
diff changeset
618 for (i = 0; i < n_target_char; i++) {
kono
parents:
diff changeset
619 print " if (ptr1->x_" var_target_char[i] " != ptr2->x_" var_target_char[i] ")";
kono
parents:
diff changeset
620 print " fprintf (file, \"%*s%s (%#x/%#x)\\n\",";
kono
parents:
diff changeset
621 print " indent, \"\",";
kono
parents:
diff changeset
622 print " \"" var_target_char[i] "\",";
kono
parents:
diff changeset
623 print " ptr1->x_" var_target_char[i] ",";
kono
parents:
diff changeset
624 print " ptr2->x_" var_target_char[i] ");";
kono
parents:
diff changeset
625 print "";
kono
parents:
diff changeset
626 }
kono
parents:
diff changeset
627
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
628 for (i = 0; i < n_target_string; i++) {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
629 name = var_target_string[i]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
630 print " if (ptr1->x_" name " != ptr2->x_" name "";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
631 print " && (!ptr1->x_" name" || !ptr2->x_" name
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
632 print " || strcmp (ptr1->x_" name", ptr2->x_" name ")))";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
633 print " fprintf (file, \"%*s%s (%s/%s)\\n\",";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
634 print " indent, \"\",";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
635 print " \"" name "\",";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
636 print " ptr1->x_" name " ? ptr1->x_" name " : \"(null)\",";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
637 print " ptr2->x_" name " ? ptr1->x_" name " : \"(null)\");";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
638 print "";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
639 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
640
111
kono
parents:
diff changeset
641 print "}";
kono
parents:
diff changeset
642
kono
parents:
diff changeset
643 print "";
kono
parents:
diff changeset
644 print "/* Compare two target options */";
kono
parents:
diff changeset
645 print "bool";
kono
parents:
diff changeset
646 print "cl_target_option_eq (struct cl_target_option const *ptr1 ATTRIBUTE_UNUSED,";
kono
parents:
diff changeset
647 print " struct cl_target_option const *ptr2 ATTRIBUTE_UNUSED)";
kono
parents:
diff changeset
648 print "{";
kono
parents:
diff changeset
649 n_target_val = 0;
kono
parents:
diff changeset
650 n_target_str = 0;
kono
parents:
diff changeset
651 n_target_array = 0;
kono
parents:
diff changeset
652
kono
parents:
diff changeset
653 for (i = 0; i < n_target_save; i++) {
kono
parents:
diff changeset
654 var = target_save_decl[i];
kono
parents:
diff changeset
655 sub (" *=.*", "", var);
kono
parents:
diff changeset
656 name = var;
kono
parents:
diff changeset
657 type = var;
kono
parents:
diff changeset
658 sub("^.*[ *]", "", name)
kono
parents:
diff changeset
659 sub(" *" name "$", "", type)
kono
parents:
diff changeset
660 if (target_save_decl[i] ~ "^const char \\*+[_" alnum "]+$")
kono
parents:
diff changeset
661 var_target_str[n_target_str++] = name;
kono
parents:
diff changeset
662 else {
kono
parents:
diff changeset
663 if (target_save_decl[i] ~ " .*\\[.+\\]+$") {
kono
parents:
diff changeset
664 size = name;
kono
parents:
diff changeset
665 sub("[^\\[]+\\[", "", size);
kono
parents:
diff changeset
666 sub("\\]$", "", size);
kono
parents:
diff changeset
667 sub("\\[.+", "", name)
kono
parents:
diff changeset
668 sub(" [^ ]+$", "", type)
kono
parents:
diff changeset
669 var_target_array[n_target_array] = name
kono
parents:
diff changeset
670 var_target_array_type[n_target_array] = type
kono
parents:
diff changeset
671 var_target_array_size[n_target_array++] = size
kono
parents:
diff changeset
672 }
kono
parents:
diff changeset
673 else {
kono
parents:
diff changeset
674 var_target_val_type[n_target_val] = type;
kono
parents:
diff changeset
675 var_target_val[n_target_val++] = name;
kono
parents:
diff changeset
676 }
kono
parents:
diff changeset
677 }
kono
parents:
diff changeset
678 }
kono
parents:
diff changeset
679 if (have_save) {
kono
parents:
diff changeset
680 for (i = 0; i < n_opts; i++) {
kono
parents:
diff changeset
681 if (flag_set_p("Save", flags[i])) {
kono
parents:
diff changeset
682 name = var_name(flags[i])
kono
parents:
diff changeset
683 if(name == "")
kono
parents:
diff changeset
684 name = "target_flags";
kono
parents:
diff changeset
685
kono
parents:
diff changeset
686 if(name in var_list_seen)
kono
parents:
diff changeset
687 continue;
kono
parents:
diff changeset
688
kono
parents:
diff changeset
689 var_list_seen[name]++;
kono
parents:
diff changeset
690 otype = var_type_struct(flags[i])
kono
parents:
diff changeset
691 if (otype ~ "^const char \\**$")
kono
parents:
diff changeset
692 var_target_str[n_target_str++] = "x_" name;
kono
parents:
diff changeset
693 else {
kono
parents:
diff changeset
694 var_target_val_type[n_target_val] = otype;
kono
parents:
diff changeset
695 var_target_val[n_target_val++] = "x_" name;
kono
parents:
diff changeset
696 }
kono
parents:
diff changeset
697 }
kono
parents:
diff changeset
698 }
kono
parents:
diff changeset
699 } else {
kono
parents:
diff changeset
700 var_target_val_type[n_target_val] = "int";
kono
parents:
diff changeset
701 var_target_val[n_target_val++] = "x_target_flags";
kono
parents:
diff changeset
702 }
kono
parents:
diff changeset
703
kono
parents:
diff changeset
704 for (i = 0; i < n_target_str; i++) {
kono
parents:
diff changeset
705 name = var_target_str[i]
kono
parents:
diff changeset
706 print " if (ptr1->" name" != ptr2->" name;
kono
parents:
diff changeset
707 print " && (!ptr1->" name" || !ptr2->" name
kono
parents:
diff changeset
708 print " || strcmp (ptr1->" name", ptr2->" name ")))";
kono
parents:
diff changeset
709 print " return false;";
kono
parents:
diff changeset
710 }
kono
parents:
diff changeset
711 for (i = 0; i < n_target_array; i++) {
kono
parents:
diff changeset
712 name = var_target_array[i]
kono
parents:
diff changeset
713 size = var_target_array_size[i]
kono
parents:
diff changeset
714 type = var_target_array_type[i]
kono
parents:
diff changeset
715 print " if (ptr1->" name" != ptr2->" name "";
kono
parents:
diff changeset
716 print " || memcmp (ptr1->" name ", ptr2->" name ", " size " * sizeof(" type ")))"
kono
parents:
diff changeset
717 print " return false;";
kono
parents:
diff changeset
718 }
kono
parents:
diff changeset
719 for (i = 0; i < n_target_val; i++) {
kono
parents:
diff changeset
720 name = var_target_val[i]
kono
parents:
diff changeset
721 print " if (ptr1->" name" != ptr2->" name ")";
kono
parents:
diff changeset
722 print " return false;";
kono
parents:
diff changeset
723 }
kono
parents:
diff changeset
724
kono
parents:
diff changeset
725 print " return true;";
kono
parents:
diff changeset
726
kono
parents:
diff changeset
727 print "}";
kono
parents:
diff changeset
728
kono
parents:
diff changeset
729 print "";
kono
parents:
diff changeset
730 print "/* Hash target options */";
kono
parents:
diff changeset
731 print "hashval_t";
kono
parents:
diff changeset
732 print "cl_target_option_hash (struct cl_target_option const *ptr ATTRIBUTE_UNUSED)";
kono
parents:
diff changeset
733 print "{";
kono
parents:
diff changeset
734 print " inchash::hash hstate;";
kono
parents:
diff changeset
735 for (i = 0; i < n_target_str; i++) {
kono
parents:
diff changeset
736 name = var_target_str[i]
kono
parents:
diff changeset
737 print " if (ptr->" name")";
kono
parents:
diff changeset
738 print " hstate.add (ptr->" name", strlen (ptr->" name"));";
kono
parents:
diff changeset
739 print " else";
kono
parents:
diff changeset
740 print " hstate.add_int (0);";
kono
parents:
diff changeset
741 }
kono
parents:
diff changeset
742 for (i = 0; i < n_target_array; i++) {
kono
parents:
diff changeset
743 name= var_target_array[i]
kono
parents:
diff changeset
744 size = var_target_array_size[i]
kono
parents:
diff changeset
745 type = var_target_array_type[i]
kono
parents:
diff changeset
746 print " hstate.add_int (" size ");";
kono
parents:
diff changeset
747 print " hstate.add (ptr->" name ", sizeof (" type ") * " size ");";
kono
parents:
diff changeset
748 }
kono
parents:
diff changeset
749 for (i = 0; i < n_target_val; i++) {
kono
parents:
diff changeset
750 name = var_target_val[i]
kono
parents:
diff changeset
751 print " hstate.add_hwi (ptr->" name");";
kono
parents:
diff changeset
752 }
kono
parents:
diff changeset
753 print " return hstate.end ();";
kono
parents:
diff changeset
754 print "}";
kono
parents:
diff changeset
755
kono
parents:
diff changeset
756 print "";
kono
parents:
diff changeset
757 print "/* Stream out target options */";
kono
parents:
diff changeset
758 print "void";
kono
parents:
diff changeset
759 print "cl_target_option_stream_out (struct output_block *ob ATTRIBUTE_UNUSED,";
kono
parents:
diff changeset
760 print " struct bitpack_d *bp ATTRIBUTE_UNUSED,";
kono
parents:
diff changeset
761 print " struct cl_target_option *ptr ATTRIBUTE_UNUSED)";
kono
parents:
diff changeset
762 print "{";
kono
parents:
diff changeset
763 for (i = 0; i < n_target_str; i++) {
kono
parents:
diff changeset
764 name = var_target_str[i]
kono
parents:
diff changeset
765 print " bp_pack_string (ob, bp, ptr->" name", true);";
kono
parents:
diff changeset
766 }
kono
parents:
diff changeset
767 for (i = 0; i < n_target_array; i++) {
kono
parents:
diff changeset
768 name = var_target_array[i]
kono
parents:
diff changeset
769 size = var_target_array_size[i]
kono
parents:
diff changeset
770 print " for (unsigned i = 0; i < " size "; i++)"
kono
parents:
diff changeset
771 print " bp_pack_value (bp, ptr->" name "[i], 64);";
kono
parents:
diff changeset
772 }
kono
parents:
diff changeset
773 for (i = 0; i < n_target_val; i++) {
kono
parents:
diff changeset
774 name = var_target_val[i]
kono
parents:
diff changeset
775 print " bp_pack_value (bp, ptr->" name", 64);";
kono
parents:
diff changeset
776 }
kono
parents:
diff changeset
777 print "}";
kono
parents:
diff changeset
778
kono
parents:
diff changeset
779 print "";
kono
parents:
diff changeset
780 print "/* Stream in target options */";
kono
parents:
diff changeset
781 print "void";
kono
parents:
diff changeset
782 print "cl_target_option_stream_in (struct data_in *data_in ATTRIBUTE_UNUSED,";
kono
parents:
diff changeset
783 print " struct bitpack_d *bp ATTRIBUTE_UNUSED,";
kono
parents:
diff changeset
784 print " struct cl_target_option *ptr ATTRIBUTE_UNUSED)";
kono
parents:
diff changeset
785 print "{";
kono
parents:
diff changeset
786 for (i = 0; i < n_target_str; i++) {
kono
parents:
diff changeset
787 name = var_target_str[i]
kono
parents:
diff changeset
788 print " ptr->" name" = bp_unpack_string (data_in, bp);";
kono
parents:
diff changeset
789 print " if (ptr->" name")";
kono
parents:
diff changeset
790 print " ptr->" name" = xstrdup (ptr->" name");";
kono
parents:
diff changeset
791 }
kono
parents:
diff changeset
792 for (i = 0; i < n_target_array; i++) {
kono
parents:
diff changeset
793 name = var_target_array[i]
kono
parents:
diff changeset
794 size = var_target_array_size[i]
kono
parents:
diff changeset
795 print " for (int i = " size " - 1; i >= 0; i--)"
kono
parents:
diff changeset
796 print " ptr->" name "[i] = (" var_target_array_type[i] ") bp_unpack_value (bp, 64);";
kono
parents:
diff changeset
797 }
kono
parents:
diff changeset
798 for (i = 0; i < n_target_val; i++) {
kono
parents:
diff changeset
799 name = var_target_val[i]
kono
parents:
diff changeset
800 print " ptr->" name" = (" var_target_val_type[i] ") bp_unpack_value (bp, 64);";
kono
parents:
diff changeset
801 }
kono
parents:
diff changeset
802
kono
parents:
diff changeset
803 print "}";
kono
parents:
diff changeset
804
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
805 print "/* free heap memory used by target options */";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
806 print "void";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
807 print "cl_target_option_free (struct cl_target_option *ptr ATTRIBUTE_UNUSED)";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
808 print "{";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
809 for (i = 0; i < n_target_str; i++) {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
810 name = var_target_str[i]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
811 print " if (ptr->" name")";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
812 print " free (const_cast <char *>(ptr->" name"));";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
813 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
814 print "}";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
815
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
816 n_opt_val = 4;
111
kono
parents:
diff changeset
817 var_opt_val[0] = "x_optimize"
kono
parents:
diff changeset
818 var_opt_val_type[0] = "char "
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
819 var_opt_hash[0] = 1;
111
kono
parents:
diff changeset
820 var_opt_val[1] = "x_optimize_size"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
821 var_opt_val_type[1] = "char "
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
822 var_opt_hash[1] = 1;
111
kono
parents:
diff changeset
823 var_opt_val[2] = "x_optimize_debug"
kono
parents:
diff changeset
824 var_opt_val_type[2] = "char "
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
825 var_opt_hash[2] = 1;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
826 var_opt_val[3] = "x_optimize_fast"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
827 var_opt_val_type[3] = "char "
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
828 var_opt_hash[3] = 1;
111
kono
parents:
diff changeset
829 for (i = 0; i < n_opts; i++) {
kono
parents:
diff changeset
830 if (flag_set_p("(Optimization|PerFunction)", flags[i])) {
kono
parents:
diff changeset
831 name = var_name(flags[i])
kono
parents:
diff changeset
832 if(name == "")
kono
parents:
diff changeset
833 continue;
kono
parents:
diff changeset
834
kono
parents:
diff changeset
835 if(name in var_opt_list_seen)
kono
parents:
diff changeset
836 continue;
kono
parents:
diff changeset
837
kono
parents:
diff changeset
838 var_opt_list_seen[name]++;
kono
parents:
diff changeset
839
kono
parents:
diff changeset
840 otype = var_type_struct(flags[i])
kono
parents:
diff changeset
841 var_opt_val_type[n_opt_val] = otype;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
842 var_opt_val[n_opt_val] = "x_" name;
111
kono
parents:
diff changeset
843 var_opt_hash[n_opt_val] = flag_set_p("Optimization", flags[i]);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
844 n_opt_val++;
111
kono
parents:
diff changeset
845 }
kono
parents:
diff changeset
846 }
kono
parents:
diff changeset
847 print "";
kono
parents:
diff changeset
848 print "/* Hash optimization options */";
kono
parents:
diff changeset
849 print "hashval_t";
kono
parents:
diff changeset
850 print "cl_optimization_hash (struct cl_optimization const *ptr ATTRIBUTE_UNUSED)";
kono
parents:
diff changeset
851 print "{";
kono
parents:
diff changeset
852 print " inchash::hash hstate;";
kono
parents:
diff changeset
853 for (i = 0; i < n_opt_val; i++) {
kono
parents:
diff changeset
854 if (!var_opt_hash[i])
kono
parents:
diff changeset
855 continue;
kono
parents:
diff changeset
856 name = var_opt_val[i]
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
857 otype = var_opt_val_type[i];
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
858 if (otype ~ "^const char \\**$")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
859 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
860 print " if (ptr->" name")";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
861 print " hstate.add (ptr->" name", strlen (ptr->" name"));";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
862 print " else";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
863 print " hstate.add_int (0);";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
864 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
865 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
866 print " hstate.add_hwi (ptr->" name");";
111
kono
parents:
diff changeset
867 }
kono
parents:
diff changeset
868 print " return hstate.end ();";
kono
parents:
diff changeset
869 print "}";
kono
parents:
diff changeset
870
kono
parents:
diff changeset
871 print "";
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
872 print "/* Compare two optimization options */";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
873 print "bool";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
874 print "cl_optimization_option_eq (cl_optimization const *ptr1,";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
875 print " cl_optimization const *ptr2)";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
876 print "{";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
877 for (i = 0; i < n_opt_val; i++) {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
878 if (!var_opt_hash[i])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
879 continue;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
880 name = var_opt_val[i]
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
881 otype = var_opt_val_type[i];
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
882 if (otype ~ "^const char \\**$")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
883 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
884 print " if (ptr1->" name" != ptr2->" name;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
885 print " && (!ptr1->" name" || !ptr2->" name
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
886 print " || strcmp (ptr1->" name", ptr2->" name ")))";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
887 print " return false;";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
888 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
889 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
890 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
891 print " if (ptr1->" name" != ptr2->" name ")";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
892 print " return false;";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
893 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
894 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
895 print " return true;";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
896 print "}";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
897
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
898 print "";
111
kono
parents:
diff changeset
899 print "/* Stream out optimization options */";
kono
parents:
diff changeset
900 print "void";
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
901 print "cl_optimization_stream_out (struct output_block *ob,";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
902 print " struct bitpack_d *bp,";
111
kono
parents:
diff changeset
903 print " struct cl_optimization *ptr)";
kono
parents:
diff changeset
904 print "{";
kono
parents:
diff changeset
905 for (i = 0; i < n_opt_val; i++) {
kono
parents:
diff changeset
906 name = var_opt_val[i]
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
907 otype = var_opt_val_type[i];
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
908 if (otype ~ "^const char \\**$")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
909 print " bp_pack_string (ob, bp, ptr->" name", true);";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
910 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
911 print " bp_pack_value (bp, ptr->" name", 64);";
111
kono
parents:
diff changeset
912 }
kono
parents:
diff changeset
913 print "}";
kono
parents:
diff changeset
914
kono
parents:
diff changeset
915 print "";
kono
parents:
diff changeset
916 print "/* Stream in optimization options */";
kono
parents:
diff changeset
917 print "void";
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
918 print "cl_optimization_stream_in (struct data_in *data_in ATTRIBUTE_UNUSED,";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
919 print " struct bitpack_d *bp ATTRIBUTE_UNUSED,";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
920 print " struct cl_optimization *ptr ATTRIBUTE_UNUSED)";
111
kono
parents:
diff changeset
921 print "{";
kono
parents:
diff changeset
922 for (i = 0; i < n_opt_val; i++) {
kono
parents:
diff changeset
923 name = var_opt_val[i]
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
924 otype = var_opt_val_type[i];
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
925 if (otype ~ "^const char \\**$")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
926 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
927 print " ptr->" name" = bp_unpack_string (data_in, bp);";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
928 print " if (ptr->" name")";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
929 print " ptr->" name" = xstrdup (ptr->" name");";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
930 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
931 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
932 print " ptr->" name" = (" var_opt_val_type[i] ") bp_unpack_value (bp, 64);";
111
kono
parents:
diff changeset
933 }
kono
parents:
diff changeset
934 print "}";
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
935 print "/* Free heap memory used by optimization options */";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
936 print "void";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
937 print "cl_optimization_option_free (struct cl_optimization *ptr ATTRIBUTE_UNUSED)";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
938 print "{";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
939 for (i = 0; i < n_opt_val; i++) {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
940 name = var_opt_val[i]
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
941 otype = var_opt_val_type[i];
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
942 if (otype ~ "^const char \\**$")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
943 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
944 print " if (ptr->" name")";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
945 print " free (const_cast <char *>(ptr->" name"));";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
946 }
111
kono
parents:
diff changeset
947 }
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
948 print "}";
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
949 }