PR c++/68795: fix uninitialized close_paren_loc in cp_parser_postfix_expression
[gcc.git] / gcc / lto-streamer-out.c
1 /* Write the GIMPLE representation to a file stream.
2
3 Copyright (C) 2009-2016 Free Software Foundation, Inc.
4 Contributed by Kenneth Zadeck <zadeck@naturalbridge.com>
5 Re-implemented by Diego Novillo <dnovillo@google.com>
6
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify it under
10 the terms of the GNU General Public License as published by the Free
11 Software Foundation; either version 3, or (at your option) any later
12 version.
13
14 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15 WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
22
23 #include "config.h"
24 #include "system.h"
25 #include "coretypes.h"
26 #include "backend.h"
27 #include "target.h"
28 #include "rtl.h"
29 #include "tree.h"
30 #include "gimple.h"
31 #include "tree-pass.h"
32 #include "ssa.h"
33 #include "gimple-streamer.h"
34 #include "alias.h"
35 #include "stor-layout.h"
36 #include "gimple-iterator.h"
37 #include "except.h"
38 #include "lto-symtab.h"
39 #include "cgraph.h"
40 #include "cfgloop.h"
41 #include "builtins.h"
42 #include "gomp-constants.h"
43
44
45 static void lto_write_tree (struct output_block*, tree, bool);
46
47 /* Clear the line info stored in DATA_IN. */
48
49 static void
50 clear_line_info (struct output_block *ob)
51 {
52 ob->current_file = NULL;
53 ob->current_line = 0;
54 ob->current_col = 0;
55 ob->current_sysp = false;
56 }
57
58
59 /* Create the output block and return it. SECTION_TYPE is
60 LTO_section_function_body or LTO_static_initializer. */
61
62 struct output_block *
63 create_output_block (enum lto_section_type section_type)
64 {
65 struct output_block *ob = XCNEW (struct output_block);
66
67 ob->section_type = section_type;
68 ob->decl_state = lto_get_out_decl_state ();
69 ob->main_stream = XCNEW (struct lto_output_stream);
70 ob->string_stream = XCNEW (struct lto_output_stream);
71 ob->writer_cache = streamer_tree_cache_create (!flag_wpa, true, false);
72
73 if (section_type == LTO_section_function_body)
74 ob->cfg_stream = XCNEW (struct lto_output_stream);
75
76 clear_line_info (ob);
77
78 ob->string_hash_table = new hash_table<string_slot_hasher> (37);
79 gcc_obstack_init (&ob->obstack);
80
81 return ob;
82 }
83
84
85 /* Destroy the output block OB. */
86
87 void
88 destroy_output_block (struct output_block *ob)
89 {
90 enum lto_section_type section_type = ob->section_type;
91
92 delete ob->string_hash_table;
93 ob->string_hash_table = NULL;
94
95 free (ob->main_stream);
96 free (ob->string_stream);
97 if (section_type == LTO_section_function_body)
98 free (ob->cfg_stream);
99
100 streamer_tree_cache_delete (ob->writer_cache);
101 obstack_free (&ob->obstack, NULL);
102
103 free (ob);
104 }
105
106
107 /* Look up NODE in the type table and write the index for it to OB. */
108
109 static void
110 output_type_ref (struct output_block *ob, tree node)
111 {
112 streamer_write_record_start (ob, LTO_type_ref);
113 lto_output_type_ref_index (ob->decl_state, ob->main_stream, node);
114 }
115
116
117 /* Return true if tree node T is written to various tables. For these
118 nodes, we sometimes want to write their phyiscal representation
119 (via lto_output_tree), and sometimes we need to emit an index
120 reference into a table (via lto_output_tree_ref). */
121
122 static bool
123 tree_is_indexable (tree t)
124 {
125 /* Parameters and return values of functions of variably modified types
126 must go to global stream, because they may be used in the type
127 definition. */
128 if ((TREE_CODE (t) == PARM_DECL || TREE_CODE (t) == RESULT_DECL)
129 && DECL_CONTEXT (t))
130 return variably_modified_type_p (TREE_TYPE (DECL_CONTEXT (t)), NULL_TREE);
131 /* IMPORTED_DECL is put into BLOCK and thus it never can be shared. */
132 else if (TREE_CODE (t) == IMPORTED_DECL)
133 return false;
134 else if (((TREE_CODE (t) == VAR_DECL && !TREE_STATIC (t))
135 || TREE_CODE (t) == TYPE_DECL
136 || TREE_CODE (t) == CONST_DECL
137 || TREE_CODE (t) == NAMELIST_DECL)
138 && decl_function_context (t))
139 return false;
140 else if (TREE_CODE (t) == DEBUG_EXPR_DECL)
141 return false;
142 /* Variably modified types need to be streamed alongside function
143 bodies because they can refer to local entities. Together with
144 them we have to localize their members as well.
145 ??? In theory that includes non-FIELD_DECLs as well. */
146 else if (TYPE_P (t)
147 && variably_modified_type_p (t, NULL_TREE))
148 return false;
149 else if (TREE_CODE (t) == FIELD_DECL
150 && variably_modified_type_p (DECL_CONTEXT (t), NULL_TREE))
151 return false;
152 else
153 return (TYPE_P (t) || DECL_P (t) || TREE_CODE (t) == SSA_NAME);
154 }
155
156
157 /* Output info about new location into bitpack BP.
158 After outputting bitpack, lto_output_location_data has
159 to be done to output actual data. */
160
161 void
162 lto_output_location (struct output_block *ob, struct bitpack_d *bp,
163 location_t loc)
164 {
165 expanded_location xloc;
166
167 loc = LOCATION_LOCUS (loc);
168 bp_pack_int_in_range (bp, 0, RESERVED_LOCATION_COUNT,
169 loc < RESERVED_LOCATION_COUNT
170 ? loc : RESERVED_LOCATION_COUNT);
171 if (loc < RESERVED_LOCATION_COUNT)
172 return;
173
174 xloc = expand_location (loc);
175
176 bp_pack_value (bp, ob->current_file != xloc.file, 1);
177 bp_pack_value (bp, ob->current_line != xloc.line, 1);
178 bp_pack_value (bp, ob->current_col != xloc.column, 1);
179
180 if (ob->current_file != xloc.file)
181 {
182 bp_pack_string (ob, bp, xloc.file, true);
183 bp_pack_value (bp, xloc.sysp, 1);
184 }
185 ob->current_file = xloc.file;
186 ob->current_sysp = xloc.sysp;
187
188 if (ob->current_line != xloc.line)
189 bp_pack_var_len_unsigned (bp, xloc.line);
190 ob->current_line = xloc.line;
191
192 if (ob->current_col != xloc.column)
193 bp_pack_var_len_unsigned (bp, xloc.column);
194 ob->current_col = xloc.column;
195 }
196
197
198 /* If EXPR is an indexable tree node, output a reference to it to
199 output block OB. Otherwise, output the physical representation of
200 EXPR to OB. */
201
202 static void
203 lto_output_tree_ref (struct output_block *ob, tree expr)
204 {
205 enum tree_code code;
206
207 if (TYPE_P (expr))
208 {
209 output_type_ref (ob, expr);
210 return;
211 }
212
213 code = TREE_CODE (expr);
214 switch (code)
215 {
216 case SSA_NAME:
217 streamer_write_record_start (ob, LTO_ssa_name_ref);
218 streamer_write_uhwi (ob, SSA_NAME_VERSION (expr));
219 break;
220
221 case FIELD_DECL:
222 streamer_write_record_start (ob, LTO_field_decl_ref);
223 lto_output_field_decl_index (ob->decl_state, ob->main_stream, expr);
224 break;
225
226 case FUNCTION_DECL:
227 streamer_write_record_start (ob, LTO_function_decl_ref);
228 lto_output_fn_decl_index (ob->decl_state, ob->main_stream, expr);
229 break;
230
231 case VAR_DECL:
232 case DEBUG_EXPR_DECL:
233 gcc_assert (decl_function_context (expr) == NULL || TREE_STATIC (expr));
234 case PARM_DECL:
235 streamer_write_record_start (ob, LTO_global_decl_ref);
236 lto_output_var_decl_index (ob->decl_state, ob->main_stream, expr);
237 break;
238
239 case CONST_DECL:
240 streamer_write_record_start (ob, LTO_const_decl_ref);
241 lto_output_var_decl_index (ob->decl_state, ob->main_stream, expr);
242 break;
243
244 case IMPORTED_DECL:
245 gcc_assert (decl_function_context (expr) == NULL);
246 streamer_write_record_start (ob, LTO_imported_decl_ref);
247 lto_output_var_decl_index (ob->decl_state, ob->main_stream, expr);
248 break;
249
250 case TYPE_DECL:
251 streamer_write_record_start (ob, LTO_type_decl_ref);
252 lto_output_type_decl_index (ob->decl_state, ob->main_stream, expr);
253 break;
254
255 case NAMELIST_DECL:
256 streamer_write_record_start (ob, LTO_namelist_decl_ref);
257 lto_output_var_decl_index (ob->decl_state, ob->main_stream, expr);
258 break;
259
260 case NAMESPACE_DECL:
261 streamer_write_record_start (ob, LTO_namespace_decl_ref);
262 lto_output_namespace_decl_index (ob->decl_state, ob->main_stream, expr);
263 break;
264
265 case LABEL_DECL:
266 streamer_write_record_start (ob, LTO_label_decl_ref);
267 lto_output_var_decl_index (ob->decl_state, ob->main_stream, expr);
268 break;
269
270 case RESULT_DECL:
271 streamer_write_record_start (ob, LTO_result_decl_ref);
272 lto_output_var_decl_index (ob->decl_state, ob->main_stream, expr);
273 break;
274
275 case TRANSLATION_UNIT_DECL:
276 streamer_write_record_start (ob, LTO_translation_unit_decl_ref);
277 lto_output_var_decl_index (ob->decl_state, ob->main_stream, expr);
278 break;
279
280 default:
281 /* No other node is indexable, so it should have been handled by
282 lto_output_tree. */
283 gcc_unreachable ();
284 }
285 }
286
287
288 /* Return true if EXPR is a tree node that can be written to disk. */
289
290 static inline bool
291 lto_is_streamable (tree expr)
292 {
293 enum tree_code code = TREE_CODE (expr);
294
295 /* Notice that we reject SSA_NAMEs as well. We only emit the SSA
296 name version in lto_output_tree_ref (see output_ssa_names). */
297 return !is_lang_specific (expr)
298 && code != SSA_NAME
299 && code != CALL_EXPR
300 && code != LANG_TYPE
301 && code != MODIFY_EXPR
302 && code != INIT_EXPR
303 && code != TARGET_EXPR
304 && code != BIND_EXPR
305 && code != WITH_CLEANUP_EXPR
306 && code != STATEMENT_LIST
307 && (code == CASE_LABEL_EXPR
308 || code == DECL_EXPR
309 || TREE_CODE_CLASS (code) != tcc_statement);
310 }
311
312
313 /* For EXPR lookup and return what we want to stream to OB as DECL_INITIAL. */
314
315 static tree
316 get_symbol_initial_value (lto_symtab_encoder_t encoder, tree expr)
317 {
318 gcc_checking_assert (DECL_P (expr)
319 && TREE_CODE (expr) != FUNCTION_DECL
320 && TREE_CODE (expr) != TRANSLATION_UNIT_DECL);
321
322 /* Handle DECL_INITIAL for symbols. */
323 tree initial = DECL_INITIAL (expr);
324 if (TREE_CODE (expr) == VAR_DECL
325 && (TREE_STATIC (expr) || DECL_EXTERNAL (expr))
326 && !DECL_IN_CONSTANT_POOL (expr)
327 && initial)
328 {
329 varpool_node *vnode;
330 /* Extra section needs about 30 bytes; do not produce it for simple
331 scalar values. */
332 if (TREE_CODE (DECL_INITIAL (expr)) == CONSTRUCTOR
333 || !(vnode = varpool_node::get (expr))
334 || !lto_symtab_encoder_encode_initializer_p (encoder, vnode))
335 initial = error_mark_node;
336 }
337
338 return initial;
339 }
340
341
342 /* Write a physical representation of tree node EXPR to output block
343 OB. If REF_P is true, the leaves of EXPR are emitted as references
344 via lto_output_tree_ref. IX is the index into the streamer cache
345 where EXPR is stored. */
346
347 static void
348 lto_write_tree_1 (struct output_block *ob, tree expr, bool ref_p)
349 {
350 /* Pack all the non-pointer fields in EXPR into a bitpack and write
351 the resulting bitpack. */
352 streamer_write_tree_bitfields (ob, expr);
353
354 /* Write all the pointer fields in EXPR. */
355 streamer_write_tree_body (ob, expr, ref_p);
356
357 /* Write any LTO-specific data to OB. */
358 if (DECL_P (expr)
359 && TREE_CODE (expr) != FUNCTION_DECL
360 && TREE_CODE (expr) != TRANSLATION_UNIT_DECL)
361 {
362 /* Handle DECL_INITIAL for symbols. */
363 tree initial = get_symbol_initial_value
364 (ob->decl_state->symtab_node_encoder, expr);
365 stream_write_tree (ob, initial, ref_p);
366 }
367 }
368
369 /* Write a physical representation of tree node EXPR to output block
370 OB. If REF_P is true, the leaves of EXPR are emitted as references
371 via lto_output_tree_ref. IX is the index into the streamer cache
372 where EXPR is stored. */
373
374 static void
375 lto_write_tree (struct output_block *ob, tree expr, bool ref_p)
376 {
377 if (!lto_is_streamable (expr))
378 internal_error ("tree code %qs is not supported in LTO streams",
379 get_tree_code_name (TREE_CODE (expr)));
380
381 /* Write the header, containing everything needed to materialize
382 EXPR on the reading side. */
383 streamer_write_tree_header (ob, expr);
384
385 lto_write_tree_1 (ob, expr, ref_p);
386
387 /* Mark the end of EXPR. */
388 streamer_write_zero (ob);
389 }
390
391 /* Emit the physical representation of tree node EXPR to output block OB,
392 If THIS_REF_P is true, the leaves of EXPR are emitted as references via
393 lto_output_tree_ref. REF_P is used for streaming siblings of EXPR. */
394
395 static void
396 lto_output_tree_1 (struct output_block *ob, tree expr, hashval_t hash,
397 bool ref_p, bool this_ref_p)
398 {
399 unsigned ix;
400
401 gcc_checking_assert (expr != NULL_TREE
402 && !(this_ref_p && tree_is_indexable (expr)));
403
404 bool exists_p = streamer_tree_cache_insert (ob->writer_cache,
405 expr, hash, &ix);
406 gcc_assert (!exists_p);
407 if (streamer_handle_as_builtin_p (expr))
408 {
409 /* MD and NORMAL builtins do not need to be written out
410 completely as they are always instantiated by the
411 compiler on startup. The only builtins that need to
412 be written out are BUILT_IN_FRONTEND. For all other
413 builtins, we simply write the class and code. */
414 streamer_write_builtin (ob, expr);
415 }
416 else if (TREE_CODE (expr) == INTEGER_CST
417 && !TREE_OVERFLOW (expr))
418 {
419 /* Shared INTEGER_CST nodes are special because they need their
420 original type to be materialized by the reader (to implement
421 TYPE_CACHED_VALUES). */
422 streamer_write_integer_cst (ob, expr, ref_p);
423 }
424 else
425 {
426 /* This is the first time we see EXPR, write its fields
427 to OB. */
428 lto_write_tree (ob, expr, ref_p);
429 }
430 }
431
432 class DFS
433 {
434 public:
435 DFS (struct output_block *ob, tree expr, bool ref_p, bool this_ref_p,
436 bool single_p);
437 ~DFS ();
438
439 struct scc_entry
440 {
441 tree t;
442 hashval_t hash;
443 };
444 vec<scc_entry> sccstack;
445
446 private:
447 struct sccs
448 {
449 unsigned int dfsnum;
450 unsigned int low;
451 };
452 struct worklist
453 {
454 tree expr;
455 sccs *from_state;
456 sccs *cstate;
457 bool ref_p;
458 bool this_ref_p;
459 };
460
461 static int scc_entry_compare (const void *, const void *);
462
463 void DFS_write_tree_body (struct output_block *ob,
464 tree expr, sccs *expr_state, bool ref_p);
465
466 void DFS_write_tree (struct output_block *ob, sccs *from_state,
467 tree expr, bool ref_p, bool this_ref_p);
468
469 hashval_t
470 hash_scc (struct output_block *ob, unsigned first, unsigned size,
471 bool ref_p, bool this_ref_p);
472
473 hash_map<tree, sccs *> sccstate;
474 vec<worklist> worklist_vec;
475 struct obstack sccstate_obstack;
476 };
477
478 /* Emit the physical representation of tree node EXPR to output block OB,
479 using depth-first search on the subgraph. If THIS_REF_P is true, the
480 leaves of EXPR are emitted as references via lto_output_tree_ref.
481 REF_P is used for streaming siblings of EXPR. If SINGLE_P is true,
482 this is for a rewalk of a single leaf SCC. */
483
484 DFS::DFS (struct output_block *ob, tree expr, bool ref_p, bool this_ref_p,
485 bool single_p)
486 {
487 unsigned int next_dfs_num = 1;
488 sccstack.create (0);
489 gcc_obstack_init (&sccstate_obstack);
490 worklist_vec = vNULL;
491 DFS_write_tree (ob, NULL, expr, ref_p, this_ref_p);
492 while (!worklist_vec.is_empty ())
493 {
494 worklist &w = worklist_vec.last ();
495 expr = w.expr;
496 sccs *from_state = w.from_state;
497 sccs *cstate = w.cstate;
498 ref_p = w.ref_p;
499 this_ref_p = w.this_ref_p;
500 if (cstate == NULL)
501 {
502 sccs **slot = &sccstate.get_or_insert (expr);
503 cstate = *slot;
504 if (cstate)
505 {
506 gcc_checking_assert (from_state);
507 if (cstate->dfsnum < from_state->dfsnum)
508 from_state->low = MIN (cstate->dfsnum, from_state->low);
509 worklist_vec.pop ();
510 continue;
511 }
512
513 scc_entry e = { expr, 0 };
514 /* Not yet visited. DFS recurse and push it onto the stack. */
515 *slot = cstate = XOBNEW (&sccstate_obstack, struct sccs);
516 sccstack.safe_push (e);
517 cstate->dfsnum = next_dfs_num++;
518 cstate->low = cstate->dfsnum;
519 w.cstate = cstate;
520
521 if (streamer_handle_as_builtin_p (expr))
522 ;
523 else if (TREE_CODE (expr) == INTEGER_CST
524 && !TREE_OVERFLOW (expr))
525 DFS_write_tree (ob, cstate, TREE_TYPE (expr), ref_p, ref_p);
526 else
527 {
528 DFS_write_tree_body (ob, expr, cstate, ref_p);
529
530 /* Walk any LTO-specific edges. */
531 if (DECL_P (expr)
532 && TREE_CODE (expr) != FUNCTION_DECL
533 && TREE_CODE (expr) != TRANSLATION_UNIT_DECL)
534 {
535 /* Handle DECL_INITIAL for symbols. */
536 tree initial
537 = get_symbol_initial_value (ob->decl_state->symtab_node_encoder,
538 expr);
539 DFS_write_tree (ob, cstate, initial, ref_p, ref_p);
540 }
541 }
542 continue;
543 }
544
545 /* See if we found an SCC. */
546 if (cstate->low == cstate->dfsnum)
547 {
548 unsigned first, size;
549 tree x;
550
551 /* If we are re-walking a single leaf SCC just pop it,
552 let earlier worklist item access the sccstack. */
553 if (single_p)
554 {
555 worklist_vec.pop ();
556 continue;
557 }
558
559 /* Pop the SCC and compute its size. */
560 first = sccstack.length ();
561 do
562 {
563 x = sccstack[--first].t;
564 }
565 while (x != expr);
566 size = sccstack.length () - first;
567
568 /* No need to compute hashes for LTRANS units, we don't perform
569 any merging there. */
570 hashval_t scc_hash = 0;
571 unsigned scc_entry_len = 0;
572 if (!flag_wpa)
573 {
574 scc_hash = hash_scc (ob, first, size, ref_p, this_ref_p);
575
576 /* Put the entries with the least number of collisions first. */
577 unsigned entry_start = 0;
578 scc_entry_len = size + 1;
579 for (unsigned i = 0; i < size;)
580 {
581 unsigned from = i;
582 for (i = i + 1; i < size
583 && (sccstack[first + i].hash
584 == sccstack[first + from].hash); ++i)
585 ;
586 if (i - from < scc_entry_len)
587 {
588 scc_entry_len = i - from;
589 entry_start = from;
590 }
591 }
592 for (unsigned i = 0; i < scc_entry_len; ++i)
593 std::swap (sccstack[first + i],
594 sccstack[first + entry_start + i]);
595
596 /* We already sorted SCC deterministically in hash_scc. */
597
598 /* Check that we have only one SCC.
599 Naturally we may have conflicts if hash function is not
600 strong enough. Lets see how far this gets. */
601 gcc_checking_assert (scc_entry_len == 1);
602 }
603
604 /* Write LTO_tree_scc. */
605 streamer_write_record_start (ob, LTO_tree_scc);
606 streamer_write_uhwi (ob, size);
607 streamer_write_uhwi (ob, scc_hash);
608
609 /* Write size-1 SCCs without wrapping them inside SCC bundles.
610 All INTEGER_CSTs need to be handled this way as we need
611 their type to materialize them. Also builtins are handled
612 this way.
613 ??? We still wrap these in LTO_tree_scc so at the
614 input side we can properly identify the tree we want
615 to ultimatively return. */
616 if (size == 1)
617 lto_output_tree_1 (ob, expr, scc_hash, ref_p, this_ref_p);
618 else
619 {
620 /* Write the size of the SCC entry candidates. */
621 streamer_write_uhwi (ob, scc_entry_len);
622
623 /* Write all headers and populate the streamer cache. */
624 for (unsigned i = 0; i < size; ++i)
625 {
626 hashval_t hash = sccstack[first+i].hash;
627 tree t = sccstack[first+i].t;
628 bool exists_p = streamer_tree_cache_insert (ob->writer_cache,
629 t, hash, NULL);
630 gcc_assert (!exists_p);
631
632 if (!lto_is_streamable (t))
633 internal_error ("tree code %qs is not supported "
634 "in LTO streams",
635 get_tree_code_name (TREE_CODE (t)));
636
637 gcc_checking_assert (!streamer_handle_as_builtin_p (t));
638
639 /* Write the header, containing everything needed to
640 materialize EXPR on the reading side. */
641 streamer_write_tree_header (ob, t);
642 }
643
644 /* Write the bitpacks and tree references. */
645 for (unsigned i = 0; i < size; ++i)
646 {
647 lto_write_tree_1 (ob, sccstack[first+i].t, ref_p);
648
649 /* Mark the end of the tree. */
650 streamer_write_zero (ob);
651 }
652 }
653
654 /* Finally truncate the vector. */
655 sccstack.truncate (first);
656
657 if (from_state)
658 from_state->low = MIN (from_state->low, cstate->low);
659 worklist_vec.pop ();
660 continue;
661 }
662
663 gcc_checking_assert (from_state);
664 from_state->low = MIN (from_state->low, cstate->low);
665 if (cstate->dfsnum < from_state->dfsnum)
666 from_state->low = MIN (cstate->dfsnum, from_state->low);
667 worklist_vec.pop ();
668 }
669 worklist_vec.release ();
670 }
671
672 DFS::~DFS ()
673 {
674 sccstack.release ();
675 obstack_free (&sccstate_obstack, NULL);
676 }
677
678 /* Handle the tree EXPR in the DFS walk with SCC state EXPR_STATE and
679 DFS recurse for all tree edges originating from it. */
680
681 void
682 DFS::DFS_write_tree_body (struct output_block *ob,
683 tree expr, sccs *expr_state, bool ref_p)
684 {
685 #define DFS_follow_tree_edge(DEST) \
686 DFS_write_tree (ob, expr_state, DEST, ref_p, ref_p)
687
688 enum tree_code code;
689
690 code = TREE_CODE (expr);
691
692 if (CODE_CONTAINS_STRUCT (code, TS_TYPED))
693 {
694 if (TREE_CODE (expr) != IDENTIFIER_NODE)
695 DFS_follow_tree_edge (TREE_TYPE (expr));
696 }
697
698 if (CODE_CONTAINS_STRUCT (code, TS_VECTOR))
699 {
700 for (unsigned i = 0; i < VECTOR_CST_NELTS (expr); ++i)
701 DFS_follow_tree_edge (VECTOR_CST_ELT (expr, i));
702 }
703
704 if (CODE_CONTAINS_STRUCT (code, TS_COMPLEX))
705 {
706 DFS_follow_tree_edge (TREE_REALPART (expr));
707 DFS_follow_tree_edge (TREE_IMAGPART (expr));
708 }
709
710 if (CODE_CONTAINS_STRUCT (code, TS_DECL_MINIMAL))
711 {
712 /* Drop names that were created for anonymous entities. */
713 if (DECL_NAME (expr)
714 && TREE_CODE (DECL_NAME (expr)) == IDENTIFIER_NODE
715 && anon_aggrname_p (DECL_NAME (expr)))
716 ;
717 else
718 DFS_follow_tree_edge (DECL_NAME (expr));
719 DFS_follow_tree_edge (DECL_CONTEXT (expr));
720 }
721
722 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
723 {
724 DFS_follow_tree_edge (DECL_SIZE (expr));
725 DFS_follow_tree_edge (DECL_SIZE_UNIT (expr));
726
727 /* Note, DECL_INITIAL is not handled here. Since DECL_INITIAL needs
728 special handling in LTO, it must be handled by streamer hooks. */
729
730 DFS_follow_tree_edge (DECL_ATTRIBUTES (expr));
731
732 /* Do not follow DECL_ABSTRACT_ORIGIN. We cannot handle debug information
733 for early inlining so drop it on the floor instead of ICEing in
734 dwarf2out.c.
735 We however use DECL_ABSTRACT_ORIGIN == error_mark_node to mark
736 declarations which should be eliminated by decl merging. Be sure none
737 leaks to this point. */
738 gcc_assert (DECL_ABSTRACT_ORIGIN (expr) != error_mark_node);
739
740 if ((TREE_CODE (expr) == VAR_DECL
741 || TREE_CODE (expr) == PARM_DECL)
742 && DECL_HAS_VALUE_EXPR_P (expr))
743 DFS_follow_tree_edge (DECL_VALUE_EXPR (expr));
744 if (TREE_CODE (expr) == VAR_DECL)
745 DFS_follow_tree_edge (DECL_DEBUG_EXPR (expr));
746 }
747
748 if (CODE_CONTAINS_STRUCT (code, TS_DECL_NON_COMMON))
749 {
750 if (TREE_CODE (expr) == TYPE_DECL)
751 DFS_follow_tree_edge (DECL_ORIGINAL_TYPE (expr));
752 }
753
754 if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
755 {
756 /* Make sure we don't inadvertently set the assembler name. */
757 if (DECL_ASSEMBLER_NAME_SET_P (expr))
758 DFS_follow_tree_edge (DECL_ASSEMBLER_NAME (expr));
759 }
760
761 if (CODE_CONTAINS_STRUCT (code, TS_FIELD_DECL))
762 {
763 DFS_follow_tree_edge (DECL_FIELD_OFFSET (expr));
764 DFS_follow_tree_edge (DECL_BIT_FIELD_TYPE (expr));
765 DFS_follow_tree_edge (DECL_BIT_FIELD_REPRESENTATIVE (expr));
766 DFS_follow_tree_edge (DECL_FIELD_BIT_OFFSET (expr));
767 DFS_follow_tree_edge (DECL_FCONTEXT (expr));
768 }
769
770 if (CODE_CONTAINS_STRUCT (code, TS_FUNCTION_DECL))
771 {
772 DFS_follow_tree_edge (DECL_VINDEX (expr));
773 DFS_follow_tree_edge (DECL_FUNCTION_PERSONALITY (expr));
774 DFS_follow_tree_edge (DECL_FUNCTION_SPECIFIC_TARGET (expr));
775 DFS_follow_tree_edge (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr));
776 }
777
778 if (CODE_CONTAINS_STRUCT (code, TS_TYPE_COMMON))
779 {
780 DFS_follow_tree_edge (TYPE_SIZE (expr));
781 DFS_follow_tree_edge (TYPE_SIZE_UNIT (expr));
782 DFS_follow_tree_edge (TYPE_ATTRIBUTES (expr));
783 DFS_follow_tree_edge (TYPE_NAME (expr));
784 /* Do not follow TYPE_POINTER_TO or TYPE_REFERENCE_TO. They will be
785 reconstructed during fixup. */
786 /* Do not follow TYPE_NEXT_VARIANT, we reconstruct the variant lists
787 during fixup. */
788 DFS_follow_tree_edge (TYPE_MAIN_VARIANT (expr));
789 DFS_follow_tree_edge (TYPE_CONTEXT (expr));
790 /* TYPE_CANONICAL is re-computed during type merging, so no need
791 to follow it here. */
792 DFS_follow_tree_edge (TYPE_STUB_DECL (expr));
793 }
794
795 if (CODE_CONTAINS_STRUCT (code, TS_TYPE_NON_COMMON))
796 {
797 if (TREE_CODE (expr) == ENUMERAL_TYPE)
798 DFS_follow_tree_edge (TYPE_VALUES (expr));
799 else if (TREE_CODE (expr) == ARRAY_TYPE)
800 DFS_follow_tree_edge (TYPE_DOMAIN (expr));
801 else if (RECORD_OR_UNION_TYPE_P (expr))
802 for (tree t = TYPE_FIELDS (expr); t; t = TREE_CHAIN (t))
803 DFS_follow_tree_edge (t);
804 else if (TREE_CODE (expr) == FUNCTION_TYPE
805 || TREE_CODE (expr) == METHOD_TYPE)
806 DFS_follow_tree_edge (TYPE_ARG_TYPES (expr));
807
808 if (!POINTER_TYPE_P (expr))
809 DFS_follow_tree_edge (TYPE_MINVAL (expr));
810 DFS_follow_tree_edge (TYPE_MAXVAL (expr));
811 if (RECORD_OR_UNION_TYPE_P (expr))
812 DFS_follow_tree_edge (TYPE_BINFO (expr));
813 }
814
815 if (CODE_CONTAINS_STRUCT (code, TS_LIST))
816 {
817 DFS_follow_tree_edge (TREE_PURPOSE (expr));
818 DFS_follow_tree_edge (TREE_VALUE (expr));
819 DFS_follow_tree_edge (TREE_CHAIN (expr));
820 }
821
822 if (CODE_CONTAINS_STRUCT (code, TS_VEC))
823 {
824 for (int i = 0; i < TREE_VEC_LENGTH (expr); i++)
825 DFS_follow_tree_edge (TREE_VEC_ELT (expr, i));
826 }
827
828 if (CODE_CONTAINS_STRUCT (code, TS_EXP))
829 {
830 for (int i = 0; i < TREE_OPERAND_LENGTH (expr); i++)
831 DFS_follow_tree_edge (TREE_OPERAND (expr, i));
832 DFS_follow_tree_edge (TREE_BLOCK (expr));
833 }
834
835 if (CODE_CONTAINS_STRUCT (code, TS_BLOCK))
836 {
837 for (tree t = BLOCK_VARS (expr); t; t = TREE_CHAIN (t))
838 if (VAR_OR_FUNCTION_DECL_P (t)
839 && DECL_EXTERNAL (t))
840 /* We have to stream externals in the block chain as
841 non-references. See also
842 tree-streamer-out.c:streamer_write_chain. */
843 DFS_write_tree (ob, expr_state, t, ref_p, false);
844 else
845 DFS_follow_tree_edge (t);
846
847 DFS_follow_tree_edge (BLOCK_SUPERCONTEXT (expr));
848
849 /* Follow BLOCK_ABSTRACT_ORIGIN for the limited cases we can
850 handle - those that represent inlined function scopes.
851 For the drop rest them on the floor instead of ICEing
852 in dwarf2out.c. */
853 if (inlined_function_outer_scope_p (expr))
854 {
855 tree ultimate_origin = block_ultimate_origin (expr);
856 DFS_follow_tree_edge (ultimate_origin);
857 }
858 /* Do not follow BLOCK_NONLOCALIZED_VARS. We cannot handle debug
859 information for early inlined BLOCKs so drop it on the floor instead
860 of ICEing in dwarf2out.c. */
861
862 /* BLOCK_FRAGMENT_ORIGIN and BLOCK_FRAGMENT_CHAIN is not live at LTO
863 streaming time. */
864
865 /* Do not output BLOCK_SUBBLOCKS. Instead on streaming-in this
866 list is re-constructed from BLOCK_SUPERCONTEXT. */
867 }
868
869 if (CODE_CONTAINS_STRUCT (code, TS_BINFO))
870 {
871 unsigned i;
872 tree t;
873
874 /* Note that the number of BINFO slots has already been emitted in
875 EXPR's header (see streamer_write_tree_header) because this length
876 is needed to build the empty BINFO node on the reader side. */
877 FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (expr), i, t)
878 DFS_follow_tree_edge (t);
879 DFS_follow_tree_edge (BINFO_OFFSET (expr));
880 DFS_follow_tree_edge (BINFO_VTABLE (expr));
881 DFS_follow_tree_edge (BINFO_VPTR_FIELD (expr));
882
883 /* The number of BINFO_BASE_ACCESSES has already been emitted in
884 EXPR's bitfield section. */
885 FOR_EACH_VEC_SAFE_ELT (BINFO_BASE_ACCESSES (expr), i, t)
886 DFS_follow_tree_edge (t);
887
888 /* Do not walk BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX
889 and BINFO_VPTR_INDEX; these are used by C++ FE only. */
890 }
891
892 if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
893 {
894 unsigned i;
895 tree index, value;
896
897 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (expr), i, index, value)
898 {
899 DFS_follow_tree_edge (index);
900 DFS_follow_tree_edge (value);
901 }
902 }
903
904 if (code == OMP_CLAUSE)
905 {
906 int i;
907 for (i = 0; i < omp_clause_num_ops[OMP_CLAUSE_CODE (expr)]; i++)
908 DFS_follow_tree_edge (OMP_CLAUSE_OPERAND (expr, i));
909 DFS_follow_tree_edge (OMP_CLAUSE_CHAIN (expr));
910 }
911
912 #undef DFS_follow_tree_edge
913 }
914
915 /* Return a hash value for the tree T.
916 CACHE holds hash values of trees outside current SCC. MAP, if non-NULL,
917 may hold hash values if trees inside current SCC. */
918
919 static hashval_t
920 hash_tree (struct streamer_tree_cache_d *cache, hash_map<tree, hashval_t> *map, tree t)
921 {
922 inchash::hash hstate;
923
924 #define visit(SIBLING) \
925 do { \
926 unsigned ix; \
927 if (!SIBLING) \
928 hstate.add_int (0); \
929 else if (streamer_tree_cache_lookup (cache, SIBLING, &ix)) \
930 hstate.add_int (streamer_tree_cache_get_hash (cache, ix)); \
931 else if (map) \
932 hstate.add_int (*map->get (SIBLING)); \
933 else \
934 hstate.add_int (1); \
935 } while (0)
936
937 /* Hash TS_BASE. */
938 enum tree_code code = TREE_CODE (t);
939 hstate.add_int (code);
940 if (!TYPE_P (t))
941 {
942 hstate.add_flag (TREE_SIDE_EFFECTS (t));
943 hstate.add_flag (TREE_CONSTANT (t));
944 hstate.add_flag (TREE_READONLY (t));
945 hstate.add_flag (TREE_PUBLIC (t));
946 }
947 hstate.add_flag (TREE_ADDRESSABLE (t));
948 hstate.add_flag (TREE_THIS_VOLATILE (t));
949 if (DECL_P (t))
950 hstate.add_flag (DECL_UNSIGNED (t));
951 else if (TYPE_P (t))
952 hstate.add_flag (TYPE_UNSIGNED (t));
953 if (TYPE_P (t))
954 hstate.add_flag (TYPE_ARTIFICIAL (t));
955 else
956 hstate.add_flag (TREE_NO_WARNING (t));
957 hstate.add_flag (TREE_NOTHROW (t));
958 hstate.add_flag (TREE_STATIC (t));
959 hstate.add_flag (TREE_PROTECTED (t));
960 hstate.add_flag (TREE_DEPRECATED (t));
961 if (code != TREE_BINFO)
962 hstate.add_flag (TREE_PRIVATE (t));
963 if (TYPE_P (t))
964 {
965 hstate.add_flag (AGGREGATE_TYPE_P (t)
966 ? TYPE_REVERSE_STORAGE_ORDER (t) : TYPE_SATURATING (t));
967 hstate.add_flag (TYPE_ADDR_SPACE (t));
968 }
969 else if (code == SSA_NAME)
970 hstate.add_flag (SSA_NAME_IS_DEFAULT_DEF (t));
971 hstate.commit_flag ();
972
973 if (CODE_CONTAINS_STRUCT (code, TS_INT_CST))
974 {
975 int i;
976 hstate.add_wide_int (TREE_INT_CST_NUNITS (t));
977 hstate.add_wide_int (TREE_INT_CST_EXT_NUNITS (t));
978 for (i = 0; i < TREE_INT_CST_NUNITS (t); i++)
979 hstate.add_wide_int (TREE_INT_CST_ELT (t, i));
980 }
981
982 if (CODE_CONTAINS_STRUCT (code, TS_REAL_CST))
983 {
984 REAL_VALUE_TYPE r = TREE_REAL_CST (t);
985 hstate.add_flag (r.cl);
986 hstate.add_flag (r.sign);
987 hstate.add_flag (r.signalling);
988 hstate.add_flag (r.canonical);
989 hstate.commit_flag ();
990 hstate.add_int (r.uexp);
991 hstate.add (r.sig, sizeof (r.sig));
992 }
993
994 if (CODE_CONTAINS_STRUCT (code, TS_FIXED_CST))
995 {
996 FIXED_VALUE_TYPE f = TREE_FIXED_CST (t);
997 hstate.add_int (f.mode);
998 hstate.add_int (f.data.low);
999 hstate.add_int (f.data.high);
1000 }
1001
1002 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
1003 {
1004 hstate.add_wide_int (DECL_MODE (t));
1005 hstate.add_flag (DECL_NONLOCAL (t));
1006 hstate.add_flag (DECL_VIRTUAL_P (t));
1007 hstate.add_flag (DECL_IGNORED_P (t));
1008 hstate.add_flag (DECL_ABSTRACT_P (t));
1009 hstate.add_flag (DECL_ARTIFICIAL (t));
1010 hstate.add_flag (DECL_USER_ALIGN (t));
1011 hstate.add_flag (DECL_PRESERVE_P (t));
1012 hstate.add_flag (DECL_EXTERNAL (t));
1013 hstate.add_flag (DECL_GIMPLE_REG_P (t));
1014 hstate.commit_flag ();
1015 hstate.add_int (DECL_ALIGN (t));
1016 if (code == LABEL_DECL)
1017 {
1018 hstate.add_int (EH_LANDING_PAD_NR (t));
1019 hstate.add_int (LABEL_DECL_UID (t));
1020 }
1021 else if (code == FIELD_DECL)
1022 {
1023 hstate.add_flag (DECL_PACKED (t));
1024 hstate.add_flag (DECL_NONADDRESSABLE_P (t));
1025 hstate.add_int (DECL_OFFSET_ALIGN (t));
1026 }
1027 else if (code == VAR_DECL)
1028 {
1029 hstate.add_flag (DECL_HAS_DEBUG_EXPR_P (t));
1030 hstate.add_flag (DECL_NONLOCAL_FRAME (t));
1031 }
1032 if (code == RESULT_DECL
1033 || code == PARM_DECL
1034 || code == VAR_DECL)
1035 {
1036 hstate.add_flag (DECL_BY_REFERENCE (t));
1037 if (code == VAR_DECL
1038 || code == PARM_DECL)
1039 hstate.add_flag (DECL_HAS_VALUE_EXPR_P (t));
1040 }
1041 hstate.commit_flag ();
1042 }
1043
1044 if (CODE_CONTAINS_STRUCT (code, TS_DECL_WRTL))
1045 hstate.add_int (DECL_REGISTER (t));
1046
1047 if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
1048 {
1049 hstate.add_flag (DECL_COMMON (t));
1050 hstate.add_flag (DECL_DLLIMPORT_P (t));
1051 hstate.add_flag (DECL_WEAK (t));
1052 hstate.add_flag (DECL_SEEN_IN_BIND_EXPR_P (t));
1053 hstate.add_flag (DECL_COMDAT (t));
1054 hstate.add_flag (DECL_VISIBILITY_SPECIFIED (t));
1055 hstate.add_int (DECL_VISIBILITY (t));
1056 if (code == VAR_DECL)
1057 {
1058 /* DECL_IN_TEXT_SECTION is set during final asm output only. */
1059 hstate.add_flag (DECL_HARD_REGISTER (t));
1060 hstate.add_flag (DECL_IN_CONSTANT_POOL (t));
1061 }
1062 if (TREE_CODE (t) == FUNCTION_DECL)
1063 {
1064 hstate.add_flag (DECL_FINAL_P (t));
1065 hstate.add_flag (DECL_CXX_CONSTRUCTOR_P (t));
1066 hstate.add_flag (DECL_CXX_DESTRUCTOR_P (t));
1067 }
1068 hstate.commit_flag ();
1069 }
1070
1071 if (CODE_CONTAINS_STRUCT (code, TS_FUNCTION_DECL))
1072 {
1073 hstate.add_int (DECL_BUILT_IN_CLASS (t));
1074 hstate.add_flag (DECL_STATIC_CONSTRUCTOR (t));
1075 hstate.add_flag (DECL_STATIC_DESTRUCTOR (t));
1076 hstate.add_flag (DECL_UNINLINABLE (t));
1077 hstate.add_flag (DECL_POSSIBLY_INLINED (t));
1078 hstate.add_flag (DECL_IS_NOVOPS (t));
1079 hstate.add_flag (DECL_IS_RETURNS_TWICE (t));
1080 hstate.add_flag (DECL_IS_MALLOC (t));
1081 hstate.add_flag (DECL_IS_OPERATOR_NEW (t));
1082 hstate.add_flag (DECL_DECLARED_INLINE_P (t));
1083 hstate.add_flag (DECL_STATIC_CHAIN (t));
1084 hstate.add_flag (DECL_NO_INLINE_WARNING_P (t));
1085 hstate.add_flag (DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (t));
1086 hstate.add_flag (DECL_NO_LIMIT_STACK (t));
1087 hstate.add_flag (DECL_DISREGARD_INLINE_LIMITS (t));
1088 hstate.add_flag (DECL_PURE_P (t));
1089 hstate.add_flag (DECL_LOOPING_CONST_OR_PURE_P (t));
1090 hstate.commit_flag ();
1091 if (DECL_BUILT_IN_CLASS (t) != NOT_BUILT_IN)
1092 hstate.add_int (DECL_FUNCTION_CODE (t));
1093 }
1094
1095 if (CODE_CONTAINS_STRUCT (code, TS_TYPE_COMMON))
1096 {
1097 hstate.add_wide_int (TYPE_MODE (t));
1098 hstate.add_flag (TYPE_STRING_FLAG (t));
1099 /* TYPE_NO_FORCE_BLK is private to stor-layout and need
1100 no streaming. */
1101 hstate.add_flag (TYPE_NEEDS_CONSTRUCTING (t));
1102 hstate.add_flag (TYPE_PACKED (t));
1103 hstate.add_flag (TYPE_RESTRICT (t));
1104 hstate.add_flag (TYPE_USER_ALIGN (t));
1105 hstate.add_flag (TYPE_READONLY (t));
1106 if (RECORD_OR_UNION_TYPE_P (t))
1107 {
1108 hstate.add_flag (TYPE_TRANSPARENT_AGGR (t));
1109 hstate.add_flag (TYPE_FINAL_P (t));
1110 }
1111 else if (code == ARRAY_TYPE)
1112 hstate.add_flag (TYPE_NONALIASED_COMPONENT (t));
1113 hstate.commit_flag ();
1114 hstate.add_int (TYPE_PRECISION (t));
1115 hstate.add_int (TYPE_ALIGN (t));
1116 }
1117
1118 if (CODE_CONTAINS_STRUCT (code, TS_TRANSLATION_UNIT_DECL))
1119 hstate.add (TRANSLATION_UNIT_LANGUAGE (t),
1120 strlen (TRANSLATION_UNIT_LANGUAGE (t)));
1121
1122 if (CODE_CONTAINS_STRUCT (code, TS_TARGET_OPTION)
1123 /* We don't stream these when passing things to a different target. */
1124 && !lto_stream_offload_p)
1125 hstate.add_wide_int (cl_target_option_hash (TREE_TARGET_OPTION (t)));
1126
1127 if (CODE_CONTAINS_STRUCT (code, TS_OPTIMIZATION))
1128 hstate.add_wide_int (cl_optimization_hash (TREE_OPTIMIZATION (t)));
1129
1130 if (CODE_CONTAINS_STRUCT (code, TS_IDENTIFIER))
1131 hstate.merge_hash (IDENTIFIER_HASH_VALUE (t));
1132
1133 if (CODE_CONTAINS_STRUCT (code, TS_STRING))
1134 hstate.add (TREE_STRING_POINTER (t), TREE_STRING_LENGTH (t));
1135
1136 if (CODE_CONTAINS_STRUCT (code, TS_TYPED))
1137 {
1138 if (code != IDENTIFIER_NODE)
1139 visit (TREE_TYPE (t));
1140 }
1141
1142 if (CODE_CONTAINS_STRUCT (code, TS_VECTOR))
1143 for (unsigned i = 0; i < VECTOR_CST_NELTS (t); ++i)
1144 visit (VECTOR_CST_ELT (t, i));
1145
1146 if (CODE_CONTAINS_STRUCT (code, TS_COMPLEX))
1147 {
1148 visit (TREE_REALPART (t));
1149 visit (TREE_IMAGPART (t));
1150 }
1151
1152 if (CODE_CONTAINS_STRUCT (code, TS_DECL_MINIMAL))
1153 {
1154 /* Drop names that were created for anonymous entities. */
1155 if (DECL_NAME (t)
1156 && TREE_CODE (DECL_NAME (t)) == IDENTIFIER_NODE
1157 && anon_aggrname_p (DECL_NAME (t)))
1158 ;
1159 else
1160 visit (DECL_NAME (t));
1161 if (DECL_FILE_SCOPE_P (t))
1162 ;
1163 else
1164 visit (DECL_CONTEXT (t));
1165 }
1166
1167 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
1168 {
1169 visit (DECL_SIZE (t));
1170 visit (DECL_SIZE_UNIT (t));
1171 visit (DECL_ATTRIBUTES (t));
1172 if ((code == VAR_DECL
1173 || code == PARM_DECL)
1174 && DECL_HAS_VALUE_EXPR_P (t))
1175 visit (DECL_VALUE_EXPR (t));
1176 if (code == VAR_DECL
1177 && DECL_HAS_DEBUG_EXPR_P (t))
1178 visit (DECL_DEBUG_EXPR (t));
1179 /* ??? Hash DECL_INITIAL as streamed. Needs the output-block to
1180 be able to call get_symbol_initial_value. */
1181 }
1182
1183 if (CODE_CONTAINS_STRUCT (code, TS_DECL_NON_COMMON))
1184 {
1185 if (code == TYPE_DECL)
1186 visit (DECL_ORIGINAL_TYPE (t));
1187 }
1188
1189 if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
1190 {
1191 if (DECL_ASSEMBLER_NAME_SET_P (t))
1192 visit (DECL_ASSEMBLER_NAME (t));
1193 }
1194
1195 if (CODE_CONTAINS_STRUCT (code, TS_FIELD_DECL))
1196 {
1197 visit (DECL_FIELD_OFFSET (t));
1198 visit (DECL_BIT_FIELD_TYPE (t));
1199 visit (DECL_BIT_FIELD_REPRESENTATIVE (t));
1200 visit (DECL_FIELD_BIT_OFFSET (t));
1201 visit (DECL_FCONTEXT (t));
1202 }
1203
1204 if (CODE_CONTAINS_STRUCT (code, TS_FUNCTION_DECL))
1205 {
1206 visit (DECL_VINDEX (t));
1207 visit (DECL_FUNCTION_PERSONALITY (t));
1208 visit (DECL_FUNCTION_SPECIFIC_TARGET (t));
1209 visit (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (t));
1210 }
1211
1212 if (CODE_CONTAINS_STRUCT (code, TS_TYPE_COMMON))
1213 {
1214 visit (TYPE_SIZE (t));
1215 visit (TYPE_SIZE_UNIT (t));
1216 visit (TYPE_ATTRIBUTES (t));
1217 visit (TYPE_NAME (t));
1218 visit (TYPE_MAIN_VARIANT (t));
1219 if (TYPE_FILE_SCOPE_P (t))
1220 ;
1221 else
1222 visit (TYPE_CONTEXT (t));
1223 visit (TYPE_STUB_DECL (t));
1224 }
1225
1226 if (CODE_CONTAINS_STRUCT (code, TS_TYPE_NON_COMMON))
1227 {
1228 if (code == ENUMERAL_TYPE)
1229 visit (TYPE_VALUES (t));
1230 else if (code == ARRAY_TYPE)
1231 visit (TYPE_DOMAIN (t));
1232 else if (RECORD_OR_UNION_TYPE_P (t))
1233 for (tree f = TYPE_FIELDS (t); f; f = TREE_CHAIN (f))
1234 visit (f);
1235 else if (code == FUNCTION_TYPE
1236 || code == METHOD_TYPE)
1237 visit (TYPE_ARG_TYPES (t));
1238 if (!POINTER_TYPE_P (t))
1239 visit (TYPE_MINVAL (t));
1240 visit (TYPE_MAXVAL (t));
1241 if (RECORD_OR_UNION_TYPE_P (t))
1242 visit (TYPE_BINFO (t));
1243 }
1244
1245 if (CODE_CONTAINS_STRUCT (code, TS_LIST))
1246 {
1247 visit (TREE_PURPOSE (t));
1248 visit (TREE_VALUE (t));
1249 visit (TREE_CHAIN (t));
1250 }
1251
1252 if (CODE_CONTAINS_STRUCT (code, TS_VEC))
1253 for (int i = 0; i < TREE_VEC_LENGTH (t); ++i)
1254 visit (TREE_VEC_ELT (t, i));
1255
1256 if (CODE_CONTAINS_STRUCT (code, TS_EXP))
1257 {
1258 hstate.add_wide_int (TREE_OPERAND_LENGTH (t));
1259 for (int i = 0; i < TREE_OPERAND_LENGTH (t); ++i)
1260 visit (TREE_OPERAND (t, i));
1261 }
1262
1263 if (CODE_CONTAINS_STRUCT (code, TS_BINFO))
1264 {
1265 unsigned i;
1266 tree b;
1267 FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (t), i, b)
1268 visit (b);
1269 visit (BINFO_OFFSET (t));
1270 visit (BINFO_VTABLE (t));
1271 visit (BINFO_VPTR_FIELD (t));
1272 FOR_EACH_VEC_SAFE_ELT (BINFO_BASE_ACCESSES (t), i, b)
1273 visit (b);
1274 /* Do not walk BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX
1275 and BINFO_VPTR_INDEX; these are used by C++ FE only. */
1276 }
1277
1278 if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
1279 {
1280 unsigned i;
1281 tree index, value;
1282 hstate.add_wide_int (CONSTRUCTOR_NELTS (t));
1283 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t), i, index, value)
1284 {
1285 visit (index);
1286 visit (value);
1287 }
1288 }
1289
1290 if (code == OMP_CLAUSE)
1291 {
1292 int i;
1293 HOST_WIDE_INT val;
1294
1295 hstate.add_wide_int (OMP_CLAUSE_CODE (t));
1296 switch (OMP_CLAUSE_CODE (t))
1297 {
1298 case OMP_CLAUSE_DEFAULT:
1299 val = OMP_CLAUSE_DEFAULT_KIND (t);
1300 break;
1301 case OMP_CLAUSE_SCHEDULE:
1302 val = OMP_CLAUSE_SCHEDULE_KIND (t);
1303 break;
1304 case OMP_CLAUSE_DEPEND:
1305 val = OMP_CLAUSE_DEPEND_KIND (t);
1306 break;
1307 case OMP_CLAUSE_MAP:
1308 val = OMP_CLAUSE_MAP_KIND (t);
1309 break;
1310 case OMP_CLAUSE_PROC_BIND:
1311 val = OMP_CLAUSE_PROC_BIND_KIND (t);
1312 break;
1313 case OMP_CLAUSE_REDUCTION:
1314 val = OMP_CLAUSE_REDUCTION_CODE (t);
1315 break;
1316 default:
1317 val = 0;
1318 break;
1319 }
1320 hstate.add_wide_int (val);
1321 for (i = 0; i < omp_clause_num_ops[OMP_CLAUSE_CODE (t)]; i++)
1322 visit (OMP_CLAUSE_OPERAND (t, i));
1323 visit (OMP_CLAUSE_CHAIN (t));
1324 }
1325
1326 return hstate.end ();
1327
1328 #undef visit
1329 }
1330
1331 /* Compare two SCC entries by their hash value for qsorting them. */
1332
1333 int
1334 DFS::scc_entry_compare (const void *p1_, const void *p2_)
1335 {
1336 const scc_entry *p1 = (const scc_entry *) p1_;
1337 const scc_entry *p2 = (const scc_entry *) p2_;
1338 if (p1->hash < p2->hash)
1339 return -1;
1340 else if (p1->hash > p2->hash)
1341 return 1;
1342 return 0;
1343 }
1344
1345 /* Return a hash value for the SCC on the SCC stack from FIRST with SIZE.
1346 THIS_REF_P and REF_P are as passed to lto_output_tree for FIRST. */
1347
1348 hashval_t
1349 DFS::hash_scc (struct output_block *ob, unsigned first, unsigned size,
1350 bool ref_p, bool this_ref_p)
1351 {
1352 unsigned int last_classes = 0, iterations = 0;
1353
1354 /* Compute hash values for the SCC members. */
1355 for (unsigned i = 0; i < size; ++i)
1356 sccstack[first+i].hash
1357 = hash_tree (ob->writer_cache, NULL, sccstack[first+i].t);
1358
1359 if (size == 1)
1360 return sccstack[first].hash;
1361
1362 /* We aim to get unique hash for every tree within SCC and compute hash value
1363 of the whole SCC by combining all values together in a stable (entry-point
1364 independent) order. This guarantees that the same SCC regions within
1365 different translation units will get the same hash values and therefore
1366 will be merged at WPA time.
1367
1368 Often the hashes are already unique. In that case we compute the SCC hash
1369 by combining individual hash values in an increasing order.
1370
1371 If there are duplicates, we seek at least one tree with unique hash (and
1372 pick one with minimal hash and this property). Then we obtain a stable
1373 order by DFS walk starting from this unique tree and then use the index
1374 within this order to make individual hash values unique.
1375
1376 If there is no tree with unique hash, we iteratively propagate the hash
1377 values across the internal edges of SCC. This usually quickly leads
1378 to unique hashes. Consider, for example, an SCC containing two pointers
1379 that are identical except for the types they point to and assume that
1380 these types are also part of the SCC. The propagation will add the
1381 points-to type information into their hash values. */
1382 do
1383 {
1384 /* Sort the SCC so we can easily check for uniqueness. */
1385 qsort (&sccstack[first], size, sizeof (scc_entry), scc_entry_compare);
1386
1387 unsigned int classes = 1;
1388 int firstunique = -1;
1389
1390 /* Find the tree with lowest unique hash (if it exists) and compute
1391 the number of equivalence classes. */
1392 if (sccstack[first].hash != sccstack[first+1].hash)
1393 firstunique = 0;
1394 for (unsigned i = 1; i < size; ++i)
1395 if (sccstack[first+i-1].hash != sccstack[first+i].hash)
1396 {
1397 classes++;
1398 if (firstunique == -1
1399 && (i == size - 1
1400 || sccstack[first+i+1].hash != sccstack[first+i].hash))
1401 firstunique = i;
1402 }
1403
1404 /* If we found a tree with unique hash, stop the iteration. */
1405 if (firstunique != -1
1406 /* Also terminate if we run out of iterations or if the number of
1407 equivalence classes is no longer increasing.
1408 For example a cyclic list of trees that are all equivalent will
1409 never have unique entry point; we however do not build such SCCs
1410 in our IL. */
1411 || classes <= last_classes || iterations > 16)
1412 {
1413 hashval_t scc_hash;
1414
1415 /* If some hashes are not unique (CLASSES != SIZE), use the DFS walk
1416 starting from FIRSTUNIQUE to obtain a stable order. */
1417 if (classes != size && firstunique != -1)
1418 {
1419 hash_map <tree, hashval_t> map(size*2);
1420
1421 /* Store hash values into a map, so we can associate them with
1422 the reordered SCC. */
1423 for (unsigned i = 0; i < size; ++i)
1424 map.put (sccstack[first+i].t, sccstack[first+i].hash);
1425
1426 DFS again (ob, sccstack[first+firstunique].t, ref_p, this_ref_p,
1427 true);
1428 gcc_assert (again.sccstack.length () == size);
1429
1430 memcpy (sccstack.address () + first,
1431 again.sccstack.address (),
1432 sizeof (scc_entry) * size);
1433
1434 /* Update hash values of individual members by hashing in the
1435 index within the stable order. This ensures uniqueness.
1436 Also compute the SCC hash by mixing in all hash values in
1437 the stable order we obtained. */
1438 sccstack[first].hash = *map.get (sccstack[first].t);
1439 scc_hash = sccstack[first].hash;
1440 for (unsigned i = 1; i < size; ++i)
1441 {
1442 sccstack[first+i].hash
1443 = iterative_hash_hashval_t (i,
1444 *map.get (sccstack[first+i].t));
1445 scc_hash
1446 = iterative_hash_hashval_t (scc_hash,
1447 sccstack[first+i].hash);
1448 }
1449 }
1450 /* If we got a unique hash value for each tree, then sort already
1451 ensured entry-point independent order. Only compute the final
1452 SCC hash.
1453
1454 If we failed to find the unique entry point, we go by the same
1455 route. We will eventually introduce unwanted hash conflicts. */
1456 else
1457 {
1458 scc_hash = sccstack[first].hash;
1459 for (unsigned i = 1; i < size; ++i)
1460 scc_hash
1461 = iterative_hash_hashval_t (scc_hash, sccstack[first+i].hash);
1462
1463 /* We cannot 100% guarantee that the hash won't conflict so as
1464 to make it impossible to find a unique hash. This however
1465 should be an extremely rare case. ICE for now so possible
1466 issues are found and evaluated. */
1467 gcc_checking_assert (classes == size);
1468 }
1469
1470 /* To avoid conflicts across SCCs, iteratively hash the whole SCC
1471 hash into the hash of each element. */
1472 for (unsigned i = 0; i < size; ++i)
1473 sccstack[first+i].hash
1474 = iterative_hash_hashval_t (sccstack[first+i].hash, scc_hash);
1475 return scc_hash;
1476 }
1477
1478 last_classes = classes;
1479 iterations++;
1480
1481 /* We failed to identify the entry point; propagate hash values across
1482 the edges. */
1483 hash_map <tree, hashval_t> map(size*2);
1484
1485 for (unsigned i = 0; i < size; ++i)
1486 map.put (sccstack[first+i].t, sccstack[first+i].hash);
1487
1488 for (unsigned i = 0; i < size; i++)
1489 sccstack[first+i].hash
1490 = hash_tree (ob->writer_cache, &map, sccstack[first+i].t);
1491 }
1492 while (true);
1493 }
1494
1495 /* DFS walk EXPR and stream SCCs of tree bodies if they are not
1496 already in the streamer cache. Main routine called for
1497 each visit of EXPR. */
1498
1499 void
1500 DFS::DFS_write_tree (struct output_block *ob, sccs *from_state,
1501 tree expr, bool ref_p, bool this_ref_p)
1502 {
1503 /* Handle special cases. */
1504 if (expr == NULL_TREE)
1505 return;
1506
1507 /* Do not DFS walk into indexable trees. */
1508 if (this_ref_p && tree_is_indexable (expr))
1509 return;
1510
1511 /* Check if we already streamed EXPR. */
1512 if (streamer_tree_cache_lookup (ob->writer_cache, expr, NULL))
1513 return;
1514
1515 worklist w;
1516 w.expr = expr;
1517 w.from_state = from_state;
1518 w.cstate = NULL;
1519 w.ref_p = ref_p;
1520 w.this_ref_p = this_ref_p;
1521 worklist_vec.safe_push (w);
1522 }
1523
1524
1525 /* Emit the physical representation of tree node EXPR to output block OB.
1526 If THIS_REF_P is true, the leaves of EXPR are emitted as references via
1527 lto_output_tree_ref. REF_P is used for streaming siblings of EXPR. */
1528
1529 void
1530 lto_output_tree (struct output_block *ob, tree expr,
1531 bool ref_p, bool this_ref_p)
1532 {
1533 unsigned ix;
1534 bool existed_p;
1535
1536 if (expr == NULL_TREE)
1537 {
1538 streamer_write_record_start (ob, LTO_null);
1539 return;
1540 }
1541
1542 if (this_ref_p && tree_is_indexable (expr))
1543 {
1544 lto_output_tree_ref (ob, expr);
1545 return;
1546 }
1547
1548 existed_p = streamer_tree_cache_lookup (ob->writer_cache, expr, &ix);
1549 if (existed_p)
1550 {
1551 /* If a node has already been streamed out, make sure that
1552 we don't write it more than once. Otherwise, the reader
1553 will instantiate two different nodes for the same object. */
1554 streamer_write_record_start (ob, LTO_tree_pickle_reference);
1555 streamer_write_uhwi (ob, ix);
1556 streamer_write_enum (ob->main_stream, LTO_tags, LTO_NUM_TAGS,
1557 lto_tree_code_to_tag (TREE_CODE (expr)));
1558 lto_stats.num_pickle_refs_output++;
1559 }
1560 else
1561 {
1562 /* This is the first time we see EXPR, write all reachable
1563 trees to OB. */
1564 static bool in_dfs_walk;
1565
1566 /* Protect against recursion which means disconnect between
1567 what tree edges we walk in the DFS walk and what edges
1568 we stream out. */
1569 gcc_assert (!in_dfs_walk);
1570
1571 /* Start the DFS walk. */
1572 /* Save ob state ... */
1573 /* let's see ... */
1574 in_dfs_walk = true;
1575 DFS (ob, expr, ref_p, this_ref_p, false);
1576 in_dfs_walk = false;
1577
1578 /* Finally append a reference to the tree we were writing.
1579 ??? If expr ended up as a singleton we could have
1580 inlined it here and avoid outputting a reference. */
1581 existed_p = streamer_tree_cache_lookup (ob->writer_cache, expr, &ix);
1582 gcc_assert (existed_p);
1583 streamer_write_record_start (ob, LTO_tree_pickle_reference);
1584 streamer_write_uhwi (ob, ix);
1585 streamer_write_enum (ob->main_stream, LTO_tags, LTO_NUM_TAGS,
1586 lto_tree_code_to_tag (TREE_CODE (expr)));
1587 lto_stats.num_pickle_refs_output++;
1588 }
1589 }
1590
1591
1592 /* Output to OB a list of try/catch handlers starting with FIRST. */
1593
1594 static void
1595 output_eh_try_list (struct output_block *ob, eh_catch first)
1596 {
1597 eh_catch n;
1598
1599 for (n = first; n; n = n->next_catch)
1600 {
1601 streamer_write_record_start (ob, LTO_eh_catch);
1602 stream_write_tree (ob, n->type_list, true);
1603 stream_write_tree (ob, n->filter_list, true);
1604 stream_write_tree (ob, n->label, true);
1605 }
1606
1607 streamer_write_record_start (ob, LTO_null);
1608 }
1609
1610
1611 /* Output EH region R in function FN to OB. CURR_RN is the slot index
1612 that is being emitted in FN->EH->REGION_ARRAY. This is used to
1613 detect EH region sharing. */
1614
1615 static void
1616 output_eh_region (struct output_block *ob, eh_region r)
1617 {
1618 enum LTO_tags tag;
1619
1620 if (r == NULL)
1621 {
1622 streamer_write_record_start (ob, LTO_null);
1623 return;
1624 }
1625
1626 if (r->type == ERT_CLEANUP)
1627 tag = LTO_ert_cleanup;
1628 else if (r->type == ERT_TRY)
1629 tag = LTO_ert_try;
1630 else if (r->type == ERT_ALLOWED_EXCEPTIONS)
1631 tag = LTO_ert_allowed_exceptions;
1632 else if (r->type == ERT_MUST_NOT_THROW)
1633 tag = LTO_ert_must_not_throw;
1634 else
1635 gcc_unreachable ();
1636
1637 streamer_write_record_start (ob, tag);
1638 streamer_write_hwi (ob, r->index);
1639
1640 if (r->outer)
1641 streamer_write_hwi (ob, r->outer->index);
1642 else
1643 streamer_write_zero (ob);
1644
1645 if (r->inner)
1646 streamer_write_hwi (ob, r->inner->index);
1647 else
1648 streamer_write_zero (ob);
1649
1650 if (r->next_peer)
1651 streamer_write_hwi (ob, r->next_peer->index);
1652 else
1653 streamer_write_zero (ob);
1654
1655 if (r->type == ERT_TRY)
1656 {
1657 output_eh_try_list (ob, r->u.eh_try.first_catch);
1658 }
1659 else if (r->type == ERT_ALLOWED_EXCEPTIONS)
1660 {
1661 stream_write_tree (ob, r->u.allowed.type_list, true);
1662 stream_write_tree (ob, r->u.allowed.label, true);
1663 streamer_write_uhwi (ob, r->u.allowed.filter);
1664 }
1665 else if (r->type == ERT_MUST_NOT_THROW)
1666 {
1667 stream_write_tree (ob, r->u.must_not_throw.failure_decl, true);
1668 bitpack_d bp = bitpack_create (ob->main_stream);
1669 stream_output_location (ob, &bp, r->u.must_not_throw.failure_loc);
1670 streamer_write_bitpack (&bp);
1671 }
1672
1673 if (r->landing_pads)
1674 streamer_write_hwi (ob, r->landing_pads->index);
1675 else
1676 streamer_write_zero (ob);
1677 }
1678
1679
1680 /* Output landing pad LP to OB. */
1681
1682 static void
1683 output_eh_lp (struct output_block *ob, eh_landing_pad lp)
1684 {
1685 if (lp == NULL)
1686 {
1687 streamer_write_record_start (ob, LTO_null);
1688 return;
1689 }
1690
1691 streamer_write_record_start (ob, LTO_eh_landing_pad);
1692 streamer_write_hwi (ob, lp->index);
1693 if (lp->next_lp)
1694 streamer_write_hwi (ob, lp->next_lp->index);
1695 else
1696 streamer_write_zero (ob);
1697
1698 if (lp->region)
1699 streamer_write_hwi (ob, lp->region->index);
1700 else
1701 streamer_write_zero (ob);
1702
1703 stream_write_tree (ob, lp->post_landing_pad, true);
1704 }
1705
1706
1707 /* Output the existing eh_table to OB. */
1708
1709 static void
1710 output_eh_regions (struct output_block *ob, struct function *fn)
1711 {
1712 if (fn->eh && fn->eh->region_tree)
1713 {
1714 unsigned i;
1715 eh_region eh;
1716 eh_landing_pad lp;
1717 tree ttype;
1718
1719 streamer_write_record_start (ob, LTO_eh_table);
1720
1721 /* Emit the index of the root of the EH region tree. */
1722 streamer_write_hwi (ob, fn->eh->region_tree->index);
1723
1724 /* Emit all the EH regions in the region array. */
1725 streamer_write_hwi (ob, vec_safe_length (fn->eh->region_array));
1726 FOR_EACH_VEC_SAFE_ELT (fn->eh->region_array, i, eh)
1727 output_eh_region (ob, eh);
1728
1729 /* Emit all landing pads. */
1730 streamer_write_hwi (ob, vec_safe_length (fn->eh->lp_array));
1731 FOR_EACH_VEC_SAFE_ELT (fn->eh->lp_array, i, lp)
1732 output_eh_lp (ob, lp);
1733
1734 /* Emit all the runtime type data. */
1735 streamer_write_hwi (ob, vec_safe_length (fn->eh->ttype_data));
1736 FOR_EACH_VEC_SAFE_ELT (fn->eh->ttype_data, i, ttype)
1737 stream_write_tree (ob, ttype, true);
1738
1739 /* Emit the table of action chains. */
1740 if (targetm.arm_eabi_unwinder)
1741 {
1742 tree t;
1743 streamer_write_hwi (ob, vec_safe_length (fn->eh->ehspec_data.arm_eabi));
1744 FOR_EACH_VEC_SAFE_ELT (fn->eh->ehspec_data.arm_eabi, i, t)
1745 stream_write_tree (ob, t, true);
1746 }
1747 else
1748 {
1749 uchar c;
1750 streamer_write_hwi (ob, vec_safe_length (fn->eh->ehspec_data.other));
1751 FOR_EACH_VEC_SAFE_ELT (fn->eh->ehspec_data.other, i, c)
1752 streamer_write_char_stream (ob->main_stream, c);
1753 }
1754 }
1755
1756 /* The LTO_null either terminates the record or indicates that there
1757 are no eh_records at all. */
1758 streamer_write_record_start (ob, LTO_null);
1759 }
1760
1761
1762 /* Output all of the active ssa names to the ssa_names stream. */
1763
1764 static void
1765 output_ssa_names (struct output_block *ob, struct function *fn)
1766 {
1767 unsigned int i, len;
1768
1769 len = vec_safe_length (SSANAMES (fn));
1770 streamer_write_uhwi (ob, len);
1771
1772 for (i = 1; i < len; i++)
1773 {
1774 tree ptr = (*SSANAMES (fn))[i];
1775
1776 if (ptr == NULL_TREE
1777 || SSA_NAME_IN_FREE_LIST (ptr)
1778 || virtual_operand_p (ptr))
1779 continue;
1780
1781 streamer_write_uhwi (ob, i);
1782 streamer_write_char_stream (ob->main_stream,
1783 SSA_NAME_IS_DEFAULT_DEF (ptr));
1784 if (SSA_NAME_VAR (ptr))
1785 stream_write_tree (ob, SSA_NAME_VAR (ptr), true);
1786 else
1787 /* ??? This drops SSA_NAME_IDENTIFIER on the floor. */
1788 stream_write_tree (ob, TREE_TYPE (ptr), true);
1789 }
1790
1791 streamer_write_zero (ob);
1792 }
1793
1794
1795 /* Output a wide-int. */
1796
1797 static void
1798 streamer_write_wi (struct output_block *ob,
1799 const widest_int &w)
1800 {
1801 int len = w.get_len ();
1802
1803 streamer_write_uhwi (ob, w.get_precision ());
1804 streamer_write_uhwi (ob, len);
1805 for (int i = 0; i < len; i++)
1806 streamer_write_hwi (ob, w.elt (i));
1807 }
1808
1809
1810 /* Output the cfg. */
1811
1812 static void
1813 output_cfg (struct output_block *ob, struct function *fn)
1814 {
1815 struct lto_output_stream *tmp_stream = ob->main_stream;
1816 basic_block bb;
1817
1818 ob->main_stream = ob->cfg_stream;
1819
1820 streamer_write_enum (ob->main_stream, profile_status_d, PROFILE_LAST,
1821 profile_status_for_fn (fn));
1822
1823 /* Output the number of the highest basic block. */
1824 streamer_write_uhwi (ob, last_basic_block_for_fn (fn));
1825
1826 FOR_ALL_BB_FN (bb, fn)
1827 {
1828 edge_iterator ei;
1829 edge e;
1830
1831 streamer_write_hwi (ob, bb->index);
1832
1833 /* Output the successors and the edge flags. */
1834 streamer_write_uhwi (ob, EDGE_COUNT (bb->succs));
1835 FOR_EACH_EDGE (e, ei, bb->succs)
1836 {
1837 streamer_write_uhwi (ob, e->dest->index);
1838 streamer_write_hwi (ob, e->probability);
1839 streamer_write_gcov_count (ob, e->count);
1840 streamer_write_uhwi (ob, e->flags);
1841 }
1842 }
1843
1844 streamer_write_hwi (ob, -1);
1845
1846 bb = ENTRY_BLOCK_PTR_FOR_FN (cfun);
1847 while (bb->next_bb)
1848 {
1849 streamer_write_hwi (ob, bb->next_bb->index);
1850 bb = bb->next_bb;
1851 }
1852
1853 streamer_write_hwi (ob, -1);
1854
1855 /* ??? The cfgloop interface is tied to cfun. */
1856 gcc_assert (cfun == fn);
1857
1858 /* Output the number of loops. */
1859 streamer_write_uhwi (ob, number_of_loops (fn));
1860
1861 /* Output each loop, skipping the tree root which has number zero. */
1862 for (unsigned i = 1; i < number_of_loops (fn); ++i)
1863 {
1864 struct loop *loop = get_loop (fn, i);
1865
1866 /* Write the index of the loop header. That's enough to rebuild
1867 the loop tree on the reader side. Stream -1 for an unused
1868 loop entry. */
1869 if (!loop)
1870 {
1871 streamer_write_hwi (ob, -1);
1872 continue;
1873 }
1874 else
1875 streamer_write_hwi (ob, loop->header->index);
1876
1877 /* Write everything copy_loop_info copies. */
1878 streamer_write_enum (ob->main_stream,
1879 loop_estimation, EST_LAST, loop->estimate_state);
1880 streamer_write_hwi (ob, loop->any_upper_bound);
1881 if (loop->any_upper_bound)
1882 streamer_write_wi (ob, loop->nb_iterations_upper_bound);
1883 streamer_write_hwi (ob, loop->any_estimate);
1884 if (loop->any_estimate)
1885 streamer_write_wi (ob, loop->nb_iterations_estimate);
1886
1887 /* Write OMP SIMD related info. */
1888 streamer_write_hwi (ob, loop->safelen);
1889 streamer_write_hwi (ob, loop->dont_vectorize);
1890 streamer_write_hwi (ob, loop->force_vectorize);
1891 stream_write_tree (ob, loop->simduid, true);
1892 }
1893
1894 ob->main_stream = tmp_stream;
1895 }
1896
1897
1898 /* Create the header in the file using OB. If the section type is for
1899 a function, set FN to the decl for that function. */
1900
1901 void
1902 produce_asm (struct output_block *ob, tree fn)
1903 {
1904 enum lto_section_type section_type = ob->section_type;
1905 struct lto_function_header header;
1906 char *section_name;
1907
1908 if (section_type == LTO_section_function_body)
1909 {
1910 const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fn));
1911 section_name = lto_get_section_name (section_type, name, NULL);
1912 }
1913 else
1914 section_name = lto_get_section_name (section_type, NULL, NULL);
1915
1916 lto_begin_section (section_name, !flag_wpa);
1917 free (section_name);
1918
1919 /* The entire header is stream computed here. */
1920 memset (&header, 0, sizeof (struct lto_function_header));
1921
1922 /* Write the header. */
1923 header.major_version = LTO_major_version;
1924 header.minor_version = LTO_minor_version;
1925
1926 if (section_type == LTO_section_function_body)
1927 header.cfg_size = ob->cfg_stream->total_size;
1928 header.main_size = ob->main_stream->total_size;
1929 header.string_size = ob->string_stream->total_size;
1930 lto_write_data (&header, sizeof header);
1931
1932 /* Put all of the gimple and the string table out the asm file as a
1933 block of text. */
1934 if (section_type == LTO_section_function_body)
1935 lto_write_stream (ob->cfg_stream);
1936 lto_write_stream (ob->main_stream);
1937 lto_write_stream (ob->string_stream);
1938
1939 lto_end_section ();
1940 }
1941
1942
1943 /* Output the base body of struct function FN using output block OB. */
1944
1945 static void
1946 output_struct_function_base (struct output_block *ob, struct function *fn)
1947 {
1948 struct bitpack_d bp;
1949 unsigned i;
1950 tree t;
1951
1952 /* Output the static chain and non-local goto save area. */
1953 stream_write_tree (ob, fn->static_chain_decl, true);
1954 stream_write_tree (ob, fn->nonlocal_goto_save_area, true);
1955
1956 /* Output all the local variables in the function. */
1957 streamer_write_hwi (ob, vec_safe_length (fn->local_decls));
1958 FOR_EACH_VEC_SAFE_ELT (fn->local_decls, i, t)
1959 stream_write_tree (ob, t, true);
1960
1961 /* Output current IL state of the function. */
1962 streamer_write_uhwi (ob, fn->curr_properties);
1963
1964 /* Write all the attributes for FN. */
1965 bp = bitpack_create (ob->main_stream);
1966 bp_pack_value (&bp, fn->is_thunk, 1);
1967 bp_pack_value (&bp, fn->has_local_explicit_reg_vars, 1);
1968 bp_pack_value (&bp, fn->returns_pcc_struct, 1);
1969 bp_pack_value (&bp, fn->returns_struct, 1);
1970 bp_pack_value (&bp, fn->can_throw_non_call_exceptions, 1);
1971 bp_pack_value (&bp, fn->can_delete_dead_exceptions, 1);
1972 bp_pack_value (&bp, fn->always_inline_functions_inlined, 1);
1973 bp_pack_value (&bp, fn->after_inlining, 1);
1974 bp_pack_value (&bp, fn->stdarg, 1);
1975 bp_pack_value (&bp, fn->has_nonlocal_label, 1);
1976 bp_pack_value (&bp, fn->calls_alloca, 1);
1977 bp_pack_value (&bp, fn->calls_setjmp, 1);
1978 bp_pack_value (&bp, fn->has_force_vectorize_loops, 1);
1979 bp_pack_value (&bp, fn->has_simduid_loops, 1);
1980 bp_pack_value (&bp, fn->va_list_fpr_size, 8);
1981 bp_pack_value (&bp, fn->va_list_gpr_size, 8);
1982 bp_pack_value (&bp, fn->last_clique, sizeof (short) * 8);
1983
1984 /* Output the function start and end loci. */
1985 stream_output_location (ob, &bp, fn->function_start_locus);
1986 stream_output_location (ob, &bp, fn->function_end_locus);
1987
1988 streamer_write_bitpack (&bp);
1989 }
1990
1991
1992 /* Output the body of function NODE->DECL. */
1993
1994 static void
1995 output_function (struct cgraph_node *node)
1996 {
1997 tree function;
1998 struct function *fn;
1999 basic_block bb;
2000 struct output_block *ob;
2001
2002 function = node->decl;
2003 fn = DECL_STRUCT_FUNCTION (function);
2004 ob = create_output_block (LTO_section_function_body);
2005
2006 clear_line_info (ob);
2007 ob->symbol = node;
2008
2009 gcc_assert (current_function_decl == NULL_TREE && cfun == NULL);
2010
2011 /* Set current_function_decl and cfun. */
2012 push_cfun (fn);
2013
2014 /* Make string 0 be a NULL string. */
2015 streamer_write_char_stream (ob->string_stream, 0);
2016
2017 streamer_write_record_start (ob, LTO_function);
2018
2019 /* Output decls for parameters and args. */
2020 stream_write_tree (ob, DECL_RESULT (function), true);
2021 streamer_write_chain (ob, DECL_ARGUMENTS (function), true);
2022
2023 /* Output DECL_INITIAL for the function, which contains the tree of
2024 lexical scopes. */
2025 stream_write_tree (ob, DECL_INITIAL (function), true);
2026
2027 /* We also stream abstract functions where we stream only stuff needed for
2028 debug info. */
2029 if (gimple_has_body_p (function))
2030 {
2031 streamer_write_uhwi (ob, 1);
2032 output_struct_function_base (ob, fn);
2033
2034 /* Output all the SSA names used in the function. */
2035 output_ssa_names (ob, fn);
2036
2037 /* Output any exception handling regions. */
2038 output_eh_regions (ob, fn);
2039
2040
2041 /* We will renumber the statements. The code that does this uses
2042 the same ordering that we use for serializing them so we can use
2043 the same code on the other end and not have to write out the
2044 statement numbers. We do not assign UIDs to PHIs here because
2045 virtual PHIs get re-computed on-the-fly which would make numbers
2046 inconsistent. */
2047 set_gimple_stmt_max_uid (cfun, 0);
2048 FOR_ALL_BB_FN (bb, cfun)
2049 {
2050 for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi);
2051 gsi_next (&gsi))
2052 {
2053 gphi *stmt = gsi.phi ();
2054
2055 /* Virtual PHIs are not going to be streamed. */
2056 if (!virtual_operand_p (gimple_phi_result (stmt)))
2057 gimple_set_uid (stmt, inc_gimple_stmt_max_uid (cfun));
2058 }
2059 for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi);
2060 gsi_next (&gsi))
2061 {
2062 gimple *stmt = gsi_stmt (gsi);
2063 gimple_set_uid (stmt, inc_gimple_stmt_max_uid (cfun));
2064 }
2065 }
2066 /* To avoid keeping duplicate gimple IDs in the statements, renumber
2067 virtual phis now. */
2068 FOR_ALL_BB_FN (bb, cfun)
2069 {
2070 for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi);
2071 gsi_next (&gsi))
2072 {
2073 gphi *stmt = gsi.phi ();
2074 if (virtual_operand_p (gimple_phi_result (stmt)))
2075 gimple_set_uid (stmt, inc_gimple_stmt_max_uid (cfun));
2076 }
2077 }
2078
2079 /* Output the code for the function. */
2080 FOR_ALL_BB_FN (bb, fn)
2081 output_bb (ob, bb, fn);
2082
2083 /* The terminator for this function. */
2084 streamer_write_record_start (ob, LTO_null);
2085
2086 output_cfg (ob, fn);
2087
2088 pop_cfun ();
2089 }
2090 else
2091 streamer_write_uhwi (ob, 0);
2092
2093 /* Create a section to hold the pickled output of this function. */
2094 produce_asm (ob, function);
2095
2096 destroy_output_block (ob);
2097 }
2098
2099 /* Output the body of function NODE->DECL. */
2100
2101 static void
2102 output_constructor (struct varpool_node *node)
2103 {
2104 tree var = node->decl;
2105 struct output_block *ob;
2106
2107 ob = create_output_block (LTO_section_function_body);
2108
2109 clear_line_info (ob);
2110 ob->symbol = node;
2111
2112 /* Make string 0 be a NULL string. */
2113 streamer_write_char_stream (ob->string_stream, 0);
2114
2115 /* Output DECL_INITIAL for the function, which contains the tree of
2116 lexical scopes. */
2117 stream_write_tree (ob, DECL_INITIAL (var), true);
2118
2119 /* Create a section to hold the pickled output of this function. */
2120 produce_asm (ob, var);
2121
2122 destroy_output_block (ob);
2123 }
2124
2125
2126 /* Emit toplevel asms. */
2127
2128 void
2129 lto_output_toplevel_asms (void)
2130 {
2131 struct output_block *ob;
2132 struct asm_node *can;
2133 char *section_name;
2134 struct lto_simple_header_with_strings header;
2135
2136 if (!symtab->first_asm_symbol ())
2137 return;
2138
2139 ob = create_output_block (LTO_section_asm);
2140
2141 /* Make string 0 be a NULL string. */
2142 streamer_write_char_stream (ob->string_stream, 0);
2143
2144 for (can = symtab->first_asm_symbol (); can; can = can->next)
2145 {
2146 streamer_write_string_cst (ob, ob->main_stream, can->asm_str);
2147 streamer_write_hwi (ob, can->order);
2148 }
2149
2150 streamer_write_string_cst (ob, ob->main_stream, NULL_TREE);
2151
2152 section_name = lto_get_section_name (LTO_section_asm, NULL, NULL);
2153 lto_begin_section (section_name, !flag_wpa);
2154 free (section_name);
2155
2156 /* The entire header stream is computed here. */
2157 memset (&header, 0, sizeof (header));
2158
2159 /* Write the header. */
2160 header.major_version = LTO_major_version;
2161 header.minor_version = LTO_minor_version;
2162
2163 header.main_size = ob->main_stream->total_size;
2164 header.string_size = ob->string_stream->total_size;
2165 lto_write_data (&header, sizeof header);
2166
2167 /* Put all of the gimple and the string table out the asm file as a
2168 block of text. */
2169 lto_write_stream (ob->main_stream);
2170 lto_write_stream (ob->string_stream);
2171
2172 lto_end_section ();
2173
2174 destroy_output_block (ob);
2175 }
2176
2177
2178 /* Copy the function body or variable constructor of NODE without deserializing. */
2179
2180 static void
2181 copy_function_or_variable (struct symtab_node *node)
2182 {
2183 tree function = node->decl;
2184 struct lto_file_decl_data *file_data = node->lto_file_data;
2185 const char *data;
2186 size_t len;
2187 const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (function));
2188 char *section_name =
2189 lto_get_section_name (LTO_section_function_body, name, NULL);
2190 size_t i, j;
2191 struct lto_in_decl_state *in_state;
2192 struct lto_out_decl_state *out_state = lto_get_out_decl_state ();
2193
2194 lto_begin_section (section_name, false);
2195 free (section_name);
2196
2197 /* We may have renamed the declaration, e.g., a static function. */
2198 name = lto_get_decl_name_mapping (file_data, name);
2199
2200 data = lto_get_raw_section_data (file_data, LTO_section_function_body,
2201 name, &len);
2202 gcc_assert (data);
2203
2204 /* Do a bit copy of the function body. */
2205 lto_write_raw_data (data, len);
2206
2207 /* Copy decls. */
2208 in_state =
2209 lto_get_function_in_decl_state (node->lto_file_data, function);
2210 out_state->compressed = in_state->compressed;
2211 gcc_assert (in_state);
2212
2213 for (i = 0; i < LTO_N_DECL_STREAMS; i++)
2214 {
2215 size_t n = vec_safe_length (in_state->streams[i]);
2216 vec<tree, va_gc> *trees = in_state->streams[i];
2217 struct lto_tree_ref_encoder *encoder = &(out_state->streams[i]);
2218
2219 /* The out state must have the same indices and the in state.
2220 So just copy the vector. All the encoders in the in state
2221 must be empty where we reach here. */
2222 gcc_assert (lto_tree_ref_encoder_size (encoder) == 0);
2223 encoder->trees.reserve_exact (n);
2224 for (j = 0; j < n; j++)
2225 encoder->trees.safe_push ((*trees)[j]);
2226 }
2227
2228 lto_free_raw_section_data (file_data, LTO_section_function_body, name,
2229 data, len);
2230 lto_end_section ();
2231 }
2232
2233 /* Wrap symbol references in *TP inside a type-preserving MEM_REF. */
2234
2235 static tree
2236 wrap_refs (tree *tp, int *ws, void *)
2237 {
2238 tree t = *tp;
2239 if (handled_component_p (t)
2240 && TREE_CODE (TREE_OPERAND (t, 0)) == VAR_DECL
2241 && TREE_PUBLIC (TREE_OPERAND (t, 0)))
2242 {
2243 tree decl = TREE_OPERAND (t, 0);
2244 tree ptrtype = build_pointer_type (TREE_TYPE (decl));
2245 TREE_OPERAND (t, 0) = build2 (MEM_REF, TREE_TYPE (decl),
2246 build1 (ADDR_EXPR, ptrtype, decl),
2247 build_int_cst (ptrtype, 0));
2248 TREE_THIS_VOLATILE (TREE_OPERAND (t, 0)) = TREE_THIS_VOLATILE (decl);
2249 *ws = 0;
2250 }
2251 else if (TREE_CODE (t) == CONSTRUCTOR)
2252 ;
2253 else if (!EXPR_P (t))
2254 *ws = 0;
2255 return NULL_TREE;
2256 }
2257
2258 /* Main entry point from the pass manager. */
2259
2260 void
2261 lto_output (void)
2262 {
2263 struct lto_out_decl_state *decl_state;
2264 bitmap output = NULL;
2265 int i, n_nodes;
2266 lto_symtab_encoder_t encoder = lto_get_out_decl_state ()->symtab_node_encoder;
2267
2268 if (flag_checking)
2269 output = lto_bitmap_alloc ();
2270
2271 /* Initialize the streamer. */
2272 lto_streamer_init ();
2273
2274 n_nodes = lto_symtab_encoder_size (encoder);
2275 /* Process only the functions with bodies. */
2276 for (i = 0; i < n_nodes; i++)
2277 {
2278 symtab_node *snode = lto_symtab_encoder_deref (encoder, i);
2279 if (cgraph_node *node = dyn_cast <cgraph_node *> (snode))
2280 {
2281 if (lto_symtab_encoder_encode_body_p (encoder, node)
2282 && !node->alias)
2283 {
2284 if (flag_checking)
2285 {
2286 gcc_assert (!bitmap_bit_p (output, DECL_UID (node->decl)));
2287 bitmap_set_bit (output, DECL_UID (node->decl));
2288 }
2289 decl_state = lto_new_out_decl_state ();
2290 lto_push_out_decl_state (decl_state);
2291 if (gimple_has_body_p (node->decl) || !flag_wpa
2292 /* Thunks have no body but they may be synthetized
2293 at WPA time. */
2294 || DECL_ARGUMENTS (node->decl))
2295 output_function (node);
2296 else
2297 copy_function_or_variable (node);
2298 gcc_assert (lto_get_out_decl_state () == decl_state);
2299 lto_pop_out_decl_state ();
2300 lto_record_function_out_decl_state (node->decl, decl_state);
2301 }
2302 }
2303 else if (varpool_node *node = dyn_cast <varpool_node *> (snode))
2304 {
2305 /* Wrap symbol references inside the ctor in a type
2306 preserving MEM_REF. */
2307 tree ctor = DECL_INITIAL (node->decl);
2308 if (ctor && !in_lto_p)
2309 walk_tree (&ctor, wrap_refs, NULL, NULL);
2310 if (get_symbol_initial_value (encoder, node->decl) == error_mark_node
2311 && lto_symtab_encoder_encode_initializer_p (encoder, node)
2312 && !node->alias)
2313 {
2314 timevar_push (TV_IPA_LTO_CTORS_OUT);
2315 if (flag_checking)
2316 {
2317 gcc_assert (!bitmap_bit_p (output, DECL_UID (node->decl)));
2318 bitmap_set_bit (output, DECL_UID (node->decl));
2319 }
2320 decl_state = lto_new_out_decl_state ();
2321 lto_push_out_decl_state (decl_state);
2322 if (DECL_INITIAL (node->decl) != error_mark_node
2323 || !flag_wpa)
2324 output_constructor (node);
2325 else
2326 copy_function_or_variable (node);
2327 gcc_assert (lto_get_out_decl_state () == decl_state);
2328 lto_pop_out_decl_state ();
2329 lto_record_function_out_decl_state (node->decl, decl_state);
2330 timevar_pop (TV_IPA_LTO_CTORS_OUT);
2331 }
2332 }
2333 }
2334
2335 /* Emit the callgraph after emitting function bodies. This needs to
2336 be done now to make sure that all the statements in every function
2337 have been renumbered so that edges can be associated with call
2338 statements using the statement UIDs. */
2339 output_symtab ();
2340
2341 output_offload_tables ();
2342
2343 #if CHECKING_P
2344 lto_bitmap_free (output);
2345 #endif
2346 }
2347
2348 /* Write each node in encoded by ENCODER to OB, as well as those reachable
2349 from it and required for correct representation of its semantics.
2350 Each node in ENCODER must be a global declaration or a type. A node
2351 is written only once, even if it appears multiple times in the
2352 vector. Certain transitively-reachable nodes, such as those
2353 representing expressions, may be duplicated, but such nodes
2354 must not appear in ENCODER itself. */
2355
2356 static void
2357 write_global_stream (struct output_block *ob,
2358 struct lto_tree_ref_encoder *encoder)
2359 {
2360 tree t;
2361 size_t index;
2362 const size_t size = lto_tree_ref_encoder_size (encoder);
2363
2364 for (index = 0; index < size; index++)
2365 {
2366 t = lto_tree_ref_encoder_get_tree (encoder, index);
2367 if (!streamer_tree_cache_lookup (ob->writer_cache, t, NULL))
2368 stream_write_tree (ob, t, false);
2369 }
2370 }
2371
2372
2373 /* Write a sequence of indices into the globals vector corresponding
2374 to the trees in ENCODER. These are used by the reader to map the
2375 indices used to refer to global entities within function bodies to
2376 their referents. */
2377
2378 static void
2379 write_global_references (struct output_block *ob,
2380 struct lto_tree_ref_encoder *encoder)
2381 {
2382 tree t;
2383 uint32_t index;
2384 const uint32_t size = lto_tree_ref_encoder_size (encoder);
2385
2386 /* Write size and slot indexes as 32-bit unsigned numbers. */
2387 uint32_t *data = XNEWVEC (uint32_t, size + 1);
2388 data[0] = size;
2389
2390 for (index = 0; index < size; index++)
2391 {
2392 unsigned slot_num;
2393
2394 t = lto_tree_ref_encoder_get_tree (encoder, index);
2395 streamer_tree_cache_lookup (ob->writer_cache, t, &slot_num);
2396 gcc_assert (slot_num != (unsigned)-1);
2397 data[index + 1] = slot_num;
2398 }
2399
2400 lto_write_data (data, sizeof (int32_t) * (size + 1));
2401 free (data);
2402 }
2403
2404
2405 /* Write all the streams in an lto_out_decl_state STATE using
2406 output block OB and output stream OUT_STREAM. */
2407
2408 void
2409 lto_output_decl_state_streams (struct output_block *ob,
2410 struct lto_out_decl_state *state)
2411 {
2412 int i;
2413
2414 for (i = 0; i < LTO_N_DECL_STREAMS; i++)
2415 write_global_stream (ob, &state->streams[i]);
2416 }
2417
2418
2419 /* Write all the references in an lto_out_decl_state STATE using
2420 output block OB and output stream OUT_STREAM. */
2421
2422 void
2423 lto_output_decl_state_refs (struct output_block *ob,
2424 struct lto_out_decl_state *state)
2425 {
2426 unsigned i;
2427 unsigned ref;
2428 tree decl;
2429
2430 /* Write reference to FUNCTION_DECL. If there is not function,
2431 write reference to void_type_node. */
2432 decl = (state->fn_decl) ? state->fn_decl : void_type_node;
2433 streamer_tree_cache_lookup (ob->writer_cache, decl, &ref);
2434 gcc_assert (ref != (unsigned)-1);
2435 ref = ref * 2 + (state->compressed ? 1 : 0);
2436 lto_write_data (&ref, sizeof (uint32_t));
2437
2438 for (i = 0; i < LTO_N_DECL_STREAMS; i++)
2439 write_global_references (ob, &state->streams[i]);
2440 }
2441
2442
2443 /* Return the written size of STATE. */
2444
2445 static size_t
2446 lto_out_decl_state_written_size (struct lto_out_decl_state *state)
2447 {
2448 int i;
2449 size_t size;
2450
2451 size = sizeof (int32_t); /* fn_ref. */
2452 for (i = 0; i < LTO_N_DECL_STREAMS; i++)
2453 {
2454 size += sizeof (int32_t); /* vector size. */
2455 size += (lto_tree_ref_encoder_size (&state->streams[i])
2456 * sizeof (int32_t));
2457 }
2458 return size;
2459 }
2460
2461
2462 /* Write symbol T into STREAM in CACHE. SEEN specifies symbols we wrote
2463 so far. */
2464
2465 static void
2466 write_symbol (struct streamer_tree_cache_d *cache,
2467 tree t, hash_set<const char *> *seen, bool alias)
2468 {
2469 const char *name;
2470 enum gcc_plugin_symbol_kind kind;
2471 enum gcc_plugin_symbol_visibility visibility = GCCPV_DEFAULT;
2472 unsigned slot_num;
2473 uint64_t size;
2474 const char *comdat;
2475 unsigned char c;
2476
2477 /* None of the following kinds of symbols are needed in the
2478 symbol table. */
2479 if (!TREE_PUBLIC (t)
2480 || is_builtin_fn (t)
2481 || DECL_ABSTRACT_P (t)
2482 || (TREE_CODE (t) == VAR_DECL && DECL_HARD_REGISTER (t)))
2483 return;
2484 gcc_assert (TREE_CODE (t) != RESULT_DECL);
2485
2486 gcc_assert (TREE_CODE (t) == VAR_DECL
2487 || TREE_CODE (t) == FUNCTION_DECL);
2488
2489 name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (t));
2490
2491 /* This behaves like assemble_name_raw in varasm.c, performing the
2492 same name manipulations that ASM_OUTPUT_LABELREF does. */
2493 name = IDENTIFIER_POINTER ((*targetm.asm_out.mangle_assembler_name) (name));
2494
2495 if (seen->add (name))
2496 return;
2497
2498 streamer_tree_cache_lookup (cache, t, &slot_num);
2499 gcc_assert (slot_num != (unsigned)-1);
2500
2501 if (DECL_EXTERNAL (t))
2502 {
2503 if (DECL_WEAK (t))
2504 kind = GCCPK_WEAKUNDEF;
2505 else
2506 kind = GCCPK_UNDEF;
2507 }
2508 else
2509 {
2510 if (DECL_WEAK (t))
2511 kind = GCCPK_WEAKDEF;
2512 else if (DECL_COMMON (t))
2513 kind = GCCPK_COMMON;
2514 else
2515 kind = GCCPK_DEF;
2516
2517 /* When something is defined, it should have node attached. */
2518 gcc_assert (alias || TREE_CODE (t) != VAR_DECL
2519 || varpool_node::get (t)->definition);
2520 gcc_assert (alias || TREE_CODE (t) != FUNCTION_DECL
2521 || (cgraph_node::get (t)
2522 && cgraph_node::get (t)->definition));
2523 }
2524
2525 /* Imitate what default_elf_asm_output_external do.
2526 When symbol is external, we need to output it with DEFAULT visibility
2527 when compiling with -fvisibility=default, while with HIDDEN visibility
2528 when symbol has attribute (visibility("hidden")) specified.
2529 targetm.binds_local_p check DECL_VISIBILITY_SPECIFIED and gets this
2530 right. */
2531
2532 if (DECL_EXTERNAL (t)
2533 && !targetm.binds_local_p (t))
2534 visibility = GCCPV_DEFAULT;
2535 else
2536 switch (DECL_VISIBILITY (t))
2537 {
2538 case VISIBILITY_DEFAULT:
2539 visibility = GCCPV_DEFAULT;
2540 break;
2541 case VISIBILITY_PROTECTED:
2542 visibility = GCCPV_PROTECTED;
2543 break;
2544 case VISIBILITY_HIDDEN:
2545 visibility = GCCPV_HIDDEN;
2546 break;
2547 case VISIBILITY_INTERNAL:
2548 visibility = GCCPV_INTERNAL;
2549 break;
2550 }
2551
2552 if (kind == GCCPK_COMMON
2553 && DECL_SIZE_UNIT (t)
2554 && TREE_CODE (DECL_SIZE_UNIT (t)) == INTEGER_CST)
2555 size = TREE_INT_CST_LOW (DECL_SIZE_UNIT (t));
2556 else
2557 size = 0;
2558
2559 if (DECL_ONE_ONLY (t))
2560 comdat = IDENTIFIER_POINTER (decl_comdat_group_id (t));
2561 else
2562 comdat = "";
2563
2564 lto_write_data (name, strlen (name) + 1);
2565 lto_write_data (comdat, strlen (comdat) + 1);
2566 c = (unsigned char) kind;
2567 lto_write_data (&c, 1);
2568 c = (unsigned char) visibility;
2569 lto_write_data (&c, 1);
2570 lto_write_data (&size, 8);
2571 lto_write_data (&slot_num, 4);
2572 }
2573
2574 /* Return true if NODE should appear in the plugin symbol table. */
2575
2576 bool
2577 output_symbol_p (symtab_node *node)
2578 {
2579 struct cgraph_node *cnode;
2580 if (!node->real_symbol_p ())
2581 return false;
2582 /* We keep external functions in symtab for sake of inlining
2583 and devirtualization. We do not want to see them in symbol table as
2584 references unless they are really used. */
2585 cnode = dyn_cast <cgraph_node *> (node);
2586 if (cnode && (!node->definition || DECL_EXTERNAL (cnode->decl))
2587 && cnode->callers)
2588 return true;
2589
2590 /* Ignore all references from external vars initializers - they are not really
2591 part of the compilation unit until they are used by folding. Some symbols,
2592 like references to external construction vtables can not be referred to at all.
2593 We decide this at can_refer_decl_in_current_unit_p. */
2594 if (!node->definition || DECL_EXTERNAL (node->decl))
2595 {
2596 int i;
2597 struct ipa_ref *ref;
2598 for (i = 0; node->iterate_referring (i, ref); i++)
2599 {
2600 if (ref->use == IPA_REF_ALIAS)
2601 continue;
2602 if (is_a <cgraph_node *> (ref->referring))
2603 return true;
2604 if (!DECL_EXTERNAL (ref->referring->decl))
2605 return true;
2606 }
2607 return false;
2608 }
2609 return true;
2610 }
2611
2612
2613 /* Write an IL symbol table to OB.
2614 SET and VSET are cgraph/varpool node sets we are outputting. */
2615
2616 static void
2617 produce_symtab (struct output_block *ob)
2618 {
2619 struct streamer_tree_cache_d *cache = ob->writer_cache;
2620 char *section_name = lto_get_section_name (LTO_section_symtab, NULL, NULL);
2621 lto_symtab_encoder_t encoder = ob->decl_state->symtab_node_encoder;
2622 lto_symtab_encoder_iterator lsei;
2623
2624 lto_begin_section (section_name, false);
2625 free (section_name);
2626
2627 hash_set<const char *> seen;
2628
2629 /* Write the symbol table.
2630 First write everything defined and then all declarations.
2631 This is necessary to handle cases where we have duplicated symbols. */
2632 for (lsei = lsei_start (encoder);
2633 !lsei_end_p (lsei); lsei_next (&lsei))
2634 {
2635 symtab_node *node = lsei_node (lsei);
2636
2637 if (!output_symbol_p (node) || DECL_EXTERNAL (node->decl))
2638 continue;
2639 write_symbol (cache, node->decl, &seen, false);
2640 }
2641 for (lsei = lsei_start (encoder);
2642 !lsei_end_p (lsei); lsei_next (&lsei))
2643 {
2644 symtab_node *node = lsei_node (lsei);
2645
2646 if (!output_symbol_p (node) || !DECL_EXTERNAL (node->decl))
2647 continue;
2648 write_symbol (cache, node->decl, &seen, false);
2649 }
2650
2651 lto_end_section ();
2652 }
2653
2654
2655 /* Init the streamer_mode_table for output, where we collect info on what
2656 machine_mode values have been streamed. */
2657 void
2658 lto_output_init_mode_table (void)
2659 {
2660 memset (streamer_mode_table, '\0', MAX_MACHINE_MODE);
2661 }
2662
2663
2664 /* Write the mode table. */
2665 static void
2666 lto_write_mode_table (void)
2667 {
2668 struct output_block *ob;
2669 ob = create_output_block (LTO_section_mode_table);
2670 bitpack_d bp = bitpack_create (ob->main_stream);
2671
2672 /* Ensure that for GET_MODE_INNER (m) != m we have
2673 also the inner mode marked. */
2674 for (int i = 0; i < (int) MAX_MACHINE_MODE; i++)
2675 if (streamer_mode_table[i])
2676 {
2677 machine_mode m = (machine_mode) i;
2678 if (GET_MODE_INNER (m) != m)
2679 streamer_mode_table[(int) GET_MODE_INNER (m)] = 1;
2680 }
2681 /* First stream modes that have GET_MODE_INNER (m) == m,
2682 so that we can refer to them afterwards. */
2683 for (int pass = 0; pass < 2; pass++)
2684 for (int i = 0; i < (int) MAX_MACHINE_MODE; i++)
2685 if (streamer_mode_table[i] && i != (int) VOIDmode && i != (int) BLKmode)
2686 {
2687 machine_mode m = (machine_mode) i;
2688 if ((GET_MODE_INNER (m) == m) ^ (pass == 0))
2689 continue;
2690 bp_pack_value (&bp, m, 8);
2691 bp_pack_enum (&bp, mode_class, MAX_MODE_CLASS, GET_MODE_CLASS (m));
2692 bp_pack_value (&bp, GET_MODE_SIZE (m), 8);
2693 bp_pack_value (&bp, GET_MODE_PRECISION (m), 16);
2694 bp_pack_value (&bp, GET_MODE_INNER (m), 8);
2695 bp_pack_value (&bp, GET_MODE_NUNITS (m), 8);
2696 switch (GET_MODE_CLASS (m))
2697 {
2698 case MODE_FRACT:
2699 case MODE_UFRACT:
2700 case MODE_ACCUM:
2701 case MODE_UACCUM:
2702 bp_pack_value (&bp, GET_MODE_IBIT (m), 8);
2703 bp_pack_value (&bp, GET_MODE_FBIT (m), 8);
2704 break;
2705 case MODE_FLOAT:
2706 case MODE_DECIMAL_FLOAT:
2707 bp_pack_string (ob, &bp, REAL_MODE_FORMAT (m)->name, true);
2708 break;
2709 default:
2710 break;
2711 }
2712 bp_pack_string (ob, &bp, GET_MODE_NAME (m), true);
2713 }
2714 bp_pack_value (&bp, VOIDmode, 8);
2715
2716 streamer_write_bitpack (&bp);
2717
2718 char *section_name
2719 = lto_get_section_name (LTO_section_mode_table, NULL, NULL);
2720 lto_begin_section (section_name, !flag_wpa);
2721 free (section_name);
2722
2723 /* The entire header stream is computed here. */
2724 struct lto_simple_header_with_strings header;
2725 memset (&header, 0, sizeof (header));
2726
2727 /* Write the header. */
2728 header.major_version = LTO_major_version;
2729 header.minor_version = LTO_minor_version;
2730
2731 header.main_size = ob->main_stream->total_size;
2732 header.string_size = ob->string_stream->total_size;
2733 lto_write_data (&header, sizeof header);
2734
2735 /* Put all of the gimple and the string table out the asm file as a
2736 block of text. */
2737 lto_write_stream (ob->main_stream);
2738 lto_write_stream (ob->string_stream);
2739
2740 lto_end_section ();
2741 destroy_output_block (ob);
2742 }
2743
2744
2745 /* This pass is run after all of the functions are serialized and all
2746 of the IPA passes have written their serialized forms. This pass
2747 causes the vector of all of the global decls and types used from
2748 this file to be written in to a section that can then be read in to
2749 recover these on other side. */
2750
2751 void
2752 produce_asm_for_decls (void)
2753 {
2754 struct lto_out_decl_state *out_state;
2755 struct lto_out_decl_state *fn_out_state;
2756 struct lto_decl_header header;
2757 char *section_name;
2758 struct output_block *ob;
2759 unsigned idx, num_fns;
2760 size_t decl_state_size;
2761 int32_t num_decl_states;
2762
2763 ob = create_output_block (LTO_section_decls);
2764
2765 memset (&header, 0, sizeof (struct lto_decl_header));
2766
2767 section_name = lto_get_section_name (LTO_section_decls, NULL, NULL);
2768 lto_begin_section (section_name, !flag_wpa);
2769 free (section_name);
2770
2771 /* Make string 0 be a NULL string. */
2772 streamer_write_char_stream (ob->string_stream, 0);
2773
2774 gcc_assert (!alias_pairs);
2775
2776 /* Get rid of the global decl state hash tables to save some memory. */
2777 out_state = lto_get_out_decl_state ();
2778 for (int i = 0; i < LTO_N_DECL_STREAMS; i++)
2779 if (out_state->streams[i].tree_hash_table)
2780 {
2781 delete out_state->streams[i].tree_hash_table;
2782 out_state->streams[i].tree_hash_table = NULL;
2783 }
2784
2785 /* Write the global symbols. */
2786 lto_output_decl_state_streams (ob, out_state);
2787 num_fns = lto_function_decl_states.length ();
2788 for (idx = 0; idx < num_fns; idx++)
2789 {
2790 fn_out_state =
2791 lto_function_decl_states[idx];
2792 lto_output_decl_state_streams (ob, fn_out_state);
2793 }
2794
2795 header.major_version = LTO_major_version;
2796 header.minor_version = LTO_minor_version;
2797
2798 /* Currently not used. This field would allow us to preallocate
2799 the globals vector, so that it need not be resized as it is extended. */
2800 header.num_nodes = -1;
2801
2802 /* Compute the total size of all decl out states. */
2803 decl_state_size = sizeof (int32_t);
2804 decl_state_size += lto_out_decl_state_written_size (out_state);
2805 for (idx = 0; idx < num_fns; idx++)
2806 {
2807 fn_out_state =
2808 lto_function_decl_states[idx];
2809 decl_state_size += lto_out_decl_state_written_size (fn_out_state);
2810 }
2811 header.decl_state_size = decl_state_size;
2812
2813 header.main_size = ob->main_stream->total_size;
2814 header.string_size = ob->string_stream->total_size;
2815
2816 lto_write_data (&header, sizeof header);
2817
2818 /* Write the main out-decl state, followed by out-decl states of
2819 functions. */
2820 num_decl_states = num_fns + 1;
2821 lto_write_data (&num_decl_states, sizeof (num_decl_states));
2822 lto_output_decl_state_refs (ob, out_state);
2823 for (idx = 0; idx < num_fns; idx++)
2824 {
2825 fn_out_state = lto_function_decl_states[idx];
2826 lto_output_decl_state_refs (ob, fn_out_state);
2827 }
2828
2829 lto_write_stream (ob->main_stream);
2830 lto_write_stream (ob->string_stream);
2831
2832 lto_end_section ();
2833
2834 /* Write the symbol table. It is used by linker to determine dependencies
2835 and thus we can skip it for WPA. */
2836 if (!flag_wpa)
2837 produce_symtab (ob);
2838
2839 /* Write command line opts. */
2840 lto_write_options ();
2841
2842 /* Deallocate memory and clean up. */
2843 for (idx = 0; idx < num_fns; idx++)
2844 {
2845 fn_out_state =
2846 lto_function_decl_states[idx];
2847 lto_delete_out_decl_state (fn_out_state);
2848 }
2849 lto_symtab_encoder_delete (ob->decl_state->symtab_node_encoder);
2850 lto_function_decl_states.release ();
2851 destroy_output_block (ob);
2852 if (lto_stream_offload_p)
2853 lto_write_mode_table ();
2854 }