1 /* Read the GIMPLE representation from a file stream.
3 Copyright 2009 Free Software Foundation, Inc.
4 Contributed by Kenneth Zadeck <zadeck@naturalbridge.com>
5 Re-implemented by Diego Novillo <dnovillo@google.com>
7 This file is part of GCC.
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
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
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/>. */
25 #include "coretypes.h"
35 #include "basic-block.h"
36 #include "tree-flow.h"
37 #include "tree-pass.h"
41 #include "diagnostic.h"
48 #include "ipa-utils.h"
49 #include "lto-streamer.h"
51 /* Data structure used to hash file names in the source_location field. */
55 unsigned int slot_num;
58 /* The table to hold the file names. */
59 static htab_t file_name_hash_table;
62 /* Check that tag ACTUAL has one of the given values. NUM_TAGS is the
63 number of valid tag values to check. */
66 lto_tag_check_set (enum LTO_tags actual, int ntags, ...)
72 for (i = 0; i < ntags; i++)
73 if ((unsigned) actual == va_arg (ap, unsigned))
80 internal_error ("bytecode stream: unexpected tag %s", lto_tag_name (actual));
84 /* Check that tag ACTUAL is in the range [TAG1, TAG2]. */
87 lto_tag_check_range (enum LTO_tags actual, enum LTO_tags tag1,
90 if (actual < tag1 || actual > tag2)
91 internal_error ("bytecode stream: tag %s is not in the expected range "
93 lto_tag_name (actual),
99 /* Check that tag ACTUAL == EXPECTED. */
102 lto_tag_check (enum LTO_tags actual, enum LTO_tags expected)
104 if (actual != expected)
105 internal_error ("bytecode stream: expected tag %s instead of %s",
106 lto_tag_name (expected), lto_tag_name (actual));
110 /* Return a hash code for P. */
113 hash_string_slot_node (const void *p)
115 const struct string_slot *ds = (const struct string_slot *) p;
116 return (hashval_t) htab_hash_string (ds->s);
120 /* Returns nonzero if P1 and P2 are equal. */
123 eq_string_slot_node (const void *p1, const void *p2)
125 const struct string_slot *ds1 = (const struct string_slot *) p1;
126 const struct string_slot *ds2 = (const struct string_slot *) p2;
127 return strcmp (ds1->s, ds2->s) == 0;
131 /* Read a string from the string table in DATA_IN using input block
132 IB. Write the length to RLEN. */
135 input_string_internal (struct data_in *data_in, struct lto_input_block *ib,
138 struct lto_input_block str_tab;
143 loc = lto_input_uleb128 (ib);
144 LTO_INIT_INPUT_BLOCK (str_tab, data_in->strings, loc, data_in->strings_len);
145 len = lto_input_uleb128 (&str_tab);
148 if (str_tab.p + len > data_in->strings_len)
149 internal_error ("bytecode stream: string too long for the string table");
151 result = (const char *)(data_in->strings + str_tab.p);
157 /* Read a STRING_CST from the string table in DATA_IN using input
161 input_string_cst (struct data_in *data_in, struct lto_input_block *ib)
165 unsigned int is_null;
167 is_null = lto_input_uleb128 (ib);
171 ptr = input_string_internal (data_in, ib, &len);
172 return build_string (len, ptr);
176 /* Read an IDENTIFIER from the string table in DATA_IN using input
180 input_identifier (struct data_in *data_in, struct lto_input_block *ib)
184 unsigned int is_null;
186 is_null = lto_input_uleb128 (ib);
190 ptr = input_string_internal (data_in, ib, &len);
191 return get_identifier_with_length (ptr, len);
194 /* Read a NULL terminated string from the string table in DATA_IN. */
197 input_string (struct data_in *data_in, struct lto_input_block *ib)
201 unsigned int is_null;
203 is_null = lto_input_uleb128 (ib);
207 ptr = input_string_internal (data_in, ib, &len);
208 if (ptr[len - 1] != '\0')
209 internal_error ("bytecode stream: found non-null terminated string");
215 /* Return the next tag in the input block IB. */
218 input_record_start (struct lto_input_block *ib)
220 enum LTO_tags tag = (enum LTO_tags) lto_input_uleb128 (ib);
225 /* Lookup STRING in file_name_hash_table. If found, return the existing
226 string, otherwise insert STRING as the canonical version. */
229 canon_file_name (const char *string)
232 struct string_slot s_slot;
235 slot = htab_find_slot (file_name_hash_table, &s_slot, INSERT);
240 struct string_slot *new_slot;
242 len = strlen (string);
243 saved_string = (char *) xmalloc (len + 1);
244 new_slot = XCNEW (struct string_slot);
245 strcpy (saved_string, string);
246 new_slot->s = saved_string;
252 struct string_slot *old_slot = (struct string_slot *) *slot;
258 /* Clear the line info stored in DATA_IN. */
261 clear_line_info (struct data_in *data_in)
263 if (data_in->current_file)
264 linemap_add (line_table, LC_LEAVE, false, NULL, 0);
265 data_in->current_file = NULL;
266 data_in->current_line = 0;
267 data_in->current_col = 0;
271 /* Read a location from input block IB. */
274 lto_input_location (struct lto_input_block *ib, struct data_in *data_in)
276 expanded_location xloc;
278 xloc.file = input_string (data_in, ib);
279 if (xloc.file == NULL)
280 return UNKNOWN_LOCATION;
282 xloc.file = canon_file_name (xloc.file);
283 xloc.line = lto_input_sleb128 (ib);
284 xloc.column = lto_input_sleb128 (ib);
286 if (data_in->current_file != xloc.file)
288 if (data_in->current_file)
289 linemap_add (line_table, LC_LEAVE, false, NULL, 0);
291 linemap_add (line_table, LC_ENTER, false, xloc.file, xloc.line);
293 else if (data_in->current_line != xloc.line)
294 linemap_line_start (line_table, xloc.line, xloc.column);
296 data_in->current_file = xloc.file;
297 data_in->current_line = xloc.line;
298 data_in->current_col = xloc.column;
300 return linemap_position_for_column (line_table, xloc.column);
304 /* Read a reference to a tree node from DATA_IN using input block IB.
305 TAG is the expected node that should be found in IB, if TAG belongs
306 to one of the indexable trees, expect to read a reference index to
307 be looked up in one of the symbol tables, otherwise read the pysical
308 representation of the tree using lto_input_tree. FN is the
309 function scope for the read tree. */
312 lto_input_tree_ref (struct lto_input_block *ib, struct data_in *data_in,
313 struct function *fn, enum LTO_tags tag)
315 unsigned HOST_WIDE_INT ix_u;
316 tree result = NULL_TREE;
318 lto_tag_check_range (tag, LTO_field_decl_ref, LTO_global_decl_ref);
323 ix_u = lto_input_uleb128 (ib);
324 result = lto_file_decl_data_get_type (data_in->file_data, ix_u);
327 case LTO_ssa_name_ref:
328 ix_u = lto_input_uleb128 (ib);
329 result = VEC_index (tree, SSANAMES (fn), ix_u);
332 case LTO_field_decl_ref:
333 ix_u = lto_input_uleb128 (ib);
334 result = lto_file_decl_data_get_field_decl (data_in->file_data, ix_u);
337 case LTO_function_decl_ref:
338 ix_u = lto_input_uleb128 (ib);
339 result = lto_file_decl_data_get_fn_decl (data_in->file_data, ix_u);
342 case LTO_type_decl_ref:
343 ix_u = lto_input_uleb128 (ib);
344 result = lto_file_decl_data_get_type_decl (data_in->file_data, ix_u);
347 case LTO_namespace_decl_ref:
348 ix_u = lto_input_uleb128 (ib);
349 result = lto_file_decl_data_get_namespace_decl (data_in->file_data, ix_u);
352 case LTO_global_decl_ref:
353 case LTO_result_decl_ref:
354 case LTO_const_decl_ref:
355 case LTO_imported_decl_ref:
356 case LTO_label_decl_ref:
357 ix_u = lto_input_uleb128 (ib);
358 result = lto_file_decl_data_get_var_decl (data_in->file_data, ix_u);
359 if (tag == LTO_global_decl_ref)
360 varpool_mark_needed_node (varpool_node (result));
373 /* Read and return a double-linked list of catch handlers from input
374 block IB, using descriptors in DATA_IN. */
376 static struct eh_catch_d *
377 lto_input_eh_catch_list (struct lto_input_block *ib, struct data_in *data_in,
383 *last_p = first = NULL;
384 tag = input_record_start (ib);
390 lto_tag_check_range (tag, LTO_eh_catch, LTO_eh_catch);
392 /* Read the catch node. */
393 n = GGC_CNEW (struct eh_catch_d);
394 n->type_list = lto_input_tree (ib, data_in);
395 n->filter_list = lto_input_tree (ib, data_in);
396 n->label = lto_input_tree (ib, data_in);
398 /* Register all the types in N->FILTER_LIST. */
399 for (list = n->filter_list; list; list = TREE_CHAIN (list))
400 add_type_for_runtime (TREE_VALUE (list));
402 /* Chain N to the end of the list. */
404 (*last_p)->next_catch = n;
405 n->prev_catch = *last_p;
408 /* Set the head of the list the first time through the loop. */
412 tag = input_record_start (ib);
419 /* Read and return EH region IX from input block IB, using descriptors
423 input_eh_region (struct lto_input_block *ib, struct data_in *data_in, int ix)
428 /* Read the region header. */
429 tag = input_record_start (ib);
433 r = GGC_CNEW (struct eh_region_d);
434 r->index = lto_input_sleb128 (ib);
436 gcc_assert (r->index == ix);
438 /* Read all the region pointers as region numbers. We'll fix up
439 the pointers once the whole array has been read. */
440 r->outer = (eh_region) (intptr_t) lto_input_sleb128 (ib);
441 r->inner = (eh_region) (intptr_t) lto_input_sleb128 (ib);
442 r->next_peer = (eh_region) (intptr_t) lto_input_sleb128 (ib);
446 case LTO_ert_cleanup:
447 r->type = ERT_CLEANUP;
452 struct eh_catch_d *last_catch;
454 r->u.eh_try.first_catch = lto_input_eh_catch_list (ib, data_in,
456 r->u.eh_try.last_catch = last_catch;
460 case LTO_ert_allowed_exceptions:
464 r->type = ERT_ALLOWED_EXCEPTIONS;
465 r->u.allowed.type_list = lto_input_tree (ib, data_in);
466 r->u.allowed.label = lto_input_tree (ib, data_in);
467 r->u.allowed.filter = lto_input_uleb128 (ib);
469 for (l = r->u.allowed.type_list; l ; l = TREE_CHAIN (l))
470 add_type_for_runtime (TREE_VALUE (l));
474 case LTO_ert_must_not_throw:
475 r->type = ERT_MUST_NOT_THROW;
476 r->u.must_not_throw.failure_decl = lto_input_tree (ib, data_in);
477 r->u.must_not_throw.failure_loc = lto_input_location (ib, data_in);
484 r->landing_pads = (eh_landing_pad) (intptr_t) lto_input_sleb128 (ib);
490 /* Read and return EH landing pad IX from input block IB, using descriptors
493 static eh_landing_pad
494 input_eh_lp (struct lto_input_block *ib, struct data_in *data_in, int ix)
499 /* Read the landing pad header. */
500 tag = input_record_start (ib);
504 lto_tag_check_range (tag, LTO_eh_landing_pad, LTO_eh_landing_pad);
506 lp = GGC_CNEW (struct eh_landing_pad_d);
507 lp->index = lto_input_sleb128 (ib);
508 gcc_assert (lp->index == ix);
509 lp->next_lp = (eh_landing_pad) (intptr_t) lto_input_sleb128 (ib);
510 lp->region = (eh_region) (intptr_t) lto_input_sleb128 (ib);
511 lp->post_landing_pad = lto_input_tree (ib, data_in);
517 /* After reading the EH regions, pointers to peer and children regions
518 are region numbers. This converts all these region numbers into
519 real pointers into the rematerialized regions for FN. ROOT_REGION
520 is the region number for the root EH region in FN. */
523 fixup_eh_region_pointers (struct function *fn, HOST_WIDE_INT root_region)
526 VEC(eh_region,gc) *eh_array = fn->eh->region_array;
527 VEC(eh_landing_pad,gc) *lp_array = fn->eh->lp_array;
531 gcc_assert (eh_array && lp_array);
533 gcc_assert (root_region >= 0);
534 fn->eh->region_tree = VEC_index (eh_region, eh_array, root_region);
536 #define FIXUP_EH_REGION(r) (r) = VEC_index (eh_region, eh_array, \
537 (HOST_WIDE_INT) (intptr_t) (r))
538 #define FIXUP_EH_LP(p) (p) = VEC_index (eh_landing_pad, lp_array, \
539 (HOST_WIDE_INT) (intptr_t) (p))
541 /* Convert all the index numbers stored in pointer fields into
542 pointers to the corresponding slots in the EH region array. */
543 for (i = 0; VEC_iterate (eh_region, eh_array, i, r); i++)
545 /* The array may contain NULL regions. */
549 gcc_assert (i == (unsigned) r->index);
550 FIXUP_EH_REGION (r->outer);
551 FIXUP_EH_REGION (r->inner);
552 FIXUP_EH_REGION (r->next_peer);
553 FIXUP_EH_LP (r->landing_pads);
556 /* Convert all the index numbers stored in pointer fields into
557 pointers to the corresponding slots in the EH landing pad array. */
558 for (i = 0; VEC_iterate (eh_landing_pad, lp_array, i, lp); i++)
560 /* The array may contain NULL landing pads. */
564 gcc_assert (i == (unsigned) lp->index);
565 FIXUP_EH_LP (lp->next_lp);
566 FIXUP_EH_REGION (lp->region);
569 #undef FIXUP_EH_REGION
574 /* Initialize EH support. */
579 /* Contrary to most other FEs, we only initialize EH support when at
580 least one of the files in the set contains exception regions in
581 it. Since this happens much later than the call to init_eh in
582 lang_dependent_init, we have to set flag_exceptions and call
583 init_eh again to initialize the EH tables. */
587 /* Initialize dwarf2 tables. Since dwarf2out_do_frame() returns
588 true only when exceptions are enabled, this initialization is
589 never done during lang_dependent_init. */
590 #if defined DWARF2_DEBUGGING_INFO || defined DWARF2_UNWIND_INFO
591 if (dwarf2out_do_frame ())
592 dwarf2out_frame_init ();
597 /* Read the exception table for FN from IB using the data descriptors
601 input_eh_regions (struct lto_input_block *ib, struct data_in *data_in,
604 HOST_WIDE_INT i, root_region, len;
606 static bool eh_initialized_p = false;
608 tag = input_record_start (ib);
612 lto_tag_check_range (tag, LTO_eh_table, LTO_eh_table);
614 /* If the file contains EH regions, then it was compiled with
615 -fexceptions. In that case, initialize the backend EH
617 if (!eh_initialized_p)
620 eh_initialized_p = true;
625 root_region = lto_input_sleb128 (ib);
626 gcc_assert (root_region == (int) root_region);
628 /* Read the EH region array. */
629 len = lto_input_sleb128 (ib);
630 gcc_assert (len == (int) len);
633 VEC_safe_grow (eh_region, gc, fn->eh->region_array, len);
634 for (i = 0; i < len; i++)
636 eh_region r = input_eh_region (ib, data_in, i);
637 VEC_replace (eh_region, fn->eh->region_array, i, r);
641 /* Read the landing pads. */
642 len = lto_input_sleb128 (ib);
643 gcc_assert (len == (int) len);
646 VEC_safe_grow (eh_landing_pad, gc, fn->eh->lp_array, len);
647 for (i = 0; i < len; i++)
649 eh_landing_pad lp = input_eh_lp (ib, data_in, i);
650 VEC_replace (eh_landing_pad, fn->eh->lp_array, i, lp);
654 /* Read the runtime type data. */
655 len = lto_input_sleb128 (ib);
656 gcc_assert (len == (int) len);
659 VEC_safe_grow (tree, gc, fn->eh->ttype_data, len);
660 for (i = 0; i < len; i++)
662 tree ttype = lto_input_tree (ib, data_in);
663 VEC_replace (tree, fn->eh->ttype_data, i, ttype);
667 /* Read the table of action chains. */
668 len = lto_input_sleb128 (ib);
669 gcc_assert (len == (int) len);
672 if (targetm.arm_eabi_unwinder)
674 VEC_safe_grow (tree, gc, fn->eh->ehspec_data.arm_eabi, len);
675 for (i = 0; i < len; i++)
677 tree t = lto_input_tree (ib, data_in);
678 VEC_replace (tree, fn->eh->ehspec_data.arm_eabi, i, t);
683 VEC_safe_grow (uchar, gc, fn->eh->ehspec_data.other, len);
684 for (i = 0; i < len; i++)
686 uchar c = lto_input_1_unsigned (ib);
687 VEC_replace (uchar, fn->eh->ehspec_data.other, i, c);
692 /* Reconstruct the EH region tree by fixing up the peer/children
694 fixup_eh_region_pointers (fn, root_region);
696 tag = input_record_start (ib);
697 lto_tag_check_range (tag, LTO_null, LTO_null);
701 /* Make a new basic block with index INDEX in function FN. */
704 make_new_block (struct function *fn, unsigned int index)
706 basic_block bb = alloc_block ();
708 SET_BASIC_BLOCK_FOR_FUNCTION (fn, index, bb);
709 bb->il.gimple = GGC_CNEW (struct gimple_bb_info);
710 n_basic_blocks_for_function (fn)++;
712 set_bb_seq (bb, gimple_seq_alloc ());
717 /* Read the CFG for function FN from input block IB. */
720 input_cfg (struct lto_input_block *ib, struct function *fn)
722 unsigned int bb_count;
727 init_empty_tree_cfg_for_function (fn);
728 init_ssa_operands ();
730 profile_status_for_function (fn) =
731 (enum profile_status_d) lto_input_uleb128 (ib);
733 bb_count = lto_input_uleb128 (ib);
735 last_basic_block_for_function (fn) = bb_count;
736 if (bb_count > VEC_length (basic_block, basic_block_info_for_function (fn)))
737 VEC_safe_grow_cleared (basic_block, gc,
738 basic_block_info_for_function (fn), bb_count);
740 if (bb_count > VEC_length (basic_block, label_to_block_map_for_function (fn)))
741 VEC_safe_grow_cleared (basic_block, gc,
742 label_to_block_map_for_function (fn), bb_count);
744 index = lto_input_sleb128 (ib);
747 basic_block bb = BASIC_BLOCK_FOR_FUNCTION (fn, index);
748 unsigned int edge_count;
751 bb = make_new_block (fn, index);
753 edge_count = lto_input_uleb128 (ib);
755 /* Connect up the CFG. */
756 for (i = 0; i < edge_count; i++)
758 unsigned int dest_index;
759 unsigned int edge_flags;
765 dest_index = lto_input_uleb128 (ib);
766 probability = (int) lto_input_sleb128 (ib);
767 count = (gcov_type) lto_input_sleb128 (ib);
768 edge_flags = lto_input_uleb128 (ib);
770 dest = BASIC_BLOCK_FOR_FUNCTION (fn, dest_index);
773 dest = make_new_block (fn, dest_index);
775 e = make_edge (bb, dest, edge_flags);
776 e->probability = probability;
780 index = lto_input_sleb128 (ib);
783 p_bb = ENTRY_BLOCK_PTR_FOR_FUNCTION(fn);
784 index = lto_input_sleb128 (ib);
787 basic_block bb = BASIC_BLOCK_FOR_FUNCTION (fn, index);
791 index = lto_input_sleb128 (ib);
796 /* Read a PHI function for basic block BB in function FN. DATA_IN is
797 the file being read. IB is the input block to use for reading. */
800 input_phi (struct lto_input_block *ib, basic_block bb, struct data_in *data_in,
803 unsigned HOST_WIDE_INT ix;
808 ix = lto_input_uleb128 (ib);
809 phi_result = VEC_index (tree, SSANAMES (fn), ix);
810 len = EDGE_COUNT (bb->preds);
811 result = create_phi_node (phi_result, bb);
812 SSA_NAME_DEF_STMT (phi_result) = result;
814 /* We have to go through a lookup process here because the preds in the
815 reconstructed graph are generally in a different order than they
816 were in the original program. */
817 for (i = 0; i < len; i++)
819 tree def = lto_input_tree (ib, data_in);
820 int src_index = lto_input_uleb128 (ib);
821 location_t arg_loc = lto_input_location (ib, data_in);
822 basic_block sbb = BASIC_BLOCK_FOR_FUNCTION (fn, src_index);
827 for (j = 0; j < len; j++)
828 if (EDGE_PRED (bb, j)->src == sbb)
830 e = EDGE_PRED (bb, j);
834 add_phi_arg (result, def, e, arg_loc);
841 /* Read the SSA names array for function FN from DATA_IN using input
845 input_ssa_names (struct lto_input_block *ib, struct data_in *data_in,
848 unsigned int i, size;
850 size = lto_input_uleb128 (ib);
851 init_ssanames (fn, size);
853 i = lto_input_uleb128 (ib);
859 /* Skip over the elements that had been freed. */
860 while (VEC_length (tree, SSANAMES (fn)) < i)
861 VEC_quick_push (tree, SSANAMES (fn), NULL_TREE);
863 is_default_def = (lto_input_1_unsigned (ib) != 0);
864 name = lto_input_tree (ib, data_in);
865 ssa_name = make_ssa_name_fn (fn, name, gimple_build_nop ());
868 set_default_def (SSA_NAME_VAR (ssa_name), ssa_name);
870 i = lto_input_uleb128 (ib);
875 /* Fixup the reference tree OP for replaced VAR_DECLs with mismatched
879 maybe_fixup_handled_component (tree op)
884 while (handled_component_p (TREE_OPERAND (op, 0)))
885 op = TREE_OPERAND (op, 0);
886 if (TREE_CODE (TREE_OPERAND (op, 0)) != VAR_DECL)
889 decl_type = TREE_TYPE (TREE_OPERAND (op, 0));
891 switch (TREE_CODE (op))
894 /* The DECL_CONTEXT of the field-decl is the record type we look for. */
895 wanted_type = DECL_CONTEXT (TREE_OPERAND (op, 1));
899 if (TREE_CODE (decl_type) == ARRAY_TYPE
900 && (TREE_TYPE (decl_type) == TREE_TYPE (op)
901 || useless_type_conversion_p (TREE_TYPE (op),
902 TREE_TYPE (decl_type))))
904 /* An unknown size array type should be ok. But we do not
905 lower the lower bound in all cases - ugh. */
906 wanted_type = build_array_type (TREE_TYPE (op), NULL_TREE);
909 case ARRAY_RANGE_REF:
910 if (TREE_CODE (decl_type) == ARRAY_TYPE
911 && (TREE_TYPE (decl_type) == TREE_TYPE (TREE_TYPE (op))
912 || useless_type_conversion_p (TREE_TYPE (TREE_TYPE (op)),
913 TREE_TYPE (decl_type))))
915 /* An unknown size array type should be ok. But we do not
916 lower the lower bound in all cases - ugh. */
917 wanted_type = build_array_type (TREE_TYPE (TREE_TYPE (op)), NULL_TREE);
921 case VIEW_CONVERT_EXPR:
922 /* Very nice - nothing to do. */
927 if (TREE_CODE (decl_type) == COMPLEX_TYPE
928 && (TREE_TYPE (decl_type) == TREE_TYPE (op)
929 || useless_type_conversion_p (TREE_TYPE (op),
930 TREE_TYPE (decl_type))))
932 wanted_type = build_complex_type (TREE_TYPE (op));
939 if (!useless_type_conversion_p (wanted_type, decl_type))
940 TREE_OPERAND (op, 0) = build1 (VIEW_CONVERT_EXPR, wanted_type,
941 TREE_OPERAND (op, 0));
944 /* Fixup reference tree operands for substituted prevailing decls
945 with mismatched types in STMT. */
948 maybe_fixup_decls (gimple stmt)
950 /* We have to fixup replaced decls here in case there were
951 inter-TU type mismatches. Catch the most common cases
952 for now - this way we'll get testcases for the rest as
953 the type verifier will complain. */
954 if (gimple_assign_single_p (stmt))
956 tree lhs = gimple_assign_lhs (stmt);
957 tree rhs = gimple_assign_rhs1 (stmt);
959 /* First catch loads and aggregate copies by adjusting the rhs. */
960 if (TREE_CODE (rhs) == VAR_DECL)
962 if (!useless_type_conversion_p (TREE_TYPE (lhs), TREE_TYPE (rhs)))
963 gimple_assign_set_rhs1 (stmt, build1 (VIEW_CONVERT_EXPR,
964 TREE_TYPE (lhs), rhs));
966 else if (handled_component_p (rhs))
967 maybe_fixup_handled_component (rhs);
968 /* Then catch scalar stores. */
969 else if (TREE_CODE (lhs) == VAR_DECL)
971 if (!useless_type_conversion_p (TREE_TYPE (lhs), TREE_TYPE (rhs)))
972 gimple_assign_set_lhs (stmt, build1 (VIEW_CONVERT_EXPR,
973 TREE_TYPE (rhs), lhs));
975 else if (handled_component_p (lhs))
976 maybe_fixup_handled_component (lhs);
978 else if (is_gimple_call (stmt))
980 tree lhs = gimple_call_lhs (stmt);
982 if (lhs && TREE_CODE (lhs) == VAR_DECL)
984 if (!useless_type_conversion_p (TREE_TYPE (lhs),
985 gimple_call_return_type (stmt)))
986 gimple_call_set_lhs (stmt, build1 (VIEW_CONVERT_EXPR,
987 gimple_call_return_type (stmt),
990 else if (lhs && handled_component_p (lhs))
991 maybe_fixup_handled_component (lhs);
993 /* Arguments, especially for varargs functions will be funny... */
997 /* Read a statement with tag TAG in function FN from block IB using
998 descriptors in DATA_IN. */
1001 input_gimple_stmt (struct lto_input_block *ib, struct data_in *data_in,
1002 struct function *fn, enum LTO_tags tag)
1005 enum gimple_code code;
1006 unsigned HOST_WIDE_INT num_ops;
1008 struct bitpack_d *bp;
1010 code = lto_tag_to_gimple_code (tag);
1012 /* Read the tuple header. */
1013 bp = lto_input_bitpack (ib);
1014 num_ops = bp_unpack_value (bp, sizeof (unsigned) * 8);
1015 stmt = gimple_alloc (code, num_ops);
1016 stmt->gsbase.no_warning = bp_unpack_value (bp, 1);
1017 if (is_gimple_assign (stmt))
1018 stmt->gsbase.nontemporal_move = bp_unpack_value (bp, 1);
1019 stmt->gsbase.has_volatile_ops = bp_unpack_value (bp, 1);
1020 stmt->gsbase.subcode = bp_unpack_value (bp, 16);
1021 bitpack_delete (bp);
1023 /* Read location information. */
1024 gimple_set_location (stmt, lto_input_location (ib, data_in));
1026 /* Read lexical block reference. */
1027 gimple_set_block (stmt, lto_input_tree (ib, data_in));
1029 /* Read in all the operands. */
1033 gimple_resx_set_region (stmt, lto_input_sleb128 (ib));
1036 case GIMPLE_EH_MUST_NOT_THROW:
1037 gimple_eh_must_not_throw_set_fndecl (stmt, lto_input_tree (ib, data_in));
1040 case GIMPLE_EH_DISPATCH:
1041 gimple_eh_dispatch_set_region (stmt, lto_input_sleb128 (ib));
1046 /* FIXME lto. Move most of this into a new gimple_asm_set_string(). */
1048 stmt->gimple_asm.ni = lto_input_uleb128 (ib);
1049 stmt->gimple_asm.no = lto_input_uleb128 (ib);
1050 stmt->gimple_asm.nc = lto_input_uleb128 (ib);
1051 str = input_string_cst (data_in, ib);
1052 stmt->gimple_asm.string = TREE_STRING_POINTER (str);
1064 for (i = 0; i < num_ops; i++)
1066 tree op = lto_input_tree (ib, data_in);
1067 gimple_set_op (stmt, i, op);
1069 /* Fixup FIELD_DECLs. */
1070 while (op && handled_component_p (op))
1072 if (TREE_CODE (op) == COMPONENT_REF)
1074 tree field, type, tem;
1075 field = TREE_OPERAND (op, 1);
1076 type = DECL_CONTEXT (field);
1077 for (tem = TYPE_FIELDS (type); tem; tem = TREE_CHAIN (tem))
1080 || (TREE_TYPE (tem) == TREE_TYPE (field)
1081 && (DECL_FIELD_OFFSET (tem)
1082 == DECL_FIELD_OFFSET (field))
1083 && (DECL_FIELD_BIT_OFFSET (tem)
1084 == DECL_FIELD_BIT_OFFSET (field))
1085 && (DECL_OFFSET_ALIGN (tem)
1086 == DECL_OFFSET_ALIGN (field))))
1089 /* In case of type mismatches across units we can fail
1090 to unify some types and thus not find a proper
1091 field-decl here. Just do nothing in this case. */
1092 if (tem != NULL_TREE)
1093 TREE_OPERAND (op, 1) = tem;
1096 op = TREE_OPERAND (op, 0);
1102 case GIMPLE_PREDICT:
1106 internal_error ("bytecode stream: unknown GIMPLE statement tag %s",
1107 lto_tag_name (tag));
1110 /* Update the properties of symbols, SSA names and labels associated
1112 if (code == GIMPLE_ASSIGN || code == GIMPLE_CALL)
1114 tree lhs = gimple_get_lhs (stmt);
1115 if (lhs && TREE_CODE (lhs) == SSA_NAME)
1116 SSA_NAME_DEF_STMT (lhs) = stmt;
1118 else if (code == GIMPLE_LABEL)
1119 gcc_assert (emit_label_in_global_context_p (gimple_label_label (stmt))
1120 || DECL_CONTEXT (gimple_label_label (stmt)) == fn->decl);
1121 else if (code == GIMPLE_ASM)
1125 for (i = 0; i < gimple_asm_noutputs (stmt); i++)
1127 tree op = TREE_VALUE (gimple_asm_output_op (stmt, i));
1128 if (TREE_CODE (op) == SSA_NAME)
1129 SSA_NAME_DEF_STMT (op) = stmt;
1133 /* Fixup reference tree operands for substituted prevailing decls
1134 with mismatched types. */
1135 maybe_fixup_decls (stmt);
1137 /* Mark the statement modified so its operand vectors can be filled in. */
1138 gimple_set_modified (stmt, true);
1144 /* Read a basic block with tag TAG from DATA_IN using input block IB.
1145 FN is the function being processed. */
1148 input_bb (struct lto_input_block *ib, enum LTO_tags tag,
1149 struct data_in *data_in, struct function *fn)
1153 gimple_stmt_iterator bsi;
1155 /* This routine assumes that CFUN is set to FN, as it needs to call
1156 basic GIMPLE routines that use CFUN. */
1157 gcc_assert (cfun == fn);
1159 index = lto_input_uleb128 (ib);
1160 bb = BASIC_BLOCK_FOR_FUNCTION (fn, index);
1162 bb->count = lto_input_sleb128 (ib);
1163 bb->loop_depth = lto_input_sleb128 (ib);
1164 bb->frequency = lto_input_sleb128 (ib);
1165 bb->flags = lto_input_sleb128 (ib);
1167 /* LTO_bb1 has statements. LTO_bb0 does not. */
1171 bsi = gsi_start_bb (bb);
1172 tag = input_record_start (ib);
1175 gimple stmt = input_gimple_stmt (ib, data_in, fn, tag);
1177 /* Change debug stmts to nops on-the-fly if we do not have VTA enabled.
1178 This allows us to build for example static libs with debugging
1179 enabled and do the final link without. */
1180 if (!MAY_HAVE_DEBUG_STMTS
1181 && is_gimple_debug (stmt))
1182 stmt = gimple_build_nop ();
1184 find_referenced_vars_in (stmt);
1185 gsi_insert_after (&bsi, stmt, GSI_NEW_STMT);
1187 /* After the statement, expect a 0 delimiter or the EH region
1188 that the previous statement belongs to. */
1189 tag = input_record_start (ib);
1190 lto_tag_check_set (tag, 2, LTO_eh_region, LTO_null);
1192 if (tag == LTO_eh_region)
1194 HOST_WIDE_INT region = lto_input_sleb128 (ib);
1195 gcc_assert (region == (int) region);
1196 add_stmt_to_eh_lp (stmt, region);
1199 tag = input_record_start (ib);
1202 tag = input_record_start (ib);
1205 gimple phi = input_phi (ib, bb, data_in, fn);
1206 find_referenced_vars_in (phi);
1207 tag = input_record_start (ib);
1211 /* Go through all NODE edges and fixup call_stmt pointers
1212 so they point to STMTS. */
1215 fixup_call_stmt_edges_1 (struct cgraph_node *node, gimple *stmts)
1217 struct cgraph_edge *cedge;
1218 for (cedge = node->callees; cedge; cedge = cedge->next_callee)
1219 cedge->call_stmt = stmts[cedge->lto_stmt_uid];
1222 /* Fixup call_stmt pointers in NODE and all clones. */
1225 fixup_call_stmt_edges (struct cgraph_node *orig, gimple *stmts)
1227 struct cgraph_node *node;
1229 while (orig->clone_of)
1230 orig = orig->clone_of;
1232 fixup_call_stmt_edges_1 (orig, stmts);
1234 for (node = orig->clones; node != orig;)
1236 fixup_call_stmt_edges_1 (node, stmts);
1238 node = node->clones;
1239 else if (node->next_sibling_clone)
1240 node = node->next_sibling_clone;
1243 while (node != orig && !node->next_sibling_clone)
1244 node = node->clone_of;
1246 node = node->next_sibling_clone;
1251 /* Read the body of function FN_DECL from DATA_IN using input block IB. */
1254 input_function (tree fn_decl, struct data_in *data_in,
1255 struct lto_input_block *ib)
1257 struct function *fn;
1261 struct bitpack_d *bp;
1263 fn = DECL_STRUCT_FUNCTION (fn_decl);
1264 tag = input_record_start (ib);
1265 clear_line_info (data_in);
1267 gimple_register_cfg_hooks ();
1268 lto_tag_check (tag, LTO_function);
1270 /* Read all the attributes for FN. */
1271 bp = lto_input_bitpack (ib);
1272 fn->is_thunk = bp_unpack_value (bp, 1);
1273 fn->has_local_explicit_reg_vars = bp_unpack_value (bp, 1);
1274 fn->after_tree_profile = bp_unpack_value (bp, 1);
1275 fn->returns_pcc_struct = bp_unpack_value (bp, 1);
1276 fn->returns_struct = bp_unpack_value (bp, 1);
1277 fn->always_inline_functions_inlined = bp_unpack_value (bp, 1);
1278 fn->after_inlining = bp_unpack_value (bp, 1);
1279 fn->dont_save_pending_sizes_p = bp_unpack_value (bp, 1);
1280 fn->stdarg = bp_unpack_value (bp, 1);
1281 fn->has_nonlocal_label = bp_unpack_value (bp, 1);
1282 fn->calls_alloca = bp_unpack_value (bp, 1);
1283 fn->calls_setjmp = bp_unpack_value (bp, 1);
1284 fn->function_frequency = (enum function_frequency) bp_unpack_value (bp, 2);
1285 fn->va_list_fpr_size = bp_unpack_value (bp, 8);
1286 fn->va_list_gpr_size = bp_unpack_value (bp, 8);
1287 bitpack_delete (bp);
1289 /* Read the static chain and non-local goto save area. */
1290 fn->static_chain_decl = lto_input_tree (ib, data_in);
1291 fn->nonlocal_goto_save_area = lto_input_tree (ib, data_in);
1293 /* Read all the local symbols. */
1294 fn->local_decls = lto_input_tree (ib, data_in);
1296 /* Read all the SSA names. */
1297 input_ssa_names (ib, data_in, fn);
1299 /* Read the exception handling regions in the function. */
1300 input_eh_regions (ib, data_in, fn);
1302 /* Read the tree of lexical scopes for the function. */
1303 DECL_INITIAL (fn_decl) = lto_input_tree (ib, data_in);
1304 gcc_assert (DECL_INITIAL (fn_decl));
1305 DECL_SAVED_TREE (fn_decl) = NULL_TREE;
1307 /* Read all function arguments. */
1308 DECL_ARGUMENTS (fn_decl) = lto_input_tree (ib, data_in);
1310 /* Read all the basic blocks. */
1311 tag = input_record_start (ib);
1314 input_bb (ib, tag, data_in, fn);
1315 tag = input_record_start (ib);
1318 /* Fix up the call statements that are mentioned in the callgraph
1320 renumber_gimple_stmt_uids ();
1321 stmts = (gimple *) xcalloc (gimple_stmt_max_uid (fn), sizeof (gimple));
1324 gimple_stmt_iterator bsi;
1325 for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi); gsi_next (&bsi))
1327 gimple stmt = gsi_stmt (bsi);
1328 stmts[gimple_uid (stmt)] = stmt;
1332 /* Set the gimple body to the statement sequence in the entry
1333 basic block. FIXME lto, this is fairly hacky. The existence
1334 of a gimple body is used by the cgraph routines, but we should
1335 really use the presence of the CFG. */
1337 edge_iterator ei = ei_start (ENTRY_BLOCK_PTR->succs);
1338 gimple_set_body (fn_decl, bb_seq (ei_edge (ei)->dest));
1341 fixup_call_stmt_edges (cgraph_node (fn_decl), stmts);
1343 update_ssa (TODO_update_ssa_only_virtuals);
1348 /* Read initializer expressions for public statics. DATA_IN is the
1349 file being read. IB is the input block used for reading. */
1352 input_alias_pairs (struct lto_input_block *ib, struct data_in *data_in)
1356 clear_line_info (data_in);
1358 /* Skip over all the unreferenced globals. */
1360 var = lto_input_tree (ib, data_in);
1363 var = lto_input_tree (ib, data_in);
1366 const char *orig_name, *new_name;
1369 p = VEC_safe_push (alias_pair, gc, alias_pairs, NULL);
1371 p->target = lto_input_tree (ib, data_in);
1373 /* If the target is a static object, we may have registered a
1374 new name for it to avoid clashes between statics coming from
1375 different files. In that case, use the new name. */
1376 orig_name = IDENTIFIER_POINTER (p->target);
1377 new_name = lto_get_decl_name_mapping (data_in->file_data, orig_name);
1378 if (strcmp (orig_name, new_name) != 0)
1379 p->target = get_identifier (new_name);
1381 var = lto_input_tree (ib, data_in);
1386 /* Read the body from DATA for function FN_DECL and fill it in.
1387 FILE_DATA are the global decls and types. SECTION_TYPE is either
1388 LTO_section_function_body or LTO_section_static_initializer. If
1389 section type is LTO_section_function_body, FN must be the decl for
1393 lto_read_body (struct lto_file_decl_data *file_data, tree fn_decl,
1394 const char *data, enum lto_section_type section_type)
1396 const struct lto_function_header *header;
1397 struct data_in *data_in;
1399 int32_t main_offset;
1400 int32_t string_offset;
1401 struct lto_input_block ib_cfg;
1402 struct lto_input_block ib_main;
1404 header = (const struct lto_function_header *) data;
1405 cfg_offset = sizeof (struct lto_function_header);
1406 main_offset = cfg_offset + header->cfg_size;
1407 string_offset = main_offset + header->main_size;
1409 LTO_INIT_INPUT_BLOCK (ib_cfg,
1414 LTO_INIT_INPUT_BLOCK (ib_main,
1419 data_in = lto_data_in_create (file_data, data + string_offset,
1420 header->string_size, NULL);
1422 /* Make sure the file was generated by the exact same compiler. */
1423 lto_check_version (header->lto_header.major_version,
1424 header->lto_header.minor_version);
1426 if (section_type == LTO_section_function_body)
1428 struct function *fn = DECL_STRUCT_FUNCTION (fn_decl);
1429 struct lto_in_decl_state *decl_state;
1434 /* Use the function's decl state. */
1435 decl_state = lto_get_function_in_decl_state (file_data, fn_decl);
1436 gcc_assert (decl_state);
1437 file_data->current_decl_state = decl_state;
1439 input_cfg (&ib_cfg, fn);
1441 /* Set up the struct function. */
1442 input_function (fn_decl, data_in, &ib_main);
1444 /* We should now be in SSA. */
1445 cfun->gimple_df->in_ssa_p = true;
1447 /* Fill in properties we know hold for the rebuilt CFG. */
1448 cfun->curr_properties = PROP_ssa
1453 | PROP_referenced_vars;
1455 /* Restore decl state */
1456 file_data->current_decl_state = file_data->global_decl_state;
1462 input_alias_pairs (&ib_main, data_in);
1465 clear_line_info (data_in);
1466 lto_data_in_delete (data_in);
1470 /* Read the body of FN_DECL using DATA. FILE_DATA holds the global
1474 lto_input_function_body (struct lto_file_decl_data *file_data,
1475 tree fn_decl, const char *data)
1477 current_function_decl = fn_decl;
1478 lto_read_body (file_data, fn_decl, data, LTO_section_function_body);
1482 /* Read in VAR_DECL using DATA. FILE_DATA holds the global decls and
1486 lto_input_constructors_and_inits (struct lto_file_decl_data *file_data,
1489 lto_read_body (file_data, NULL, data, LTO_section_static_initializer);
1493 /* Return the resolution for the decl with index INDEX from DATA_IN. */
1495 static enum ld_plugin_symbol_resolution
1496 get_resolution (struct data_in *data_in, unsigned index)
1498 if (data_in->globals_resolution)
1500 ld_plugin_symbol_resolution_t ret;
1501 gcc_assert (index < VEC_length (ld_plugin_symbol_resolution_t,
1502 data_in->globals_resolution));
1503 ret = VEC_index (ld_plugin_symbol_resolution_t,
1504 data_in->globals_resolution,
1506 gcc_assert (ret != LDPR_UNKNOWN);
1510 /* Delay resolution finding until decl merging. */
1511 return LDPR_UNKNOWN;
1515 /* Unpack all the non-pointer fields of the TS_BASE structure of
1516 expression EXPR from bitpack BP. */
1519 unpack_ts_base_value_fields (struct bitpack_d *bp, tree expr)
1521 /* Note that the code for EXPR has already been unpacked to create EXPR in
1522 lto_materialize_tree. */
1525 TREE_SIDE_EFFECTS (expr) = (unsigned) bp_unpack_value (bp, 1);
1526 TREE_CONSTANT (expr) = (unsigned) bp_unpack_value (bp, 1);
1527 TREE_READONLY (expr) = (unsigned) bp_unpack_value (bp, 1);
1529 /* TREE_PUBLIC is used on types to indicate that the type
1530 has a TYPE_CACHED_VALUES vector. This is not streamed out,
1531 so we skip it here. */
1532 TREE_PUBLIC (expr) = (unsigned) bp_unpack_value (bp, 1);
1534 TREE_ADDRESSABLE (expr) = (unsigned) bp_unpack_value (bp, 1);
1535 TREE_THIS_VOLATILE (expr) = (unsigned) bp_unpack_value (bp, 1);
1537 DECL_UNSIGNED (expr) = (unsigned) bp_unpack_value (bp, 1);
1538 else if (TYPE_P (expr))
1539 TYPE_UNSIGNED (expr) = (unsigned) bp_unpack_value (bp, 1);
1540 TREE_ASM_WRITTEN (expr) = (unsigned) bp_unpack_value (bp, 1);
1541 TREE_NO_WARNING (expr) = (unsigned) bp_unpack_value (bp, 1);
1542 TREE_USED (expr) = (unsigned) bp_unpack_value (bp, 1);
1543 TREE_NOTHROW (expr) = (unsigned) bp_unpack_value (bp, 1);
1544 TREE_STATIC (expr) = (unsigned) bp_unpack_value (bp, 1);
1545 TREE_PRIVATE (expr) = (unsigned) bp_unpack_value (bp, 1);
1546 TREE_PROTECTED (expr) = (unsigned) bp_unpack_value (bp, 1);
1547 TREE_DEPRECATED (expr) = (unsigned) bp_unpack_value (bp, 1);
1549 TYPE_SATURATING (expr) = (unsigned) bp_unpack_value (bp, 1);
1550 if (TREE_CODE (expr) == SSA_NAME)
1551 SSA_NAME_IS_DEFAULT_DEF (expr) = (unsigned) bp_unpack_value (bp, 1);
1555 /* Unpack all the non-pointer fields of the TS_REAL_CST structure of
1556 expression EXPR from bitpack BP. */
1559 unpack_ts_real_cst_value_fields (struct bitpack_d *bp, tree expr)
1563 REAL_VALUE_TYPE *rp;
1565 r.cl = (unsigned) bp_unpack_value (bp, 2);
1566 r.decimal = (unsigned) bp_unpack_value (bp, 1);
1567 r.sign = (unsigned) bp_unpack_value (bp, 1);
1568 r.signalling = (unsigned) bp_unpack_value (bp, 1);
1569 r.canonical = (unsigned) bp_unpack_value (bp, 1);
1570 r.uexp = (unsigned) bp_unpack_value (bp, EXP_BITS);
1571 for (i = 0; i < SIGSZ; i++)
1572 r.sig[i] = (unsigned long) bp_unpack_value (bp, HOST_BITS_PER_LONG);
1574 rp = GGC_NEW (REAL_VALUE_TYPE);
1575 memcpy (rp, &r, sizeof (REAL_VALUE_TYPE));
1576 TREE_REAL_CST_PTR (expr) = rp;
1580 /* Unpack all the non-pointer fields of the TS_FIXED_CST structure of
1581 expression EXPR from bitpack BP. */
1584 unpack_ts_fixed_cst_value_fields (struct bitpack_d *bp, tree expr)
1586 struct fixed_value fv;
1588 fv.data.low = (HOST_WIDE_INT) bp_unpack_value (bp, HOST_BITS_PER_WIDE_INT);
1589 fv.data.high = (HOST_WIDE_INT) bp_unpack_value (bp, HOST_BITS_PER_WIDE_INT);
1590 TREE_FIXED_CST (expr) = fv;
1594 /* Unpack all the non-pointer fields of the TS_DECL_COMMON structure
1595 of expression EXPR from bitpack BP. */
1598 unpack_ts_decl_common_value_fields (struct bitpack_d *bp, tree expr)
1600 DECL_MODE (expr) = (enum machine_mode) bp_unpack_value (bp, 8);
1601 DECL_NONLOCAL (expr) = (unsigned) bp_unpack_value (bp, 1);
1602 DECL_VIRTUAL_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1603 DECL_IGNORED_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1604 DECL_ABSTRACT (expr) = (unsigned) bp_unpack_value (bp, 1);
1605 DECL_ARTIFICIAL (expr) = (unsigned) bp_unpack_value (bp, 1);
1606 DECL_USER_ALIGN (expr) = (unsigned) bp_unpack_value (bp, 1);
1607 DECL_PRESERVE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1608 DECL_DEBUG_EXPR_IS_FROM (expr) = (unsigned) bp_unpack_value (bp, 1);
1609 DECL_EXTERNAL (expr) = (unsigned) bp_unpack_value (bp, 1);
1610 DECL_GIMPLE_REG_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1611 DECL_ALIGN (expr) = (unsigned) bp_unpack_value (bp, HOST_BITS_PER_INT);
1613 if (TREE_CODE (expr) == LABEL_DECL)
1615 DECL_ERROR_ISSUED (expr) = (unsigned) bp_unpack_value (bp, 1);
1616 EH_LANDING_PAD_NR (expr) = (int) bp_unpack_value (bp, HOST_BITS_PER_INT);
1618 /* Always assume an initial value of -1 for LABEL_DECL_UID to
1619 force gimple_set_bb to recreate label_to_block_map. */
1620 LABEL_DECL_UID (expr) = -1;
1623 if (TREE_CODE (expr) == FIELD_DECL)
1625 unsigned HOST_WIDE_INT off_align;
1626 DECL_PACKED (expr) = (unsigned) bp_unpack_value (bp, 1);
1627 DECL_NONADDRESSABLE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1628 off_align = (unsigned HOST_WIDE_INT) bp_unpack_value (bp, 8);
1629 SET_DECL_OFFSET_ALIGN (expr, off_align);
1632 if (TREE_CODE (expr) == RESULT_DECL
1633 || TREE_CODE (expr) == PARM_DECL
1634 || TREE_CODE (expr) == VAR_DECL)
1636 DECL_BY_REFERENCE (expr) = (unsigned) bp_unpack_value (bp, 1);
1637 if (TREE_CODE (expr) == VAR_DECL
1638 || TREE_CODE (expr) == PARM_DECL)
1639 DECL_HAS_VALUE_EXPR_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1644 /* Unpack all the non-pointer fields of the TS_DECL_WRTL structure
1645 of expression EXPR from bitpack BP. */
1648 unpack_ts_decl_wrtl_value_fields (struct bitpack_d *bp, tree expr)
1650 DECL_REGISTER (expr) = (unsigned) bp_unpack_value (bp, 1);
1654 /* Unpack all the non-pointer fields of the TS_DECL_WITH_VIS structure
1655 of expression EXPR from bitpack BP. */
1658 unpack_ts_decl_with_vis_value_fields (struct bitpack_d *bp, tree expr)
1660 DECL_DEFER_OUTPUT (expr) = (unsigned) bp_unpack_value (bp, 1);
1661 DECL_COMMON (expr) = (unsigned) bp_unpack_value (bp, 1);
1662 DECL_DLLIMPORT_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1663 DECL_WEAK (expr) = (unsigned) bp_unpack_value (bp, 1);
1664 DECL_SEEN_IN_BIND_EXPR_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1665 DECL_COMDAT (expr) = (unsigned) bp_unpack_value (bp, 1);
1666 DECL_VISIBILITY (expr) = (enum symbol_visibility) bp_unpack_value (bp, 2);
1667 DECL_VISIBILITY_SPECIFIED (expr) = (unsigned) bp_unpack_value (bp, 1);
1669 if (TREE_CODE (expr) == VAR_DECL)
1671 DECL_HARD_REGISTER (expr) = (unsigned) bp_unpack_value (bp, 1);
1672 DECL_IN_TEXT_SECTION (expr) = (unsigned) bp_unpack_value (bp, 1);
1673 DECL_TLS_MODEL (expr) = (enum tls_model) bp_unpack_value (bp, 3);
1676 if (VAR_OR_FUNCTION_DECL_P (expr))
1679 p = (priority_type) bp_unpack_value (bp, HOST_BITS_PER_SHORT);
1680 SET_DECL_INIT_PRIORITY (expr, p);
1685 /* Unpack all the non-pointer fields of the TS_FUNCTION_DECL structure
1686 of expression EXPR from bitpack BP. */
1689 unpack_ts_function_decl_value_fields (struct bitpack_d *bp, tree expr)
1691 DECL_FUNCTION_CODE (expr) = (enum built_in_function) bp_unpack_value (bp, 11);
1692 DECL_BUILT_IN_CLASS (expr) = (enum built_in_class) bp_unpack_value (bp, 2);
1693 DECL_STATIC_CONSTRUCTOR (expr) = (unsigned) bp_unpack_value (bp, 1);
1694 DECL_STATIC_DESTRUCTOR (expr) = (unsigned) bp_unpack_value (bp, 1);
1695 DECL_UNINLINABLE (expr) = (unsigned) bp_unpack_value (bp, 1);
1696 DECL_POSSIBLY_INLINED (expr) = (unsigned) bp_unpack_value (bp, 1);
1697 DECL_IS_NOVOPS (expr) = (unsigned) bp_unpack_value (bp, 1);
1698 DECL_IS_RETURNS_TWICE (expr) = (unsigned) bp_unpack_value (bp, 1);
1699 DECL_IS_MALLOC (expr) = (unsigned) bp_unpack_value (bp, 1);
1700 DECL_IS_OPERATOR_NEW (expr) = (unsigned) bp_unpack_value (bp, 1);
1701 DECL_DECLARED_INLINE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1702 DECL_STATIC_CHAIN (expr) = (unsigned) bp_unpack_value (bp, 1);
1703 DECL_NO_INLINE_WARNING_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1704 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (expr)
1705 = (unsigned) bp_unpack_value (bp, 1);
1706 DECL_NO_LIMIT_STACK (expr) = (unsigned) bp_unpack_value (bp, 1);
1707 DECL_DISREGARD_INLINE_LIMITS (expr) = (unsigned) bp_unpack_value (bp, 1);
1708 DECL_PURE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1709 DECL_LOOPING_CONST_OR_PURE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1713 /* Unpack all the non-pointer fields of the TS_TYPE structure
1714 of expression EXPR from bitpack BP. */
1717 unpack_ts_type_value_fields (struct bitpack_d *bp, tree expr)
1719 enum machine_mode mode;
1721 TYPE_PRECISION (expr) = (unsigned) bp_unpack_value (bp, 9);
1722 mode = (enum machine_mode) bp_unpack_value (bp, 7);
1723 SET_TYPE_MODE (expr, mode);
1724 TYPE_STRING_FLAG (expr) = (unsigned) bp_unpack_value (bp, 1);
1725 TYPE_NO_FORCE_BLK (expr) = (unsigned) bp_unpack_value (bp, 1);
1726 TYPE_NEEDS_CONSTRUCTING(expr) = (unsigned) bp_unpack_value (bp, 1);
1727 if (TREE_CODE (expr) == UNION_TYPE)
1728 TYPE_TRANSPARENT_UNION (expr) = (unsigned) bp_unpack_value (bp, 1);
1729 TYPE_PACKED (expr) = (unsigned) bp_unpack_value (bp, 1);
1730 TYPE_RESTRICT (expr) = (unsigned) bp_unpack_value (bp, 1);
1731 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (expr)
1732 = (unsigned) bp_unpack_value (bp, 2);
1733 TYPE_USER_ALIGN (expr) = (unsigned) bp_unpack_value (bp, 1);
1734 TYPE_READONLY (expr) = (unsigned) bp_unpack_value (bp, 1);
1735 TYPE_ALIGN (expr) = (unsigned) bp_unpack_value (bp, HOST_BITS_PER_INT);
1736 TYPE_ALIAS_SET (expr) = bp_unpack_value (bp, HOST_BITS_PER_INT);
1740 /* Unpack all the non-pointer fields of the TS_BLOCK structure
1741 of expression EXPR from bitpack BP. */
1744 unpack_ts_block_value_fields (struct bitpack_d *bp, tree expr)
1746 BLOCK_ABSTRACT (expr) = (unsigned) bp_unpack_value (bp, 1);
1747 BLOCK_NUMBER (expr) = (unsigned) bp_unpack_value (bp, 31);
1751 /* Unpack all the non-pointer fields in EXPR into a bit pack. */
1754 unpack_value_fields (struct bitpack_d *bp, tree expr)
1756 enum tree_code code;
1758 code = TREE_CODE (expr);
1760 /* Note that all these functions are highly sensitive to changes in
1761 the types and sizes of each of the fields being packed. */
1762 unpack_ts_base_value_fields (bp, expr);
1764 if (CODE_CONTAINS_STRUCT (code, TS_REAL_CST))
1765 unpack_ts_real_cst_value_fields (bp, expr);
1767 if (CODE_CONTAINS_STRUCT (code, TS_FIXED_CST))
1768 unpack_ts_fixed_cst_value_fields (bp, expr);
1770 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
1771 unpack_ts_decl_common_value_fields (bp, expr);
1773 if (CODE_CONTAINS_STRUCT (code, TS_DECL_WRTL))
1774 unpack_ts_decl_wrtl_value_fields (bp, expr);
1776 if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
1777 unpack_ts_decl_with_vis_value_fields (bp, expr);
1779 if (CODE_CONTAINS_STRUCT (code, TS_FUNCTION_DECL))
1780 unpack_ts_function_decl_value_fields (bp, expr);
1782 if (CODE_CONTAINS_STRUCT (code, TS_TYPE))
1783 unpack_ts_type_value_fields (bp, expr);
1785 if (CODE_CONTAINS_STRUCT (code, TS_BLOCK))
1786 unpack_ts_block_value_fields (bp, expr);
1788 if (CODE_CONTAINS_STRUCT (code, TS_SSA_NAME))
1790 /* We only stream the version number of SSA names. */
1794 if (CODE_CONTAINS_STRUCT (code, TS_STATEMENT_LIST))
1796 /* This is only used by GENERIC. */
1800 if (CODE_CONTAINS_STRUCT (code, TS_OMP_CLAUSE))
1802 /* This is only used by High GIMPLE. */
1808 /* Read a bitpack from input block IB. */
1811 lto_input_bitpack (struct lto_input_block *ib)
1813 unsigned i, num_words;
1814 struct bitpack_d *bp;
1816 bp = bitpack_create ();
1818 /* If we are about to read more than a handful of words, something
1819 is wrong. This check is overly strict, but it acts as an early
1820 warning. No streamed object has hundreds of bits in its fields. */
1821 num_words = lto_input_uleb128 (ib);
1822 gcc_assert (num_words < 20);
1824 for (i = 0; i < num_words; i++)
1826 bitpack_word_t w = lto_input_uleb128 (ib);
1827 VEC_safe_push (bitpack_word_t, heap, bp->values, w);
1834 /* Materialize a new tree from input block IB using descriptors in
1835 DATA_IN. The code for the new tree should match TAG. Store in
1836 *IX_P the index into the reader cache where the new tree is stored. */
1839 lto_materialize_tree (struct lto_input_block *ib, struct data_in *data_in,
1840 enum LTO_tags tag, int *ix_p)
1842 struct bitpack_d *bp;
1843 enum tree_code code;
1845 #ifdef LTO_STREAMER_DEBUG
1846 HOST_WIDEST_INT orig_address_in_writer;
1852 /* Read the header of the node we are about to create. */
1853 ix = lto_input_sleb128 (ib);
1854 gcc_assert ((int) ix == ix);
1857 #ifdef LTO_STREAMER_DEBUG
1858 /* Read the word representing the memory address for the tree
1859 as it was written by the writer. This is useful when
1860 debugging differences between the writer and reader. */
1861 orig_address_in_writer = lto_input_sleb128 (ib);
1862 gcc_assert ((intptr_t) orig_address_in_writer == orig_address_in_writer);
1865 code = lto_tag_to_tree_code (tag);
1867 /* We should never see an SSA_NAME tree. Only the version numbers of
1868 SSA names are ever written out. See input_ssa_names. */
1869 gcc_assert (code != SSA_NAME);
1871 /* Instantiate a new tree using the header data. */
1872 if (CODE_CONTAINS_STRUCT (code, TS_STRING))
1873 result = input_string_cst (data_in, ib);
1874 else if (CODE_CONTAINS_STRUCT (code, TS_IDENTIFIER))
1875 result = input_identifier (data_in, ib);
1876 else if (CODE_CONTAINS_STRUCT (code, TS_VEC))
1878 HOST_WIDE_INT len = lto_input_sleb128 (ib);
1879 result = make_tree_vec (len);
1881 else if (CODE_CONTAINS_STRUCT (code, TS_BINFO))
1883 unsigned HOST_WIDE_INT len = lto_input_uleb128 (ib);
1884 result = make_tree_binfo (len);
1888 /* All other nodes can be materialized with a raw make_node
1890 result = make_node (code);
1893 #ifdef LTO_STREAMER_DEBUG
1894 /* Store the original address of the tree as seen by the writer
1895 in RESULT's aux field. This is useful when debugging streaming
1896 problems. This way, a debugging session can be started on
1897 both writer and reader with a breakpoint using this address
1899 lto_orig_address_map (result, (intptr_t) orig_address_in_writer);
1902 /* Read the bitpack of non-pointer values from IB. */
1903 bp = lto_input_bitpack (ib);
1905 /* The first word in BP contains the code of the tree that we
1906 are about to read. */
1907 code = (enum tree_code) bp_unpack_value (bp, 16);
1908 lto_tag_check (lto_tree_code_to_tag (code), tag);
1910 /* Unpack all the value fields from BP. */
1911 unpack_value_fields (bp, result);
1912 bitpack_delete (bp);
1914 /* Enter RESULT in the reader cache. This will make RESULT
1915 available so that circular references in the rest of the tree
1916 structure can be resolved in subsequent calls to lto_input_tree. */
1917 lto_streamer_cache_insert_at (data_in->reader_cache, result, ix);
1923 /* Read a chain of tree nodes from input block IB. DATA_IN contains
1924 tables and descriptors for the file being read. */
1927 lto_input_chain (struct lto_input_block *ib, struct data_in *data_in)
1930 tree first, prev, curr;
1932 first = prev = NULL_TREE;
1933 count = lto_input_sleb128 (ib);
1934 for (i = 0; i < count; i++)
1936 curr = lto_input_tree (ib, data_in);
1938 TREE_CHAIN (prev) = curr;
1942 TREE_CHAIN (curr) = NULL_TREE;
1950 /* Read all pointer fields in the TS_COMMON structure of EXPR from input
1951 block IB. DATA_IN contains tables and descriptors for the
1956 lto_input_ts_common_tree_pointers (struct lto_input_block *ib,
1957 struct data_in *data_in, tree expr)
1959 TREE_TYPE (expr) = lto_input_tree (ib, data_in);
1963 /* Read all pointer fields in the TS_VECTOR structure of EXPR from input
1964 block IB. DATA_IN contains tables and descriptors for the
1968 lto_input_ts_vector_tree_pointers (struct lto_input_block *ib,
1969 struct data_in *data_in, tree expr)
1971 TREE_VECTOR_CST_ELTS (expr) = lto_input_chain (ib, data_in);
1975 /* Read all pointer fields in the TS_COMPLEX structure of EXPR from input
1976 block IB. DATA_IN contains tables and descriptors for the
1980 lto_input_ts_complex_tree_pointers (struct lto_input_block *ib,
1981 struct data_in *data_in, tree expr)
1983 TREE_REALPART (expr) = lto_input_tree (ib, data_in);
1984 TREE_IMAGPART (expr) = lto_input_tree (ib, data_in);
1988 /* Read all pointer fields in the TS_DECL_MINIMAL structure of EXPR
1989 from input block IB. DATA_IN contains tables and descriptors for the
1993 lto_input_ts_decl_minimal_tree_pointers (struct lto_input_block *ib,
1994 struct data_in *data_in, tree expr)
1996 DECL_NAME (expr) = lto_input_tree (ib, data_in);
1997 DECL_CONTEXT (expr) = lto_input_tree (ib, data_in);
1998 DECL_SOURCE_LOCATION (expr) = lto_input_location (ib, data_in);
2002 /* Read all pointer fields in the TS_DECL_COMMON structure of EXPR from
2003 input block IB. DATA_IN contains tables and descriptors for the
2007 lto_input_ts_decl_common_tree_pointers (struct lto_input_block *ib,
2008 struct data_in *data_in, tree expr)
2010 DECL_SIZE (expr) = lto_input_tree (ib, data_in);
2011 DECL_SIZE_UNIT (expr) = lto_input_tree (ib, data_in);
2013 if (TREE_CODE (expr) != FUNCTION_DECL)
2014 DECL_INITIAL (expr) = lto_input_tree (ib, data_in);
2016 DECL_ATTRIBUTES (expr) = lto_input_tree (ib, data_in);
2017 DECL_ABSTRACT_ORIGIN (expr) = lto_input_tree (ib, data_in);
2019 if (TREE_CODE (expr) == PARM_DECL)
2020 TREE_CHAIN (expr) = lto_input_chain (ib, data_in);
2024 /* Read all pointer fields in the TS_DECL_NON_COMMON structure of
2025 EXPR from input block IB. DATA_IN contains tables and descriptors for the
2029 lto_input_ts_decl_non_common_tree_pointers (struct lto_input_block *ib,
2030 struct data_in *data_in, tree expr)
2032 if (TREE_CODE (expr) == FUNCTION_DECL)
2034 DECL_ARGUMENTS (expr) = lto_input_tree (ib, data_in);
2035 DECL_RESULT (expr) = lto_input_tree (ib, data_in);
2037 DECL_VINDEX (expr) = lto_input_tree (ib, data_in);
2041 /* Read all pointer fields in the TS_DECL_WITH_VIS structure of EXPR
2042 from input block IB. DATA_IN contains tables and descriptors for the
2046 lto_input_ts_decl_with_vis_tree_pointers (struct lto_input_block *ib,
2047 struct data_in *data_in, tree expr)
2051 id = lto_input_tree (ib, data_in);
2054 gcc_assert (TREE_CODE (id) == IDENTIFIER_NODE);
2055 SET_DECL_ASSEMBLER_NAME (expr, id);
2058 DECL_SECTION_NAME (expr) = lto_input_tree (ib, data_in);
2059 DECL_COMDAT_GROUP (expr) = lto_input_tree (ib, data_in);
2063 /* Read all pointer fields in the TS_FIELD_DECL structure of EXPR from
2064 input block IB. DATA_IN contains tables and descriptors for the
2068 lto_input_ts_field_decl_tree_pointers (struct lto_input_block *ib,
2069 struct data_in *data_in, tree expr)
2071 DECL_FIELD_OFFSET (expr) = lto_input_tree (ib, data_in);
2072 DECL_BIT_FIELD_TYPE (expr) = lto_input_tree (ib, data_in);
2073 DECL_QUALIFIER (expr) = lto_input_tree (ib, data_in);
2074 DECL_FIELD_BIT_OFFSET (expr) = lto_input_tree (ib, data_in);
2075 DECL_FCONTEXT (expr) = lto_input_tree (ib, data_in);
2076 TREE_CHAIN (expr) = lto_input_chain (ib, data_in);
2080 /* Read all pointer fields in the TS_FUNCTION_DECL structure of EXPR
2081 from input block IB. DATA_IN contains tables and descriptors for the
2085 lto_input_ts_function_decl_tree_pointers (struct lto_input_block *ib,
2086 struct data_in *data_in, tree expr)
2088 /* DECL_STRUCT_FUNCTION is handled by lto_input_function. FIXME lto,
2089 maybe it should be handled here? */
2090 DECL_FUNCTION_PERSONALITY (expr) = lto_input_tree (ib, data_in);
2091 DECL_FUNCTION_SPECIFIC_TARGET (expr) = lto_input_tree (ib, data_in);
2092 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr) = lto_input_tree (ib, data_in);
2096 /* Read all pointer fields in the TS_TYPE structure of EXPR from input
2097 block IB. DATA_IN contains tables and descriptors for the
2101 lto_input_ts_type_tree_pointers (struct lto_input_block *ib,
2102 struct data_in *data_in, tree expr)
2104 if (TREE_CODE (expr) == ENUMERAL_TYPE)
2105 TYPE_VALUES (expr) = lto_input_tree (ib, data_in);
2106 else if (TREE_CODE (expr) == ARRAY_TYPE)
2107 TYPE_DOMAIN (expr) = lto_input_tree (ib, data_in);
2108 else if (TREE_CODE (expr) == RECORD_TYPE || TREE_CODE (expr) == UNION_TYPE)
2109 TYPE_FIELDS (expr) = lto_input_tree (ib, data_in);
2110 else if (TREE_CODE (expr) == FUNCTION_TYPE || TREE_CODE (expr) == METHOD_TYPE)
2111 TYPE_ARG_TYPES (expr) = lto_input_tree (ib, data_in);
2112 else if (TREE_CODE (expr) == VECTOR_TYPE)
2113 TYPE_DEBUG_REPRESENTATION_TYPE (expr) = lto_input_tree (ib, data_in);
2115 TYPE_SIZE (expr) = lto_input_tree (ib, data_in);
2116 TYPE_SIZE_UNIT (expr) = lto_input_tree (ib, data_in);
2117 TYPE_ATTRIBUTES (expr) = lto_input_tree (ib, data_in);
2118 TYPE_NAME (expr) = lto_input_tree (ib, data_in);
2119 /* Do not stream TYPE_POINTER_TO or TYPE_REFERENCE_TO nor
2120 TYPE_NEXT_PTR_TO or TYPE_NEXT_REF_TO. */
2121 if (!POINTER_TYPE_P (expr))
2122 TYPE_MINVAL (expr) = lto_input_tree (ib, data_in);
2123 TYPE_MAXVAL (expr) = lto_input_tree (ib, data_in);
2124 TYPE_MAIN_VARIANT (expr) = lto_input_tree (ib, data_in);
2125 /* Do not stream TYPE_NEXT_VARIANT, we reconstruct the variant lists
2127 if (RECORD_OR_UNION_TYPE_P (expr))
2128 TYPE_BINFO (expr) = lto_input_tree (ib, data_in);
2129 TYPE_CONTEXT (expr) = lto_input_tree (ib, data_in);
2130 TYPE_CANONICAL (expr) = lto_input_tree (ib, data_in);
2134 /* Read all pointer fields in the TS_LIST structure of EXPR from input
2135 block IB. DATA_IN contains tables and descriptors for the
2139 lto_input_ts_list_tree_pointers (struct lto_input_block *ib,
2140 struct data_in *data_in, tree expr)
2142 TREE_PURPOSE (expr) = lto_input_tree (ib, data_in);
2143 TREE_VALUE (expr) = lto_input_tree (ib, data_in);
2144 TREE_CHAIN (expr) = lto_input_chain (ib, data_in);
2148 /* Read all pointer fields in the TS_VEC structure of EXPR from input
2149 block IB. DATA_IN contains tables and descriptors for the
2153 lto_input_ts_vec_tree_pointers (struct lto_input_block *ib,
2154 struct data_in *data_in, tree expr)
2158 /* Note that TREE_VEC_LENGTH was read by lto_materialize_tree to
2159 instantiate EXPR. */
2160 for (i = 0; i < TREE_VEC_LENGTH (expr); i++)
2161 TREE_VEC_ELT (expr, i) = lto_input_tree (ib, data_in);
2165 /* Read all pointer fields in the TS_EXP structure of EXPR from input
2166 block IB. DATA_IN contains tables and descriptors for the
2171 lto_input_ts_exp_tree_pointers (struct lto_input_block *ib,
2172 struct data_in *data_in, tree expr)
2177 length = lto_input_sleb128 (ib);
2178 gcc_assert (length == TREE_OPERAND_LENGTH (expr));
2180 for (i = 0; i < length; i++)
2181 TREE_OPERAND (expr, i) = lto_input_tree (ib, data_in);
2183 loc = lto_input_location (ib, data_in);
2184 SET_EXPR_LOCATION (expr, loc);
2185 TREE_BLOCK (expr) = lto_input_tree (ib, data_in);
2189 /* Read all pointer fields in the TS_BLOCK structure of EXPR from input
2190 block IB. DATA_IN contains tables and descriptors for the
2194 lto_input_ts_block_tree_pointers (struct lto_input_block *ib,
2195 struct data_in *data_in, tree expr)
2199 BLOCK_SOURCE_LOCATION (expr) = lto_input_location (ib, data_in);
2200 BLOCK_VARS (expr) = lto_input_chain (ib, data_in);
2202 len = lto_input_uleb128 (ib);
2203 for (i = 0; i < len; i++)
2205 tree t = lto_input_tree (ib, data_in);
2206 VEC_safe_push (tree, gc, BLOCK_NONLOCALIZED_VARS (expr), t);
2209 BLOCK_SUPERCONTEXT (expr) = lto_input_tree (ib, data_in);
2210 BLOCK_ABSTRACT_ORIGIN (expr) = lto_input_tree (ib, data_in);
2211 BLOCK_FRAGMENT_ORIGIN (expr) = lto_input_tree (ib, data_in);
2212 BLOCK_FRAGMENT_CHAIN (expr) = lto_input_tree (ib, data_in);
2213 BLOCK_SUBBLOCKS (expr) = lto_input_chain (ib, data_in);
2217 /* Read all pointer fields in the TS_BINFO structure of EXPR from input
2218 block IB. DATA_IN contains tables and descriptors for the
2222 lto_input_ts_binfo_tree_pointers (struct lto_input_block *ib,
2223 struct data_in *data_in, tree expr)
2228 /* Note that the number of slots in EXPR was read in
2229 lto_materialize_tree when instantiating EXPR. However, the
2230 vector is empty so we cannot rely on VEC_length to know how many
2231 elements to read. So, this list is emitted as a 0-terminated
2232 list on the writer side. */
2235 t = lto_input_tree (ib, data_in);
2237 VEC_quick_push (tree, BINFO_BASE_BINFOS (expr), t);
2241 BINFO_OFFSET (expr) = lto_input_tree (ib, data_in);
2242 BINFO_VTABLE (expr) = lto_input_tree (ib, data_in);
2243 BINFO_VIRTUALS (expr) = lto_input_tree (ib, data_in);
2244 BINFO_VPTR_FIELD (expr) = lto_input_tree (ib, data_in);
2246 len = lto_input_uleb128 (ib);
2247 for (i = 0; i < len; i++)
2249 tree a = lto_input_tree (ib, data_in);
2250 VEC_safe_push (tree, gc, BINFO_BASE_ACCESSES (expr), a);
2253 BINFO_INHERITANCE_CHAIN (expr) = lto_input_tree (ib, data_in);
2254 BINFO_SUBVTT_INDEX (expr) = lto_input_tree (ib, data_in);
2255 BINFO_VPTR_INDEX (expr) = lto_input_tree (ib, data_in);
2259 /* Read all pointer fields in the TS_CONSTRUCTOR structure of EXPR from
2260 input block IB. DATA_IN contains tables and descriptors for the
2264 lto_input_ts_constructor_tree_pointers (struct lto_input_block *ib,
2265 struct data_in *data_in, tree expr)
2269 len = lto_input_uleb128 (ib);
2270 for (i = 0; i < len; i++)
2274 index = lto_input_tree (ib, data_in);
2275 value = lto_input_tree (ib, data_in);
2276 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (expr), index, value);
2281 /* Helper for lto_input_tree. Read all pointer fields in EXPR from
2282 input block IB. DATA_IN contains tables and descriptors for the
2286 lto_input_tree_pointers (struct lto_input_block *ib, struct data_in *data_in,
2289 enum tree_code code;
2291 code = TREE_CODE (expr);
2293 if (CODE_CONTAINS_STRUCT (code, TS_COMMON))
2294 lto_input_ts_common_tree_pointers (ib, data_in, expr);
2296 if (CODE_CONTAINS_STRUCT (code, TS_VECTOR))
2297 lto_input_ts_vector_tree_pointers (ib, data_in, expr);
2299 if (CODE_CONTAINS_STRUCT (code, TS_COMPLEX))
2300 lto_input_ts_complex_tree_pointers (ib, data_in, expr);
2302 if (CODE_CONTAINS_STRUCT (code, TS_DECL_MINIMAL))
2303 lto_input_ts_decl_minimal_tree_pointers (ib, data_in, expr);
2305 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
2306 lto_input_ts_decl_common_tree_pointers (ib, data_in, expr);
2308 if (CODE_CONTAINS_STRUCT (code, TS_DECL_NON_COMMON))
2309 lto_input_ts_decl_non_common_tree_pointers (ib, data_in, expr);
2311 if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
2312 lto_input_ts_decl_with_vis_tree_pointers (ib, data_in, expr);
2314 if (CODE_CONTAINS_STRUCT (code, TS_FIELD_DECL))
2315 lto_input_ts_field_decl_tree_pointers (ib, data_in, expr);
2317 if (CODE_CONTAINS_STRUCT (code, TS_FUNCTION_DECL))
2318 lto_input_ts_function_decl_tree_pointers (ib, data_in, expr);
2320 if (CODE_CONTAINS_STRUCT (code, TS_TYPE))
2321 lto_input_ts_type_tree_pointers (ib, data_in, expr);
2323 if (CODE_CONTAINS_STRUCT (code, TS_LIST))
2324 lto_input_ts_list_tree_pointers (ib, data_in, expr);
2326 if (CODE_CONTAINS_STRUCT (code, TS_VEC))
2327 lto_input_ts_vec_tree_pointers (ib, data_in, expr);
2329 if (CODE_CONTAINS_STRUCT (code, TS_EXP))
2330 lto_input_ts_exp_tree_pointers (ib, data_in, expr);
2332 if (CODE_CONTAINS_STRUCT (code, TS_SSA_NAME))
2334 /* We only stream the version number of SSA names. */
2338 if (CODE_CONTAINS_STRUCT (code, TS_BLOCK))
2339 lto_input_ts_block_tree_pointers (ib, data_in, expr);
2341 if (CODE_CONTAINS_STRUCT (code, TS_BINFO))
2342 lto_input_ts_binfo_tree_pointers (ib, data_in, expr);
2344 if (CODE_CONTAINS_STRUCT (code, TS_STATEMENT_LIST))
2346 /* This should only appear in GENERIC. */
2350 if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
2351 lto_input_ts_constructor_tree_pointers (ib, data_in, expr);
2353 if (CODE_CONTAINS_STRUCT (code, TS_OMP_CLAUSE))
2355 /* This should only appear in High GIMPLE. */
2359 if (CODE_CONTAINS_STRUCT (code, TS_OPTIMIZATION))
2361 sorry ("optimization options not supported yet");
2364 if (CODE_CONTAINS_STRUCT (code, TS_TARGET_OPTION))
2366 sorry ("target optimization options not supported yet");
2371 /* Register DECL with the global symbol table and change its
2372 name if necessary to avoid name clashes for static globals across
2376 lto_register_var_decl_in_symtab (struct data_in *data_in, tree decl)
2378 /* Register symbols with file or global scope to mark what input
2379 file has their definition. */
2380 if (decl_function_context (decl) == NULL_TREE)
2382 /* Variable has file scope, not local. Need to ensure static variables
2383 between different files don't clash unexpectedly. */
2384 if (!TREE_PUBLIC (decl))
2386 /* ??? We normally pre-mangle names before we serialize them
2387 out. Here, in lto1, we do not know the language, and
2388 thus cannot do the mangling again. Instead, we just
2389 append a suffix to the mangled name. The resulting name,
2390 however, is not a properly-formed mangled name, and will
2391 confuse any attempt to unmangle it. */
2392 const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
2395 ASM_FORMAT_PRIVATE_NAME (label, name, DECL_UID (decl));
2396 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (label));
2397 rest_of_decl_compilation (decl, 1, 0);
2401 /* If this variable has already been declared, queue the
2402 declaration for merging. */
2403 if (TREE_PUBLIC (decl))
2406 if (!lto_streamer_cache_lookup (data_in->reader_cache, decl, &ix))
2408 lto_symtab_register_decl (decl, get_resolution (data_in, ix),
2409 data_in->file_data);
2415 /* Register DECL with the global symbol table and change its
2416 name if necessary to avoid name clashes for static globals across
2417 different files. DATA_IN contains descriptors and tables for the
2421 lto_register_function_decl_in_symtab (struct data_in *data_in, tree decl)
2423 /* Need to ensure static entities between different files
2424 don't clash unexpectedly. */
2425 if (!TREE_PUBLIC (decl))
2427 /* We must not use the DECL_ASSEMBLER_NAME macro here, as it
2428 may set the assembler name where it was previously empty. */
2429 tree old_assembler_name = decl->decl_with_vis.assembler_name;
2431 /* FIXME lto: We normally pre-mangle names before we serialize
2432 them out. Here, in lto1, we do not know the language, and
2433 thus cannot do the mangling again. Instead, we just append a
2434 suffix to the mangled name. The resulting name, however, is
2435 not a properly-formed mangled name, and will confuse any
2436 attempt to unmangle it. */
2437 const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
2440 ASM_FORMAT_PRIVATE_NAME (label, name, DECL_UID (decl));
2441 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (label));
2443 /* We may arrive here with the old assembler name not set
2444 if the function body is not needed, e.g., it has been
2445 inlined away and does not appear in the cgraph. */
2446 if (old_assembler_name)
2448 tree new_assembler_name = DECL_ASSEMBLER_NAME (decl);
2450 /* Make the original assembler name available for later use.
2451 We may have used it to indicate the section within its
2452 object file where the function body may be found.
2453 FIXME lto: Find a better way to maintain the function decl
2454 to body section mapping so we don't need this hack. */
2455 lto_record_renamed_decl (data_in->file_data,
2456 IDENTIFIER_POINTER (old_assembler_name),
2457 IDENTIFIER_POINTER (new_assembler_name));
2459 /* Also register the reverse mapping so that we can find the
2460 new name given to an existing assembler name (used when
2461 restoring alias pairs in input_constructors_or_inits. */
2462 lto_record_renamed_decl (data_in->file_data,
2463 IDENTIFIER_POINTER (new_assembler_name),
2464 IDENTIFIER_POINTER (old_assembler_name));
2468 /* If this variable has already been declared, queue the
2469 declaration for merging. */
2470 if (TREE_PUBLIC (decl) && !DECL_ABSTRACT (decl))
2473 if (!lto_streamer_cache_lookup (data_in->reader_cache, decl, &ix))
2475 lto_symtab_register_decl (decl, get_resolution (data_in, ix),
2476 data_in->file_data);
2481 /* Read an index IX from input block IB and return the tree node at
2482 DATA_IN->FILE_DATA->GLOBALS_INDEX[IX]. */
2485 lto_get_pickled_tree (struct lto_input_block *ib, struct data_in *data_in)
2489 enum LTO_tags expected_tag;
2490 unsigned HOST_WIDE_INT orig_offset;
2492 ix = lto_input_sleb128 (ib);
2493 expected_tag = (enum LTO_tags) lto_input_uleb128 (ib);
2495 orig_offset = lto_input_uleb128 (ib);
2496 gcc_assert (orig_offset == (unsigned) orig_offset);
2498 result = lto_streamer_cache_get (data_in->reader_cache, ix);
2499 if (result == NULL_TREE)
2501 /* We have not yet read the cache slot IX. Go to the offset
2502 in the stream where the physical tree node is, and materialize
2504 struct lto_input_block fwd_ib;
2506 /* If we are trying to go back in the stream, something is wrong.
2507 We should've read the node at the earlier position already. */
2508 if (ib->p >= orig_offset)
2509 internal_error ("bytecode stream: tried to jump backwards in the "
2512 LTO_INIT_INPUT_BLOCK (fwd_ib, ib->data, orig_offset, ib->len);
2513 result = lto_input_tree (&fwd_ib, data_in);
2517 && TREE_CODE (result) == lto_tag_to_tree_code (expected_tag));
2523 /* Read a code and class from input block IB and return the
2524 corresponding builtin. DATA_IN is as in lto_input_tree. */
2527 lto_get_builtin_tree (struct lto_input_block *ib, struct data_in *data_in)
2529 enum built_in_class fclass;
2530 enum built_in_function fcode;
2531 const char *asmname;
2535 fclass = (enum built_in_class) lto_input_uleb128 (ib);
2536 gcc_assert (fclass == BUILT_IN_NORMAL || fclass == BUILT_IN_MD);
2538 fcode = (enum built_in_function) lto_input_uleb128 (ib);
2540 ix = lto_input_sleb128 (ib);
2541 gcc_assert (ix == (int) ix);
2543 if (fclass == BUILT_IN_NORMAL)
2545 gcc_assert (fcode < END_BUILTINS);
2546 result = built_in_decls[fcode];
2547 gcc_assert (result);
2549 else if (fclass == BUILT_IN_MD)
2551 result = targetm.builtin_decl (fcode, true);
2552 if (!result || result == error_mark_node)
2553 fatal_error ("target specific builtin not available");
2556 asmname = input_string (data_in, ib);
2558 set_builtin_user_assembler_name (result, asmname);
2560 lto_streamer_cache_insert_at (data_in->reader_cache, result, ix);
2566 /* Read the physical representation of a tree node with tag TAG from
2567 input block IB using the per-file context in DATA_IN. */
2570 lto_read_tree (struct lto_input_block *ib, struct data_in *data_in,
2577 result = lto_materialize_tree (ib, data_in, tag, &ix);
2579 /* Read all the pointer fields in RESULT. */
2580 lto_input_tree_pointers (ib, data_in, result);
2582 /* We should never try to instantiate an MD or NORMAL builtin here. */
2583 if (TREE_CODE (result) == FUNCTION_DECL)
2584 gcc_assert (!lto_stream_as_builtin_p (result));
2586 if (TREE_CODE (result) == VAR_DECL)
2587 lto_register_var_decl_in_symtab (data_in, result);
2588 else if (TREE_CODE (result) == FUNCTION_DECL && !DECL_BUILT_IN (result))
2589 lto_register_function_decl_in_symtab (data_in, result);
2591 end_marker = lto_input_1_unsigned (ib);
2593 #ifdef LTO_STREAMER_DEBUG
2594 /* Remove the mapping to RESULT's original address set by
2595 lto_materialize_tree. */
2596 lto_orig_address_remove (result);
2603 /* Read and INTEGER_CST node from input block IB using the per-file
2604 context in DATA_IN. */
2607 lto_input_integer_cst (struct lto_input_block *ib, struct data_in *data_in)
2610 HOST_WIDE_INT low, high;
2613 type = lto_input_tree (ib, data_in);
2614 overflow_p = (lto_input_1_unsigned (ib) != 0);
2615 low = lto_input_uleb128 (ib);
2616 high = lto_input_uleb128 (ib);
2617 result = build_int_cst_wide (type, low, high);
2619 /* If the original constant had overflown, build a replica of RESULT to
2620 avoid modifying the shared constant returned by build_int_cst_wide. */
2623 result = copy_node (result);
2624 TREE_OVERFLOW (result) = 1;
2631 /* Read a tree from input block IB using the per-file context in
2632 DATA_IN. This context is used, for example, to resolve references
2633 to previously read nodes. */
2636 lto_input_tree (struct lto_input_block *ib, struct data_in *data_in)
2641 tag = input_record_start (ib);
2642 gcc_assert ((unsigned) tag < (unsigned) LTO_NUM_TAGS);
2644 if (tag == LTO_null)
2646 else if (tag >= LTO_field_decl_ref && tag <= LTO_global_decl_ref)
2648 /* If TAG is a reference to an indexable tree, the next value
2649 in IB is the index into the table where we expect to find
2651 result = lto_input_tree_ref (ib, data_in, cfun, tag);
2653 else if (tag == LTO_tree_pickle_reference)
2655 /* If TAG is a reference to a previously read tree, look it up in
2656 the reader cache. */
2657 result = lto_get_pickled_tree (ib, data_in);
2659 else if (tag == LTO_builtin_decl)
2661 /* If we are going to read a built-in function, all we need is
2662 the code and class. */
2663 result = lto_get_builtin_tree (ib, data_in);
2665 else if (tag == lto_tree_code_to_tag (INTEGER_CST))
2667 /* For integer constants we only need the type and its hi/low
2669 result = lto_input_integer_cst (ib, data_in);
2673 /* Otherwise, materialize a new node from IB. */
2674 result = lto_read_tree (ib, data_in, tag);
2681 /* Initialization for the LTO reader. */
2684 lto_init_reader (void)
2686 lto_streamer_init ();
2688 memset (<o_stats, 0, sizeof (lto_stats));
2689 bitmap_obstack_initialize (NULL);
2691 file_name_hash_table = htab_create (37, hash_string_slot_node,
2692 eq_string_slot_node, free);
2694 gimple_register_cfg_hooks ();
2698 /* Create a new data_in object for FILE_DATA. STRINGS is the string
2699 table to use with LEN strings. RESOLUTIONS is the vector of linker
2700 resolutions (NULL if not using a linker plugin). */
2703 lto_data_in_create (struct lto_file_decl_data *file_data, const char *strings,
2705 VEC(ld_plugin_symbol_resolution_t,heap) *resolutions)
2707 struct data_in *data_in = XCNEW (struct data_in);
2708 data_in->file_data = file_data;
2709 data_in->strings = strings;
2710 data_in->strings_len = len;
2711 data_in->globals_resolution = resolutions;
2712 data_in->reader_cache = lto_streamer_cache_create ();
2718 /* Remove DATA_IN. */
2721 lto_data_in_delete (struct data_in *data_in)
2723 VEC_free (ld_plugin_symbol_resolution_t, heap, data_in->globals_resolution);
2724 lto_streamer_cache_delete (data_in->reader_cache);
2725 free (data_in->labels);