1 # Copyright (C) 2003-2015 Free Software Foundation, Inc.
2 # Contributed by Kelley Cook, June 2004.
3 # Original code from Neil Booth, May 2003.
5 # This program is free software; you can redistribute it and/or modify it
6 # under the terms of the GNU General Public License as published by the
7 # Free Software Foundation; either version 3, or (at your option) any
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this program; see the file COPYING3. If not see
17 # <http://www.gnu.org/licenses/>.
19 # This Awk script reads in the option records generated from
20 # opt-gather.awk, combines the flags of duplicate options and generates a
24 # This program uses functions from opt-functions.awk and code from
27 # Usage: awk -f opt-functions.awk -f opt-read.awk -f optc-save-gen.awk \
28 # [-v header_name=header.h] < inputfile > options-save.c
30 # Dump that array of options into a C file.
32 print "/* This file is auto-generated by optc-save-gen.awk. */"
34 n_headers =
split(header_name
, headers
, " ")
35 for (i =
1; i
<= n_headers
; i
++)
36 print "#include " quote headers
[i
] quote
37 print "#include " quote
"opts.h" quote
38 print "#include " quote
"intl.h" quote
40 print "#include " quote
"flags.h" quote
41 print "#include " quote
"target.h" quote
42 print "#include " quote
"inchash.h" quote
43 print "#include " quote
"hash-set.h" quote
44 print "#include " quote
"machmode.h" quote
45 print "#include " quote
"vec.h" quote
46 print "#include " quote
"double-int.h" quote
47 print "#include " quote
"input.h" quote
48 print "#include " quote
"alias.h" quote
49 print "#include " quote
"symtab.h" quote
50 print "#include " quote
"wide-int.h" quote
51 print "#include " quote
"inchash.h" quote
52 print "#include " quote
"tree.h" quote
53 print "#include " quote
"fold-const.h" quote
54 print "#include " quote
"tree-ssa-alias.h" quote
55 print "#include " quote
"is-a.h" quote
56 print "#include " quote
"predict.h" quote
57 print "#include " quote
"function.h" quote
58 print "#include " quote
"basic-block.h" quote
59 print "#include " quote
"gimple-expr.h" quote
60 print "#include " quote
"gimple.h" quote
61 print "#include " quote
"data-streamer.h" quote
62 print "#include " quote
"ipa-ref.h" quote
63 print "#include " quote
"cgraph.h" quote
66 if (n_extra_c_includes
> 0) {
67 for (i =
0; i
< n_extra_c_includes
; i
++) {
68 print "#include " quote extra_c_includes
[i
] quote
74 if (n_extra_target_vars
)
77 for (i =
0; i
< n_opts
; i
++) {
78 if (flag_set_p
("Save", flags
[i
]))
82 print "/* Save optimization variables into a structure. */"
84 print "cl_optimization_save (struct cl_optimization *ptr, struct gcc_options *opts)";
92 var_opt_char
[0] =
"optimize";
93 var_opt_char
[1] =
"optimize_size";
94 var_opt_range
["optimize"] =
"0, 255";
95 var_opt_range
["optimize_size"] =
"0, 255";
96 var_opt_enum
[0] =
"flag_fp_contract_mode";
98 # Sort by size to mimic how the structure is laid out to be friendlier to the
101 for (i =
0; i
< n_opts
; i
++) {
102 if (flag_set_p
("Optimization", flags
[i
])) {
103 name = var_name
(flags
[i
])
107 if(name in var_opt_seen
)
110 var_opt_seen
[name
]++;
111 otype = var_type_struct
(flags
[i
]);
112 if (otype ~
"^((un)?signed +)?int *$")
113 var_opt_int
[n_opt_int
++] = name
;
115 else if (otype ~
"^((un)?signed +)?short *$")
116 var_opt_short
[n_opt_short
++] = name
;
118 else if (otype ~
("^enum +[_" alnum
"]+ *"))
119 var_opt_enum
[n_opt_enum
++] = name
;
121 else if (otype ~
"^((un)?signed +)?char *$") {
122 var_opt_char
[n_opt_char
++] = name
;
123 if (otype ~
"^unsigned +char *$")
124 var_opt_range
[name
] =
"0, 255"
125 else if (otype ~
"^signed +char *$")
126 var_opt_range
[name
] =
"-128, 127"
129 var_opt_other
[n_opt_other
++] = name
;
133 for (i =
0; i
< n_opt_char
; i
++) {
134 name = var_opt_char
[i
];
135 if (var_opt_range
[name
] != "")
136 print " gcc_assert (IN_RANGE (opts->x_" name
", " var_opt_range
[name
] "));";
140 for (i =
0; i
< n_opt_other
; i
++) {
141 print " ptr->x_" var_opt_other
[i
] " = opts->x_" var_opt_other
[i
] ";";
144 for (i =
0; i
< n_opt_int
; i
++) {
145 print " ptr->x_" var_opt_int
[i
] " = opts->x_" var_opt_int
[i
] ";";
148 for (i =
0; i
< n_opt_enum
; i
++) {
149 print " ptr->x_" var_opt_enum
[i
] " = opts->x_" var_opt_enum
[i
] ";";
152 for (i =
0; i
< n_opt_short
; i
++) {
153 print " ptr->x_" var_opt_short
[i
] " = opts->x_" var_opt_short
[i
] ";";
156 for (i =
0; i
< n_opt_char
; i
++) {
157 print " ptr->x_" var_opt_char
[i
] " = opts->x_" var_opt_char
[i
] ";";
163 print "/* Restore optimization options from a structure. */";
165 print "cl_optimization_restore (struct gcc_options *opts, struct cl_optimization *ptr)";
168 for (i =
0; i
< n_opt_other
; i
++) {
169 print " opts->x_" var_opt_other
[i
] " = ptr->x_" var_opt_other
[i
] ";";
172 for (i =
0; i
< n_opt_int
; i
++) {
173 print " opts->x_" var_opt_int
[i
] " = ptr->x_" var_opt_int
[i
] ";";
176 for (i =
0; i
< n_opt_enum
; i
++) {
177 print " opts->x_" var_opt_enum
[i
] " = ptr->x_" var_opt_enum
[i
] ";";
180 for (i =
0; i
< n_opt_short
; i
++) {
181 print " opts->x_" var_opt_short
[i
] " = ptr->x_" var_opt_short
[i
] ";";
184 for (i =
0; i
< n_opt_char
; i
++) {
185 print " opts->x_" var_opt_char
[i
] " = ptr->x_" var_opt_char
[i
] ";";
188 print " targetm.override_options_after_change ();";
192 print "/* Print optimization options from a structure. */";
194 print "cl_optimization_print (FILE *file,";
195 print " int indent_to,";
196 print " struct cl_optimization *ptr)";
199 print " fputs (\"\\n\", file);";
200 for (i =
0; i
< n_opt_other
; i
++) {
201 print " if (ptr->x_" var_opt_other
[i
] ")";
202 print " fprintf (file, \"%*s%s (%#lx)\\n\",";
203 print " indent_to, \"\",";
204 print " \"" var_opt_other
[i
] "\",";
205 print " (unsigned long)ptr->x_" var_opt_other
[i
] ");";
209 for (i =
0; i
< n_opt_int
; i
++) {
210 print " if (ptr->x_" var_opt_int
[i
] ")";
211 print " fprintf (file, \"%*s%s (%#x)\\n\",";
212 print " indent_to, \"\",";
213 print " \"" var_opt_int
[i
] "\",";
214 print " ptr->x_" var_opt_int
[i
] ");";
218 for (i =
0; i
< n_opt_enum
; i
++) {
219 print " fprintf (file, \"%*s%s (%#x)\\n\",";
220 print " indent_to, \"\",";
221 print " \"" var_opt_enum
[i
] "\",";
222 print " (int) ptr->x_" var_opt_enum
[i
] ");";
226 for (i =
0; i
< n_opt_short
; i
++) {
227 print " if (ptr->x_" var_opt_short
[i
] ")";
228 print " fprintf (file, \"%*s%s (%#x)\\n\",";
229 print " indent_to, \"\",";
230 print " \"" var_opt_short
[i
] "\",";
231 print " ptr->x_" var_opt_short
[i
] ");";
235 for (i =
0; i
< n_opt_char
; i
++) {
236 print " if (ptr->x_" var_opt_char
[i
] ")";
237 print " fprintf (file, \"%*s%s (%#x)\\n\",";
238 print " indent_to, \"\",";
239 print " \"" var_opt_char
[i
] "\",";
240 print " ptr->x_" var_opt_char
[i
] ");";
247 print "/* Print different optimization variables from structures provided as arguments. */";
249 print "cl_optimization_print_diff (FILE *file,";
250 print " int indent_to,";
251 print " struct cl_optimization *ptr1,";
252 print " struct cl_optimization *ptr2)";
255 print " fputs (\"\\n\", file);";
256 for (i =
0; i
< n_opt_other
; i
++) {
257 print " if (ptr1->x_" var_opt_other
[i
] " != ptr2->x_" var_opt_other
[i
] ")";
258 print " fprintf (file, \"%*s%s (%#lx/%#lx)\\n\",";
259 print " indent_to, \"\",";
260 print " \"" var_opt_other
[i
] "\",";
261 print " (unsigned long)ptr1->x_" var_opt_other
[i
] ",";
262 print " (unsigned long)ptr2->x_" var_opt_other
[i
] ");";
266 for (i =
0; i
< n_opt_int
; i
++) {
267 print " if (ptr1->x_" var_opt_int
[i
] " != ptr2->x_" var_opt_int
[i
] ")";
268 print " fprintf (file, \"%*s%s (%#x/%#x)\\n\",";
269 print " indent_to, \"\",";
270 print " \"" var_opt_int
[i
] "\",";
271 print " ptr1->x_" var_opt_int
[i
] ",";
272 print " ptr2->x_" var_opt_int
[i
] ");";
276 for (i =
0; i
< n_opt_enum
; i
++) {
277 print " if (ptr1->x_" var_opt_enum
[i
] " != ptr2->x_" var_opt_enum
[i
] ")";
278 print " fprintf (file, \"%*s%s (%#x/%#x)\\n\",";
279 print " indent_to, \"\",";
280 print " \"" var_opt_enum
[i
] "\",";
281 print " (int) ptr1->x_" var_opt_enum
[i
] ",";
282 print " (int) ptr2->x_" var_opt_enum
[i
] ");";
286 for (i =
0; i
< n_opt_short
; i
++) {
287 print " if (ptr1->x_" var_opt_short
[i
] " != ptr2->x_" var_opt_short
[i
] ")";
288 print " fprintf (file, \"%*s%s (%#x/%#x)\\n\",";
289 print " indent_to, \"\",";
290 print " \"" var_opt_short
[i
] "\",";
291 print " ptr1->x_" var_opt_short
[i
] ",";
292 print " ptr2->x_" var_opt_short
[i
] ");";
296 for (i =
0; i
< n_opt_char
; i
++) {
297 print " if (ptr1->x_" var_opt_char
[i
] " != ptr2->x_" var_opt_char
[i
] ")";
298 print " fprintf (file, \"%*s%s (%#x/%#x)\\n\",";
299 print " indent_to, \"\",";
300 print " \"" var_opt_char
[i
] "\",";
301 print " ptr1->x_" var_opt_char
[i
] ",";
302 print " ptr2->x_" var_opt_char
[i
] ");";
310 print "/* Save selected option variables into a structure. */"
312 print "cl_target_option_save (struct cl_target_option *ptr, struct gcc_options *opts)";
322 for (i =
0; i
< n_opts
; i
++) {
323 if (flag_set_p
("Save", flags
[i
])) {
324 name = var_name
(flags
[i
])
326 name =
"target_flags";
328 if(name in var_save_seen
)
331 var_save_seen
[name
]++;
332 otype = var_type_struct
(flags
[i
])
333 if (otype ~
"^((un)?signed +)?int *$")
334 var_target_int
[n_target_int
++] = name
;
336 else if (otype ~
"^((un)?signed +)?short *$")
337 var_target_short
[n_target_short
++] = name
;
339 else if (otype ~
("^enum +[_" alnum
"]+ *$"))
340 var_target_enum
[n_target_enum
++] = name
;
342 else if (otype ~
"^((un)?signed +)?char *$") {
343 var_target_char
[n_target_char
++] = name
;
344 if (otype ~
"^unsigned +char *$")
345 var_target_range
[name
] =
"0, 255"
346 else if (otype ~
"^signed +char *$")
347 var_target_range
[name
] =
"-128, 127"
348 if (otype == var_type
(flags
[i
]))
349 var_target_range
[name
] =
""
352 var_target_other
[n_target_other
++] = name
;
356 var_target_int
[n_target_int
++] =
"target_flags";
360 for (i =
0; i
< n_target_char
; i
++) {
361 name = var_target_char
[i
];
362 if (var_target_range
[name
] != "") {
364 print " gcc_assert (IN_RANGE (opts->x_" name
", " var_target_range
[name
] "));";
371 print " if (targetm.target_option.save)";
372 print " targetm.target_option.save (ptr, opts);";
375 for (i =
0; i
< n_extra_target_vars
; i
++) {
376 print " ptr->x_" extra_target_vars
[i
] " = opts->x_" extra_target_vars
[i
] ";";
379 for (i =
0; i
< n_target_other
; i
++) {
380 print " ptr->x_" var_target_other
[i
] " = opts->x_" var_target_other
[i
] ";";
383 for (i =
0; i
< n_target_enum
; i
++) {
384 print " ptr->x_" var_target_enum
[i
] " = opts->x_" var_target_enum
[i
] ";";
387 for (i =
0; i
< n_target_int
; i
++) {
388 print " ptr->x_" var_target_int
[i
] " = opts->x_" var_target_int
[i
] ";";
391 for (i =
0; i
< n_target_short
; i
++) {
392 print " ptr->x_" var_target_short
[i
] " = opts->x_" var_target_short
[i
] ";";
395 for (i =
0; i
< n_target_char
; i
++) {
396 print " ptr->x_" var_target_char
[i
] " = opts->x_" var_target_char
[i
] ";";
402 print "/* Restore selected current options from a structure. */";
404 print "cl_target_option_restore (struct gcc_options *opts, struct cl_target_option *ptr)";
407 for (i =
0; i
< n_extra_target_vars
; i
++) {
408 print " opts->x_" extra_target_vars
[i
] " = ptr->x_" extra_target_vars
[i
] ";";
411 for (i =
0; i
< n_target_other
; i
++) {
412 print " opts->x_" var_target_other
[i
] " = ptr->x_" var_target_other
[i
] ";";
415 for (i =
0; i
< n_target_enum
; i
++) {
416 print " opts->x_" var_target_enum
[i
] " = ptr->x_" var_target_enum
[i
] ";";
419 for (i =
0; i
< n_target_int
; i
++) {
420 print " opts->x_" var_target_int
[i
] " = ptr->x_" var_target_int
[i
] ";";
423 for (i =
0; i
< n_target_short
; i
++) {
424 print " opts->x_" var_target_short
[i
] " = ptr->x_" var_target_short
[i
] ";";
427 for (i =
0; i
< n_target_char
; i
++) {
428 print " opts->x_" var_target_char
[i
] " = ptr->x_" var_target_char
[i
] ";";
431 # This must occur after the normal variables in case the code depends on those
434 print " if (targetm.target_option.restore)";
435 print " targetm.target_option.restore (opts, ptr);";
440 print "/* Print optimization options from a structure. */";
442 print "cl_target_option_print (FILE *file,";
443 print " int indent,";
444 print " struct cl_target_option *ptr)";
447 print " fputs (\"\\n\", file);";
448 for (i =
0; i
< n_target_other
; i
++) {
449 print " if (ptr->x_" var_target_other
[i
] ")";
450 if (host_wide_int
[var_target_other
[i
]] ==
"yes")
451 print " fprintf (file, \"%*s%s (%#\" HOST_WIDE_INT_PRINT \"x)\\n\",";
453 print " fprintf (file, \"%*s%s (%#x)\\n\",";
454 print " indent, \"\",";
455 print " \"" var_target_other
[i
] "\",";
456 if (host_wide_int
[var_target_other
[i
]] ==
"yes")
457 print " ptr->x_" var_target_other
[i
] ");";
459 print " (unsigned long)ptr->x_" var_target_other
[i
] ");";
463 for (i =
0; i
< n_target_enum
; i
++) {
464 print " if (ptr->x_" var_target_enum
[i
] ")";
465 print " fprintf (file, \"%*s%s (%#x)\\n\",";
466 print " indent, \"\",";
467 print " \"" var_target_enum
[i
] "\",";
468 print " ptr->x_" var_target_enum
[i
] ");";
472 for (i =
0; i
< n_target_int
; i
++) {
473 print " if (ptr->x_" var_target_int
[i
] ")";
474 print " fprintf (file, \"%*s%s (%#x)\\n\",";
475 print " indent, \"\",";
476 print " \"" var_target_int
[i
] "\",";
477 print " ptr->x_" var_target_int
[i
] ");";
481 for (i =
0; i
< n_target_short
; i
++) {
482 print " if (ptr->x_" var_target_short
[i
] ")";
483 print " fprintf (file, \"%*s%s (%#x)\\n\",";
484 print " indent, \"\",";
485 print " \"" var_target_short
[i
] "\",";
486 print " ptr->x_" var_target_short
[i
] ");";
490 for (i =
0; i
< n_target_char
; i
++) {
491 print " if (ptr->x_" var_target_char
[i
] ")";
492 print " fprintf (file, \"%*s%s (%#x)\\n\",";
493 print " indent, \"\",";
494 print " \"" var_target_char
[i
] "\",";
495 print " ptr->x_" var_target_char
[i
] ");";
500 print " if (targetm.target_option.print)";
501 print " targetm.target_option.print (file, indent, ptr);";
505 print "/* Print different target option variables from structures provided as arguments. */";
507 print "cl_target_option_print_diff (FILE *file,";
508 print " int indent,";
509 print " struct cl_target_option *ptr1,";
510 print " struct cl_target_option *ptr2)";
513 print " fputs (\"\\n\", file);";
514 for (i =
0; i
< n_target_other
; i
++) {
515 print " if (ptr1->x_" var_target_other
[i
] " != ptr2->x_" var_target_other
[i
] ")";
516 if (host_wide_int
[var_target_other
[i
]] ==
"yes")
517 print " fprintf (file, \"%*s%s (%#\" HOST_WIDE_INT_PRINT \"x/%#\" HOST_WIDE_INT_PRINT \"x)\\n\",";
519 print " fprintf (file, \"%*s%s (%#x/%#x)\\n\",";
520 print " indent, \"\",";
521 print " \"" var_target_other
[i
] "\",";
522 if (host_wide_int
[var_target_other
[i
]] ==
"yes") {
523 print " ptr1->x_" var_target_other
[i
] ",";
524 print " ptr2->x_" var_target_other
[i
] ");";
527 print " (unsigned long)ptr1->x_" var_target_other
[i
] ",";
528 print " (unsigned long)ptr2->x_" var_target_other
[i
] ");";
533 for (i =
0; i
< n_target_enum
; i
++) {
534 print " if (ptr1->x_" var_target_enum
[i
] " != ptr2->x_" var_target_enum
[i
] ")";
535 print " fprintf (file, \"%*s%s (%#x/%#x)\\n\",";
536 print " indent, \"\",";
537 print " \"" var_target_enum
[i
] "\",";
538 print " ptr1->x_" var_target_enum
[i
] ",";
539 print " ptr2->x_" var_target_enum
[i
] ");";
543 for (i =
0; i
< n_target_int
; i
++) {
544 print " if (ptr1->x_" var_target_int
[i
] " != ptr2->x_" var_target_int
[i
] ")";
545 print " fprintf (file, \"%*s%s (%#x/%#x)\\n\",";
546 print " indent, \"\",";
547 print " \"" var_target_int
[i
] "\",";
548 print " ptr1->x_" var_target_int
[i
] ",";
549 print " ptr2->x_" var_target_int
[i
] ");";
553 for (i =
0; i
< n_target_short
; i
++) {
554 print " if (ptr1->x_" var_target_short
[i
] " != ptr2->x_" var_target_short
[i
] ")";
555 print " fprintf (file, \"%*s%s (%#x/%#x)\\n\",";
556 print " indent, \"\",";
557 print " \"" var_target_short
[i
] "\",";
558 print " ptr1->x_" var_target_short
[i
] ",";
559 print " ptr2->x_" var_target_short
[i
] ");";
563 for (i =
0; i
< n_target_char
; i
++) {
564 print " if (ptr1->x_" var_target_char
[i
] " != ptr2->x_" var_target_char
[i
] ")";
565 print " fprintf (file, \"%*s%s (%#x/%#x)\\n\",";
566 print " indent, \"\",";
567 print " \"" var_target_char
[i
] "\",";
568 print " ptr1->x_" var_target_char
[i
] ",";
569 print " ptr2->x_" var_target_char
[i
] ");";
576 print "/* Compare two target options */";
578 print "cl_target_option_eq (struct cl_target_option const *ptr1 ATTRIBUTE_UNUSED,";
579 print " struct cl_target_option const *ptr2 ATTRIBUTE_UNUSED)";
585 for (i =
0; i
< n_target_save
; i
++) {
586 var = target_save_decl
[i
];
587 sub (" *=.*", "", var
);
590 sub("^.*[ *]", "", name
)
591 sub(" *" name
"$", "", type
)
592 if (target_save_decl
[i
] ~
"^const char \\*+[_" alnum
"]+$")
593 var_target_str
[n_target_str
++] = name
;
595 if (target_save_decl
[i
] ~
" .*\\[.+\\]+$") {
597 sub("[^\\[]+\\[", "", size
);
598 sub("\\]$", "", size
);
599 sub("\\[.+", "", name
)
600 sub(" [^ ]+$", "", type
)
601 var_target_array
[n_target_array
] = name
602 var_target_array_type
[n_target_array
] = type
603 var_target_array_size
[n_target_array
++] = size
606 var_target_val_type
[n_target_val
] = type
;
607 var_target_val
[n_target_val
++] = name
;
612 for (i =
0; i
< n_opts
; i
++) {
613 if (flag_set_p
("Save", flags
[i
])) {
614 name = var_name
(flags
[i
])
616 name =
"target_flags";
618 if(name in var_list_seen
)
621 var_list_seen
[name
]++;
622 otype = var_type_struct
(flags
[i
])
623 if (otype ~
"^const char \\**$")
624 var_target_str
[n_target_str
++] =
"x_" name
;
626 var_target_val_type
[n_target_val
] = otype
;
627 var_target_val
[n_target_val
++] =
"x_" name
;
632 var_target_val_type
[n_target_val
] =
"int";
633 var_target_val
[n_target_val
++] =
"x_target_flags";
636 for (i =
0; i
< n_target_str
; i
++) {
637 name = var_target_str
[i
]
638 print " if (ptr1->" name
" != ptr2->" name
;
639 print " && (!ptr1->" name
" || !ptr2->" name
640 print " || strcmp (ptr1->" name
", ptr2->" name
")))";
641 print " return false;";
643 for (i =
0; i
< n_target_array
; i
++) {
644 name = var_target_array
[i
]
645 size = var_target_array_size
[i
]
646 type = var_target_array_type
[i
]
647 print " if (ptr1->" name
" != ptr2->" name
"";
648 print " || memcmp (ptr1->" name
", ptr2->" name
", " size
" * sizeof(" type
")))"
649 print " return false;";
651 for (i =
0; i
< n_target_val
; i
++) {
652 name = var_target_val
[i
]
653 print " if (ptr1->" name
" != ptr2->" name
")";
654 print " return false;";
657 print " return true;";
662 print "/* Hash target options */";
664 print "cl_target_option_hash (struct cl_target_option const *ptr ATTRIBUTE_UNUSED)";
666 print " inchash::hash hstate;";
667 for (i =
0; i
< n_target_str
; i
++) {
668 name = var_target_str
[i
]
669 print " if (ptr->" name
")";
670 print " hstate.add (ptr->" name
", strlen (ptr->" name
"));";
672 print " hstate.add_int (0);";
674 for (i =
0; i
< n_target_array
; i
++) {
675 name= var_target_array
[i
]
676 size = var_target_array_size
[i
]
677 type = var_target_array_type
[i
]
678 print " hstate.add_int (" size
");";
679 print " hstate.add (ptr->" name
", sizeof (" type
") * " size
");";
681 for (i =
0; i
< n_target_val
; i
++) {
682 name = var_target_val
[i
]
683 print " hstate.add_wide_int (ptr->" name
");";
685 print " return hstate.end ();";
689 print "/* Stream out target options */";
691 print "cl_target_option_stream_out (struct output_block *ob ATTRIBUTE_UNUSED,";
692 print " struct bitpack_d *bp ATTRIBUTE_UNUSED,";
693 print " struct cl_target_option *ptr ATTRIBUTE_UNUSED)";
695 for (i =
0; i
< n_target_str
; i
++) {
696 name = var_target_str
[i
]
697 print " bp_pack_string (ob, bp, ptr->" name
", true);";
699 for (i =
0; i
< n_target_array
; i
++) {
700 name = var_target_array
[i
]
701 size = var_target_array_size
[i
]
702 print " for (unsigned i = 0; i < " size
"; i++)"
703 print " bp_pack_value (bp, ptr->" name
"[i], 64);";
705 for (i =
0; i
< n_target_val
; i
++) {
706 name = var_target_val
[i
]
707 print " bp_pack_value (bp, ptr->" name
", 64);";
712 print "/* Stream in target options */";
714 print "cl_target_option_stream_in (struct data_in *data_in ATTRIBUTE_UNUSED,";
715 print " struct bitpack_d *bp ATTRIBUTE_UNUSED,";
716 print " struct cl_target_option *ptr ATTRIBUTE_UNUSED)";
718 for (i =
0; i
< n_target_str
; i
++) {
719 name = var_target_str
[i
]
720 print " ptr->" name
" = bp_unpack_string (data_in, bp);";
721 print " if (ptr->" name
")";
722 print " ptr->" name
" = xstrdup (ptr->" name
");";
724 for (i =
0; i
< n_target_array
; i
++) {
725 name = var_target_array
[i
]
726 size = var_target_array_size
[i
]
727 print " for (int i = " size
" - 1; i >= 0; i--)"
728 print " ptr->" name
"[i] = (" var_target_array_type
[i
] ") bp_unpack_value (bp, 64);";
730 for (i =
0; i
< n_target_val
; i
++) {
731 name = var_target_val
[i
]
732 print " ptr->" name
" = (" var_target_val_type
[i
] ") bp_unpack_value (bp, 64);";
738 var_opt_val
[0] =
"x_optimize"
739 var_opt_val_type
[0] =
"char "
740 var_opt_val
[1] =
"x_optimize_size"
741 var_opt_val_type
[1] =
"char "
742 for (i =
0; i
< n_opts
; i
++) {
743 if (flag_set_p
("Optimization", flags
[i
])) {
744 name = var_name
(flags
[i
])
748 if(name in var_opt_list_seen
)
751 var_opt_list_seen
[name
]++;
753 otype = var_type_struct
(flags
[i
])
754 var_opt_val_type
[n_opt_val
] = otype
;
755 var_opt_val
[n_opt_val
++] =
"x_" name
;
759 print "/* Hash optimization options */";
761 print "cl_optimization_hash (struct cl_optimization const *ptr ATTRIBUTE_UNUSED)";
763 print " inchash::hash hstate;";
764 for (i =
0; i
< n_opt_val
; i
++) {
765 name = var_opt_val
[i
]
766 print " hstate.add_wide_int (ptr->" name
");";
768 print " return hstate.end ();";
772 print "/* Stream out optimization options */";
774 print "cl_optimization_stream_out (struct bitpack_d *bp,";
775 print " struct cl_optimization *ptr)";
777 for (i =
0; i
< n_opt_val
; i
++) {
778 name = var_opt_val
[i
]
779 print " bp_pack_value (bp, ptr->" name
", 64);";
784 print "/* Stream in optimization options */";
786 print "cl_optimization_stream_in (struct bitpack_d *bp,";
787 print " struct cl_optimization *ptr)";
789 for (i =
0; i
< n_opt_val
; i
++) {
790 name = var_opt_val
[i
]
791 print " ptr->" name
" = (" var_opt_val_type
[i
] ") bp_unpack_value (bp, 64);";