1 /* Routines for reading trees from a file stream.
3 Copyright 2011 Free Software Foundation, Inc.
4 Contributed by Diego Novillo <dnovillo@google.com>
6 This file is part of GCC.
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
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
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/>. */
24 #include "coretypes.h"
25 #include "diagnostic.h"
27 #include "tree-flow.h"
28 #include "tree-streamer.h"
29 #include "data-streamer.h"
30 #include "streamer-hooks.h"
31 #include "lto-streamer.h"
33 /* Read a STRING_CST from the string table in DATA_IN using input
37 input_string_cst (struct data_in *data_in, struct lto_input_block *ib)
42 ptr = input_string_internal (data_in, ib, &len);
45 return build_string (len, ptr);
49 /* Read an IDENTIFIER from the string table in DATA_IN using input
53 input_identifier (struct data_in *data_in, struct lto_input_block *ib)
58 ptr = input_string_internal (data_in, ib, &len);
61 return get_identifier_with_length (ptr, len);
65 /* Read a chain of tree nodes from input block IB. DATA_IN contains
66 tables and descriptors for the file being read. */
69 lto_input_chain (struct lto_input_block *ib, struct data_in *data_in)
72 tree first, prev, curr;
74 first = prev = NULL_TREE;
75 count = lto_input_sleb128 (ib);
76 for (i = 0; i < count; i++)
78 curr = lto_input_tree (ib, data_in);
80 TREE_CHAIN (prev) = curr;
84 TREE_CHAIN (curr) = NULL_TREE;
92 /* Unpack all the non-pointer fields of the TS_BASE structure of
93 expression EXPR from bitpack BP. */
96 unpack_ts_base_value_fields (struct bitpack_d *bp, tree expr)
98 /* Note that the code for EXPR has already been unpacked to create EXPR in
99 lto_materialize_tree. */
102 TREE_SIDE_EFFECTS (expr) = (unsigned) bp_unpack_value (bp, 1);
103 TREE_CONSTANT (expr) = (unsigned) bp_unpack_value (bp, 1);
104 TREE_READONLY (expr) = (unsigned) bp_unpack_value (bp, 1);
106 /* TREE_PUBLIC is used on types to indicate that the type
107 has a TYPE_CACHED_VALUES vector. This is not streamed out,
108 so we skip it here. */
109 TREE_PUBLIC (expr) = (unsigned) bp_unpack_value (bp, 1);
112 bp_unpack_value (bp, 4);
113 TREE_ADDRESSABLE (expr) = (unsigned) bp_unpack_value (bp, 1);
114 TREE_THIS_VOLATILE (expr) = (unsigned) bp_unpack_value (bp, 1);
116 DECL_UNSIGNED (expr) = (unsigned) bp_unpack_value (bp, 1);
117 else if (TYPE_P (expr))
118 TYPE_UNSIGNED (expr) = (unsigned) bp_unpack_value (bp, 1);
120 bp_unpack_value (bp, 1);
121 TREE_ASM_WRITTEN (expr) = (unsigned) bp_unpack_value (bp, 1);
123 TYPE_ARTIFICIAL (expr) = (unsigned) bp_unpack_value (bp, 1);
125 TREE_NO_WARNING (expr) = (unsigned) bp_unpack_value (bp, 1);
126 TREE_USED (expr) = (unsigned) bp_unpack_value (bp, 1);
127 TREE_NOTHROW (expr) = (unsigned) bp_unpack_value (bp, 1);
128 TREE_STATIC (expr) = (unsigned) bp_unpack_value (bp, 1);
129 TREE_PRIVATE (expr) = (unsigned) bp_unpack_value (bp, 1);
130 TREE_PROTECTED (expr) = (unsigned) bp_unpack_value (bp, 1);
131 TREE_DEPRECATED (expr) = (unsigned) bp_unpack_value (bp, 1);
133 TYPE_SATURATING (expr) = (unsigned) bp_unpack_value (bp, 1);
134 else if (TREE_CODE (expr) == SSA_NAME)
135 SSA_NAME_IS_DEFAULT_DEF (expr) = (unsigned) bp_unpack_value (bp, 1);
137 bp_unpack_value (bp, 1);
141 /* Unpack all the non-pointer fields of the TS_REAL_CST structure of
142 expression EXPR from bitpack BP. */
145 unpack_ts_real_cst_value_fields (struct bitpack_d *bp, tree expr)
151 r.cl = (unsigned) bp_unpack_value (bp, 2);
152 r.decimal = (unsigned) bp_unpack_value (bp, 1);
153 r.sign = (unsigned) bp_unpack_value (bp, 1);
154 r.signalling = (unsigned) bp_unpack_value (bp, 1);
155 r.canonical = (unsigned) bp_unpack_value (bp, 1);
156 r.uexp = (unsigned) bp_unpack_value (bp, EXP_BITS);
157 for (i = 0; i < SIGSZ; i++)
158 r.sig[i] = (unsigned long) bp_unpack_value (bp, HOST_BITS_PER_LONG);
160 rp = ggc_alloc_real_value ();
161 memcpy (rp, &r, sizeof (REAL_VALUE_TYPE));
162 TREE_REAL_CST_PTR (expr) = rp;
166 /* Unpack all the non-pointer fields of the TS_FIXED_CST structure of
167 expression EXPR from bitpack BP. */
170 unpack_ts_fixed_cst_value_fields (struct bitpack_d *bp, tree expr)
172 struct fixed_value fv;
174 fv.mode = bp_unpack_enum (bp, machine_mode, MAX_MACHINE_MODE);
175 fv.data.low = bp_unpack_var_len_int (bp);
176 fv.data.high = bp_unpack_var_len_int (bp);
177 TREE_FIXED_CST (expr) = fv;
181 /* Unpack all the non-pointer fields of the TS_DECL_COMMON structure
182 of expression EXPR from bitpack BP. */
185 unpack_ts_decl_common_value_fields (struct bitpack_d *bp, tree expr)
187 DECL_MODE (expr) = bp_unpack_enum (bp, machine_mode, MAX_MACHINE_MODE);
188 DECL_NONLOCAL (expr) = (unsigned) bp_unpack_value (bp, 1);
189 DECL_VIRTUAL_P (expr) = (unsigned) bp_unpack_value (bp, 1);
190 DECL_IGNORED_P (expr) = (unsigned) bp_unpack_value (bp, 1);
191 DECL_ABSTRACT (expr) = (unsigned) bp_unpack_value (bp, 1);
192 DECL_ARTIFICIAL (expr) = (unsigned) bp_unpack_value (bp, 1);
193 DECL_USER_ALIGN (expr) = (unsigned) bp_unpack_value (bp, 1);
194 DECL_PRESERVE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
195 DECL_DEBUG_EXPR_IS_FROM (expr) = (unsigned) bp_unpack_value (bp, 1);
196 DECL_EXTERNAL (expr) = (unsigned) bp_unpack_value (bp, 1);
197 DECL_GIMPLE_REG_P (expr) = (unsigned) bp_unpack_value (bp, 1);
198 DECL_ALIGN (expr) = (unsigned) bp_unpack_var_len_unsigned (bp);
200 if (TREE_CODE (expr) == LABEL_DECL)
202 DECL_ERROR_ISSUED (expr) = (unsigned) bp_unpack_value (bp, 1);
203 EH_LANDING_PAD_NR (expr) = (int) bp_unpack_var_len_unsigned (bp);
205 /* Always assume an initial value of -1 for LABEL_DECL_UID to
206 force gimple_set_bb to recreate label_to_block_map. */
207 LABEL_DECL_UID (expr) = -1;
210 if (TREE_CODE (expr) == FIELD_DECL)
212 DECL_PACKED (expr) = (unsigned) bp_unpack_value (bp, 1);
213 DECL_NONADDRESSABLE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
214 expr->decl_common.off_align = bp_unpack_value (bp, 8);
217 if (TREE_CODE (expr) == RESULT_DECL
218 || TREE_CODE (expr) == PARM_DECL
219 || TREE_CODE (expr) == VAR_DECL)
221 DECL_BY_REFERENCE (expr) = (unsigned) bp_unpack_value (bp, 1);
222 if (TREE_CODE (expr) == VAR_DECL
223 || TREE_CODE (expr) == PARM_DECL)
224 DECL_HAS_VALUE_EXPR_P (expr) = (unsigned) bp_unpack_value (bp, 1);
225 DECL_RESTRICTED_P (expr) = (unsigned) bp_unpack_value (bp, 1);
230 /* Unpack all the non-pointer fields of the TS_DECL_WRTL structure
231 of expression EXPR from bitpack BP. */
234 unpack_ts_decl_wrtl_value_fields (struct bitpack_d *bp, tree expr)
236 DECL_REGISTER (expr) = (unsigned) bp_unpack_value (bp, 1);
240 /* Unpack all the non-pointer fields of the TS_DECL_WITH_VIS structure
241 of expression EXPR from bitpack BP. */
244 unpack_ts_decl_with_vis_value_fields (struct bitpack_d *bp, tree expr)
246 DECL_DEFER_OUTPUT (expr) = (unsigned) bp_unpack_value (bp, 1);
247 DECL_COMMON (expr) = (unsigned) bp_unpack_value (bp, 1);
248 DECL_DLLIMPORT_P (expr) = (unsigned) bp_unpack_value (bp, 1);
249 DECL_WEAK (expr) = (unsigned) bp_unpack_value (bp, 1);
250 DECL_SEEN_IN_BIND_EXPR_P (expr) = (unsigned) bp_unpack_value (bp, 1);
251 DECL_COMDAT (expr) = (unsigned) bp_unpack_value (bp, 1);
252 DECL_VISIBILITY (expr) = (enum symbol_visibility) bp_unpack_value (bp, 2);
253 DECL_VISIBILITY_SPECIFIED (expr) = (unsigned) bp_unpack_value (bp, 1);
255 if (TREE_CODE (expr) == VAR_DECL)
257 DECL_HARD_REGISTER (expr) = (unsigned) bp_unpack_value (bp, 1);
258 DECL_IN_TEXT_SECTION (expr) = (unsigned) bp_unpack_value (bp, 1);
259 DECL_IN_CONSTANT_POOL (expr) = (unsigned) bp_unpack_value (bp, 1);
260 DECL_TLS_MODEL (expr) = (enum tls_model) bp_unpack_value (bp, 3);
263 if (VAR_OR_FUNCTION_DECL_P (expr))
266 p = (priority_type) bp_unpack_var_len_unsigned (bp);
267 SET_DECL_INIT_PRIORITY (expr, p);
272 /* Unpack all the non-pointer fields of the TS_FUNCTION_DECL structure
273 of expression EXPR from bitpack BP. */
276 unpack_ts_function_decl_value_fields (struct bitpack_d *bp, tree expr)
278 DECL_BUILT_IN_CLASS (expr) = bp_unpack_enum (bp, built_in_class,
280 DECL_STATIC_CONSTRUCTOR (expr) = (unsigned) bp_unpack_value (bp, 1);
281 DECL_STATIC_DESTRUCTOR (expr) = (unsigned) bp_unpack_value (bp, 1);
282 DECL_UNINLINABLE (expr) = (unsigned) bp_unpack_value (bp, 1);
283 DECL_POSSIBLY_INLINED (expr) = (unsigned) bp_unpack_value (bp, 1);
284 DECL_IS_NOVOPS (expr) = (unsigned) bp_unpack_value (bp, 1);
285 DECL_IS_RETURNS_TWICE (expr) = (unsigned) bp_unpack_value (bp, 1);
286 DECL_IS_MALLOC (expr) = (unsigned) bp_unpack_value (bp, 1);
287 DECL_IS_OPERATOR_NEW (expr) = (unsigned) bp_unpack_value (bp, 1);
288 DECL_DECLARED_INLINE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
289 DECL_STATIC_CHAIN (expr) = (unsigned) bp_unpack_value (bp, 1);
290 DECL_NO_INLINE_WARNING_P (expr) = (unsigned) bp_unpack_value (bp, 1);
291 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (expr)
292 = (unsigned) bp_unpack_value (bp, 1);
293 DECL_NO_LIMIT_STACK (expr) = (unsigned) bp_unpack_value (bp, 1);
294 DECL_DISREGARD_INLINE_LIMITS (expr) = (unsigned) bp_unpack_value (bp, 1);
295 DECL_PURE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
296 DECL_LOOPING_CONST_OR_PURE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
297 if (DECL_BUILT_IN_CLASS (expr) != NOT_BUILT_IN)
299 DECL_FUNCTION_CODE (expr) = (enum built_in_function) bp_unpack_value (bp,
301 if (DECL_BUILT_IN_CLASS (expr) == BUILT_IN_NORMAL
302 && DECL_FUNCTION_CODE (expr) >= END_BUILTINS)
303 fatal_error ("machine independent builtin code out of range");
304 else if (DECL_BUILT_IN_CLASS (expr) == BUILT_IN_MD)
306 tree result = targetm.builtin_decl (DECL_FUNCTION_CODE (expr), true);
307 if (!result || result == error_mark_node)
308 fatal_error ("target specific builtin not available");
311 if (DECL_STATIC_DESTRUCTOR (expr))
314 p = (priority_type) bp_unpack_var_len_unsigned (bp);
315 SET_DECL_FINI_PRIORITY (expr, p);
320 /* Unpack all the non-pointer fields of the TS_TYPE_COMMON structure
321 of expression EXPR from bitpack BP. */
324 unpack_ts_type_common_value_fields (struct bitpack_d *bp, tree expr)
326 enum machine_mode mode;
328 mode = bp_unpack_enum (bp, machine_mode, MAX_MACHINE_MODE);
329 SET_TYPE_MODE (expr, mode);
330 TYPE_STRING_FLAG (expr) = (unsigned) bp_unpack_value (bp, 1);
331 TYPE_NO_FORCE_BLK (expr) = (unsigned) bp_unpack_value (bp, 1);
332 TYPE_NEEDS_CONSTRUCTING (expr) = (unsigned) bp_unpack_value (bp, 1);
333 if (RECORD_OR_UNION_TYPE_P (expr))
334 TYPE_TRANSPARENT_AGGR (expr) = (unsigned) bp_unpack_value (bp, 1);
335 TYPE_PACKED (expr) = (unsigned) bp_unpack_value (bp, 1);
336 TYPE_RESTRICT (expr) = (unsigned) bp_unpack_value (bp, 1);
337 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (expr)
338 = (unsigned) bp_unpack_value (bp, 2);
339 TYPE_USER_ALIGN (expr) = (unsigned) bp_unpack_value (bp, 1);
340 TYPE_READONLY (expr) = (unsigned) bp_unpack_value (bp, 1);
341 TYPE_PRECISION (expr) = bp_unpack_var_len_unsigned (bp);
342 TYPE_ALIGN (expr) = bp_unpack_var_len_unsigned (bp);
343 TYPE_ALIAS_SET (expr) = bp_unpack_var_len_int (bp);
347 /* Unpack all the non-pointer fields of the TS_BLOCK structure
348 of expression EXPR from bitpack BP. */
351 unpack_ts_block_value_fields (struct bitpack_d *bp, tree expr)
353 BLOCK_ABSTRACT (expr) = (unsigned) bp_unpack_value (bp, 1);
354 /* BLOCK_NUMBER is recomputed. */
357 /* Unpack all the non-pointer fields of the TS_TRANSLATION_UNIT_DECL
358 structure of expression EXPR from bitpack BP. */
361 unpack_ts_translation_unit_decl_value_fields (struct bitpack_d *bp ATTRIBUTE_UNUSED, tree expr ATTRIBUTE_UNUSED)
365 /* Unpack all the non-pointer fields in EXPR into a bit pack. */
368 unpack_value_fields (struct bitpack_d *bp, tree expr)
372 code = TREE_CODE (expr);
374 /* Note that all these functions are highly sensitive to changes in
375 the types and sizes of each of the fields being packed. */
376 unpack_ts_base_value_fields (bp, expr);
378 if (CODE_CONTAINS_STRUCT (code, TS_REAL_CST))
379 unpack_ts_real_cst_value_fields (bp, expr);
381 if (CODE_CONTAINS_STRUCT (code, TS_FIXED_CST))
382 unpack_ts_fixed_cst_value_fields (bp, expr);
384 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
385 unpack_ts_decl_common_value_fields (bp, expr);
387 if (CODE_CONTAINS_STRUCT (code, TS_DECL_WRTL))
388 unpack_ts_decl_wrtl_value_fields (bp, expr);
390 if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
391 unpack_ts_decl_with_vis_value_fields (bp, expr);
393 if (CODE_CONTAINS_STRUCT (code, TS_FUNCTION_DECL))
394 unpack_ts_function_decl_value_fields (bp, expr);
396 if (CODE_CONTAINS_STRUCT (code, TS_TYPE_COMMON))
397 unpack_ts_type_common_value_fields (bp, expr);
399 if (CODE_CONTAINS_STRUCT (code, TS_BLOCK))
400 unpack_ts_block_value_fields (bp, expr);
402 if (CODE_CONTAINS_STRUCT (code, TS_TRANSLATION_UNIT_DECL))
403 unpack_ts_translation_unit_decl_value_fields (bp, expr);
405 if (streamer_hooks.unpack_value_fields)
406 streamer_hooks.unpack_value_fields (bp, expr);
410 /* Materialize a new tree from input block IB using descriptors in
411 DATA_IN. The code for the new tree should match TAG. Store in
412 *IX_P the index into the reader cache where the new tree is stored. */
415 lto_materialize_tree (struct lto_input_block *ib, struct data_in *data_in,
421 #ifdef LTO_STREAMER_DEBUG
422 HOST_WIDEST_INT orig_address_in_writer;
427 #ifdef LTO_STREAMER_DEBUG
428 /* Read the word representing the memory address for the tree
429 as it was written by the writer. This is useful when
430 debugging differences between the writer and reader. */
431 orig_address_in_writer = lto_input_sleb128 (ib);
432 gcc_assert ((intptr_t) orig_address_in_writer == orig_address_in_writer);
435 code = lto_tag_to_tree_code (tag);
437 /* We should never see an SSA_NAME tree. Only the version numbers of
438 SSA names are ever written out. See input_ssa_names. */
439 gcc_assert (code != SSA_NAME);
441 /* Instantiate a new tree using the header data. */
442 if (CODE_CONTAINS_STRUCT (code, TS_STRING))
443 result = input_string_cst (data_in, ib);
444 else if (CODE_CONTAINS_STRUCT (code, TS_IDENTIFIER))
445 result = input_identifier (data_in, ib);
446 else if (CODE_CONTAINS_STRUCT (code, TS_VEC))
448 HOST_WIDE_INT len = lto_input_sleb128 (ib);
449 result = make_tree_vec (len);
451 else if (CODE_CONTAINS_STRUCT (code, TS_BINFO))
453 unsigned HOST_WIDE_INT len = lto_input_uleb128 (ib);
454 result = make_tree_binfo (len);
458 /* For all other nodes, see if the streamer knows how to allocate
460 if (streamer_hooks.alloc_tree)
461 result = streamer_hooks.alloc_tree (code, ib, data_in);
463 /* If the hook did not handle it, materialize the tree with a raw
465 if (result == NULL_TREE)
466 result = make_node (code);
469 #ifdef LTO_STREAMER_DEBUG
470 /* Store the original address of the tree as seen by the writer
471 in RESULT's aux field. This is useful when debugging streaming
472 problems. This way, a debugging session can be started on
473 both writer and reader with a breakpoint using this address
475 lto_orig_address_map (result, (intptr_t) orig_address_in_writer);
478 /* Read the bitpack of non-pointer values from IB. */
479 bp = lto_input_bitpack (ib);
481 /* The first word in BP contains the code of the tree that we
482 are about to read. */
483 code = (enum tree_code) bp_unpack_value (&bp, 16);
484 lto_tag_check (lto_tree_code_to_tag (code), tag);
486 /* Unpack all the value fields from BP. */
487 unpack_value_fields (&bp, result);
489 /* Enter RESULT in the reader cache. This will make RESULT
490 available so that circular references in the rest of the tree
491 structure can be resolved in subsequent calls to lto_input_tree. */
492 lto_streamer_cache_append (data_in->reader_cache, result);
498 /* Read all pointer fields in the TS_COMMON structure of EXPR from input
499 block IB. DATA_IN contains tables and descriptors for the
504 lto_input_ts_common_tree_pointers (struct lto_input_block *ib,
505 struct data_in *data_in, tree expr)
507 if (TREE_CODE (expr) != IDENTIFIER_NODE)
508 TREE_TYPE (expr) = lto_input_tree (ib, data_in);
512 /* Read all pointer fields in the TS_VECTOR structure of EXPR from input
513 block IB. DATA_IN contains tables and descriptors for the
517 lto_input_ts_vector_tree_pointers (struct lto_input_block *ib,
518 struct data_in *data_in, tree expr)
520 TREE_VECTOR_CST_ELTS (expr) = lto_input_chain (ib, data_in);
524 /* Read all pointer fields in the TS_COMPLEX structure of EXPR from input
525 block IB. DATA_IN contains tables and descriptors for the
529 lto_input_ts_complex_tree_pointers (struct lto_input_block *ib,
530 struct data_in *data_in, tree expr)
532 TREE_REALPART (expr) = lto_input_tree (ib, data_in);
533 TREE_IMAGPART (expr) = lto_input_tree (ib, data_in);
537 /* Read all pointer fields in the TS_DECL_MINIMAL structure of EXPR
538 from input block IB. DATA_IN contains tables and descriptors for the
542 lto_input_ts_decl_minimal_tree_pointers (struct lto_input_block *ib,
543 struct data_in *data_in, tree expr)
545 DECL_NAME (expr) = lto_input_tree (ib, data_in);
546 DECL_CONTEXT (expr) = lto_input_tree (ib, data_in);
547 DECL_SOURCE_LOCATION (expr) = lto_input_location (ib, data_in);
551 /* Read all pointer fields in the TS_DECL_COMMON structure of EXPR from
552 input block IB. DATA_IN contains tables and descriptors for the
556 lto_input_ts_decl_common_tree_pointers (struct lto_input_block *ib,
557 struct data_in *data_in, tree expr)
559 DECL_SIZE (expr) = lto_input_tree (ib, data_in);
560 DECL_SIZE_UNIT (expr) = lto_input_tree (ib, data_in);
561 DECL_ATTRIBUTES (expr) = lto_input_tree (ib, data_in);
563 /* Do not stream DECL_ABSTRACT_ORIGIN. We cannot handle debug information
564 for early inlining so drop it on the floor instead of ICEing in
567 if (TREE_CODE (expr) == PARM_DECL)
568 TREE_CHAIN (expr) = lto_input_chain (ib, data_in);
570 if ((TREE_CODE (expr) == VAR_DECL
571 || TREE_CODE (expr) == PARM_DECL)
572 && DECL_HAS_VALUE_EXPR_P (expr))
573 SET_DECL_VALUE_EXPR (expr, lto_input_tree (ib, data_in));
575 if (TREE_CODE (expr) == VAR_DECL)
577 tree dexpr = lto_input_tree (ib, data_in);
579 SET_DECL_DEBUG_EXPR (expr, dexpr);
584 /* Read all pointer fields in the TS_DECL_NON_COMMON structure of
585 EXPR from input block IB. DATA_IN contains tables and descriptors for the
589 lto_input_ts_decl_non_common_tree_pointers (struct lto_input_block *ib,
590 struct data_in *data_in, tree expr)
592 if (TREE_CODE (expr) == FUNCTION_DECL)
594 DECL_ARGUMENTS (expr) = lto_input_tree (ib, data_in);
595 DECL_RESULT (expr) = lto_input_tree (ib, data_in);
597 DECL_VINDEX (expr) = lto_input_tree (ib, data_in);
601 /* Read all pointer fields in the TS_DECL_WITH_VIS structure of EXPR
602 from input block IB. DATA_IN contains tables and descriptors for the
606 lto_input_ts_decl_with_vis_tree_pointers (struct lto_input_block *ib,
607 struct data_in *data_in, tree expr)
611 id = lto_input_tree (ib, data_in);
614 gcc_assert (TREE_CODE (id) == IDENTIFIER_NODE);
615 SET_DECL_ASSEMBLER_NAME (expr, id);
618 DECL_SECTION_NAME (expr) = lto_input_tree (ib, data_in);
619 DECL_COMDAT_GROUP (expr) = lto_input_tree (ib, data_in);
623 /* Read all pointer fields in the TS_FIELD_DECL structure of EXPR from
624 input block IB. DATA_IN contains tables and descriptors for the
628 lto_input_ts_field_decl_tree_pointers (struct lto_input_block *ib,
629 struct data_in *data_in, tree expr)
631 DECL_FIELD_OFFSET (expr) = lto_input_tree (ib, data_in);
632 DECL_BIT_FIELD_TYPE (expr) = lto_input_tree (ib, data_in);
633 DECL_QUALIFIER (expr) = lto_input_tree (ib, data_in);
634 DECL_FIELD_BIT_OFFSET (expr) = lto_input_tree (ib, data_in);
635 DECL_FCONTEXT (expr) = lto_input_tree (ib, data_in);
636 TREE_CHAIN (expr) = lto_input_chain (ib, data_in);
640 /* Read all pointer fields in the TS_FUNCTION_DECL structure of EXPR
641 from input block IB. DATA_IN contains tables and descriptors for the
645 lto_input_ts_function_decl_tree_pointers (struct lto_input_block *ib,
646 struct data_in *data_in, tree expr)
648 /* DECL_STRUCT_FUNCTION is handled by lto_input_function. FIXME lto,
649 maybe it should be handled here? */
650 DECL_FUNCTION_PERSONALITY (expr) = lto_input_tree (ib, data_in);
651 DECL_FUNCTION_SPECIFIC_TARGET (expr) = lto_input_tree (ib, data_in);
652 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr) = lto_input_tree (ib, data_in);
654 /* If the file contains a function with an EH personality set,
655 then it was compiled with -fexceptions. In that case, initialize
656 the backend EH machinery. */
657 if (DECL_FUNCTION_PERSONALITY (expr))
662 /* Read all pointer fields in the TS_TYPE_COMMON structure of EXPR from
663 input block IB. DATA_IN contains tables and descriptors for the file
667 lto_input_ts_type_common_tree_pointers (struct lto_input_block *ib,
668 struct data_in *data_in, tree expr)
670 TYPE_SIZE (expr) = lto_input_tree (ib, data_in);
671 TYPE_SIZE_UNIT (expr) = lto_input_tree (ib, data_in);
672 TYPE_ATTRIBUTES (expr) = lto_input_tree (ib, data_in);
673 TYPE_NAME (expr) = lto_input_tree (ib, data_in);
674 /* Do not stream TYPE_POINTER_TO or TYPE_REFERENCE_TO. They will be
675 reconstructed during fixup. */
676 /* Do not stream TYPE_NEXT_VARIANT, we reconstruct the variant lists
678 TYPE_MAIN_VARIANT (expr) = lto_input_tree (ib, data_in);
679 TYPE_CONTEXT (expr) = lto_input_tree (ib, data_in);
680 /* TYPE_CANONICAL gets re-computed during type merging. */
681 TYPE_CANONICAL (expr) = NULL_TREE;
682 TYPE_STUB_DECL (expr) = lto_input_tree (ib, data_in);
685 /* Read all pointer fields in the TS_TYPE_NON_COMMON structure of EXPR
686 from input block IB. DATA_IN contains tables and descriptors for the
690 lto_input_ts_type_non_common_tree_pointers (struct lto_input_block *ib,
691 struct data_in *data_in,
694 if (TREE_CODE (expr) == ENUMERAL_TYPE)
695 TYPE_VALUES (expr) = lto_input_tree (ib, data_in);
696 else if (TREE_CODE (expr) == ARRAY_TYPE)
697 TYPE_DOMAIN (expr) = lto_input_tree (ib, data_in);
698 else if (RECORD_OR_UNION_TYPE_P (expr))
699 TYPE_FIELDS (expr) = lto_input_tree (ib, data_in);
700 else if (TREE_CODE (expr) == FUNCTION_TYPE
701 || TREE_CODE (expr) == METHOD_TYPE)
702 TYPE_ARG_TYPES (expr) = lto_input_tree (ib, data_in);
704 if (!POINTER_TYPE_P (expr))
705 TYPE_MINVAL (expr) = lto_input_tree (ib, data_in);
706 TYPE_MAXVAL (expr) = lto_input_tree (ib, data_in);
707 if (RECORD_OR_UNION_TYPE_P (expr))
708 TYPE_BINFO (expr) = lto_input_tree (ib, data_in);
712 /* Read all pointer fields in the TS_LIST structure of EXPR from input
713 block IB. DATA_IN contains tables and descriptors for the
717 lto_input_ts_list_tree_pointers (struct lto_input_block *ib,
718 struct data_in *data_in, tree expr)
720 TREE_PURPOSE (expr) = lto_input_tree (ib, data_in);
721 TREE_VALUE (expr) = lto_input_tree (ib, data_in);
722 TREE_CHAIN (expr) = lto_input_chain (ib, data_in);
726 /* Read all pointer fields in the TS_VEC structure of EXPR from input
727 block IB. DATA_IN contains tables and descriptors for the
731 lto_input_ts_vec_tree_pointers (struct lto_input_block *ib,
732 struct data_in *data_in, tree expr)
736 /* Note that TREE_VEC_LENGTH was read by lto_materialize_tree to
738 for (i = 0; i < TREE_VEC_LENGTH (expr); i++)
739 TREE_VEC_ELT (expr, i) = lto_input_tree (ib, data_in);
743 /* Read all pointer fields in the TS_EXP structure of EXPR from input
744 block IB. DATA_IN contains tables and descriptors for the
749 lto_input_ts_exp_tree_pointers (struct lto_input_block *ib,
750 struct data_in *data_in, tree expr)
755 length = lto_input_sleb128 (ib);
756 gcc_assert (length == TREE_OPERAND_LENGTH (expr));
758 for (i = 0; i < length; i++)
759 TREE_OPERAND (expr, i) = lto_input_tree (ib, data_in);
761 loc = lto_input_location (ib, data_in);
762 SET_EXPR_LOCATION (expr, loc);
763 TREE_BLOCK (expr) = lto_input_tree (ib, data_in);
767 /* Read all pointer fields in the TS_BLOCK structure of EXPR from input
768 block IB. DATA_IN contains tables and descriptors for the
772 lto_input_ts_block_tree_pointers (struct lto_input_block *ib,
773 struct data_in *data_in, tree expr)
775 /* Do not stream BLOCK_SOURCE_LOCATION. We cannot handle debug information
776 for early inlining so drop it on the floor instead of ICEing in
778 BLOCK_VARS (expr) = lto_input_chain (ib, data_in);
780 /* Do not stream BLOCK_NONLOCALIZED_VARS. We cannot handle debug information
781 for early inlining so drop it on the floor instead of ICEing in
784 BLOCK_SUPERCONTEXT (expr) = lto_input_tree (ib, data_in);
786 /* Do not stream BLOCK_ABSTRACT_ORIGIN. We cannot handle debug information
787 for early inlining so drop it on the floor instead of ICEing in
789 BLOCK_FRAGMENT_ORIGIN (expr) = lto_input_tree (ib, data_in);
790 BLOCK_FRAGMENT_CHAIN (expr) = lto_input_tree (ib, data_in);
792 /* We re-compute BLOCK_SUBBLOCKS of our parent here instead
793 of streaming it. For non-BLOCK BLOCK_SUPERCONTEXTs we still
794 stream the child relationship explicitly. */
795 if (BLOCK_SUPERCONTEXT (expr)
796 && TREE_CODE (BLOCK_SUPERCONTEXT (expr)) == BLOCK)
798 BLOCK_CHAIN (expr) = BLOCK_SUBBLOCKS (BLOCK_SUPERCONTEXT (expr));
799 BLOCK_SUBBLOCKS (BLOCK_SUPERCONTEXT (expr)) = expr;
802 /* The global block is rooted at the TU decl. Hook it here to
803 avoid the need to stream in this block during WPA time. */
804 else if (BLOCK_SUPERCONTEXT (expr)
805 && TREE_CODE (BLOCK_SUPERCONTEXT (expr)) == TRANSLATION_UNIT_DECL)
806 DECL_INITIAL (BLOCK_SUPERCONTEXT (expr)) = expr;
808 /* The function-level block is connected at the time we read in
809 function bodies for the same reason. */
813 /* Read all pointer fields in the TS_BINFO structure of EXPR from input
814 block IB. DATA_IN contains tables and descriptors for the
818 lto_input_ts_binfo_tree_pointers (struct lto_input_block *ib,
819 struct data_in *data_in, tree expr)
824 /* Note that the number of slots in EXPR was read in
825 lto_materialize_tree when instantiating EXPR. However, the
826 vector is empty so we cannot rely on VEC_length to know how many
827 elements to read. So, this list is emitted as a 0-terminated
828 list on the writer side. */
831 t = lto_input_tree (ib, data_in);
833 VEC_quick_push (tree, BINFO_BASE_BINFOS (expr), t);
837 BINFO_OFFSET (expr) = lto_input_tree (ib, data_in);
838 BINFO_VTABLE (expr) = lto_input_tree (ib, data_in);
839 BINFO_VIRTUALS (expr) = lto_input_tree (ib, data_in);
840 BINFO_VPTR_FIELD (expr) = lto_input_tree (ib, data_in);
842 len = lto_input_uleb128 (ib);
845 VEC_reserve_exact (tree, gc, BINFO_BASE_ACCESSES (expr), len);
846 for (i = 0; i < len; i++)
848 tree a = lto_input_tree (ib, data_in);
849 VEC_quick_push (tree, BINFO_BASE_ACCESSES (expr), a);
853 BINFO_INHERITANCE_CHAIN (expr) = lto_input_tree (ib, data_in);
854 BINFO_SUBVTT_INDEX (expr) = lto_input_tree (ib, data_in);
855 BINFO_VPTR_INDEX (expr) = lto_input_tree (ib, data_in);
859 /* Read all pointer fields in the TS_CONSTRUCTOR structure of EXPR from
860 input block IB. DATA_IN contains tables and descriptors for the
864 lto_input_ts_constructor_tree_pointers (struct lto_input_block *ib,
865 struct data_in *data_in, tree expr)
869 len = lto_input_uleb128 (ib);
870 for (i = 0; i < len; i++)
874 index = lto_input_tree (ib, data_in);
875 value = lto_input_tree (ib, data_in);
876 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (expr), index, value);
881 /* Input a TS_TARGET_OPTION tree from IB into EXPR. */
884 lto_input_ts_target_option (struct lto_input_block *ib, tree expr)
888 struct cl_target_option *t = TREE_TARGET_OPTION (expr);
890 bp = lto_input_bitpack (ib);
891 len = sizeof (struct cl_target_option);
892 for (i = 0; i < len; i++)
893 ((unsigned char *)t)[i] = bp_unpack_value (&bp, 8);
894 if (bp_unpack_value (&bp, 32) != 0x12345678)
895 fatal_error ("cl_target_option size mismatch in LTO reader and writer");
898 /* Input a TS_TRANSLATION_UNIT_DECL tree from IB and DATA_IN into EXPR. */
901 lto_input_ts_translation_unit_decl_tree_pointers (struct lto_input_block *ib,
902 struct data_in *data_in,
905 TRANSLATION_UNIT_LANGUAGE (expr) = xstrdup (lto_input_string (data_in, ib));
906 VEC_safe_push (tree, gc, all_translation_units, expr);
909 /* Helper for lto_input_tree. Read all pointer fields in EXPR from
910 input block IB. DATA_IN contains tables and descriptors for the
914 lto_input_tree_pointers (struct lto_input_block *ib, struct data_in *data_in,
919 code = TREE_CODE (expr);
921 if (CODE_CONTAINS_STRUCT (code, TS_TYPED))
922 lto_input_ts_common_tree_pointers (ib, data_in, expr);
924 if (CODE_CONTAINS_STRUCT (code, TS_VECTOR))
925 lto_input_ts_vector_tree_pointers (ib, data_in, expr);
927 if (CODE_CONTAINS_STRUCT (code, TS_COMPLEX))
928 lto_input_ts_complex_tree_pointers (ib, data_in, expr);
930 if (CODE_CONTAINS_STRUCT (code, TS_DECL_MINIMAL))
931 lto_input_ts_decl_minimal_tree_pointers (ib, data_in, expr);
933 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
934 lto_input_ts_decl_common_tree_pointers (ib, data_in, expr);
936 if (CODE_CONTAINS_STRUCT (code, TS_DECL_NON_COMMON))
937 lto_input_ts_decl_non_common_tree_pointers (ib, data_in, expr);
939 if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
940 lto_input_ts_decl_with_vis_tree_pointers (ib, data_in, expr);
942 if (CODE_CONTAINS_STRUCT (code, TS_FIELD_DECL))
943 lto_input_ts_field_decl_tree_pointers (ib, data_in, expr);
945 if (CODE_CONTAINS_STRUCT (code, TS_FUNCTION_DECL))
946 lto_input_ts_function_decl_tree_pointers (ib, data_in, expr);
948 if (CODE_CONTAINS_STRUCT (code, TS_TYPE_COMMON))
949 lto_input_ts_type_common_tree_pointers (ib, data_in, expr);
951 if (CODE_CONTAINS_STRUCT (code, TS_TYPE_NON_COMMON))
952 lto_input_ts_type_non_common_tree_pointers (ib, data_in, expr);
954 if (CODE_CONTAINS_STRUCT (code, TS_LIST))
955 lto_input_ts_list_tree_pointers (ib, data_in, expr);
957 if (CODE_CONTAINS_STRUCT (code, TS_VEC))
958 lto_input_ts_vec_tree_pointers (ib, data_in, expr);
960 if (CODE_CONTAINS_STRUCT (code, TS_EXP))
961 lto_input_ts_exp_tree_pointers (ib, data_in, expr);
963 if (CODE_CONTAINS_STRUCT (code, TS_BLOCK))
964 lto_input_ts_block_tree_pointers (ib, data_in, expr);
966 if (CODE_CONTAINS_STRUCT (code, TS_BINFO))
967 lto_input_ts_binfo_tree_pointers (ib, data_in, expr);
969 if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
970 lto_input_ts_constructor_tree_pointers (ib, data_in, expr);
972 if (CODE_CONTAINS_STRUCT (code, TS_TARGET_OPTION))
973 lto_input_ts_target_option (ib, expr);
975 if (CODE_CONTAINS_STRUCT (code, TS_TRANSLATION_UNIT_DECL))
976 lto_input_ts_translation_unit_decl_tree_pointers (ib, data_in, expr);
980 /* Read the physical representation of a tree node with tag TAG from
981 input block IB using the per-file context in DATA_IN. */
984 lto_read_tree (struct lto_input_block *ib, struct data_in *data_in,
989 result = lto_materialize_tree (ib, data_in, tag);
991 /* Read all the pointer fields in RESULT. */
992 lto_input_tree_pointers (ib, data_in, result);
994 /* Call back into the streaming module to read anything else it
996 if (streamer_hooks.read_tree)
997 streamer_hooks.read_tree (ib, data_in, result);
999 /* We should never try to instantiate an MD or NORMAL builtin here. */
1000 if (TREE_CODE (result) == FUNCTION_DECL)
1001 gcc_assert (!lto_stream_as_builtin_p (result));
1003 /* end_marker = */ lto_input_1_unsigned (ib);
1005 #ifdef LTO_STREAMER_DEBUG
1006 /* Remove the mapping to RESULT's original address set by
1007 lto_materialize_tree. */
1008 lto_orig_address_remove (result);
1015 /* Read and INTEGER_CST node from input block IB using the per-file
1016 context in DATA_IN. */
1019 lto_input_integer_cst (struct lto_input_block *ib, struct data_in *data_in)
1022 HOST_WIDE_INT low, high;
1025 type = lto_input_tree (ib, data_in);
1026 overflow_p = (lto_input_1_unsigned (ib) != 0);
1027 low = lto_input_uleb128 (ib);
1028 high = lto_input_uleb128 (ib);
1029 result = build_int_cst_wide (type, low, high);
1031 /* If the original constant had overflown, build a replica of RESULT to
1032 avoid modifying the shared constant returned by build_int_cst_wide. */
1035 result = copy_node (result);
1036 TREE_OVERFLOW (result) = 1;
1043 /* Read an index IX from input block IB and return the tree node at
1044 DATA_IN->FILE_DATA->GLOBALS_INDEX[IX]. */
1047 lto_get_pickled_tree (struct lto_input_block *ib, struct data_in *data_in)
1049 unsigned HOST_WIDE_INT ix;
1051 enum LTO_tags expected_tag;
1053 ix = lto_input_uleb128 (ib);
1054 expected_tag = lto_input_enum (ib, LTO_tags, LTO_NUM_TAGS);
1056 result = lto_streamer_cache_get (data_in->reader_cache, ix);
1058 && TREE_CODE (result) == lto_tag_to_tree_code (expected_tag));
1064 /* Read a code and class from input block IB and return the
1065 corresponding builtin. DATA_IN is as in lto_input_tree. */
1068 lto_get_builtin_tree (struct lto_input_block *ib, struct data_in *data_in)
1070 enum built_in_class fclass;
1071 enum built_in_function fcode;
1072 const char *asmname;
1075 fclass = lto_input_enum (ib, built_in_class, BUILT_IN_LAST);
1076 gcc_assert (fclass == BUILT_IN_NORMAL || fclass == BUILT_IN_MD);
1078 fcode = (enum built_in_function) lto_input_uleb128 (ib);
1080 if (fclass == BUILT_IN_NORMAL)
1082 if (fcode >= END_BUILTINS)
1083 fatal_error ("machine independent builtin code out of range");
1084 result = built_in_decls[fcode];
1085 gcc_assert (result);
1087 else if (fclass == BUILT_IN_MD)
1089 result = targetm.builtin_decl (fcode, true);
1090 if (!result || result == error_mark_node)
1091 fatal_error ("target specific builtin not available");
1096 asmname = lto_input_string (data_in, ib);
1098 set_builtin_user_assembler_name (result, asmname);
1100 lto_streamer_cache_append (data_in->reader_cache, result);
1106 /* Read a tree from input block IB using the per-file context in
1107 DATA_IN. This context is used, for example, to resolve references
1108 to previously read nodes. */
1111 lto_input_tree (struct lto_input_block *ib, struct data_in *data_in)
1116 tag = input_record_start (ib);
1117 gcc_assert ((unsigned) tag < (unsigned) LTO_NUM_TAGS);
1119 if (tag == LTO_null)
1121 else if (tag >= LTO_field_decl_ref && tag <= LTO_global_decl_ref)
1123 /* If TAG is a reference to an indexable tree, the next value
1124 in IB is the index into the table where we expect to find
1126 result = lto_input_tree_ref (ib, data_in, cfun, tag);
1128 else if (tag == LTO_tree_pickle_reference)
1130 /* If TAG is a reference to a previously read tree, look it up in
1131 the reader cache. */
1132 result = lto_get_pickled_tree (ib, data_in);
1134 else if (tag == LTO_builtin_decl)
1136 /* If we are going to read a built-in function, all we need is
1137 the code and class. */
1138 result = lto_get_builtin_tree (ib, data_in);
1140 else if (tag == lto_tree_code_to_tag (INTEGER_CST))
1142 /* For integer constants we only need the type and its hi/low
1144 result = lto_input_integer_cst (ib, data_in);
1148 /* Otherwise, materialize a new node from IB. */
1149 result = lto_read_tree (ib, data_in, tag);