Import pre-release gcc-5.0 to new vendor branch
[dragonfly.git] / contrib / gcc-5.0 / gcc / tree-streamer-out.c
1 /* Routines for emitting trees to a file stream.
2
3    Copyright (C) 2011-2015 Free Software Foundation, Inc.
4    Contributed by Diego Novillo <dnovillo@google.com>
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "coretypes.h"
25 #include "tm.h"
26 #include "diagnostic.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 "real.h"
37 #include "fixed-value.h"
38 #include "tree.h"
39 #include "fold-const.h"
40 #include "stor-layout.h"
41 #include "predict.h"
42 #include "hard-reg-set.h"
43 #include "input.h"
44 #include "function.h"
45 #include "basic-block.h"
46 #include "tree-ssa-alias.h"
47 #include "internal-fn.h"
48 #include "gimple-expr.h"
49 #include "is-a.h"
50 #include "gimple.h"
51 #include "hash-map.h"
52 #include "plugin-api.h"
53 #include "ipa-ref.h"
54 #include "cgraph.h"
55 #include "tree-streamer.h"
56 #include "data-streamer.h"
57 #include "streamer-hooks.h"
58 #include "gomp-constants.h"
59
60
61 /* Output the STRING constant to the string
62    table in OB.  Then put the index onto the INDEX_STREAM.  */
63
64 void
65 streamer_write_string_cst (struct output_block *ob,
66                            struct lto_output_stream *index_stream,
67                            tree string)
68 {
69   streamer_write_string_with_length (ob, index_stream,
70                                      string ? TREE_STRING_POINTER (string)
71                                             : NULL,
72                                      string ? TREE_STRING_LENGTH (string) : 0,
73                                      true);
74 }
75
76
77 /* Output the identifier ID to the string
78    table in OB.  Then put the index onto the INDEX_STREAM.  */
79
80 static void
81 write_identifier (struct output_block *ob,
82                    struct lto_output_stream *index_stream,
83                    tree id)
84 {
85   streamer_write_string_with_length (ob, index_stream,
86                                      IDENTIFIER_POINTER (id),
87                                      IDENTIFIER_LENGTH (id),
88                                      true);
89 }
90
91
92 /* Pack all the non-pointer fields of the TS_BASE structure of
93    expression EXPR into bitpack BP.  */
94
95 static void
96 pack_ts_base_value_fields (struct bitpack_d *bp, tree expr)
97 {
98   bp_pack_value (bp, TREE_CODE (expr), 16);
99   if (!TYPE_P (expr))
100     {
101       bp_pack_value (bp, TREE_SIDE_EFFECTS (expr), 1);
102       bp_pack_value (bp, TREE_CONSTANT (expr), 1);
103       bp_pack_value (bp, TREE_READONLY (expr), 1);
104
105       /* TREE_PUBLIC is used on types to indicate that the type
106          has a TYPE_CACHED_VALUES vector.  This is not streamed out,
107          so we skip it here.  */
108       bp_pack_value (bp, TREE_PUBLIC (expr), 1);
109     }
110   else
111     bp_pack_value (bp, 0, 4);
112   bp_pack_value (bp, TREE_ADDRESSABLE (expr), 1);
113   bp_pack_value (bp, TREE_THIS_VOLATILE (expr), 1);
114   if (DECL_P (expr))
115     bp_pack_value (bp, DECL_UNSIGNED (expr), 1);
116   else if (TYPE_P (expr))
117     bp_pack_value (bp, TYPE_UNSIGNED (expr), 1);
118   else
119     bp_pack_value (bp, 0, 1);
120   /* We write debug info two times, do not confuse the second one.
121      The only relevant TREE_ASM_WRITTEN use is on SSA names.  */
122   bp_pack_value (bp, (TREE_CODE (expr) != SSA_NAME
123                       ? 0 : TREE_ASM_WRITTEN (expr)), 1);
124   if (TYPE_P (expr))
125     bp_pack_value (bp, TYPE_ARTIFICIAL (expr), 1);
126   else
127     bp_pack_value (bp, TREE_NO_WARNING (expr), 1);
128   bp_pack_value (bp, TREE_NOTHROW (expr), 1);
129   bp_pack_value (bp, TREE_STATIC (expr), 1);
130   if (TREE_CODE (expr) != TREE_BINFO)
131     bp_pack_value (bp, TREE_PRIVATE (expr), 1);
132   bp_pack_value (bp, TREE_PROTECTED (expr), 1);
133   bp_pack_value (bp, TREE_DEPRECATED (expr), 1);
134   if (TYPE_P (expr))
135     {
136       bp_pack_value (bp, TYPE_SATURATING (expr), 1);
137       bp_pack_value (bp, TYPE_ADDR_SPACE (expr), 8);
138     }
139   else if (TREE_CODE (expr) == SSA_NAME)
140     bp_pack_value (bp, SSA_NAME_IS_DEFAULT_DEF (expr), 1);
141   else
142     bp_pack_value (bp, 0, 1);
143 }
144
145
146 /* Pack all the non-pointer fields of the TS_INTEGER_CST structure of
147    expression EXPR into bitpack BP.  */
148
149 static void
150 pack_ts_int_cst_value_fields (struct bitpack_d *bp, tree expr)
151 {
152   int i;
153   /* Note that the number of elements has already been written out in
154      streamer_write_tree_header.  */
155   for (i = 0; i < TREE_INT_CST_EXT_NUNITS (expr); i++)
156     bp_pack_var_len_int (bp, TREE_INT_CST_ELT (expr, i));
157 }
158
159
160 /* Pack all the non-pointer fields of the TS_REAL_CST structure of
161    expression EXPR into bitpack BP.  */
162
163 static void
164 pack_ts_real_cst_value_fields (struct bitpack_d *bp, tree expr)
165 {
166   unsigned i;
167   REAL_VALUE_TYPE r;
168
169   r = TREE_REAL_CST (expr);
170   bp_pack_value (bp, r.cl, 2);
171   bp_pack_value (bp, r.decimal, 1);
172   bp_pack_value (bp, r.sign, 1);
173   bp_pack_value (bp, r.signalling, 1);
174   bp_pack_value (bp, r.canonical, 1);
175   bp_pack_value (bp, r.uexp, EXP_BITS);
176   for (i = 0; i < SIGSZ; i++)
177     bp_pack_value (bp, r.sig[i], HOST_BITS_PER_LONG);
178 }
179
180
181 /* Pack all the non-pointer fields of the TS_FIXED_CST structure of
182    expression EXPR into bitpack BP.  */
183
184 static void
185 pack_ts_fixed_cst_value_fields (struct bitpack_d *bp, tree expr)
186 {
187   struct fixed_value fv = TREE_FIXED_CST (expr);
188   bp_pack_enum (bp, machine_mode, MAX_MACHINE_MODE, fv.mode);
189   bp_pack_var_len_int (bp, fv.data.low);
190   bp_pack_var_len_int (bp, fv.data.high);
191 }
192
193 /* Pack all the non-pointer fields of the TS_DECL_COMMON structure
194    of expression EXPR into bitpack BP.  */
195
196 static void
197 pack_ts_decl_common_value_fields (struct bitpack_d *bp, tree expr)
198 {
199   bp_pack_enum (bp, machine_mode, MAX_MACHINE_MODE, DECL_MODE (expr));
200   bp_pack_value (bp, DECL_NONLOCAL (expr), 1);
201   bp_pack_value (bp, DECL_VIRTUAL_P (expr), 1);
202   bp_pack_value (bp, DECL_IGNORED_P (expr), 1);
203   bp_pack_value (bp, DECL_ABSTRACT_P (expr), 1);
204   bp_pack_value (bp, DECL_ARTIFICIAL (expr), 1);
205   bp_pack_value (bp, DECL_USER_ALIGN (expr), 1);
206   bp_pack_value (bp, DECL_PRESERVE_P (expr), 1);
207   bp_pack_value (bp, DECL_EXTERNAL (expr), 1);
208   bp_pack_value (bp, DECL_GIMPLE_REG_P (expr), 1);
209   bp_pack_var_len_unsigned (bp, DECL_ALIGN (expr));
210
211   if (TREE_CODE (expr) == LABEL_DECL)
212     {
213       /* Note that we do not write LABEL_DECL_UID.  The reader will
214          always assume an initial value of -1 so that the
215          label_to_block_map is recreated by gimple_set_bb.  */
216       bp_pack_var_len_unsigned (bp, EH_LANDING_PAD_NR (expr));
217     }
218
219   if (TREE_CODE (expr) == FIELD_DECL)
220     {
221       bp_pack_value (bp, DECL_PACKED (expr), 1);
222       bp_pack_value (bp, DECL_NONADDRESSABLE_P (expr), 1);
223       bp_pack_value (bp, expr->decl_common.off_align, 8);
224     }
225
226   if (TREE_CODE (expr) == VAR_DECL)
227     {
228       bp_pack_value (bp, DECL_HAS_DEBUG_EXPR_P (expr), 1);
229       bp_pack_value (bp, DECL_NONLOCAL_FRAME (expr), 1);
230     }
231
232   if (TREE_CODE (expr) == RESULT_DECL
233       || TREE_CODE (expr) == PARM_DECL
234       || TREE_CODE (expr) == VAR_DECL)
235     {
236       bp_pack_value (bp, DECL_BY_REFERENCE (expr), 1);
237       if (TREE_CODE (expr) == VAR_DECL
238           || TREE_CODE (expr) == PARM_DECL)
239         bp_pack_value (bp, DECL_HAS_VALUE_EXPR_P (expr), 1);
240     }
241 }
242
243
244 /* Pack all the non-pointer fields of the TS_DECL_WRTL structure
245    of expression EXPR into bitpack BP.  */
246
247 static void
248 pack_ts_decl_wrtl_value_fields (struct bitpack_d *bp, tree expr)
249 {
250   bp_pack_value (bp, DECL_REGISTER (expr), 1);
251 }
252
253
254 /* Pack all the non-pointer fields of the TS_DECL_WITH_VIS structure
255    of expression EXPR into bitpack BP.  */
256
257 static void
258 pack_ts_decl_with_vis_value_fields (struct bitpack_d *bp, tree expr)
259 {
260   bp_pack_value (bp, DECL_COMMON (expr), 1);
261   bp_pack_value (bp, DECL_DLLIMPORT_P (expr), 1);
262   bp_pack_value (bp, DECL_WEAK (expr), 1);
263   bp_pack_value (bp, DECL_SEEN_IN_BIND_EXPR_P (expr),  1);
264   bp_pack_value (bp, DECL_COMDAT (expr),  1);
265   bp_pack_value (bp, DECL_VISIBILITY (expr),  2);
266   bp_pack_value (bp, DECL_VISIBILITY_SPECIFIED (expr),  1);
267
268   if (TREE_CODE (expr) == VAR_DECL)
269     {
270       bp_pack_value (bp, DECL_HARD_REGISTER (expr), 1);
271       /* DECL_IN_TEXT_SECTION is set during final asm output only. */
272       bp_pack_value (bp, DECL_IN_CONSTANT_POOL (expr), 1);
273     }
274
275   if (TREE_CODE (expr) == FUNCTION_DECL)
276     {
277       bp_pack_value (bp, DECL_FINAL_P (expr), 1);
278       bp_pack_value (bp, DECL_CXX_CONSTRUCTOR_P (expr), 1);
279       bp_pack_value (bp, DECL_CXX_DESTRUCTOR_P (expr), 1);
280     }
281 }
282
283
284 /* Pack all the non-pointer fields of the TS_FUNCTION_DECL structure
285    of expression EXPR into bitpack BP.  */
286
287 static void
288 pack_ts_function_decl_value_fields (struct bitpack_d *bp, tree expr)
289 {
290   /* For normal/md builtins we only write the class and code, so they
291      should never be handled here.  */
292   gcc_assert (!streamer_handle_as_builtin_p (expr));
293
294   bp_pack_enum (bp, built_in_class, BUILT_IN_LAST,
295                 DECL_BUILT_IN_CLASS (expr));
296   bp_pack_value (bp, DECL_STATIC_CONSTRUCTOR (expr), 1);
297   bp_pack_value (bp, DECL_STATIC_DESTRUCTOR (expr), 1);
298   bp_pack_value (bp, DECL_UNINLINABLE (expr), 1);
299   bp_pack_value (bp, DECL_POSSIBLY_INLINED (expr), 1);
300   bp_pack_value (bp, DECL_IS_NOVOPS (expr), 1);
301   bp_pack_value (bp, DECL_IS_RETURNS_TWICE (expr), 1);
302   bp_pack_value (bp, DECL_IS_MALLOC (expr), 1);
303   bp_pack_value (bp, DECL_IS_OPERATOR_NEW (expr), 1);
304   bp_pack_value (bp, DECL_DECLARED_INLINE_P (expr), 1);
305   bp_pack_value (bp, DECL_STATIC_CHAIN (expr), 1);
306   bp_pack_value (bp, DECL_NO_INLINE_WARNING_P (expr), 1);
307   bp_pack_value (bp, DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (expr), 1);
308   bp_pack_value (bp, DECL_NO_LIMIT_STACK (expr), 1);
309   bp_pack_value (bp, DECL_DISREGARD_INLINE_LIMITS (expr), 1);
310   bp_pack_value (bp, DECL_PURE_P (expr), 1);
311   bp_pack_value (bp, DECL_LOOPING_CONST_OR_PURE_P (expr), 1);
312   if (DECL_BUILT_IN_CLASS (expr) != NOT_BUILT_IN)
313     bp_pack_value (bp, DECL_FUNCTION_CODE (expr), 12);
314 }
315
316
317 /* Pack all the non-pointer fields of the TS_TYPE_COMMON structure
318    of expression EXPR into bitpack BP.  */
319
320 static void
321 pack_ts_type_common_value_fields (struct bitpack_d *bp, tree expr)
322 {
323   bp_pack_enum (bp, machine_mode, MAX_MACHINE_MODE, TYPE_MODE (expr));
324   bp_pack_value (bp, TYPE_STRING_FLAG (expr), 1);
325   bp_pack_value (bp, TYPE_NO_FORCE_BLK (expr), 1);
326   bp_pack_value (bp, TYPE_NEEDS_CONSTRUCTING (expr), 1);
327   if (RECORD_OR_UNION_TYPE_P (expr))
328     {
329       bp_pack_value (bp, TYPE_TRANSPARENT_AGGR (expr), 1);
330       bp_pack_value (bp, TYPE_FINAL_P (expr), 1);
331     }
332   else if (TREE_CODE (expr) == ARRAY_TYPE)
333     bp_pack_value (bp, TYPE_NONALIASED_COMPONENT (expr), 1);
334   bp_pack_value (bp, TYPE_PACKED (expr), 1);
335   bp_pack_value (bp, TYPE_RESTRICT (expr), 1);
336   bp_pack_value (bp, TYPE_USER_ALIGN (expr), 1);
337   bp_pack_value (bp, TYPE_READONLY (expr), 1);
338   bp_pack_var_len_unsigned (bp, TYPE_PRECISION (expr));
339   bp_pack_var_len_unsigned (bp, TYPE_ALIGN (expr));
340   /* Make sure to preserve the fact whether the frontend would assign
341      alias-set zero to this type.  */
342   bp_pack_var_len_int (bp, (TYPE_ALIAS_SET (expr) == 0
343                             || (!in_lto_p
344                                 && get_alias_set (expr) == 0)) ? 0 : -1);
345 }
346
347
348 /* Pack all the non-pointer fields of the TS_BLOCK structure
349    of expression EXPR into bitpack BP.  */
350
351 static void
352 pack_ts_block_value_fields (struct output_block *ob,
353                             struct bitpack_d *bp, tree expr)
354 {
355   bp_pack_value (bp, BLOCK_ABSTRACT (expr), 1);
356   /* BLOCK_NUMBER is recomputed.  */
357   /* Stream BLOCK_SOURCE_LOCATION for the limited cases we can handle - those
358      that represent inlined function scopes.
359      For the rest them on the floor instead of ICEing in dwarf2out.c.  */
360   if (inlined_function_outer_scope_p (expr))
361     stream_output_location (ob, bp, BLOCK_SOURCE_LOCATION (expr));
362   else
363     stream_output_location (ob, bp, UNKNOWN_LOCATION);
364 }
365
366 /* Pack all the non-pointer fields of the TS_TRANSLATION_UNIT_DECL structure
367    of expression EXPR into bitpack BP.  */
368
369 static void
370 pack_ts_translation_unit_decl_value_fields (struct output_block *ob,
371                                             struct bitpack_d *bp, tree expr)
372 {
373   bp_pack_string (ob, bp, TRANSLATION_UNIT_LANGUAGE (expr), true);
374 }
375
376
377 /* Pack all the non-pointer fields of the TS_OMP_CLAUSE structure
378    of expression EXPR into bitpack BP.  */
379
380 static void
381 pack_ts_omp_clause_value_fields (struct output_block *ob,
382                                  struct bitpack_d *bp, tree expr)
383 {
384   stream_output_location (ob, bp, OMP_CLAUSE_LOCATION (expr));
385   switch (OMP_CLAUSE_CODE (expr))
386     {
387     case OMP_CLAUSE_DEFAULT:
388       bp_pack_enum (bp, omp_clause_default_kind, OMP_CLAUSE_DEFAULT_LAST,
389                     OMP_CLAUSE_DEFAULT_KIND (expr));
390       break;
391     case OMP_CLAUSE_SCHEDULE:
392       bp_pack_enum (bp, omp_clause_schedule_kind, OMP_CLAUSE_SCHEDULE_LAST,
393                     OMP_CLAUSE_SCHEDULE_KIND (expr));
394       break;
395     case OMP_CLAUSE_DEPEND:
396       bp_pack_enum (bp, omp_clause_depend_kind, OMP_CLAUSE_DEPEND_LAST,
397                     OMP_CLAUSE_DEPEND_KIND (expr));
398       break;
399     case OMP_CLAUSE_MAP:
400       bp_pack_enum (bp, gomp_map_kind, GOMP_MAP_LAST,
401                     OMP_CLAUSE_MAP_KIND (expr));
402       break;
403     case OMP_CLAUSE_PROC_BIND:
404       bp_pack_enum (bp, omp_clause_proc_bind_kind, OMP_CLAUSE_PROC_BIND_LAST,
405                     OMP_CLAUSE_PROC_BIND_KIND (expr));
406       break;
407     case OMP_CLAUSE_REDUCTION:
408       bp_pack_enum (bp, tree_code, MAX_TREE_CODES,
409                     OMP_CLAUSE_REDUCTION_CODE (expr));
410       break;
411     default:
412       break;
413     }
414 }
415
416
417 /* Pack all the bitfields in EXPR into a bit pack.  */
418
419 void
420 streamer_pack_tree_bitfields (struct output_block *ob,
421                               struct bitpack_d *bp, tree expr)
422 {
423   enum tree_code code;
424
425   code = TREE_CODE (expr);
426
427   /* Note that all these functions are highly sensitive to changes in
428      the types and sizes of each of the fields being packed.  */
429   pack_ts_base_value_fields (bp, expr);
430
431   if (CODE_CONTAINS_STRUCT (code, TS_INT_CST))
432     pack_ts_int_cst_value_fields (bp, expr);
433
434   if (CODE_CONTAINS_STRUCT (code, TS_REAL_CST))
435     pack_ts_real_cst_value_fields (bp, expr);
436
437   if (CODE_CONTAINS_STRUCT (code, TS_FIXED_CST))
438     pack_ts_fixed_cst_value_fields (bp, expr);
439
440   if (CODE_CONTAINS_STRUCT (code, TS_DECL_MINIMAL))
441     stream_output_location (ob, bp, DECL_SOURCE_LOCATION (expr));
442
443   if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
444     pack_ts_decl_common_value_fields (bp, expr);
445
446   if (CODE_CONTAINS_STRUCT (code, TS_DECL_WRTL))
447     pack_ts_decl_wrtl_value_fields (bp, expr);
448
449   if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
450     pack_ts_decl_with_vis_value_fields (bp, expr);
451
452   if (CODE_CONTAINS_STRUCT (code, TS_FUNCTION_DECL))
453     pack_ts_function_decl_value_fields (bp, expr);
454
455   if (CODE_CONTAINS_STRUCT (code, TS_TYPE_COMMON))
456     pack_ts_type_common_value_fields (bp, expr);
457
458   if (CODE_CONTAINS_STRUCT (code, TS_EXP))
459     {
460       stream_output_location (ob, bp, EXPR_LOCATION (expr));
461       if (code == MEM_REF
462           || code == TARGET_MEM_REF)
463         {
464           bp_pack_value (bp, MR_DEPENDENCE_CLIQUE (expr), sizeof (short) * 8);
465           if (MR_DEPENDENCE_CLIQUE (expr) != 0)
466             bp_pack_value (bp, MR_DEPENDENCE_BASE (expr), sizeof (short) * 8);
467         }
468     }
469
470   if (CODE_CONTAINS_STRUCT (code, TS_BLOCK))
471     pack_ts_block_value_fields (ob, bp, expr);
472
473   if (CODE_CONTAINS_STRUCT (code, TS_TRANSLATION_UNIT_DECL))
474     pack_ts_translation_unit_decl_value_fields (ob, bp, expr);
475
476   if (CODE_CONTAINS_STRUCT (code, TS_OPTIMIZATION))
477     cl_optimization_stream_out (bp, TREE_OPTIMIZATION (expr));
478
479   if (CODE_CONTAINS_STRUCT (code, TS_BINFO))
480     bp_pack_var_len_unsigned (bp, vec_safe_length (BINFO_BASE_ACCESSES (expr)));
481
482   if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
483     bp_pack_var_len_unsigned (bp, CONSTRUCTOR_NELTS (expr));
484
485   if (CODE_CONTAINS_STRUCT (code, TS_TARGET_OPTION)
486       /* Don't stream these when passing things to a different target.  */
487       && !lto_stream_offload_p)
488     cl_target_option_stream_out (ob, bp, TREE_TARGET_OPTION (expr));
489
490   if (code == OMP_CLAUSE)
491     pack_ts_omp_clause_value_fields (ob, bp, expr);
492 }
493
494
495 /* Write the code and class of builtin EXPR to output block OB.  IX is
496    the index into the streamer cache where EXPR is stored.*/
497
498 void
499 streamer_write_builtin (struct output_block *ob, tree expr)
500 {
501   gcc_assert (streamer_handle_as_builtin_p (expr));
502
503   if (DECL_BUILT_IN_CLASS (expr) == BUILT_IN_MD
504       && !targetm.builtin_decl)
505     sorry ("tree bytecode streams do not support machine specific builtin "
506            "functions on this target");
507
508   streamer_write_record_start (ob, LTO_builtin_decl);
509   streamer_write_enum (ob->main_stream, built_in_class, BUILT_IN_LAST,
510                        DECL_BUILT_IN_CLASS (expr));
511   streamer_write_uhwi (ob, DECL_FUNCTION_CODE (expr));
512
513   if (DECL_ASSEMBLER_NAME_SET_P (expr))
514     {
515       /* When the assembler name of a builtin gets a user name,
516          the new name is always prefixed with '*' by
517          set_builtin_user_assembler_name.  So, to prevent the
518          reader side from adding a second '*', we omit it here.  */
519       const char *str = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (expr));
520       if (strlen (str) > 1 && str[0] == '*')
521         streamer_write_string (ob, ob->main_stream, &str[1], true);
522       else
523         streamer_write_string (ob, ob->main_stream, NULL, true);
524     }
525   else
526     streamer_write_string (ob, ob->main_stream, NULL, true);
527 }
528
529
530 /* Emit the chain of tree nodes starting at T.  OB is the output block
531    to write to.  REF_P is true if chain elements should be emitted
532    as references.  */
533
534 void
535 streamer_write_chain (struct output_block *ob, tree t, bool ref_p)
536 {
537   while (t)
538     {
539       /* We avoid outputting external vars or functions by reference
540          to the global decls section as we do not want to have them
541          enter decl merging.  This is, of course, only for the call
542          for streaming BLOCK_VARS, but other callers are safe.
543          See also lto-streamer-out.c:DFS_write_tree_body.  */
544       if (VAR_OR_FUNCTION_DECL_P (t)
545           && DECL_EXTERNAL (t))
546         stream_write_tree_shallow_non_ref (ob, t, ref_p);
547       else
548         stream_write_tree (ob, t, ref_p);
549
550       t = TREE_CHAIN (t);
551     }
552
553   /* Write a sentinel to terminate the chain.  */
554   stream_write_tree (ob, NULL_TREE, ref_p);
555 }
556
557
558 /* Write all pointer fields in the TS_COMMON structure of EXPR to output
559    block OB.  If REF_P is true, write a reference to EXPR's pointer
560    fields.  */
561
562 static void
563 write_ts_common_tree_pointers (struct output_block *ob, tree expr, bool ref_p)
564 {
565   if (TREE_CODE (expr) != IDENTIFIER_NODE)
566     stream_write_tree (ob, TREE_TYPE (expr), ref_p);
567 }
568
569
570 /* Write all pointer fields in the TS_VECTOR structure of EXPR to output
571    block OB.  If REF_P is true, write a reference to EXPR's pointer
572    fields.  */
573
574 static void
575 write_ts_vector_tree_pointers (struct output_block *ob, tree expr, bool ref_p)
576 {
577   unsigned i;
578   /* Note that the number of elements for EXPR has already been emitted
579      in EXPR's header (see streamer_write_tree_header).  */
580   for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
581     stream_write_tree (ob, VECTOR_CST_ELT (expr, i), ref_p);
582 }
583
584
585 /* Write all pointer fields in the TS_COMPLEX structure of EXPR to output
586    block OB.  If REF_P is true, write a reference to EXPR's pointer
587    fields.  */
588
589 static void
590 write_ts_complex_tree_pointers (struct output_block *ob, tree expr, bool ref_p)
591 {
592   stream_write_tree (ob, TREE_REALPART (expr), ref_p);
593   stream_write_tree (ob, TREE_IMAGPART (expr), ref_p);
594 }
595
596
597 /* Write all pointer fields in the TS_DECL_MINIMAL structure of EXPR
598    to output block OB.  If REF_P is true, write a reference to EXPR's
599    pointer fields.  */
600
601 static void
602 write_ts_decl_minimal_tree_pointers (struct output_block *ob, tree expr,
603                                      bool ref_p)
604 {
605   /* Drop names that were created for anonymous entities.  */
606   if (DECL_NAME (expr)
607       && TREE_CODE (DECL_NAME (expr)) == IDENTIFIER_NODE
608       && ANON_AGGRNAME_P (DECL_NAME (expr)))
609     stream_write_tree (ob, NULL_TREE, ref_p);
610   else
611     stream_write_tree (ob, DECL_NAME (expr), ref_p);
612   stream_write_tree (ob, DECL_CONTEXT (expr), ref_p);
613 }
614
615
616 /* Write all pointer fields in the TS_DECL_COMMON structure of EXPR to
617    output block OB.  If REF_P is true, write a reference to EXPR's
618    pointer fields.  */
619
620 static void
621 write_ts_decl_common_tree_pointers (struct output_block *ob, tree expr,
622                                     bool ref_p)
623 {
624   stream_write_tree (ob, DECL_SIZE (expr), ref_p);
625   stream_write_tree (ob, DECL_SIZE_UNIT (expr), ref_p);
626
627   /* Note, DECL_INITIAL is not handled here.  Since DECL_INITIAL needs
628      special handling in LTO, it must be handled by streamer hooks.  */
629
630   stream_write_tree (ob, DECL_ATTRIBUTES (expr), ref_p);
631
632   /* Do not stream DECL_ABSTRACT_ORIGIN.  We cannot handle debug information
633      for early inlining so drop it on the floor instead of ICEing in
634      dwarf2out.c.  */
635
636   if ((TREE_CODE (expr) == VAR_DECL
637        || TREE_CODE (expr) == PARM_DECL)
638       && DECL_HAS_VALUE_EXPR_P (expr))
639     stream_write_tree (ob, DECL_VALUE_EXPR (expr), ref_p);
640
641   if (TREE_CODE (expr) == VAR_DECL)
642     stream_write_tree (ob, DECL_DEBUG_EXPR (expr), ref_p);
643 }
644
645
646 /* Write all pointer fields in the TS_DECL_NON_COMMON structure of
647    EXPR to output block OB.  If REF_P is true, write a reference to EXPR's
648    pointer fields.  */
649
650 static void
651 write_ts_decl_non_common_tree_pointers (struct output_block *ob, tree expr,
652                                         bool ref_p)
653 {
654   if (TREE_CODE (expr) == TYPE_DECL)
655     stream_write_tree (ob, DECL_ORIGINAL_TYPE (expr), ref_p);
656 }
657
658
659 /* Write all pointer fields in the TS_DECL_WITH_VIS structure of EXPR
660    to output block OB.  If REF_P is true, write a reference to EXPR's
661    pointer fields.  */
662
663 static void
664 write_ts_decl_with_vis_tree_pointers (struct output_block *ob, tree expr,
665                                       bool ref_p)
666 {
667   /* Make sure we don't inadvertently set the assembler name.  */
668   if (DECL_ASSEMBLER_NAME_SET_P (expr))
669     stream_write_tree (ob, DECL_ASSEMBLER_NAME (expr), ref_p);
670   else
671     stream_write_tree (ob, NULL_TREE, false);
672 }
673
674
675 /* Write all pointer fields in the TS_FIELD_DECL structure of EXPR to
676    output block OB.  If REF_P is true, write a reference to EXPR's
677    pointer fields.  */
678
679 static void
680 write_ts_field_decl_tree_pointers (struct output_block *ob, tree expr,
681                                    bool ref_p)
682 {
683   stream_write_tree (ob, DECL_FIELD_OFFSET (expr), ref_p);
684   stream_write_tree (ob, DECL_BIT_FIELD_TYPE (expr), ref_p);
685   stream_write_tree (ob, DECL_BIT_FIELD_REPRESENTATIVE (expr), ref_p);
686   stream_write_tree (ob, DECL_FIELD_BIT_OFFSET (expr), ref_p);
687   stream_write_tree (ob, DECL_FCONTEXT (expr), ref_p);
688 }
689
690
691 /* Write all pointer fields in the TS_FUNCTION_DECL structure of EXPR
692    to output block OB.  If REF_P is true, write a reference to EXPR's
693    pointer fields.  */
694
695 static void
696 write_ts_function_decl_tree_pointers (struct output_block *ob, tree expr,
697                                       bool ref_p)
698 {
699   stream_write_tree (ob, DECL_VINDEX (expr), ref_p);
700   /* DECL_STRUCT_FUNCTION is handled by lto_output_function.  */
701   stream_write_tree (ob, DECL_FUNCTION_PERSONALITY (expr), ref_p);
702   /* Don't stream these when passing things to a different target.  */
703   if (!lto_stream_offload_p)
704     stream_write_tree (ob, DECL_FUNCTION_SPECIFIC_TARGET (expr), ref_p);
705   stream_write_tree (ob, DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr), ref_p);
706 }
707
708
709 /* Write all pointer fields in the TS_TYPE_COMMON structure of EXPR to
710    output block OB.  If REF_P is true, write a reference to EXPR's
711    pointer fields.  */
712
713 static void
714 write_ts_type_common_tree_pointers (struct output_block *ob, tree expr,
715                                     bool ref_p)
716 {
717   stream_write_tree (ob, TYPE_SIZE (expr), ref_p);
718   stream_write_tree (ob, TYPE_SIZE_UNIT (expr), ref_p);
719   stream_write_tree (ob, TYPE_ATTRIBUTES (expr), ref_p);
720   stream_write_tree (ob, TYPE_NAME (expr), ref_p);
721   /* Do not stream TYPE_POINTER_TO or TYPE_REFERENCE_TO.  They will be
722      reconstructed during fixup.  */
723   /* Do not stream TYPE_NEXT_VARIANT, we reconstruct the variant lists
724      during fixup.  */
725   stream_write_tree (ob, TYPE_MAIN_VARIANT (expr), ref_p);
726   stream_write_tree (ob, TYPE_CONTEXT (expr), ref_p);
727   /* TYPE_CANONICAL is re-computed during type merging, so no need
728      to stream it here.  */
729   stream_write_tree (ob, TYPE_STUB_DECL (expr), ref_p);
730 }
731
732 /* Write all pointer fields in the TS_TYPE_NON_COMMON structure of EXPR
733    to output block OB.  If REF_P is true, write a reference to EXPR's
734    pointer fields.  */
735
736 static void
737 write_ts_type_non_common_tree_pointers (struct output_block *ob, tree expr,
738                                         bool ref_p)
739 {
740   if (TREE_CODE (expr) == ENUMERAL_TYPE)
741     stream_write_tree (ob, TYPE_VALUES (expr), ref_p);
742   else if (TREE_CODE (expr) == ARRAY_TYPE)
743     stream_write_tree (ob, TYPE_DOMAIN (expr), ref_p);
744   else if (RECORD_OR_UNION_TYPE_P (expr))
745     streamer_write_chain (ob, TYPE_FIELDS (expr), ref_p);
746   else if (TREE_CODE (expr) == FUNCTION_TYPE
747            || TREE_CODE (expr) == METHOD_TYPE)
748     stream_write_tree (ob, TYPE_ARG_TYPES (expr), ref_p);
749
750   if (!POINTER_TYPE_P (expr))
751     stream_write_tree (ob, TYPE_MINVAL (expr), ref_p);
752   stream_write_tree (ob, TYPE_MAXVAL (expr), ref_p);
753   if (RECORD_OR_UNION_TYPE_P (expr))
754     stream_write_tree (ob, TYPE_BINFO (expr), ref_p);
755 }
756
757
758 /* Write all pointer fields in the TS_LIST structure of EXPR to output
759    block OB.  If REF_P is true, write a reference to EXPR's pointer
760    fields.  */
761
762 static void
763 write_ts_list_tree_pointers (struct output_block *ob, tree expr, bool ref_p)
764 {
765   stream_write_tree (ob, TREE_PURPOSE (expr), ref_p);
766   stream_write_tree (ob, TREE_VALUE (expr), ref_p);
767   stream_write_tree (ob, TREE_CHAIN (expr), ref_p);
768 }
769
770
771 /* Write all pointer fields in the TS_VEC structure of EXPR to output
772    block OB.  If REF_P is true, write a reference to EXPR's pointer
773    fields.  */
774
775 static void
776 write_ts_vec_tree_pointers (struct output_block *ob, tree expr, bool ref_p)
777 {
778   int i;
779
780   /* Note that the number of slots for EXPR has already been emitted
781      in EXPR's header (see streamer_write_tree_header).  */
782   for (i = 0; i < TREE_VEC_LENGTH (expr); i++)
783     stream_write_tree (ob, TREE_VEC_ELT (expr, i), ref_p);
784 }
785
786
787 /* Write all pointer fields in the TS_EXP structure of EXPR to output
788    block OB.  If REF_P is true, write a reference to EXPR's pointer
789    fields.  */
790
791 static void
792 write_ts_exp_tree_pointers (struct output_block *ob, tree expr, bool ref_p)
793 {
794   int i;
795
796   for (i = 0; i < TREE_OPERAND_LENGTH (expr); i++)
797     stream_write_tree (ob, TREE_OPERAND (expr, i), ref_p);
798   stream_write_tree (ob, TREE_BLOCK (expr), ref_p);
799 }
800
801
802 /* Write all pointer fields in the TS_BLOCK structure of EXPR to output
803    block OB.  If REF_P is true, write a reference to EXPR's pointer
804    fields.  */
805
806 static void
807 write_ts_block_tree_pointers (struct output_block *ob, tree expr, bool ref_p)
808 {
809   streamer_write_chain (ob, BLOCK_VARS (expr), ref_p);
810
811   stream_write_tree (ob, BLOCK_SUPERCONTEXT (expr), ref_p);
812
813   /* Stream BLOCK_ABSTRACT_ORIGIN for the limited cases we can handle - those
814      that represent inlined function scopes.
815      For the rest them on the floor instead of ICEing in dwarf2out.c.  */
816   if (inlined_function_outer_scope_p (expr))
817     {
818       tree ultimate_origin = block_ultimate_origin (expr);
819       stream_write_tree (ob, ultimate_origin, ref_p);
820     }
821   else
822     stream_write_tree (ob, NULL_TREE, ref_p);
823   /* Do not stream BLOCK_NONLOCALIZED_VARS.  We cannot handle debug information
824      for early inlined BLOCKs so drop it on the floor instead of ICEing in
825      dwarf2out.c.  */
826
827   /* BLOCK_FRAGMENT_ORIGIN and BLOCK_FRAGMENT_CHAIN is not live at LTO
828      streaming time.  */
829
830   /* Do not output BLOCK_SUBBLOCKS.  Instead on streaming-in this
831      list is re-constructed from BLOCK_SUPERCONTEXT.  */
832 }
833
834
835 /* Write all pointer fields in the TS_BINFO structure of EXPR to output
836    block OB.  If REF_P is true, write a reference to EXPR's pointer
837    fields.  */
838
839 static void
840 write_ts_binfo_tree_pointers (struct output_block *ob, tree expr, bool ref_p)
841 {
842   unsigned i;
843   tree t;
844
845   /* Note that the number of BINFO slots has already been emitted in
846      EXPR's header (see streamer_write_tree_header) because this length
847      is needed to build the empty BINFO node on the reader side.  */
848   FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (expr), i, t)
849     stream_write_tree (ob, t, ref_p);
850   stream_write_tree (ob, NULL_TREE, false);
851
852   stream_write_tree (ob, BINFO_OFFSET (expr), ref_p);
853   stream_write_tree (ob, BINFO_VTABLE (expr), ref_p);
854   stream_write_tree (ob, BINFO_VPTR_FIELD (expr), ref_p);
855
856   /* The number of BINFO_BASE_ACCESSES has already been emitted in
857      EXPR's bitfield section.  */
858   FOR_EACH_VEC_SAFE_ELT (BINFO_BASE_ACCESSES (expr), i, t)
859     stream_write_tree (ob, t, ref_p);
860
861   /* Do not walk BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX
862      and BINFO_VPTR_INDEX; these are used by C++ FE only.  */
863 }
864
865
866 /* Write all pointer fields in the TS_CONSTRUCTOR structure of EXPR to
867    output block OB.  If REF_P is true, write a reference to EXPR's
868    pointer fields.  */
869
870 static void
871 write_ts_constructor_tree_pointers (struct output_block *ob, tree expr,
872                                     bool ref_p)
873 {
874   unsigned i;
875   tree index, value;
876
877   FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (expr), i, index, value)
878     {
879       stream_write_tree (ob, index, ref_p);
880       stream_write_tree (ob, value, ref_p);
881     }
882 }
883
884
885 /* Write all pointer fields in the TS_OMP_CLAUSE structure of EXPR
886    to output block OB.  If REF_P is true, write a reference to EXPR's
887    pointer fields.  */
888
889 static void
890 write_ts_omp_clause_tree_pointers (struct output_block *ob, tree expr,
891                                    bool ref_p)
892 {
893   int i;
894   for (i = 0; i < omp_clause_num_ops[OMP_CLAUSE_CODE (expr)]; i++)
895     stream_write_tree (ob, OMP_CLAUSE_OPERAND (expr, i), ref_p);
896   if (OMP_CLAUSE_CODE (expr) == OMP_CLAUSE_REDUCTION)
897     {
898       /* We don't stream these right now, handle it if streaming
899          of them is needed.  */
900       gcc_assert (OMP_CLAUSE_REDUCTION_GIMPLE_INIT (expr) == NULL);
901       gcc_assert (OMP_CLAUSE_REDUCTION_GIMPLE_MERGE (expr) == NULL);
902     }
903   stream_write_tree (ob, OMP_CLAUSE_CHAIN (expr), ref_p);
904 }
905
906
907 /* Write all pointer fields in EXPR to output block OB.  If REF_P is true,
908    the leaves of EXPR are emitted as references.  */
909
910 void
911 streamer_write_tree_body (struct output_block *ob, tree expr, bool ref_p)
912 {
913   enum tree_code code;
914
915   lto_stats.num_tree_bodies_output++;
916
917   code = TREE_CODE (expr);
918
919   if (CODE_CONTAINS_STRUCT (code, TS_TYPED))
920     write_ts_common_tree_pointers (ob, expr, ref_p);
921
922   if (CODE_CONTAINS_STRUCT (code, TS_VECTOR))
923     write_ts_vector_tree_pointers (ob, expr, ref_p);
924
925   if (CODE_CONTAINS_STRUCT (code, TS_COMPLEX))
926     write_ts_complex_tree_pointers (ob, expr, ref_p);
927
928   if (CODE_CONTAINS_STRUCT (code, TS_DECL_MINIMAL))
929     write_ts_decl_minimal_tree_pointers (ob, expr, ref_p);
930
931   if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
932     write_ts_decl_common_tree_pointers (ob, expr, ref_p);
933
934   if (CODE_CONTAINS_STRUCT (code, TS_DECL_NON_COMMON))
935     write_ts_decl_non_common_tree_pointers (ob, expr, ref_p);
936
937   if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
938     write_ts_decl_with_vis_tree_pointers (ob, expr, ref_p);
939
940   if (CODE_CONTAINS_STRUCT (code, TS_FIELD_DECL))
941     write_ts_field_decl_tree_pointers (ob, expr, ref_p);
942
943   if (CODE_CONTAINS_STRUCT (code, TS_FUNCTION_DECL))
944     write_ts_function_decl_tree_pointers (ob, expr, ref_p);
945
946   if (CODE_CONTAINS_STRUCT (code, TS_TYPE_COMMON))
947     write_ts_type_common_tree_pointers (ob, expr, ref_p);
948
949   if (CODE_CONTAINS_STRUCT (code, TS_TYPE_NON_COMMON))
950     write_ts_type_non_common_tree_pointers (ob, expr, ref_p);
951
952   if (CODE_CONTAINS_STRUCT (code, TS_LIST))
953     write_ts_list_tree_pointers (ob, expr, ref_p);
954
955   if (CODE_CONTAINS_STRUCT (code, TS_VEC))
956     write_ts_vec_tree_pointers (ob, expr, ref_p);
957
958   if (CODE_CONTAINS_STRUCT (code, TS_EXP))
959     write_ts_exp_tree_pointers (ob, expr, ref_p);
960
961   if (CODE_CONTAINS_STRUCT (code, TS_BLOCK))
962     write_ts_block_tree_pointers (ob, expr, ref_p);
963
964   if (CODE_CONTAINS_STRUCT (code, TS_BINFO))
965     write_ts_binfo_tree_pointers (ob, expr, ref_p);
966
967   if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
968     write_ts_constructor_tree_pointers (ob, expr, ref_p);
969
970   if (code == OMP_CLAUSE)
971     write_ts_omp_clause_tree_pointers (ob, expr, ref_p);
972 }
973
974
975 /* Emit header information for tree EXPR to output block OB.  The header
976    contains everything needed to instantiate an empty skeleton for
977    EXPR on the reading side.  IX is the index into the streamer cache
978    where EXPR is stored.  */
979
980 void
981 streamer_write_tree_header (struct output_block *ob, tree expr)
982 {
983   enum LTO_tags tag;
984   enum tree_code code;
985
986   /* We should not see any tree nodes not handled by the streamer.  */
987   code = TREE_CODE (expr);
988
989   /* The header of a tree node consists of its tag, the size of
990      the node, and any other information needed to instantiate
991      EXPR on the reading side (such as the number of slots in
992      variable sized nodes).  */
993   tag = lto_tree_code_to_tag (code);
994   streamer_write_record_start (ob, tag);
995
996   /* The following will cause bootstrap miscomparisons.  Enable with care.  */
997 #ifdef LTO_STREAMER_DEBUG
998   /* This is used mainly for debugging purposes.  When the reader
999      and the writer do not agree on a streamed node, the pointer
1000      value for EXPR can be used to track down the differences in
1001      the debugger.  */
1002   gcc_assert ((HOST_WIDE_INT) (intptr_t) expr == (intptr_t) expr);
1003   streamer_write_hwi (ob, (HOST_WIDE_INT) (intptr_t) expr);
1004 #endif
1005
1006   /* The text in strings and identifiers are completely emitted in
1007      the header.  */
1008   if (CODE_CONTAINS_STRUCT (code, TS_STRING))
1009     streamer_write_string_cst (ob, ob->main_stream, expr);
1010   else if (CODE_CONTAINS_STRUCT (code, TS_IDENTIFIER))
1011     write_identifier (ob, ob->main_stream, expr);
1012   else if (CODE_CONTAINS_STRUCT (code, TS_VECTOR))
1013     streamer_write_hwi (ob, VECTOR_CST_NELTS (expr));
1014   else if (CODE_CONTAINS_STRUCT (code, TS_VEC))
1015     streamer_write_hwi (ob, TREE_VEC_LENGTH (expr));
1016   else if (CODE_CONTAINS_STRUCT (code, TS_BINFO))
1017     streamer_write_uhwi (ob, BINFO_N_BASE_BINFOS (expr));
1018   else if (TREE_CODE (expr) == CALL_EXPR)
1019     streamer_write_uhwi (ob, call_expr_nargs (expr));
1020   else if (TREE_CODE (expr) == OMP_CLAUSE)
1021     streamer_write_uhwi (ob, OMP_CLAUSE_CODE (expr));
1022   else if (CODE_CONTAINS_STRUCT (code, TS_INT_CST))
1023     {
1024       gcc_checking_assert (TREE_INT_CST_NUNITS (expr));
1025       streamer_write_uhwi (ob, TREE_INT_CST_NUNITS (expr));
1026       streamer_write_uhwi (ob, TREE_INT_CST_EXT_NUNITS (expr));
1027     }
1028 }
1029
1030
1031 /* Emit the integer constant CST to output block OB.  If REF_P is true,
1032    CST's type will be emitted as a reference.  */
1033
1034 void
1035 streamer_write_integer_cst (struct output_block *ob, tree cst, bool ref_p)
1036 {
1037   int i;
1038   int len = TREE_INT_CST_NUNITS (cst);
1039   gcc_assert (!TREE_OVERFLOW (cst));
1040   streamer_write_record_start (ob, LTO_integer_cst);
1041   stream_write_tree (ob, TREE_TYPE (cst), ref_p);
1042   /* We're effectively streaming a non-sign-extended wide_int here,
1043      so there's no need to stream TREE_INT_CST_EXT_NUNITS or any
1044      array members beyond LEN.  We'll recreate the tree from the
1045      wide_int and the type.  */
1046   streamer_write_uhwi (ob, len);
1047   for (i = 0; i < len; i++)
1048     streamer_write_hwi (ob, TREE_INT_CST_ELT (cst, i));
1049 }