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