gcc/
[official-gcc.git] / gcc / lto / lto.c
blob0972ff607c8db4bab90e55d8b03aa9e93676b17d
1 /* Top-level LTO routines.
2 Copyright (C) 2009-2015 Free Software Foundation, Inc.
3 Contributed by CodeSourcery, Inc.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "opts.h"
25 #include "toplev.h"
26 #include "alias.h"
27 #include "symtab.h"
28 #include "options.h"
29 #include "tree.h"
30 #include "fold-const.h"
31 #include "stor-layout.h"
32 #include "diagnostic-core.h"
33 #include "tm.h"
34 #include "predict.h"
35 #include "basic-block.h"
36 #include "hard-reg-set.h"
37 #include "function.h"
38 #include "cgraph.h"
39 #include "tree-ssa-operands.h"
40 #include "tree-pass.h"
41 #include "langhooks.h"
42 #include "bitmap.h"
43 #include "alloc-pool.h"
44 #include "symbol-summary.h"
45 #include "ipa-prop.h"
46 #include "common.h"
47 #include "debug.h"
48 #include "tree-ssa-alias.h"
49 #include "internal-fn.h"
50 #include "gimple-expr.h"
51 #include "gimple.h"
52 #include "lto.h"
53 #include "lto-tree.h"
54 #include "lto-streamer.h"
55 #include "lto-section-names.h"
56 #include "tree-streamer.h"
57 #include "splay-tree.h"
58 #include "lto-partition.h"
59 #include "data-streamer.h"
60 #include "context.h"
61 #include "pass_manager.h"
62 #include "ipa-inline.h"
63 #include "params.h"
64 #include "ipa-utils.h"
65 #include "gomp-constants.h"
68 /* Number of parallel tasks to run, -1 if we want to use GNU Make jobserver. */
69 static int lto_parallelism;
71 static GTY(()) tree first_personality_decl;
73 static GTY(()) const unsigned char *lto_mode_identity_table;
75 /* Returns a hash code for P. */
77 static hashval_t
78 hash_name (const void *p)
80 const struct lto_section_slot *ds = (const struct lto_section_slot *) p;
81 return (hashval_t) htab_hash_string (ds->name);
85 /* Returns nonzero if P1 and P2 are equal. */
87 static int
88 eq_name (const void *p1, const void *p2)
90 const struct lto_section_slot *s1 =
91 (const struct lto_section_slot *) p1;
92 const struct lto_section_slot *s2 =
93 (const struct lto_section_slot *) p2;
95 return strcmp (s1->name, s2->name) == 0;
98 /* Free lto_section_slot */
100 static void
101 free_with_string (void *arg)
103 struct lto_section_slot *s = (struct lto_section_slot *)arg;
105 free (CONST_CAST (char *, s->name));
106 free (arg);
109 /* Create section hash table */
111 htab_t
112 lto_obj_create_section_hash_table (void)
114 return htab_create (37, hash_name, eq_name, free_with_string);
117 /* Delete an allocated integer KEY in the splay tree. */
119 static void
120 lto_splay_tree_delete_id (splay_tree_key key)
122 free ((void *) key);
125 /* Compare splay tree node ids A and B. */
127 static int
128 lto_splay_tree_compare_ids (splay_tree_key a, splay_tree_key b)
130 unsigned HOST_WIDE_INT ai;
131 unsigned HOST_WIDE_INT bi;
133 ai = *(unsigned HOST_WIDE_INT *) a;
134 bi = *(unsigned HOST_WIDE_INT *) b;
136 if (ai < bi)
137 return -1;
138 else if (ai > bi)
139 return 1;
140 return 0;
143 /* Look up splay tree node by ID in splay tree T. */
145 static splay_tree_node
146 lto_splay_tree_lookup (splay_tree t, unsigned HOST_WIDE_INT id)
148 return splay_tree_lookup (t, (splay_tree_key) &id);
151 /* Check if KEY has ID. */
153 static bool
154 lto_splay_tree_id_equal_p (splay_tree_key key, unsigned HOST_WIDE_INT id)
156 return *(unsigned HOST_WIDE_INT *) key == id;
159 /* Insert a splay tree node into tree T with ID as key and FILE_DATA as value.
160 The ID is allocated separately because we need HOST_WIDE_INTs which may
161 be wider than a splay_tree_key. */
163 static void
164 lto_splay_tree_insert (splay_tree t, unsigned HOST_WIDE_INT id,
165 struct lto_file_decl_data *file_data)
167 unsigned HOST_WIDE_INT *idp = XCNEW (unsigned HOST_WIDE_INT);
168 *idp = id;
169 splay_tree_insert (t, (splay_tree_key) idp, (splay_tree_value) file_data);
172 /* Create a splay tree. */
174 static splay_tree
175 lto_splay_tree_new (void)
177 return splay_tree_new (lto_splay_tree_compare_ids,
178 lto_splay_tree_delete_id,
179 NULL);
182 /* Return true when NODE has a clone that is analyzed (i.e. we need
183 to load its body even if the node itself is not needed). */
185 static bool
186 has_analyzed_clone_p (struct cgraph_node *node)
188 struct cgraph_node *orig = node;
189 node = node->clones;
190 if (node)
191 while (node != orig)
193 if (node->analyzed)
194 return true;
195 if (node->clones)
196 node = node->clones;
197 else if (node->next_sibling_clone)
198 node = node->next_sibling_clone;
199 else
201 while (node != orig && !node->next_sibling_clone)
202 node = node->clone_of;
203 if (node != orig)
204 node = node->next_sibling_clone;
207 return false;
210 /* Read the function body for the function associated with NODE. */
212 static void
213 lto_materialize_function (struct cgraph_node *node)
215 tree decl;
217 decl = node->decl;
218 /* Read in functions with body (analyzed nodes)
219 and also functions that are needed to produce virtual clones. */
220 if ((node->has_gimple_body_p () && node->analyzed)
221 || node->used_as_abstract_origin
222 || has_analyzed_clone_p (node))
224 /* Clones don't need to be read. */
225 if (node->clone_of)
226 return;
227 if (DECL_FUNCTION_PERSONALITY (decl) && !first_personality_decl)
228 first_personality_decl = DECL_FUNCTION_PERSONALITY (decl);
231 /* Let the middle end know about the function. */
232 rest_of_decl_compilation (decl, 1, 0);
236 /* Decode the content of memory pointed to by DATA in the in decl
237 state object STATE. DATA_IN points to a data_in structure for
238 decoding. Return the address after the decoded object in the
239 input. */
241 static const uint32_t *
242 lto_read_in_decl_state (struct data_in *data_in, const uint32_t *data,
243 struct lto_in_decl_state *state)
245 uint32_t ix;
246 tree decl;
247 uint32_t i, j;
249 ix = *data++;
250 decl = streamer_tree_cache_get_tree (data_in->reader_cache, ix);
251 if (!VAR_OR_FUNCTION_DECL_P (decl))
253 gcc_assert (decl == void_type_node);
254 decl = NULL_TREE;
256 state->fn_decl = decl;
258 for (i = 0; i < LTO_N_DECL_STREAMS; i++)
260 uint32_t size = *data++;
261 vec<tree, va_gc> *decls = NULL;
262 vec_alloc (decls, size);
264 for (j = 0; j < size; j++)
265 vec_safe_push (decls,
266 streamer_tree_cache_get_tree (data_in->reader_cache,
267 data[j]));
269 state->streams[i] = decls;
270 data += size;
273 return data;
277 /* Global canonical type table. */
278 static htab_t gimple_canonical_types;
279 static hash_map<const_tree, hashval_t> *canonical_type_hash_cache;
280 static unsigned long num_canonical_type_hash_entries;
281 static unsigned long num_canonical_type_hash_queries;
283 static void iterative_hash_canonical_type (tree type, inchash::hash &hstate);
284 static hashval_t gimple_canonical_type_hash (const void *p);
285 static void gimple_register_canonical_type_1 (tree t, hashval_t hash);
287 /* Returning a hash value for gimple type TYPE.
289 The hash value returned is equal for types considered compatible
290 by gimple_canonical_types_compatible_p. */
292 static hashval_t
293 hash_canonical_type (tree type)
295 inchash::hash hstate;
297 /* We compute alias sets only for types that needs them.
298 Be sure we do not recurse to something else as we can not hash incomplete
299 types in a way they would have same hash value as compatible complete
300 types. */
301 gcc_checking_assert (type_with_alias_set_p (type));
303 /* Combine a few common features of types so that types are grouped into
304 smaller sets; when searching for existing matching types to merge,
305 only existing types having the same features as the new type will be
306 checked. */
307 hstate.add_int (tree_code_for_canonical_type_merging (TREE_CODE (type)));
308 hstate.add_int (TYPE_MODE (type));
310 /* Incorporate common features of numerical types. */
311 if (INTEGRAL_TYPE_P (type)
312 || SCALAR_FLOAT_TYPE_P (type)
313 || FIXED_POINT_TYPE_P (type)
314 || TREE_CODE (type) == OFFSET_TYPE
315 || POINTER_TYPE_P (type))
317 hstate.add_int (TYPE_UNSIGNED (type));
318 hstate.add_int (TYPE_PRECISION (type));
321 if (VECTOR_TYPE_P (type))
323 hstate.add_int (TYPE_VECTOR_SUBPARTS (type));
324 hstate.add_int (TYPE_UNSIGNED (type));
327 if (TREE_CODE (type) == COMPLEX_TYPE)
328 hstate.add_int (TYPE_UNSIGNED (type));
330 /* Fortran's C_SIGNED_CHAR is !TYPE_STRING_FLAG but needs to be
331 interoperable with "signed char". Unless all frontends are revisited to
332 agree on these types, we must ignore the flag completely. */
334 /* Fortran standard define C_PTR type that is compatible with every
335 C pointer. For this reason we need to glob all pointers into one.
336 Still pointers in different address spaces are not compatible. */
337 if (POINTER_TYPE_P (type))
338 hstate.add_int (TYPE_ADDR_SPACE (TREE_TYPE (type)));
340 /* For array types hash the domain bounds and the string flag. */
341 if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
343 hstate.add_int (TYPE_STRING_FLAG (type));
344 /* OMP lowering can introduce error_mark_node in place of
345 random local decls in types. */
346 if (TYPE_MIN_VALUE (TYPE_DOMAIN (type)) != error_mark_node)
347 inchash::add_expr (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), hstate);
348 if (TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != error_mark_node)
349 inchash::add_expr (TYPE_MAX_VALUE (TYPE_DOMAIN (type)), hstate);
352 /* Recurse for aggregates with a single element type. */
353 if (TREE_CODE (type) == ARRAY_TYPE
354 || TREE_CODE (type) == COMPLEX_TYPE
355 || TREE_CODE (type) == VECTOR_TYPE)
356 iterative_hash_canonical_type (TREE_TYPE (type), hstate);
358 /* Incorporate function return and argument types. */
359 if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
361 unsigned na;
362 tree p;
364 iterative_hash_canonical_type (TREE_TYPE (type), hstate);
366 for (p = TYPE_ARG_TYPES (type), na = 0; p; p = TREE_CHAIN (p))
368 iterative_hash_canonical_type (TREE_VALUE (p), hstate);
369 na++;
372 hstate.add_int (na);
375 if (RECORD_OR_UNION_TYPE_P (type))
377 unsigned nf;
378 tree f;
380 for (f = TYPE_FIELDS (type), nf = 0; f; f = TREE_CHAIN (f))
381 if (TREE_CODE (f) == FIELD_DECL)
383 iterative_hash_canonical_type (TREE_TYPE (f), hstate);
384 nf++;
387 hstate.add_int (nf);
390 return hstate.end();
393 /* Returning a hash value for gimple type TYPE combined with VAL. */
395 static void
396 iterative_hash_canonical_type (tree type, inchash::hash &hstate)
398 hashval_t v;
400 /* All type variants have same TYPE_CANONICAL. */
401 type = TYPE_MAIN_VARIANT (type);
402 /* An already processed type. */
403 if (TYPE_CANONICAL (type))
405 type = TYPE_CANONICAL (type);
406 v = gimple_canonical_type_hash (type);
408 else
410 /* Canonical types should not be able to form SCCs by design, this
411 recursion is just because we do not register canonical types in
412 optimal order. To avoid quadratic behavior also register the
413 type here. */
414 v = hash_canonical_type (type);
415 gimple_register_canonical_type_1 (type, v);
417 hstate.add_int (v);
420 /* Returns the hash for a canonical type P. */
422 static hashval_t
423 gimple_canonical_type_hash (const void *p)
425 num_canonical_type_hash_queries++;
426 hashval_t *slot = canonical_type_hash_cache->get ((const_tree) p);
427 gcc_assert (slot != NULL);
428 return *slot;
433 /* Returns nonzero if P1 and P2 are equal. */
435 static int
436 gimple_canonical_type_eq (const void *p1, const void *p2)
438 const_tree t1 = (const_tree) p1;
439 const_tree t2 = (const_tree) p2;
440 return gimple_canonical_types_compatible_p (CONST_CAST_TREE (t1),
441 CONST_CAST_TREE (t2));
444 /* Main worker for gimple_register_canonical_type. */
446 static void
447 gimple_register_canonical_type_1 (tree t, hashval_t hash)
449 void **slot;
451 gcc_checking_assert (TYPE_P (t) && !TYPE_CANONICAL (t));
453 slot = htab_find_slot_with_hash (gimple_canonical_types, t, hash, INSERT);
454 if (*slot)
456 tree new_type = (tree)(*slot);
457 gcc_checking_assert (new_type != t);
458 TYPE_CANONICAL (t) = new_type;
460 else
462 TYPE_CANONICAL (t) = t;
463 *slot = (void *) t;
464 /* Cache the just computed hash value. */
465 num_canonical_type_hash_entries++;
466 bool existed_p = canonical_type_hash_cache->put (t, hash);
467 gcc_assert (!existed_p);
471 /* Register type T in the global type table gimple_types and set
472 TYPE_CANONICAL of T accordingly.
473 This is used by LTO to merge structurally equivalent types for
474 type-based aliasing purposes across different TUs and languages.
476 ??? This merging does not exactly match how the tree.c middle-end
477 functions will assign TYPE_CANONICAL when new types are created
478 during optimization (which at least happens for pointer and array
479 types). */
481 static void
482 gimple_register_canonical_type (tree t)
484 if (TYPE_CANONICAL (t) || !type_with_alias_set_p (t))
485 return;
487 /* Canonical types are same among all complete variants. */
488 if (TYPE_CANONICAL (TYPE_MAIN_VARIANT (t)))
489 TYPE_CANONICAL (t) = TYPE_CANONICAL (TYPE_MAIN_VARIANT (t));
490 else
492 gimple_register_canonical_type_1 (TYPE_MAIN_VARIANT (t),
493 hash_canonical_type (TYPE_MAIN_VARIANT (t)));
494 TYPE_CANONICAL (t) = TYPE_CANONICAL (TYPE_MAIN_VARIANT (t));
498 /* Re-compute TYPE_CANONICAL for NODE and related types. */
500 static void
501 lto_register_canonical_types (tree node, bool first_p)
503 if (!node
504 || !TYPE_P (node))
505 return;
507 if (first_p)
508 TYPE_CANONICAL (node) = NULL_TREE;
510 if (POINTER_TYPE_P (node)
511 || TREE_CODE (node) == COMPLEX_TYPE
512 || TREE_CODE (node) == ARRAY_TYPE)
513 lto_register_canonical_types (TREE_TYPE (node), first_p);
515 if (!first_p)
516 gimple_register_canonical_type (node);
520 /* Remember trees that contains references to declarations. */
521 static GTY(()) vec <tree, va_gc> *tree_with_vars;
523 #define CHECK_VAR(tt) \
524 do \
526 if ((tt) && VAR_OR_FUNCTION_DECL_P (tt) \
527 && (TREE_PUBLIC (tt) || DECL_EXTERNAL (tt))) \
528 return true; \
529 } while (0)
531 #define CHECK_NO_VAR(tt) \
532 gcc_checking_assert (!(tt) || !VAR_OR_FUNCTION_DECL_P (tt))
534 /* Check presence of pointers to decls in fields of a tree_typed T. */
536 static inline bool
537 mentions_vars_p_typed (tree t)
539 CHECK_NO_VAR (TREE_TYPE (t));
540 return false;
543 /* Check presence of pointers to decls in fields of a tree_common T. */
545 static inline bool
546 mentions_vars_p_common (tree t)
548 if (mentions_vars_p_typed (t))
549 return true;
550 CHECK_NO_VAR (TREE_CHAIN (t));
551 return false;
554 /* Check presence of pointers to decls in fields of a decl_minimal T. */
556 static inline bool
557 mentions_vars_p_decl_minimal (tree t)
559 if (mentions_vars_p_common (t))
560 return true;
561 CHECK_NO_VAR (DECL_NAME (t));
562 CHECK_VAR (DECL_CONTEXT (t));
563 return false;
566 /* Check presence of pointers to decls in fields of a decl_common T. */
568 static inline bool
569 mentions_vars_p_decl_common (tree t)
571 if (mentions_vars_p_decl_minimal (t))
572 return true;
573 CHECK_VAR (DECL_SIZE (t));
574 CHECK_VAR (DECL_SIZE_UNIT (t));
575 CHECK_VAR (DECL_INITIAL (t));
576 CHECK_NO_VAR (DECL_ATTRIBUTES (t));
577 CHECK_VAR (DECL_ABSTRACT_ORIGIN (t));
578 return false;
581 /* Check presence of pointers to decls in fields of a decl_with_vis T. */
583 static inline bool
584 mentions_vars_p_decl_with_vis (tree t)
586 if (mentions_vars_p_decl_common (t))
587 return true;
589 /* Accessor macro has side-effects, use field-name here. */
590 CHECK_NO_VAR (t->decl_with_vis.assembler_name);
591 return false;
594 /* Check presence of pointers to decls in fields of a decl_non_common T. */
596 static inline bool
597 mentions_vars_p_decl_non_common (tree t)
599 if (mentions_vars_p_decl_with_vis (t))
600 return true;
601 CHECK_NO_VAR (DECL_RESULT_FLD (t));
602 return false;
605 /* Check presence of pointers to decls in fields of a decl_non_common T. */
607 static bool
608 mentions_vars_p_function (tree t)
610 if (mentions_vars_p_decl_non_common (t))
611 return true;
612 CHECK_NO_VAR (DECL_ARGUMENTS (t));
613 CHECK_NO_VAR (DECL_VINDEX (t));
614 CHECK_VAR (DECL_FUNCTION_PERSONALITY (t));
615 return false;
618 /* Check presence of pointers to decls in fields of a field_decl T. */
620 static bool
621 mentions_vars_p_field_decl (tree t)
623 if (mentions_vars_p_decl_common (t))
624 return true;
625 CHECK_VAR (DECL_FIELD_OFFSET (t));
626 CHECK_NO_VAR (DECL_BIT_FIELD_TYPE (t));
627 CHECK_NO_VAR (DECL_QUALIFIER (t));
628 CHECK_NO_VAR (DECL_FIELD_BIT_OFFSET (t));
629 CHECK_NO_VAR (DECL_FCONTEXT (t));
630 return false;
633 /* Check presence of pointers to decls in fields of a type T. */
635 static bool
636 mentions_vars_p_type (tree t)
638 if (mentions_vars_p_common (t))
639 return true;
640 CHECK_NO_VAR (TYPE_CACHED_VALUES (t));
641 CHECK_VAR (TYPE_SIZE (t));
642 CHECK_VAR (TYPE_SIZE_UNIT (t));
643 CHECK_NO_VAR (TYPE_ATTRIBUTES (t));
644 CHECK_NO_VAR (TYPE_NAME (t));
646 CHECK_VAR (TYPE_MINVAL (t));
647 CHECK_VAR (TYPE_MAXVAL (t));
649 /* Accessor is for derived node types only. */
650 CHECK_NO_VAR (t->type_non_common.binfo);
652 CHECK_VAR (TYPE_CONTEXT (t));
653 CHECK_NO_VAR (TYPE_CANONICAL (t));
654 CHECK_NO_VAR (TYPE_MAIN_VARIANT (t));
655 CHECK_NO_VAR (TYPE_NEXT_VARIANT (t));
656 return false;
659 /* Check presence of pointers to decls in fields of a BINFO T. */
661 static bool
662 mentions_vars_p_binfo (tree t)
664 unsigned HOST_WIDE_INT i, n;
666 if (mentions_vars_p_common (t))
667 return true;
668 CHECK_VAR (BINFO_VTABLE (t));
669 CHECK_NO_VAR (BINFO_OFFSET (t));
670 CHECK_NO_VAR (BINFO_VIRTUALS (t));
671 CHECK_NO_VAR (BINFO_VPTR_FIELD (t));
672 n = vec_safe_length (BINFO_BASE_ACCESSES (t));
673 for (i = 0; i < n; i++)
674 CHECK_NO_VAR (BINFO_BASE_ACCESS (t, i));
675 /* Do not walk BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX
676 and BINFO_VPTR_INDEX; these are used by C++ FE only. */
677 n = BINFO_N_BASE_BINFOS (t);
678 for (i = 0; i < n; i++)
679 CHECK_NO_VAR (BINFO_BASE_BINFO (t, i));
680 return false;
683 /* Check presence of pointers to decls in fields of a CONSTRUCTOR T. */
685 static bool
686 mentions_vars_p_constructor (tree t)
688 unsigned HOST_WIDE_INT idx;
689 constructor_elt *ce;
691 if (mentions_vars_p_typed (t))
692 return true;
694 for (idx = 0; vec_safe_iterate (CONSTRUCTOR_ELTS (t), idx, &ce); idx++)
696 CHECK_NO_VAR (ce->index);
697 CHECK_VAR (ce->value);
699 return false;
702 /* Check presence of pointers to decls in fields of an expression tree T. */
704 static bool
705 mentions_vars_p_expr (tree t)
707 int i;
708 if (mentions_vars_p_typed (t))
709 return true;
710 for (i = TREE_OPERAND_LENGTH (t) - 1; i >= 0; --i)
711 CHECK_VAR (TREE_OPERAND (t, i));
712 return false;
715 /* Check presence of pointers to decls in fields of an OMP_CLAUSE T. */
717 static bool
718 mentions_vars_p_omp_clause (tree t)
720 int i;
721 if (mentions_vars_p_common (t))
722 return true;
723 for (i = omp_clause_num_ops[OMP_CLAUSE_CODE (t)] - 1; i >= 0; --i)
724 CHECK_VAR (OMP_CLAUSE_OPERAND (t, i));
725 return false;
728 /* Check presence of pointers to decls that needs later fixup in T. */
730 static bool
731 mentions_vars_p (tree t)
733 switch (TREE_CODE (t))
735 case IDENTIFIER_NODE:
736 break;
738 case TREE_LIST:
739 CHECK_VAR (TREE_VALUE (t));
740 CHECK_VAR (TREE_PURPOSE (t));
741 CHECK_NO_VAR (TREE_CHAIN (t));
742 break;
744 case FIELD_DECL:
745 return mentions_vars_p_field_decl (t);
747 case LABEL_DECL:
748 case CONST_DECL:
749 case PARM_DECL:
750 case RESULT_DECL:
751 case IMPORTED_DECL:
752 case NAMESPACE_DECL:
753 case NAMELIST_DECL:
754 return mentions_vars_p_decl_common (t);
756 case VAR_DECL:
757 return mentions_vars_p_decl_with_vis (t);
759 case TYPE_DECL:
760 return mentions_vars_p_decl_non_common (t);
762 case FUNCTION_DECL:
763 return mentions_vars_p_function (t);
765 case TREE_BINFO:
766 return mentions_vars_p_binfo (t);
768 case PLACEHOLDER_EXPR:
769 return mentions_vars_p_common (t);
771 case BLOCK:
772 case TRANSLATION_UNIT_DECL:
773 case OPTIMIZATION_NODE:
774 case TARGET_OPTION_NODE:
775 break;
777 case CONSTRUCTOR:
778 return mentions_vars_p_constructor (t);
780 case OMP_CLAUSE:
781 return mentions_vars_p_omp_clause (t);
783 default:
784 if (TYPE_P (t))
786 if (mentions_vars_p_type (t))
787 return true;
789 else if (EXPR_P (t))
791 if (mentions_vars_p_expr (t))
792 return true;
794 else if (CONSTANT_CLASS_P (t))
795 CHECK_NO_VAR (TREE_TYPE (t));
796 else
797 gcc_unreachable ();
799 return false;
803 /* Return the resolution for the decl with index INDEX from DATA_IN. */
805 static enum ld_plugin_symbol_resolution
806 get_resolution (struct data_in *data_in, unsigned index)
808 if (data_in->globals_resolution.exists ())
810 ld_plugin_symbol_resolution_t ret;
811 /* We can have references to not emitted functions in
812 DECL_FUNCTION_PERSONALITY at least. So we can and have
813 to indeed return LDPR_UNKNOWN in some cases. */
814 if (data_in->globals_resolution.length () <= index)
815 return LDPR_UNKNOWN;
816 ret = data_in->globals_resolution[index];
817 return ret;
819 else
820 /* Delay resolution finding until decl merging. */
821 return LDPR_UNKNOWN;
824 /* We need to record resolutions until symbol table is read. */
825 static void
826 register_resolution (struct lto_file_decl_data *file_data, tree decl,
827 enum ld_plugin_symbol_resolution resolution)
829 if (resolution == LDPR_UNKNOWN)
830 return;
831 if (!file_data->resolution_map)
832 file_data->resolution_map
833 = new hash_map<tree, ld_plugin_symbol_resolution>;
834 file_data->resolution_map->put (decl, resolution);
837 /* Register DECL with the global symbol table and change its
838 name if necessary to avoid name clashes for static globals across
839 different files. */
841 static void
842 lto_register_var_decl_in_symtab (struct data_in *data_in, tree decl,
843 unsigned ix)
845 tree context;
847 /* Variable has file scope, not local. */
848 if (!TREE_PUBLIC (decl)
849 && !((context = decl_function_context (decl))
850 && auto_var_in_fn_p (decl, context)))
851 rest_of_decl_compilation (decl, 1, 0);
853 /* If this variable has already been declared, queue the
854 declaration for merging. */
855 if (TREE_PUBLIC (decl))
856 register_resolution (data_in->file_data,
857 decl, get_resolution (data_in, ix));
861 /* Register DECL with the global symbol table and change its
862 name if necessary to avoid name clashes for static globals across
863 different files. DATA_IN contains descriptors and tables for the
864 file being read. */
866 static void
867 lto_register_function_decl_in_symtab (struct data_in *data_in, tree decl,
868 unsigned ix)
870 /* If this variable has already been declared, queue the
871 declaration for merging. */
872 if (TREE_PUBLIC (decl) && !DECL_ABSTRACT_P (decl))
873 register_resolution (data_in->file_data,
874 decl, get_resolution (data_in, ix));
878 /* For the type T re-materialize it in the type variant list and
879 the pointer/reference-to chains. */
881 static void
882 lto_fixup_prevailing_type (tree t)
884 /* The following re-creates proper variant lists while fixing up
885 the variant leaders. We do not stream TYPE_NEXT_VARIANT so the
886 variant list state before fixup is broken. */
888 /* If we are not our own variant leader link us into our new leaders
889 variant list. */
890 if (TYPE_MAIN_VARIANT (t) != t)
892 tree mv = TYPE_MAIN_VARIANT (t);
893 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (mv);
894 TYPE_NEXT_VARIANT (mv) = t;
897 /* The following reconstructs the pointer chains
898 of the new pointed-to type if we are a main variant. We do
899 not stream those so they are broken before fixup. */
900 if (TREE_CODE (t) == POINTER_TYPE
901 && TYPE_MAIN_VARIANT (t) == t)
903 TYPE_NEXT_PTR_TO (t) = TYPE_POINTER_TO (TREE_TYPE (t));
904 TYPE_POINTER_TO (TREE_TYPE (t)) = t;
906 else if (TREE_CODE (t) == REFERENCE_TYPE
907 && TYPE_MAIN_VARIANT (t) == t)
909 TYPE_NEXT_REF_TO (t) = TYPE_REFERENCE_TO (TREE_TYPE (t));
910 TYPE_REFERENCE_TO (TREE_TYPE (t)) = t;
915 /* We keep prevailing tree SCCs in a hashtable with manual collision
916 handling (in case all hashes compare the same) and keep the colliding
917 entries in the tree_scc->next chain. */
919 struct tree_scc
921 tree_scc *next;
922 /* Hash of the whole SCC. */
923 hashval_t hash;
924 /* Number of trees in the SCC. */
925 unsigned len;
926 /* Number of possible entries into the SCC (tree nodes [0..entry_len-1]
927 which share the same individual tree hash). */
928 unsigned entry_len;
929 /* The members of the SCC.
930 We only need to remember the first entry node candidate for prevailing
931 SCCs (but of course have access to all entries for SCCs we are
932 processing).
933 ??? For prevailing SCCs we really only need hash and the first
934 entry candidate, but that's too awkward to implement. */
935 tree entries[1];
938 struct tree_scc_hasher : nofree_ptr_hash <tree_scc>
940 static inline hashval_t hash (const tree_scc *);
941 static inline bool equal (const tree_scc *, const tree_scc *);
944 hashval_t
945 tree_scc_hasher::hash (const tree_scc *scc)
947 return scc->hash;
950 bool
951 tree_scc_hasher::equal (const tree_scc *scc1, const tree_scc *scc2)
953 if (scc1->hash != scc2->hash
954 || scc1->len != scc2->len
955 || scc1->entry_len != scc2->entry_len)
956 return false;
957 return true;
960 static hash_table<tree_scc_hasher> *tree_scc_hash;
961 static struct obstack tree_scc_hash_obstack;
963 static unsigned long num_merged_types;
964 static unsigned long num_prevailing_types;
965 static unsigned long num_type_scc_trees;
966 static unsigned long total_scc_size;
967 static unsigned long num_sccs_read;
968 static unsigned long total_scc_size_merged;
969 static unsigned long num_sccs_merged;
970 static unsigned long num_scc_compares;
971 static unsigned long num_scc_compare_collisions;
974 /* Compare the two entries T1 and T2 of two SCCs that are possibly equal,
975 recursing through in-SCC tree edges. Returns true if the SCCs entered
976 through T1 and T2 are equal and fills in *MAP with the pairs of
977 SCC entries we visited, starting with (*MAP)[0] = T1 and (*MAP)[1] = T2. */
979 static bool
980 compare_tree_sccs_1 (tree t1, tree t2, tree **map)
982 enum tree_code code;
984 /* Mark already visited nodes. */
985 TREE_ASM_WRITTEN (t2) = 1;
987 /* Push the pair onto map. */
988 (*map)[0] = t1;
989 (*map)[1] = t2;
990 *map = *map + 2;
992 /* Compare value-fields. */
993 #define compare_values(X) \
994 do { \
995 if (X(t1) != X(t2)) \
996 return false; \
997 } while (0)
999 compare_values (TREE_CODE);
1000 code = TREE_CODE (t1);
1002 if (!TYPE_P (t1))
1004 compare_values (TREE_SIDE_EFFECTS);
1005 compare_values (TREE_CONSTANT);
1006 compare_values (TREE_READONLY);
1007 compare_values (TREE_PUBLIC);
1009 compare_values (TREE_ADDRESSABLE);
1010 compare_values (TREE_THIS_VOLATILE);
1011 if (DECL_P (t1))
1012 compare_values (DECL_UNSIGNED);
1013 else if (TYPE_P (t1))
1014 compare_values (TYPE_UNSIGNED);
1015 if (TYPE_P (t1))
1016 compare_values (TYPE_ARTIFICIAL);
1017 else
1018 compare_values (TREE_NO_WARNING);
1019 compare_values (TREE_NOTHROW);
1020 compare_values (TREE_STATIC);
1021 if (code != TREE_BINFO)
1022 compare_values (TREE_PRIVATE);
1023 compare_values (TREE_PROTECTED);
1024 compare_values (TREE_DEPRECATED);
1025 if (TYPE_P (t1))
1027 compare_values (TYPE_SATURATING);
1028 compare_values (TYPE_ADDR_SPACE);
1030 else if (code == SSA_NAME)
1031 compare_values (SSA_NAME_IS_DEFAULT_DEF);
1033 if (CODE_CONTAINS_STRUCT (code, TS_INT_CST))
1035 if (!wi::eq_p (t1, t2))
1036 return false;
1039 if (CODE_CONTAINS_STRUCT (code, TS_REAL_CST))
1041 /* ??? No suitable compare routine available. */
1042 REAL_VALUE_TYPE r1 = TREE_REAL_CST (t1);
1043 REAL_VALUE_TYPE r2 = TREE_REAL_CST (t2);
1044 if (r1.cl != r2.cl
1045 || r1.decimal != r2.decimal
1046 || r1.sign != r2.sign
1047 || r1.signalling != r2.signalling
1048 || r1.canonical != r2.canonical
1049 || r1.uexp != r2.uexp)
1050 return false;
1051 for (unsigned i = 0; i < SIGSZ; ++i)
1052 if (r1.sig[i] != r2.sig[i])
1053 return false;
1056 if (CODE_CONTAINS_STRUCT (code, TS_FIXED_CST))
1057 if (!fixed_compare (EQ_EXPR,
1058 TREE_FIXED_CST_PTR (t1), TREE_FIXED_CST_PTR (t2)))
1059 return false;
1062 /* We don't want to compare locations, so there is nothing do compare
1063 for TS_DECL_MINIMAL. */
1065 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
1067 compare_values (DECL_MODE);
1068 compare_values (DECL_NONLOCAL);
1069 compare_values (DECL_VIRTUAL_P);
1070 compare_values (DECL_IGNORED_P);
1071 compare_values (DECL_ABSTRACT_P);
1072 compare_values (DECL_ARTIFICIAL);
1073 compare_values (DECL_USER_ALIGN);
1074 compare_values (DECL_PRESERVE_P);
1075 compare_values (DECL_EXTERNAL);
1076 compare_values (DECL_GIMPLE_REG_P);
1077 compare_values (DECL_ALIGN);
1078 if (code == LABEL_DECL)
1080 compare_values (EH_LANDING_PAD_NR);
1081 compare_values (LABEL_DECL_UID);
1083 else if (code == FIELD_DECL)
1085 compare_values (DECL_PACKED);
1086 compare_values (DECL_NONADDRESSABLE_P);
1087 compare_values (DECL_OFFSET_ALIGN);
1089 else if (code == VAR_DECL)
1091 compare_values (DECL_HAS_DEBUG_EXPR_P);
1092 compare_values (DECL_NONLOCAL_FRAME);
1094 if (code == RESULT_DECL
1095 || code == PARM_DECL
1096 || code == VAR_DECL)
1098 compare_values (DECL_BY_REFERENCE);
1099 if (code == VAR_DECL
1100 || code == PARM_DECL)
1101 compare_values (DECL_HAS_VALUE_EXPR_P);
1105 if (CODE_CONTAINS_STRUCT (code, TS_DECL_WRTL))
1106 compare_values (DECL_REGISTER);
1108 if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
1110 compare_values (DECL_COMMON);
1111 compare_values (DECL_DLLIMPORT_P);
1112 compare_values (DECL_WEAK);
1113 compare_values (DECL_SEEN_IN_BIND_EXPR_P);
1114 compare_values (DECL_COMDAT);
1115 compare_values (DECL_VISIBILITY);
1116 compare_values (DECL_VISIBILITY_SPECIFIED);
1117 if (code == VAR_DECL)
1119 compare_values (DECL_HARD_REGISTER);
1120 /* DECL_IN_TEXT_SECTION is set during final asm output only. */
1121 compare_values (DECL_IN_CONSTANT_POOL);
1125 if (CODE_CONTAINS_STRUCT (code, TS_FUNCTION_DECL))
1127 compare_values (DECL_BUILT_IN_CLASS);
1128 compare_values (DECL_STATIC_CONSTRUCTOR);
1129 compare_values (DECL_STATIC_DESTRUCTOR);
1130 compare_values (DECL_UNINLINABLE);
1131 compare_values (DECL_POSSIBLY_INLINED);
1132 compare_values (DECL_IS_NOVOPS);
1133 compare_values (DECL_IS_RETURNS_TWICE);
1134 compare_values (DECL_IS_MALLOC);
1135 compare_values (DECL_IS_OPERATOR_NEW);
1136 compare_values (DECL_DECLARED_INLINE_P);
1137 compare_values (DECL_STATIC_CHAIN);
1138 compare_values (DECL_NO_INLINE_WARNING_P);
1139 compare_values (DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT);
1140 compare_values (DECL_NO_LIMIT_STACK);
1141 compare_values (DECL_DISREGARD_INLINE_LIMITS);
1142 compare_values (DECL_PURE_P);
1143 compare_values (DECL_LOOPING_CONST_OR_PURE_P);
1144 compare_values (DECL_FINAL_P);
1145 compare_values (DECL_CXX_CONSTRUCTOR_P);
1146 compare_values (DECL_CXX_DESTRUCTOR_P);
1147 if (DECL_BUILT_IN_CLASS (t1) != NOT_BUILT_IN)
1148 compare_values (DECL_FUNCTION_CODE);
1151 if (CODE_CONTAINS_STRUCT (code, TS_TYPE_COMMON))
1153 compare_values (TYPE_MODE);
1154 compare_values (TYPE_STRING_FLAG);
1155 compare_values (TYPE_NEEDS_CONSTRUCTING);
1156 if (RECORD_OR_UNION_TYPE_P (t1))
1158 compare_values (TYPE_TRANSPARENT_AGGR);
1159 compare_values (TYPE_FINAL_P);
1161 else if (code == ARRAY_TYPE)
1162 compare_values (TYPE_NONALIASED_COMPONENT);
1163 compare_values (TYPE_PACKED);
1164 compare_values (TYPE_RESTRICT);
1165 compare_values (TYPE_USER_ALIGN);
1166 compare_values (TYPE_READONLY);
1167 compare_values (TYPE_PRECISION);
1168 compare_values (TYPE_ALIGN);
1169 compare_values (TYPE_ALIAS_SET);
1172 /* We don't want to compare locations, so there is nothing do compare
1173 for TS_EXP. */
1175 /* BLOCKs are function local and we don't merge anything there, so
1176 simply refuse to merge. */
1177 if (CODE_CONTAINS_STRUCT (code, TS_BLOCK))
1178 return false;
1180 if (CODE_CONTAINS_STRUCT (code, TS_TRANSLATION_UNIT_DECL))
1181 if (strcmp (TRANSLATION_UNIT_LANGUAGE (t1),
1182 TRANSLATION_UNIT_LANGUAGE (t2)) != 0)
1183 return false;
1185 if (CODE_CONTAINS_STRUCT (code, TS_TARGET_OPTION))
1186 if (!cl_target_option_eq (TREE_TARGET_OPTION (t1), TREE_TARGET_OPTION (t2)))
1187 return false;
1189 if (CODE_CONTAINS_STRUCT (code, TS_OPTIMIZATION))
1190 if (memcmp (TREE_OPTIMIZATION (t1), TREE_OPTIMIZATION (t2),
1191 sizeof (struct cl_optimization)) != 0)
1192 return false;
1194 if (CODE_CONTAINS_STRUCT (code, TS_BINFO))
1195 if (vec_safe_length (BINFO_BASE_ACCESSES (t1))
1196 != vec_safe_length (BINFO_BASE_ACCESSES (t2)))
1197 return false;
1199 if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
1200 compare_values (CONSTRUCTOR_NELTS);
1202 if (CODE_CONTAINS_STRUCT (code, TS_IDENTIFIER))
1203 if (IDENTIFIER_LENGTH (t1) != IDENTIFIER_LENGTH (t2)
1204 || memcmp (IDENTIFIER_POINTER (t1), IDENTIFIER_POINTER (t2),
1205 IDENTIFIER_LENGTH (t1)) != 0)
1206 return false;
1208 if (CODE_CONTAINS_STRUCT (code, TS_STRING))
1209 if (TREE_STRING_LENGTH (t1) != TREE_STRING_LENGTH (t2)
1210 || memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
1211 TREE_STRING_LENGTH (t1)) != 0)
1212 return false;
1214 if (code == OMP_CLAUSE)
1216 compare_values (OMP_CLAUSE_CODE);
1217 switch (OMP_CLAUSE_CODE (t1))
1219 case OMP_CLAUSE_DEFAULT:
1220 compare_values (OMP_CLAUSE_DEFAULT_KIND);
1221 break;
1222 case OMP_CLAUSE_SCHEDULE:
1223 compare_values (OMP_CLAUSE_SCHEDULE_KIND);
1224 break;
1225 case OMP_CLAUSE_DEPEND:
1226 compare_values (OMP_CLAUSE_DEPEND_KIND);
1227 break;
1228 case OMP_CLAUSE_MAP:
1229 compare_values (OMP_CLAUSE_MAP_KIND);
1230 break;
1231 case OMP_CLAUSE_PROC_BIND:
1232 compare_values (OMP_CLAUSE_PROC_BIND_KIND);
1233 break;
1234 case OMP_CLAUSE_REDUCTION:
1235 compare_values (OMP_CLAUSE_REDUCTION_CODE);
1236 compare_values (OMP_CLAUSE_REDUCTION_GIMPLE_INIT);
1237 compare_values (OMP_CLAUSE_REDUCTION_GIMPLE_MERGE);
1238 break;
1239 default:
1240 break;
1244 #undef compare_values
1247 /* Compare pointer fields. */
1249 /* Recurse. Search & Replaced from DFS_write_tree_body.
1250 Folding the early checks into the compare_tree_edges recursion
1251 macro makes debugging way quicker as you are able to break on
1252 compare_tree_sccs_1 and simply finish until a call returns false
1253 to spot the SCC members with the difference. */
1254 #define compare_tree_edges(E1, E2) \
1255 do { \
1256 tree t1_ = (E1), t2_ = (E2); \
1257 if (t1_ != t2_ \
1258 && (!t1_ || !t2_ \
1259 || !TREE_VISITED (t2_) \
1260 || (!TREE_ASM_WRITTEN (t2_) \
1261 && !compare_tree_sccs_1 (t1_, t2_, map)))) \
1262 return false; \
1263 /* Only non-NULL trees outside of the SCC may compare equal. */ \
1264 gcc_checking_assert (t1_ != t2_ || (!t2_ || !TREE_VISITED (t2_))); \
1265 } while (0)
1267 if (CODE_CONTAINS_STRUCT (code, TS_TYPED))
1269 if (code != IDENTIFIER_NODE)
1270 compare_tree_edges (TREE_TYPE (t1), TREE_TYPE (t2));
1273 if (CODE_CONTAINS_STRUCT (code, TS_VECTOR))
1275 unsigned i;
1276 /* Note that the number of elements for EXPR has already been emitted
1277 in EXPR's header (see streamer_write_tree_header). */
1278 for (i = 0; i < VECTOR_CST_NELTS (t1); ++i)
1279 compare_tree_edges (VECTOR_CST_ELT (t1, i), VECTOR_CST_ELT (t2, i));
1282 if (CODE_CONTAINS_STRUCT (code, TS_COMPLEX))
1284 compare_tree_edges (TREE_REALPART (t1), TREE_REALPART (t2));
1285 compare_tree_edges (TREE_IMAGPART (t1), TREE_IMAGPART (t2));
1288 if (CODE_CONTAINS_STRUCT (code, TS_DECL_MINIMAL))
1290 compare_tree_edges (DECL_NAME (t1), DECL_NAME (t2));
1291 /* ??? Global decls from different TUs have non-matching
1292 TRANSLATION_UNIT_DECLs. Only consider a small set of
1293 decls equivalent, we should not end up merging others. */
1294 if ((code == TYPE_DECL
1295 || code == NAMESPACE_DECL
1296 || code == IMPORTED_DECL
1297 || code == CONST_DECL
1298 || (VAR_OR_FUNCTION_DECL_P (t1)
1299 && (TREE_PUBLIC (t1) || DECL_EXTERNAL (t1))))
1300 && DECL_FILE_SCOPE_P (t1) && DECL_FILE_SCOPE_P (t2))
1302 else
1303 compare_tree_edges (DECL_CONTEXT (t1), DECL_CONTEXT (t2));
1306 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
1308 compare_tree_edges (DECL_SIZE (t1), DECL_SIZE (t2));
1309 compare_tree_edges (DECL_SIZE_UNIT (t1), DECL_SIZE_UNIT (t2));
1310 compare_tree_edges (DECL_ATTRIBUTES (t1), DECL_ATTRIBUTES (t2));
1311 if ((code == VAR_DECL
1312 || code == PARM_DECL)
1313 && DECL_HAS_VALUE_EXPR_P (t1))
1314 compare_tree_edges (DECL_VALUE_EXPR (t1), DECL_VALUE_EXPR (t2));
1315 if (code == VAR_DECL
1316 && DECL_HAS_DEBUG_EXPR_P (t1))
1317 compare_tree_edges (DECL_DEBUG_EXPR (t1), DECL_DEBUG_EXPR (t2));
1318 /* LTO specific edges. */
1319 if (code != FUNCTION_DECL
1320 && code != TRANSLATION_UNIT_DECL)
1321 compare_tree_edges (DECL_INITIAL (t1), DECL_INITIAL (t2));
1324 if (CODE_CONTAINS_STRUCT (code, TS_DECL_NON_COMMON))
1326 if (code == FUNCTION_DECL)
1328 tree a1, a2;
1329 for (a1 = DECL_ARGUMENTS (t1), a2 = DECL_ARGUMENTS (t2);
1330 a1 || a2;
1331 a1 = TREE_CHAIN (a1), a2 = TREE_CHAIN (a2))
1332 compare_tree_edges (a1, a2);
1333 compare_tree_edges (DECL_RESULT (t1), DECL_RESULT (t2));
1335 else if (code == TYPE_DECL)
1336 compare_tree_edges (DECL_ORIGINAL_TYPE (t1), DECL_ORIGINAL_TYPE (t2));
1339 if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
1341 /* Make sure we don't inadvertently set the assembler name. */
1342 if (DECL_ASSEMBLER_NAME_SET_P (t1))
1343 compare_tree_edges (DECL_ASSEMBLER_NAME (t1),
1344 DECL_ASSEMBLER_NAME (t2));
1347 if (CODE_CONTAINS_STRUCT (code, TS_FIELD_DECL))
1349 compare_tree_edges (DECL_FIELD_OFFSET (t1), DECL_FIELD_OFFSET (t2));
1350 compare_tree_edges (DECL_BIT_FIELD_TYPE (t1), DECL_BIT_FIELD_TYPE (t2));
1351 compare_tree_edges (DECL_BIT_FIELD_REPRESENTATIVE (t1),
1352 DECL_BIT_FIELD_REPRESENTATIVE (t2));
1353 compare_tree_edges (DECL_FIELD_BIT_OFFSET (t1),
1354 DECL_FIELD_BIT_OFFSET (t2));
1355 compare_tree_edges (DECL_FCONTEXT (t1), DECL_FCONTEXT (t2));
1358 if (CODE_CONTAINS_STRUCT (code, TS_FUNCTION_DECL))
1360 compare_tree_edges (DECL_FUNCTION_PERSONALITY (t1),
1361 DECL_FUNCTION_PERSONALITY (t2));
1362 compare_tree_edges (DECL_VINDEX (t1), DECL_VINDEX (t2));
1363 compare_tree_edges (DECL_FUNCTION_SPECIFIC_TARGET (t1),
1364 DECL_FUNCTION_SPECIFIC_TARGET (t2));
1365 compare_tree_edges (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (t1),
1366 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (t2));
1369 if (CODE_CONTAINS_STRUCT (code, TS_TYPE_COMMON))
1371 compare_tree_edges (TYPE_SIZE (t1), TYPE_SIZE (t2));
1372 compare_tree_edges (TYPE_SIZE_UNIT (t1), TYPE_SIZE_UNIT (t2));
1373 compare_tree_edges (TYPE_ATTRIBUTES (t1), TYPE_ATTRIBUTES (t2));
1374 compare_tree_edges (TYPE_NAME (t1), TYPE_NAME (t2));
1375 /* Do not compare TYPE_POINTER_TO or TYPE_REFERENCE_TO. They will be
1376 reconstructed during fixup. */
1377 /* Do not compare TYPE_NEXT_VARIANT, we reconstruct the variant lists
1378 during fixup. */
1379 compare_tree_edges (TYPE_MAIN_VARIANT (t1), TYPE_MAIN_VARIANT (t2));
1380 /* ??? Global types from different TUs have non-matching
1381 TRANSLATION_UNIT_DECLs. Still merge them if they are otherwise
1382 equal. */
1383 if (TYPE_FILE_SCOPE_P (t1) && TYPE_FILE_SCOPE_P (t2))
1385 else
1386 compare_tree_edges (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2));
1387 /* TYPE_CANONICAL is re-computed during type merging, so do not
1388 compare it here. */
1389 compare_tree_edges (TYPE_STUB_DECL (t1), TYPE_STUB_DECL (t2));
1392 if (CODE_CONTAINS_STRUCT (code, TS_TYPE_NON_COMMON))
1394 if (code == ENUMERAL_TYPE)
1395 compare_tree_edges (TYPE_VALUES (t1), TYPE_VALUES (t2));
1396 else if (code == ARRAY_TYPE)
1397 compare_tree_edges (TYPE_DOMAIN (t1), TYPE_DOMAIN (t2));
1398 else if (RECORD_OR_UNION_TYPE_P (t1))
1400 tree f1, f2;
1401 for (f1 = TYPE_FIELDS (t1), f2 = TYPE_FIELDS (t2);
1402 f1 || f2;
1403 f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2))
1404 compare_tree_edges (f1, f2);
1405 compare_tree_edges (TYPE_BINFO (t1), TYPE_BINFO (t2));
1407 else if (code == FUNCTION_TYPE
1408 || code == METHOD_TYPE)
1409 compare_tree_edges (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2));
1410 if (!POINTER_TYPE_P (t1))
1411 compare_tree_edges (TYPE_MINVAL (t1), TYPE_MINVAL (t2));
1412 compare_tree_edges (TYPE_MAXVAL (t1), TYPE_MAXVAL (t2));
1415 if (CODE_CONTAINS_STRUCT (code, TS_LIST))
1417 compare_tree_edges (TREE_PURPOSE (t1), TREE_PURPOSE (t2));
1418 compare_tree_edges (TREE_VALUE (t1), TREE_VALUE (t2));
1419 compare_tree_edges (TREE_CHAIN (t1), TREE_CHAIN (t2));
1422 if (CODE_CONTAINS_STRUCT (code, TS_VEC))
1423 for (int i = 0; i < TREE_VEC_LENGTH (t1); i++)
1424 compare_tree_edges (TREE_VEC_ELT (t1, i), TREE_VEC_ELT (t2, i));
1426 if (CODE_CONTAINS_STRUCT (code, TS_EXP))
1428 for (int i = 0; i < TREE_OPERAND_LENGTH (t1); i++)
1429 compare_tree_edges (TREE_OPERAND (t1, i),
1430 TREE_OPERAND (t2, i));
1432 /* BLOCKs are function local and we don't merge anything there. */
1433 if (TREE_BLOCK (t1) || TREE_BLOCK (t2))
1434 return false;
1437 if (CODE_CONTAINS_STRUCT (code, TS_BINFO))
1439 unsigned i;
1440 tree t;
1441 /* Lengths have already been compared above. */
1442 FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (t1), i, t)
1443 compare_tree_edges (t, BINFO_BASE_BINFO (t2, i));
1444 FOR_EACH_VEC_SAFE_ELT (BINFO_BASE_ACCESSES (t1), i, t)
1445 compare_tree_edges (t, BINFO_BASE_ACCESS (t2, i));
1446 compare_tree_edges (BINFO_OFFSET (t1), BINFO_OFFSET (t2));
1447 compare_tree_edges (BINFO_VTABLE (t1), BINFO_VTABLE (t2));
1448 compare_tree_edges (BINFO_VPTR_FIELD (t1), BINFO_VPTR_FIELD (t2));
1449 /* Do not walk BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX
1450 and BINFO_VPTR_INDEX; these are used by C++ FE only. */
1453 if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
1455 unsigned i;
1456 tree index, value;
1457 /* Lengths have already been compared above. */
1458 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t1), i, index, value)
1460 compare_tree_edges (index, CONSTRUCTOR_ELT (t2, i)->index);
1461 compare_tree_edges (value, CONSTRUCTOR_ELT (t2, i)->value);
1465 if (code == OMP_CLAUSE)
1467 int i;
1469 for (i = 0; i < omp_clause_num_ops[OMP_CLAUSE_CODE (t1)]; i++)
1470 compare_tree_edges (OMP_CLAUSE_OPERAND (t1, i),
1471 OMP_CLAUSE_OPERAND (t2, i));
1472 compare_tree_edges (OMP_CLAUSE_CHAIN (t1), OMP_CLAUSE_CHAIN (t2));
1475 #undef compare_tree_edges
1477 return true;
1480 /* Compare the tree scc SCC to the prevailing candidate PSCC, filling
1481 out MAP if they are equal. */
1483 static bool
1484 compare_tree_sccs (tree_scc *pscc, tree_scc *scc,
1485 tree *map)
1487 /* Assume SCC entry hashes are sorted after their cardinality. Which
1488 means we can simply take the first n-tuple of equal hashes
1489 (which is recorded as entry_len) and do n SCC entry candidate
1490 comparisons. */
1491 for (unsigned i = 0; i < pscc->entry_len; ++i)
1493 tree *mapp = map;
1494 num_scc_compare_collisions++;
1495 if (compare_tree_sccs_1 (pscc->entries[0], scc->entries[i], &mapp))
1497 /* Equal - no need to reset TREE_VISITED or TREE_ASM_WRITTEN
1498 on the scc as all trees will be freed. */
1499 return true;
1501 /* Reset TREE_ASM_WRITTEN on scc for the next compare or in case
1502 the SCC prevails. */
1503 for (unsigned j = 0; j < scc->len; ++j)
1504 TREE_ASM_WRITTEN (scc->entries[j]) = 0;
1507 return false;
1510 /* QSort sort function to sort a map of two pointers after the 2nd
1511 pointer. */
1513 static int
1514 cmp_tree (const void *p1_, const void *p2_)
1516 tree *p1 = (tree *)(const_cast<void *>(p1_));
1517 tree *p2 = (tree *)(const_cast<void *>(p2_));
1518 if (p1[1] == p2[1])
1519 return 0;
1520 return ((uintptr_t)p1[1] < (uintptr_t)p2[1]) ? -1 : 1;
1523 /* Try to unify the SCC with nodes FROM to FROM + LEN in CACHE and
1524 hash value SCC_HASH with an already recorded SCC. Return true if
1525 that was successful, otherwise return false. */
1527 static bool
1528 unify_scc (struct data_in *data_in, unsigned from,
1529 unsigned len, unsigned scc_entry_len, hashval_t scc_hash)
1531 bool unified_p = false;
1532 struct streamer_tree_cache_d *cache = data_in->reader_cache;
1533 tree_scc *scc
1534 = (tree_scc *) alloca (sizeof (tree_scc) + (len - 1) * sizeof (tree));
1535 scc->next = NULL;
1536 scc->hash = scc_hash;
1537 scc->len = len;
1538 scc->entry_len = scc_entry_len;
1539 for (unsigned i = 0; i < len; ++i)
1541 tree t = streamer_tree_cache_get_tree (cache, from + i);
1542 scc->entries[i] = t;
1543 /* Do not merge SCCs with local entities inside them. Also do
1544 not merge TRANSLATION_UNIT_DECLs. */
1545 if (TREE_CODE (t) == TRANSLATION_UNIT_DECL
1546 || (VAR_OR_FUNCTION_DECL_P (t)
1547 && !(TREE_PUBLIC (t) || DECL_EXTERNAL (t)))
1548 || TREE_CODE (t) == LABEL_DECL)
1550 /* Avoid doing any work for these cases and do not worry to
1551 record the SCCs for further merging. */
1552 return false;
1556 /* Look for the list of candidate SCCs to compare against. */
1557 tree_scc **slot;
1558 slot = tree_scc_hash->find_slot_with_hash (scc, scc_hash, INSERT);
1559 if (*slot)
1561 /* Try unifying against each candidate. */
1562 num_scc_compares++;
1564 /* Set TREE_VISITED on the scc so we can easily identify tree nodes
1565 outside of the scc when following tree edges. Make sure
1566 that TREE_ASM_WRITTEN is unset so we can use it as 2nd bit
1567 to track whether we visited the SCC member during the compare.
1568 We cannot use TREE_VISITED on the pscc members as the extended
1569 scc and pscc can overlap. */
1570 for (unsigned i = 0; i < scc->len; ++i)
1572 TREE_VISITED (scc->entries[i]) = 1;
1573 gcc_checking_assert (!TREE_ASM_WRITTEN (scc->entries[i]));
1576 tree *map = XALLOCAVEC (tree, 2 * len);
1577 for (tree_scc *pscc = *slot; pscc; pscc = pscc->next)
1579 if (!compare_tree_sccs (pscc, scc, map))
1580 continue;
1582 /* Found an equal SCC. */
1583 unified_p = true;
1584 num_scc_compare_collisions--;
1585 num_sccs_merged++;
1586 total_scc_size_merged += len;
1588 #ifdef ENABLE_CHECKING
1589 for (unsigned i = 0; i < len; ++i)
1591 tree t = map[2*i+1];
1592 enum tree_code code = TREE_CODE (t);
1593 /* IDENTIFIER_NODEs should be singletons and are merged by the
1594 streamer. The others should be singletons, too, and we
1595 should not merge them in any way. */
1596 gcc_assert (code != TRANSLATION_UNIT_DECL
1597 && code != IDENTIFIER_NODE
1598 && !streamer_handle_as_builtin_p (t));
1600 #endif
1602 /* Fixup the streamer cache with the prevailing nodes according
1603 to the tree node mapping computed by compare_tree_sccs. */
1604 if (len == 1)
1605 streamer_tree_cache_replace_tree (cache, pscc->entries[0], from);
1606 else
1608 tree *map2 = XALLOCAVEC (tree, 2 * len);
1609 for (unsigned i = 0; i < len; ++i)
1611 map2[i*2] = (tree)(uintptr_t)(from + i);
1612 map2[i*2+1] = scc->entries[i];
1614 qsort (map2, len, 2 * sizeof (tree), cmp_tree);
1615 qsort (map, len, 2 * sizeof (tree), cmp_tree);
1616 for (unsigned i = 0; i < len; ++i)
1617 streamer_tree_cache_replace_tree (cache, map[2*i],
1618 (uintptr_t)map2[2*i]);
1621 /* Free the tree nodes from the read SCC. */
1622 data_in->location_cache.revert_location_cache ();
1623 for (unsigned i = 0; i < len; ++i)
1625 enum tree_code code;
1626 if (TYPE_P (scc->entries[i]))
1627 num_merged_types++;
1628 code = TREE_CODE (scc->entries[i]);
1629 if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
1630 vec_free (CONSTRUCTOR_ELTS (scc->entries[i]));
1631 ggc_free (scc->entries[i]);
1634 break;
1637 /* Reset TREE_VISITED if we didn't unify the SCC with another. */
1638 if (!unified_p)
1639 for (unsigned i = 0; i < scc->len; ++i)
1640 TREE_VISITED (scc->entries[i]) = 0;
1643 /* If we didn't unify it to any candidate duplicate the relevant
1644 pieces to permanent storage and link it into the chain. */
1645 if (!unified_p)
1647 tree_scc *pscc
1648 = XOBNEWVAR (&tree_scc_hash_obstack, tree_scc, sizeof (tree_scc));
1649 memcpy (pscc, scc, sizeof (tree_scc));
1650 pscc->next = (*slot);
1651 *slot = pscc;
1653 return unified_p;
1657 /* Read all the symbols from buffer DATA, using descriptors in DECL_DATA.
1658 RESOLUTIONS is the set of symbols picked by the linker (read from the
1659 resolution file when the linker plugin is being used). */
1661 static void
1662 lto_read_decls (struct lto_file_decl_data *decl_data, const void *data,
1663 vec<ld_plugin_symbol_resolution_t> resolutions)
1665 const struct lto_decl_header *header = (const struct lto_decl_header *) data;
1666 const int decl_offset = sizeof (struct lto_decl_header);
1667 const int main_offset = decl_offset + header->decl_state_size;
1668 const int string_offset = main_offset + header->main_size;
1669 struct data_in *data_in;
1670 unsigned int i;
1671 const uint32_t *data_ptr, *data_end;
1672 uint32_t num_decl_states;
1674 lto_input_block ib_main ((const char *) data + main_offset,
1675 header->main_size, decl_data->mode_table);
1677 data_in = lto_data_in_create (decl_data, (const char *) data + string_offset,
1678 header->string_size, resolutions);
1680 /* We do not uniquify the pre-loaded cache entries, those are middle-end
1681 internal types that should not be merged. */
1683 /* Read the global declarations and types. */
1684 while (ib_main.p < ib_main.len)
1686 tree t;
1687 unsigned from = data_in->reader_cache->nodes.length ();
1688 /* Read and uniquify SCCs as in the input stream. */
1689 enum LTO_tags tag = streamer_read_record_start (&ib_main);
1690 if (tag == LTO_tree_scc)
1692 unsigned len_;
1693 unsigned scc_entry_len;
1694 hashval_t scc_hash = lto_input_scc (&ib_main, data_in, &len_,
1695 &scc_entry_len);
1696 unsigned len = data_in->reader_cache->nodes.length () - from;
1697 gcc_assert (len == len_);
1699 total_scc_size += len;
1700 num_sccs_read++;
1702 /* We have the special case of size-1 SCCs that are pre-merged
1703 by means of identifier and string sharing for example.
1704 ??? Maybe we should avoid streaming those as SCCs. */
1705 tree first = streamer_tree_cache_get_tree (data_in->reader_cache,
1706 from);
1707 if (len == 1
1708 && (TREE_CODE (first) == IDENTIFIER_NODE
1709 || TREE_CODE (first) == INTEGER_CST
1710 || TREE_CODE (first) == TRANSLATION_UNIT_DECL
1711 || streamer_handle_as_builtin_p (first)))
1712 continue;
1714 /* Try to unify the SCC with already existing ones. */
1715 if (!flag_ltrans
1716 && unify_scc (data_in, from,
1717 len, scc_entry_len, scc_hash))
1718 continue;
1720 /* Tree merging failed, mark entries in location cache as
1721 permanent. */
1722 data_in->location_cache.accept_location_cache ();
1724 bool seen_type = false;
1725 for (unsigned i = 0; i < len; ++i)
1727 tree t = streamer_tree_cache_get_tree (data_in->reader_cache,
1728 from + i);
1729 /* Reconstruct the type variant and pointer-to/reference-to
1730 chains. */
1731 if (TYPE_P (t))
1733 seen_type = true;
1734 num_prevailing_types++;
1735 lto_fixup_prevailing_type (t);
1737 /* Compute the canonical type of all types.
1738 ??? Should be able to assert that !TYPE_CANONICAL. */
1739 if (TYPE_P (t) && !TYPE_CANONICAL (t))
1741 gimple_register_canonical_type (t);
1742 if (odr_type_p (t))
1743 register_odr_type (t);
1745 /* Link shared INTEGER_CSTs into TYPE_CACHED_VALUEs of its
1746 type which is also member of this SCC. */
1747 if (TREE_CODE (t) == INTEGER_CST
1748 && !TREE_OVERFLOW (t))
1749 cache_integer_cst (t);
1750 /* Register TYPE_DECLs with the debuginfo machinery. */
1751 if (!flag_wpa
1752 && TREE_CODE (t) == TYPE_DECL)
1754 /* Dwarf2out needs location information.
1755 TODO: Moving this out of the streamer loop may noticealy
1756 improve ltrans linemap memory use. */
1757 data_in->location_cache.apply_location_cache ();
1758 debug_hooks->type_decl (t, !DECL_FILE_SCOPE_P (t));
1760 if (!flag_ltrans)
1762 /* Register variables and functions with the
1763 symbol table. */
1764 if (TREE_CODE (t) == VAR_DECL)
1765 lto_register_var_decl_in_symtab (data_in, t, from + i);
1766 else if (TREE_CODE (t) == FUNCTION_DECL
1767 && !DECL_BUILT_IN (t))
1768 lto_register_function_decl_in_symtab (data_in, t, from + i);
1769 /* Scan the tree for references to global functions or
1770 variables and record those for later fixup. */
1771 if (mentions_vars_p (t))
1772 vec_safe_push (tree_with_vars, t);
1775 if (seen_type)
1776 num_type_scc_trees += len;
1778 else
1780 /* Pickle stray references. */
1781 t = lto_input_tree_1 (&ib_main, data_in, tag, 0);
1782 gcc_assert (t && data_in->reader_cache->nodes.length () == from);
1785 data_in->location_cache.apply_location_cache ();
1787 /* Read in lto_in_decl_state objects. */
1788 data_ptr = (const uint32_t *) ((const char*) data + decl_offset);
1789 data_end =
1790 (const uint32_t *) ((const char*) data_ptr + header->decl_state_size);
1791 num_decl_states = *data_ptr++;
1793 gcc_assert (num_decl_states > 0);
1794 decl_data->global_decl_state = lto_new_in_decl_state ();
1795 data_ptr = lto_read_in_decl_state (data_in, data_ptr,
1796 decl_data->global_decl_state);
1798 /* Read in per-function decl states and enter them in hash table. */
1799 decl_data->function_decl_states =
1800 hash_table<decl_state_hasher>::create_ggc (37);
1802 for (i = 1; i < num_decl_states; i++)
1804 struct lto_in_decl_state *state = lto_new_in_decl_state ();
1806 data_ptr = lto_read_in_decl_state (data_in, data_ptr, state);
1807 lto_in_decl_state **slot
1808 = decl_data->function_decl_states->find_slot (state, INSERT);
1809 gcc_assert (*slot == NULL);
1810 *slot = state;
1813 if (data_ptr != data_end)
1814 internal_error ("bytecode stream: garbage at the end of symbols section");
1816 /* Set the current decl state to be the global state. */
1817 decl_data->current_decl_state = decl_data->global_decl_state;
1819 lto_data_in_delete (data_in);
1822 /* Custom version of strtoll, which is not portable. */
1824 static int64_t
1825 lto_parse_hex (const char *p)
1827 int64_t ret = 0;
1829 for (; *p != '\0'; ++p)
1831 char c = *p;
1832 unsigned char part;
1833 ret <<= 4;
1834 if (c >= '0' && c <= '9')
1835 part = c - '0';
1836 else if (c >= 'a' && c <= 'f')
1837 part = c - 'a' + 10;
1838 else if (c >= 'A' && c <= 'F')
1839 part = c - 'A' + 10;
1840 else
1841 internal_error ("could not parse hex number");
1842 ret |= part;
1845 return ret;
1848 /* Read resolution for file named FILE_NAME. The resolution is read from
1849 RESOLUTION. */
1851 static void
1852 lto_resolution_read (splay_tree file_ids, FILE *resolution, lto_file *file)
1854 /* We require that objects in the resolution file are in the same
1855 order as the lto1 command line. */
1856 unsigned int name_len;
1857 char *obj_name;
1858 unsigned int num_symbols;
1859 unsigned int i;
1860 struct lto_file_decl_data *file_data;
1861 splay_tree_node nd = NULL;
1863 if (!resolution)
1864 return;
1866 name_len = strlen (file->filename);
1867 obj_name = XNEWVEC (char, name_len + 1);
1868 fscanf (resolution, " "); /* Read white space. */
1870 fread (obj_name, sizeof (char), name_len, resolution);
1871 obj_name[name_len] = '\0';
1872 if (filename_cmp (obj_name, file->filename) != 0)
1873 internal_error ("unexpected file name %s in linker resolution file. "
1874 "Expected %s", obj_name, file->filename);
1875 if (file->offset != 0)
1877 int t;
1878 char offset_p[17];
1879 int64_t offset;
1880 t = fscanf (resolution, "@0x%16s", offset_p);
1881 if (t != 1)
1882 internal_error ("could not parse file offset");
1883 offset = lto_parse_hex (offset_p);
1884 if (offset != file->offset)
1885 internal_error ("unexpected offset");
1888 free (obj_name);
1890 fscanf (resolution, "%u", &num_symbols);
1892 for (i = 0; i < num_symbols; i++)
1894 int t;
1895 unsigned index;
1896 unsigned HOST_WIDE_INT id;
1897 char r_str[27];
1898 enum ld_plugin_symbol_resolution r = (enum ld_plugin_symbol_resolution) 0;
1899 unsigned int j;
1900 unsigned int lto_resolution_str_len =
1901 sizeof (lto_resolution_str) / sizeof (char *);
1902 res_pair rp;
1904 t = fscanf (resolution, "%u " HOST_WIDE_INT_PRINT_HEX_PURE " %26s %*[^\n]\n",
1905 &index, &id, r_str);
1906 if (t != 3)
1907 internal_error ("invalid line in the resolution file");
1909 for (j = 0; j < lto_resolution_str_len; j++)
1911 if (strcmp (lto_resolution_str[j], r_str) == 0)
1913 r = (enum ld_plugin_symbol_resolution) j;
1914 break;
1917 if (j == lto_resolution_str_len)
1918 internal_error ("invalid resolution in the resolution file");
1920 if (!(nd && lto_splay_tree_id_equal_p (nd->key, id)))
1922 nd = lto_splay_tree_lookup (file_ids, id);
1923 if (nd == NULL)
1924 internal_error ("resolution sub id %wx not in object file", id);
1927 file_data = (struct lto_file_decl_data *)nd->value;
1928 /* The indexes are very sparse. To save memory save them in a compact
1929 format that is only unpacked later when the subfile is processed. */
1930 rp.res = r;
1931 rp.index = index;
1932 file_data->respairs.safe_push (rp);
1933 if (file_data->max_index < index)
1934 file_data->max_index = index;
1938 /* List of file_decl_datas */
1939 struct file_data_list
1941 struct lto_file_decl_data *first, *last;
1944 /* Is the name for a id'ed LTO section? */
1946 static int
1947 lto_section_with_id (const char *name, unsigned HOST_WIDE_INT *id)
1949 const char *s;
1951 if (strncmp (name, section_name_prefix, strlen (section_name_prefix)))
1952 return 0;
1953 s = strrchr (name, '.');
1954 return s && sscanf (s, "." HOST_WIDE_INT_PRINT_HEX_PURE, id) == 1;
1957 /* Create file_data of each sub file id */
1959 static int
1960 create_subid_section_table (struct lto_section_slot *ls, splay_tree file_ids,
1961 struct file_data_list *list)
1963 struct lto_section_slot s_slot, *new_slot;
1964 unsigned HOST_WIDE_INT id;
1965 splay_tree_node nd;
1966 void **hash_slot;
1967 char *new_name;
1968 struct lto_file_decl_data *file_data;
1970 if (!lto_section_with_id (ls->name, &id))
1971 return 1;
1973 /* Find hash table of sub module id */
1974 nd = lto_splay_tree_lookup (file_ids, id);
1975 if (nd != NULL)
1977 file_data = (struct lto_file_decl_data *)nd->value;
1979 else
1981 file_data = ggc_alloc<lto_file_decl_data> ();
1982 memset(file_data, 0, sizeof (struct lto_file_decl_data));
1983 file_data->id = id;
1984 file_data->section_hash_table = lto_obj_create_section_hash_table ();;
1985 lto_splay_tree_insert (file_ids, id, file_data);
1987 /* Maintain list in linker order */
1988 if (!list->first)
1989 list->first = file_data;
1990 if (list->last)
1991 list->last->next = file_data;
1992 list->last = file_data;
1995 /* Copy section into sub module hash table */
1996 new_name = XDUPVEC (char, ls->name, strlen (ls->name) + 1);
1997 s_slot.name = new_name;
1998 hash_slot = htab_find_slot (file_data->section_hash_table, &s_slot, INSERT);
1999 gcc_assert (*hash_slot == NULL);
2001 new_slot = XDUP (struct lto_section_slot, ls);
2002 new_slot->name = new_name;
2003 *hash_slot = new_slot;
2004 return 1;
2007 /* Read declarations and other initializations for a FILE_DATA. */
2009 static void
2010 lto_file_finalize (struct lto_file_decl_data *file_data, lto_file *file)
2012 const char *data;
2013 size_t len;
2014 vec<ld_plugin_symbol_resolution_t>
2015 resolutions = vNULL;
2016 int i;
2017 res_pair *rp;
2019 /* Create vector for fast access of resolution. We do this lazily
2020 to save memory. */
2021 resolutions.safe_grow_cleared (file_data->max_index + 1);
2022 for (i = 0; file_data->respairs.iterate (i, &rp); i++)
2023 resolutions[rp->index] = rp->res;
2024 file_data->respairs.release ();
2026 file_data->renaming_hash_table = lto_create_renaming_table ();
2027 file_data->file_name = file->filename;
2028 #ifdef ACCEL_COMPILER
2029 lto_input_mode_table (file_data);
2030 #else
2031 file_data->mode_table = lto_mode_identity_table;
2032 #endif
2033 data = lto_get_section_data (file_data, LTO_section_decls, NULL, &len);
2034 if (data == NULL)
2036 internal_error ("cannot read LTO decls from %s", file_data->file_name);
2037 return;
2039 /* Frees resolutions */
2040 lto_read_decls (file_data, data, resolutions);
2041 lto_free_section_data (file_data, LTO_section_decls, NULL, data, len);
2044 /* Finalize FILE_DATA in FILE and increase COUNT. */
2046 static int
2047 lto_create_files_from_ids (lto_file *file, struct lto_file_decl_data *file_data,
2048 int *count)
2050 lto_file_finalize (file_data, file);
2051 if (symtab->dump_file)
2052 fprintf (symtab->dump_file,
2053 "Creating file %s with sub id " HOST_WIDE_INT_PRINT_HEX "\n",
2054 file_data->file_name, file_data->id);
2055 (*count)++;
2056 return 0;
2059 /* Generate a TREE representation for all types and external decls
2060 entities in FILE.
2062 Read all of the globals out of the file. Then read the cgraph
2063 and process the .o index into the cgraph nodes so that it can open
2064 the .o file to load the functions and ipa information. */
2066 static struct lto_file_decl_data *
2067 lto_file_read (lto_file *file, FILE *resolution_file, int *count)
2069 struct lto_file_decl_data *file_data = NULL;
2070 splay_tree file_ids;
2071 htab_t section_hash_table;
2072 struct lto_section_slot *section;
2073 struct file_data_list file_list;
2074 struct lto_section_list section_list;
2076 memset (&section_list, 0, sizeof (struct lto_section_list));
2077 section_hash_table = lto_obj_build_section_table (file, &section_list);
2079 /* Find all sub modules in the object and put their sections into new hash
2080 tables in a splay tree. */
2081 file_ids = lto_splay_tree_new ();
2082 memset (&file_list, 0, sizeof (struct file_data_list));
2083 for (section = section_list.first; section != NULL; section = section->next)
2084 create_subid_section_table (section, file_ids, &file_list);
2086 /* Add resolutions to file ids */
2087 lto_resolution_read (file_ids, resolution_file, file);
2089 /* Finalize each lto file for each submodule in the merged object */
2090 for (file_data = file_list.first; file_data != NULL; file_data = file_data->next)
2091 lto_create_files_from_ids (file, file_data, count);
2093 splay_tree_delete (file_ids);
2094 htab_delete (section_hash_table);
2096 return file_list.first;
2099 #if HAVE_MMAP_FILE && HAVE_SYSCONF && defined _SC_PAGE_SIZE
2100 #define LTO_MMAP_IO 1
2101 #endif
2103 #if LTO_MMAP_IO
2104 /* Page size of machine is used for mmap and munmap calls. */
2105 static size_t page_mask;
2106 #endif
2108 /* Get the section data of length LEN from FILENAME starting at
2109 OFFSET. The data segment must be freed by the caller when the
2110 caller is finished. Returns NULL if all was not well. */
2112 static char *
2113 lto_read_section_data (struct lto_file_decl_data *file_data,
2114 intptr_t offset, size_t len)
2116 char *result;
2117 static int fd = -1;
2118 static char *fd_name;
2119 #if LTO_MMAP_IO
2120 intptr_t computed_len;
2121 intptr_t computed_offset;
2122 intptr_t diff;
2123 #endif
2125 /* Keep a single-entry file-descriptor cache. The last file we
2126 touched will get closed at exit.
2127 ??? Eventually we want to add a more sophisticated larger cache
2128 or rather fix function body streaming to not stream them in
2129 practically random order. */
2130 if (fd != -1
2131 && filename_cmp (fd_name, file_data->file_name) != 0)
2133 free (fd_name);
2134 close (fd);
2135 fd = -1;
2137 if (fd == -1)
2139 fd = open (file_data->file_name, O_RDONLY|O_BINARY);
2140 if (fd == -1)
2142 fatal_error (input_location, "Cannot open %s", file_data->file_name);
2143 return NULL;
2145 fd_name = xstrdup (file_data->file_name);
2148 #if LTO_MMAP_IO
2149 if (!page_mask)
2151 size_t page_size = sysconf (_SC_PAGE_SIZE);
2152 page_mask = ~(page_size - 1);
2155 computed_offset = offset & page_mask;
2156 diff = offset - computed_offset;
2157 computed_len = len + diff;
2159 result = (char *) mmap (NULL, computed_len, PROT_READ, MAP_PRIVATE,
2160 fd, computed_offset);
2161 if (result == MAP_FAILED)
2163 fatal_error (input_location, "Cannot map %s", file_data->file_name);
2164 return NULL;
2167 return result + diff;
2168 #else
2169 result = (char *) xmalloc (len);
2170 if (lseek (fd, offset, SEEK_SET) != offset
2171 || read (fd, result, len) != (ssize_t) len)
2173 free (result);
2174 fatal_error (input_location, "Cannot read %s", file_data->file_name);
2175 result = NULL;
2177 #ifdef __MINGW32__
2178 /* Native windows doesn't supports delayed unlink on opened file. So
2179 we close file here again. This produces higher I/O load, but at least
2180 it prevents to have dangling file handles preventing unlink. */
2181 free (fd_name);
2182 fd_name = NULL;
2183 close (fd);
2184 fd = -1;
2185 #endif
2186 return result;
2187 #endif
2191 /* Get the section data from FILE_DATA of SECTION_TYPE with NAME.
2192 NAME will be NULL unless the section type is for a function
2193 body. */
2195 static const char *
2196 get_section_data (struct lto_file_decl_data *file_data,
2197 enum lto_section_type section_type,
2198 const char *name,
2199 size_t *len)
2201 htab_t section_hash_table = file_data->section_hash_table;
2202 struct lto_section_slot *f_slot;
2203 struct lto_section_slot s_slot;
2204 const char *section_name = lto_get_section_name (section_type, name, file_data);
2205 char *data = NULL;
2207 *len = 0;
2208 s_slot.name = section_name;
2209 f_slot = (struct lto_section_slot *) htab_find (section_hash_table, &s_slot);
2210 if (f_slot)
2212 data = lto_read_section_data (file_data, f_slot->start, f_slot->len);
2213 *len = f_slot->len;
2216 free (CONST_CAST (char *, section_name));
2217 return data;
2221 /* Free the section data from FILE_DATA of SECTION_TYPE with NAME that
2222 starts at OFFSET and has LEN bytes. */
2224 static void
2225 free_section_data (struct lto_file_decl_data *file_data ATTRIBUTE_UNUSED,
2226 enum lto_section_type section_type ATTRIBUTE_UNUSED,
2227 const char *name ATTRIBUTE_UNUSED,
2228 const char *offset, size_t len ATTRIBUTE_UNUSED)
2230 #if LTO_MMAP_IO
2231 intptr_t computed_len;
2232 intptr_t computed_offset;
2233 intptr_t diff;
2234 #endif
2236 #if LTO_MMAP_IO
2237 computed_offset = ((intptr_t) offset) & page_mask;
2238 diff = (intptr_t) offset - computed_offset;
2239 computed_len = len + diff;
2241 munmap ((caddr_t) computed_offset, computed_len);
2242 #else
2243 free (CONST_CAST(char *, offset));
2244 #endif
2247 static lto_file *current_lto_file;
2249 /* Helper for qsort; compare partitions and return one with smaller size.
2250 We sort from greatest to smallest so parallel build doesn't stale on the
2251 longest compilation being executed too late. */
2253 static int
2254 cmp_partitions_size (const void *a, const void *b)
2256 const struct ltrans_partition_def *pa
2257 = *(struct ltrans_partition_def *const *)a;
2258 const struct ltrans_partition_def *pb
2259 = *(struct ltrans_partition_def *const *)b;
2260 return pb->insns - pa->insns;
2263 /* Helper for qsort; compare partitions and return one with smaller order. */
2265 static int
2266 cmp_partitions_order (const void *a, const void *b)
2268 const struct ltrans_partition_def *pa
2269 = *(struct ltrans_partition_def *const *)a;
2270 const struct ltrans_partition_def *pb
2271 = *(struct ltrans_partition_def *const *)b;
2272 int ordera = -1, orderb = -1;
2274 if (lto_symtab_encoder_size (pa->encoder))
2275 ordera = lto_symtab_encoder_deref (pa->encoder, 0)->order;
2276 if (lto_symtab_encoder_size (pb->encoder))
2277 orderb = lto_symtab_encoder_deref (pb->encoder, 0)->order;
2278 return orderb - ordera;
2281 /* Actually stream out ENCODER into TEMP_FILENAME. */
2283 static void
2284 do_stream_out (char *temp_filename, lto_symtab_encoder_t encoder)
2286 lto_file *file = lto_obj_file_open (temp_filename, true);
2287 if (!file)
2288 fatal_error (input_location, "lto_obj_file_open() failed");
2289 lto_set_current_out_file (file);
2291 ipa_write_optimization_summaries (encoder);
2293 lto_set_current_out_file (NULL);
2294 lto_obj_file_close (file);
2295 free (file);
2298 /* Wait for forked process and signal errors. */
2299 #ifdef HAVE_WORKING_FORK
2300 static void
2301 wait_for_child ()
2303 int status;
2306 #ifndef WCONTINUED
2307 #define WCONTINUED 0
2308 #endif
2309 int w = waitpid (0, &status, WUNTRACED | WCONTINUED);
2310 if (w == -1)
2311 fatal_error (input_location, "waitpid failed");
2313 if (WIFEXITED (status) && WEXITSTATUS (status))
2314 fatal_error (input_location, "streaming subprocess failed");
2315 else if (WIFSIGNALED (status))
2316 fatal_error (input_location,
2317 "streaming subprocess was killed by signal");
2319 while (!WIFEXITED (status) && !WIFSIGNALED (status));
2321 #endif
2323 /* Stream out ENCODER into TEMP_FILENAME
2324 Fork if that seems to help. */
2326 static void
2327 stream_out (char *temp_filename, lto_symtab_encoder_t encoder,
2328 bool ARG_UNUSED (last))
2330 #ifdef HAVE_WORKING_FORK
2331 static int nruns;
2333 if (lto_parallelism <= 1)
2335 do_stream_out (temp_filename, encoder);
2336 return;
2339 /* Do not run more than LTO_PARALLELISM streamings
2340 FIXME: we ignore limits on jobserver. */
2341 if (lto_parallelism > 0 && nruns >= lto_parallelism)
2343 wait_for_child ();
2344 nruns --;
2346 /* If this is not the last parallel partition, execute new
2347 streaming process. */
2348 if (!last)
2350 pid_t cpid = fork ();
2352 if (!cpid)
2354 setproctitle ("lto1-wpa-streaming");
2355 do_stream_out (temp_filename, encoder);
2356 exit (0);
2358 /* Fork failed; lets do the job ourseleves. */
2359 else if (cpid == -1)
2360 do_stream_out (temp_filename, encoder);
2361 else
2362 nruns++;
2364 /* Last partition; stream it and wait for all children to die. */
2365 else
2367 int i;
2368 do_stream_out (temp_filename, encoder);
2369 for (i = 0; i < nruns; i++)
2370 wait_for_child ();
2372 asm_nodes_output = true;
2373 #else
2374 do_stream_out (temp_filename, encoder);
2375 #endif
2378 /* Write all output files in WPA mode and the file with the list of
2379 LTRANS units. */
2381 static void
2382 lto_wpa_write_files (void)
2384 unsigned i, n_sets;
2385 ltrans_partition part;
2386 FILE *ltrans_output_list_stream;
2387 char *temp_filename;
2388 vec <char *>temp_filenames = vNULL;
2389 size_t blen;
2391 /* Open the LTRANS output list. */
2392 if (!ltrans_output_list)
2393 fatal_error (input_location, "no LTRANS output list filename provided");
2395 timevar_push (TV_WHOPR_WPA);
2397 FOR_EACH_VEC_ELT (ltrans_partitions, i, part)
2398 lto_stats.num_output_symtab_nodes += lto_symtab_encoder_size (part->encoder);
2400 timevar_pop (TV_WHOPR_WPA);
2402 timevar_push (TV_WHOPR_WPA_IO);
2404 /* Generate a prefix for the LTRANS unit files. */
2405 blen = strlen (ltrans_output_list);
2406 temp_filename = (char *) xmalloc (blen + sizeof ("2147483648.o"));
2407 strcpy (temp_filename, ltrans_output_list);
2408 if (blen > sizeof (".out")
2409 && strcmp (temp_filename + blen - sizeof (".out") + 1,
2410 ".out") == 0)
2411 temp_filename[blen - sizeof (".out") + 1] = '\0';
2412 blen = strlen (temp_filename);
2414 n_sets = ltrans_partitions.length ();
2416 /* Sort partitions by size so small ones are compiled last.
2417 FIXME: Even when not reordering we may want to output one list for parallel make
2418 and other for final link command. */
2420 if (!flag_profile_reorder_functions || !flag_profile_use)
2421 ltrans_partitions.qsort (flag_toplevel_reorder
2422 ? cmp_partitions_size
2423 : cmp_partitions_order);
2425 for (i = 0; i < n_sets; i++)
2427 ltrans_partition part = ltrans_partitions[i];
2429 /* Write all the nodes in SET. */
2430 sprintf (temp_filename + blen, "%u.o", i);
2432 if (!quiet_flag)
2433 fprintf (stderr, " %s (%s %i insns)", temp_filename, part->name, part->insns);
2434 if (symtab->dump_file)
2436 lto_symtab_encoder_iterator lsei;
2438 fprintf (symtab->dump_file, "Writing partition %s to file %s, %i insns\n",
2439 part->name, temp_filename, part->insns);
2440 fprintf (symtab->dump_file, " Symbols in partition: ");
2441 for (lsei = lsei_start_in_partition (part->encoder); !lsei_end_p (lsei);
2442 lsei_next_in_partition (&lsei))
2444 symtab_node *node = lsei_node (lsei);
2445 fprintf (symtab->dump_file, "%s ", node->asm_name ());
2447 fprintf (symtab->dump_file, "\n Symbols in boundary: ");
2448 for (lsei = lsei_start (part->encoder); !lsei_end_p (lsei);
2449 lsei_next (&lsei))
2451 symtab_node *node = lsei_node (lsei);
2452 if (!lto_symtab_encoder_in_partition_p (part->encoder, node))
2454 fprintf (symtab->dump_file, "%s ", node->asm_name ());
2455 cgraph_node *cnode = dyn_cast <cgraph_node *> (node);
2456 if (cnode
2457 && lto_symtab_encoder_encode_body_p (part->encoder, cnode))
2458 fprintf (symtab->dump_file, "(body included)");
2459 else
2461 varpool_node *vnode = dyn_cast <varpool_node *> (node);
2462 if (vnode
2463 && lto_symtab_encoder_encode_initializer_p (part->encoder, vnode))
2464 fprintf (symtab->dump_file, "(initializer included)");
2468 fprintf (symtab->dump_file, "\n");
2470 gcc_checking_assert (lto_symtab_encoder_size (part->encoder) || !i);
2472 stream_out (temp_filename, part->encoder, i == n_sets - 1);
2474 part->encoder = NULL;
2476 temp_filenames.safe_push (xstrdup (temp_filename));
2478 ltrans_output_list_stream = fopen (ltrans_output_list, "w");
2479 if (ltrans_output_list_stream == NULL)
2480 fatal_error (input_location,
2481 "opening LTRANS output list %s: %m", ltrans_output_list);
2482 for (i = 0; i < n_sets; i++)
2484 unsigned int len = strlen (temp_filenames[i]);
2485 if (fwrite (temp_filenames[i], 1, len, ltrans_output_list_stream) < len
2486 || fwrite ("\n", 1, 1, ltrans_output_list_stream) < 1)
2487 fatal_error (input_location, "writing to LTRANS output list %s: %m",
2488 ltrans_output_list);
2489 free (temp_filenames[i]);
2491 temp_filenames.release();
2493 lto_stats.num_output_files += n_sets;
2495 /* Close the LTRANS output list. */
2496 if (fclose (ltrans_output_list_stream))
2497 fatal_error (input_location,
2498 "closing LTRANS output list %s: %m", ltrans_output_list);
2500 free_ltrans_partitions();
2501 free (temp_filename);
2503 timevar_pop (TV_WHOPR_WPA_IO);
2507 /* If TT is a variable or function decl replace it with its
2508 prevailing variant. */
2509 #define LTO_SET_PREVAIL(tt) \
2510 do {\
2511 if ((tt) && VAR_OR_FUNCTION_DECL_P (tt) \
2512 && (TREE_PUBLIC (tt) || DECL_EXTERNAL (tt))) \
2514 tt = lto_symtab_prevailing_decl (tt); \
2515 fixed = true; \
2517 } while (0)
2519 /* Ensure that TT isn't a replacable var of function decl. */
2520 #define LTO_NO_PREVAIL(tt) \
2521 gcc_assert (!(tt) || !VAR_OR_FUNCTION_DECL_P (tt))
2523 /* Given a tree T replace all fields referring to variables or functions
2524 with their prevailing variant. */
2525 static void
2526 lto_fixup_prevailing_decls (tree t)
2528 enum tree_code code = TREE_CODE (t);
2529 bool fixed = false;
2531 gcc_checking_assert (code != TREE_BINFO);
2532 LTO_NO_PREVAIL (TREE_TYPE (t));
2533 if (CODE_CONTAINS_STRUCT (code, TS_COMMON))
2534 LTO_NO_PREVAIL (TREE_CHAIN (t));
2535 if (DECL_P (t))
2537 LTO_NO_PREVAIL (DECL_NAME (t));
2538 LTO_SET_PREVAIL (DECL_CONTEXT (t));
2539 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
2541 LTO_SET_PREVAIL (DECL_SIZE (t));
2542 LTO_SET_PREVAIL (DECL_SIZE_UNIT (t));
2543 LTO_SET_PREVAIL (DECL_INITIAL (t));
2544 LTO_NO_PREVAIL (DECL_ATTRIBUTES (t));
2545 LTO_SET_PREVAIL (DECL_ABSTRACT_ORIGIN (t));
2547 if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
2549 LTO_NO_PREVAIL (t->decl_with_vis.assembler_name);
2551 if (CODE_CONTAINS_STRUCT (code, TS_DECL_NON_COMMON))
2553 LTO_NO_PREVAIL (DECL_RESULT_FLD (t));
2555 if (CODE_CONTAINS_STRUCT (code, TS_FUNCTION_DECL))
2557 LTO_NO_PREVAIL (DECL_ARGUMENTS (t));
2558 LTO_SET_PREVAIL (DECL_FUNCTION_PERSONALITY (t));
2559 LTO_NO_PREVAIL (DECL_VINDEX (t));
2561 if (CODE_CONTAINS_STRUCT (code, TS_FIELD_DECL))
2563 LTO_SET_PREVAIL (DECL_FIELD_OFFSET (t));
2564 LTO_NO_PREVAIL (DECL_BIT_FIELD_TYPE (t));
2565 LTO_NO_PREVAIL (DECL_QUALIFIER (t));
2566 LTO_NO_PREVAIL (DECL_FIELD_BIT_OFFSET (t));
2567 LTO_NO_PREVAIL (DECL_FCONTEXT (t));
2570 else if (TYPE_P (t))
2572 LTO_NO_PREVAIL (TYPE_CACHED_VALUES (t));
2573 LTO_SET_PREVAIL (TYPE_SIZE (t));
2574 LTO_SET_PREVAIL (TYPE_SIZE_UNIT (t));
2575 LTO_NO_PREVAIL (TYPE_ATTRIBUTES (t));
2576 LTO_NO_PREVAIL (TYPE_NAME (t));
2578 LTO_SET_PREVAIL (TYPE_MINVAL (t));
2579 LTO_SET_PREVAIL (TYPE_MAXVAL (t));
2580 LTO_NO_PREVAIL (t->type_non_common.binfo);
2582 LTO_SET_PREVAIL (TYPE_CONTEXT (t));
2584 LTO_NO_PREVAIL (TYPE_CANONICAL (t));
2585 LTO_NO_PREVAIL (TYPE_MAIN_VARIANT (t));
2586 LTO_NO_PREVAIL (TYPE_NEXT_VARIANT (t));
2588 else if (EXPR_P (t))
2590 int i;
2591 for (i = TREE_OPERAND_LENGTH (t) - 1; i >= 0; --i)
2592 LTO_SET_PREVAIL (TREE_OPERAND (t, i));
2594 else if (TREE_CODE (t) == CONSTRUCTOR)
2596 unsigned i;
2597 tree val;
2598 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (t), i, val)
2599 LTO_SET_PREVAIL (val);
2601 else
2603 switch (code)
2605 case TREE_LIST:
2606 LTO_SET_PREVAIL (TREE_VALUE (t));
2607 LTO_SET_PREVAIL (TREE_PURPOSE (t));
2608 LTO_NO_PREVAIL (TREE_PURPOSE (t));
2609 break;
2610 default:
2611 gcc_unreachable ();
2614 /* If we fixed nothing, then we missed something seen by
2615 mentions_vars_p. */
2616 gcc_checking_assert (fixed);
2618 #undef LTO_SET_PREVAIL
2619 #undef LTO_NO_PREVAIL
2621 /* Helper function of lto_fixup_decls. Walks the var and fn streams in STATE,
2622 replaces var and function decls with the corresponding prevailing def. */
2624 static void
2625 lto_fixup_state (struct lto_in_decl_state *state)
2627 unsigned i, si;
2629 /* Although we only want to replace FUNCTION_DECLs and VAR_DECLs,
2630 we still need to walk from all DECLs to find the reachable
2631 FUNCTION_DECLs and VAR_DECLs. */
2632 for (si = 0; si < LTO_N_DECL_STREAMS; si++)
2634 vec<tree, va_gc> *trees = state->streams[si];
2635 for (i = 0; i < vec_safe_length (trees); i++)
2637 tree t = (*trees)[i];
2638 #ifdef ENABLE_CHECKING
2639 if (TYPE_P (t))
2640 verify_type (t);
2641 #endif
2642 if (VAR_OR_FUNCTION_DECL_P (t)
2643 && (TREE_PUBLIC (t) || DECL_EXTERNAL (t)))
2644 (*trees)[i] = lto_symtab_prevailing_decl (t);
2649 /* Fix the decls from all FILES. Replaces each decl with the corresponding
2650 prevailing one. */
2652 static void
2653 lto_fixup_decls (struct lto_file_decl_data **files)
2655 unsigned int i;
2656 tree t;
2658 if (tree_with_vars)
2659 FOR_EACH_VEC_ELT ((*tree_with_vars), i, t)
2660 lto_fixup_prevailing_decls (t);
2662 for (i = 0; files[i]; i++)
2664 struct lto_file_decl_data *file = files[i];
2665 struct lto_in_decl_state *state = file->global_decl_state;
2666 lto_fixup_state (state);
2668 hash_table<decl_state_hasher>::iterator iter;
2669 lto_in_decl_state *elt;
2670 FOR_EACH_HASH_TABLE_ELEMENT (*file->function_decl_states, elt,
2671 lto_in_decl_state *, iter)
2672 lto_fixup_state (elt);
2676 static GTY((length ("lto_stats.num_input_files + 1"))) struct lto_file_decl_data **all_file_decl_data;
2678 /* Turn file datas for sub files into a single array, so that they look
2679 like separate files for further passes. */
2681 static void
2682 lto_flatten_files (struct lto_file_decl_data **orig, int count, int last_file_ix)
2684 struct lto_file_decl_data *n, *next;
2685 int i, k;
2687 lto_stats.num_input_files = count;
2688 all_file_decl_data
2689 = ggc_cleared_vec_alloc<lto_file_decl_data_ptr> (count + 1);
2690 /* Set the hooks so that all of the ipa passes can read in their data. */
2691 lto_set_in_hooks (all_file_decl_data, get_section_data, free_section_data);
2692 for (i = 0, k = 0; i < last_file_ix; i++)
2694 for (n = orig[i]; n != NULL; n = next)
2696 all_file_decl_data[k++] = n;
2697 next = n->next;
2698 n->next = NULL;
2701 all_file_decl_data[k] = NULL;
2702 gcc_assert (k == count);
2705 /* Input file data before flattening (i.e. splitting them to subfiles to support
2706 incremental linking. */
2707 static int real_file_count;
2708 static GTY((length ("real_file_count + 1"))) struct lto_file_decl_data **real_file_decl_data;
2710 static void print_lto_report_1 (void);
2712 /* Read all the symbols from the input files FNAMES. NFILES is the
2713 number of files requested in the command line. Instantiate a
2714 global call graph by aggregating all the sub-graphs found in each
2715 file. */
2717 static void
2718 read_cgraph_and_symbols (unsigned nfiles, const char **fnames)
2720 unsigned int i, last_file_ix;
2721 FILE *resolution;
2722 int count = 0;
2723 struct lto_file_decl_data **decl_data;
2724 symtab_node *snode;
2726 symtab->initialize ();
2728 timevar_push (TV_IPA_LTO_DECL_IN);
2730 #ifdef ACCEL_COMPILER
2731 section_name_prefix = OFFLOAD_SECTION_NAME_PREFIX;
2732 lto_stream_offload_p = true;
2733 #endif
2735 real_file_decl_data
2736 = decl_data = ggc_cleared_vec_alloc<lto_file_decl_data_ptr> (nfiles + 1);
2737 real_file_count = nfiles;
2739 /* Read the resolution file. */
2740 resolution = NULL;
2741 if (resolution_file_name)
2743 int t;
2744 unsigned num_objects;
2746 resolution = fopen (resolution_file_name, "r");
2747 if (resolution == NULL)
2748 fatal_error (input_location,
2749 "could not open symbol resolution file: %m");
2751 t = fscanf (resolution, "%u", &num_objects);
2752 gcc_assert (t == 1);
2754 /* True, since the plugin splits the archives. */
2755 gcc_assert (num_objects == nfiles);
2757 symtab->state = LTO_STREAMING;
2759 canonical_type_hash_cache = new hash_map<const_tree, hashval_t> (251);
2760 gimple_canonical_types = htab_create (16381, gimple_canonical_type_hash,
2761 gimple_canonical_type_eq, NULL);
2762 gcc_obstack_init (&tree_scc_hash_obstack);
2763 tree_scc_hash = new hash_table<tree_scc_hasher> (4096);
2765 /* Register the common node types with the canonical type machinery so
2766 we properly share alias-sets across languages and TUs. Do not
2767 expose the common nodes as type merge target - those that should be
2768 are already exposed so by pre-loading the LTO streamer caches.
2769 Do two passes - first clear TYPE_CANONICAL and then re-compute it. */
2770 for (i = 0; i < itk_none; ++i)
2771 lto_register_canonical_types (integer_types[i], true);
2772 for (i = 0; i < stk_type_kind_last; ++i)
2773 lto_register_canonical_types (sizetype_tab[i], true);
2774 for (i = 0; i < TI_MAX; ++i)
2775 lto_register_canonical_types (global_trees[i], true);
2776 for (i = 0; i < itk_none; ++i)
2777 lto_register_canonical_types (integer_types[i], false);
2778 for (i = 0; i < stk_type_kind_last; ++i)
2779 lto_register_canonical_types (sizetype_tab[i], false);
2780 for (i = 0; i < TI_MAX; ++i)
2781 lto_register_canonical_types (global_trees[i], false);
2783 if (!quiet_flag)
2784 fprintf (stderr, "Reading object files:");
2786 /* Read all of the object files specified on the command line. */
2787 for (i = 0, last_file_ix = 0; i < nfiles; ++i)
2789 struct lto_file_decl_data *file_data = NULL;
2790 if (!quiet_flag)
2792 fprintf (stderr, " %s", fnames[i]);
2793 fflush (stderr);
2796 current_lto_file = lto_obj_file_open (fnames[i], false);
2797 if (!current_lto_file)
2798 break;
2800 file_data = lto_file_read (current_lto_file, resolution, &count);
2801 if (!file_data)
2803 lto_obj_file_close (current_lto_file);
2804 free (current_lto_file);
2805 current_lto_file = NULL;
2806 break;
2809 decl_data[last_file_ix++] = file_data;
2811 lto_obj_file_close (current_lto_file);
2812 free (current_lto_file);
2813 current_lto_file = NULL;
2816 lto_flatten_files (decl_data, count, last_file_ix);
2817 lto_stats.num_input_files = count;
2818 ggc_free(decl_data);
2819 real_file_decl_data = NULL;
2821 if (resolution_file_name)
2822 fclose (resolution);
2824 /* Show the LTO report before launching LTRANS. */
2825 if (flag_lto_report || (flag_wpa && flag_lto_report_wpa))
2826 print_lto_report_1 ();
2828 /* Free gimple type merging datastructures. */
2829 delete tree_scc_hash;
2830 tree_scc_hash = NULL;
2831 obstack_free (&tree_scc_hash_obstack, NULL);
2832 htab_delete (gimple_canonical_types);
2833 gimple_canonical_types = NULL;
2834 delete canonical_type_hash_cache;
2835 canonical_type_hash_cache = NULL;
2837 /* At this stage we know that majority of GGC memory is reachable.
2838 Growing the limits prevents unnecesary invocation of GGC. */
2839 ggc_grow ();
2840 ggc_collect ();
2842 /* Set the hooks so that all of the ipa passes can read in their data. */
2843 lto_set_in_hooks (all_file_decl_data, get_section_data, free_section_data);
2845 timevar_pop (TV_IPA_LTO_DECL_IN);
2847 if (!quiet_flag)
2848 fprintf (stderr, "\nReading the callgraph\n");
2850 timevar_push (TV_IPA_LTO_CGRAPH_IO);
2851 /* Read the symtab. */
2852 input_symtab ();
2854 input_offload_tables ();
2856 /* Store resolutions into the symbol table. */
2858 ld_plugin_symbol_resolution_t *res;
2859 FOR_EACH_SYMBOL (snode)
2860 if (snode->real_symbol_p ()
2861 && snode->lto_file_data
2862 && snode->lto_file_data->resolution_map
2863 && (res = snode->lto_file_data->resolution_map->get (snode->decl)))
2864 snode->resolution = *res;
2865 for (i = 0; all_file_decl_data[i]; i++)
2866 if (all_file_decl_data[i]->resolution_map)
2868 delete all_file_decl_data[i]->resolution_map;
2869 all_file_decl_data[i]->resolution_map = NULL;
2872 timevar_pop (TV_IPA_LTO_CGRAPH_IO);
2874 if (!quiet_flag)
2875 fprintf (stderr, "Merging declarations\n");
2877 timevar_push (TV_IPA_LTO_DECL_MERGE);
2878 /* Merge global decls. In ltrans mode we read merged cgraph, we do not
2879 need to care about resolving symbols again, we only need to replace
2880 duplicated declarations read from the callgraph and from function
2881 sections. */
2882 if (!flag_ltrans)
2884 lto_symtab_merge_decls ();
2886 /* If there were errors during symbol merging bail out, we have no
2887 good way to recover here. */
2888 if (seen_error ())
2889 fatal_error (input_location,
2890 "errors during merging of translation units");
2892 /* Fixup all decls. */
2893 lto_fixup_decls (all_file_decl_data);
2895 if (tree_with_vars)
2896 ggc_free (tree_with_vars);
2897 tree_with_vars = NULL;
2898 ggc_collect ();
2900 timevar_pop (TV_IPA_LTO_DECL_MERGE);
2901 /* Each pass will set the appropriate timer. */
2903 if (!quiet_flag)
2904 fprintf (stderr, "Reading summaries\n");
2906 /* Read the IPA summary data. */
2907 if (flag_ltrans)
2908 ipa_read_optimization_summaries ();
2909 else
2910 ipa_read_summaries ();
2912 for (i = 0; all_file_decl_data[i]; i++)
2914 gcc_assert (all_file_decl_data[i]->symtab_node_encoder);
2915 lto_symtab_encoder_delete (all_file_decl_data[i]->symtab_node_encoder);
2916 all_file_decl_data[i]->symtab_node_encoder = NULL;
2917 lto_free_function_in_decl_state (all_file_decl_data[i]->global_decl_state);
2918 all_file_decl_data[i]->global_decl_state = NULL;
2919 all_file_decl_data[i]->current_decl_state = NULL;
2922 /* Finally merge the cgraph according to the decl merging decisions. */
2923 timevar_push (TV_IPA_LTO_CGRAPH_MERGE);
2924 if (symtab->dump_file)
2926 fprintf (symtab->dump_file, "Before merging:\n");
2927 symtab_node::dump_table (symtab->dump_file);
2929 if (!flag_ltrans)
2931 lto_symtab_merge_symbols ();
2932 /* Removal of unreachable symbols is needed to make verify_symtab to pass;
2933 we are still having duplicated comdat groups containing local statics.
2934 We could also just remove them while merging. */
2935 symtab->remove_unreachable_nodes (dump_file);
2937 ggc_collect ();
2938 symtab->state = IPA_SSA;
2939 /* FIXME: Technically all node removals happening here are useless, because
2940 WPA should not stream them. */
2941 if (flag_ltrans)
2942 symtab->remove_unreachable_nodes (dump_file);
2944 timevar_pop (TV_IPA_LTO_CGRAPH_MERGE);
2946 /* Indicate that the cgraph is built and ready. */
2947 symtab->function_flags_ready = true;
2949 ggc_free (all_file_decl_data);
2950 all_file_decl_data = NULL;
2954 /* Materialize all the bodies for all the nodes in the callgraph. */
2956 static void
2957 materialize_cgraph (void)
2959 struct cgraph_node *node;
2960 timevar_id_t lto_timer;
2962 if (!quiet_flag)
2963 fprintf (stderr,
2964 flag_wpa ? "Materializing decls:" : "Reading function bodies:");
2967 FOR_EACH_FUNCTION (node)
2969 if (node->lto_file_data)
2971 lto_materialize_function (node);
2972 lto_stats.num_input_cgraph_nodes++;
2977 /* Start the appropriate timer depending on the mode that we are
2978 operating in. */
2979 lto_timer = (flag_wpa) ? TV_WHOPR_WPA
2980 : (flag_ltrans) ? TV_WHOPR_LTRANS
2981 : TV_LTO;
2982 timevar_push (lto_timer);
2984 current_function_decl = NULL;
2985 set_cfun (NULL);
2987 if (!quiet_flag)
2988 fprintf (stderr, "\n");
2990 timevar_pop (lto_timer);
2994 /* Show various memory usage statistics related to LTO. */
2995 static void
2996 print_lto_report_1 (void)
2998 const char *pfx = (flag_lto) ? "LTO" : (flag_wpa) ? "WPA" : "LTRANS";
2999 fprintf (stderr, "%s statistics\n", pfx);
3001 fprintf (stderr, "[%s] read %lu SCCs of average size %f\n",
3002 pfx, num_sccs_read, total_scc_size / (double)num_sccs_read);
3003 fprintf (stderr, "[%s] %lu tree bodies read in total\n", pfx, total_scc_size);
3004 if (flag_wpa && tree_scc_hash)
3006 fprintf (stderr, "[%s] tree SCC table: size %ld, %ld elements, "
3007 "collision ratio: %f\n", pfx,
3008 (long) tree_scc_hash->size (),
3009 (long) tree_scc_hash->elements (),
3010 tree_scc_hash->collisions ());
3011 hash_table<tree_scc_hasher>::iterator hiter;
3012 tree_scc *scc, *max_scc = NULL;
3013 unsigned max_length = 0;
3014 FOR_EACH_HASH_TABLE_ELEMENT (*tree_scc_hash, scc, x, hiter)
3016 unsigned length = 0;
3017 tree_scc *s = scc;
3018 for (; s; s = s->next)
3019 length++;
3020 if (length > max_length)
3022 max_length = length;
3023 max_scc = scc;
3026 fprintf (stderr, "[%s] tree SCC max chain length %u (size %u)\n",
3027 pfx, max_length, max_scc->len);
3028 fprintf (stderr, "[%s] Compared %lu SCCs, %lu collisions (%f)\n", pfx,
3029 num_scc_compares, num_scc_compare_collisions,
3030 num_scc_compare_collisions / (double) num_scc_compares);
3031 fprintf (stderr, "[%s] Merged %lu SCCs\n", pfx, num_sccs_merged);
3032 fprintf (stderr, "[%s] Merged %lu tree bodies\n", pfx,
3033 total_scc_size_merged);
3034 fprintf (stderr, "[%s] Merged %lu types\n", pfx, num_merged_types);
3035 fprintf (stderr, "[%s] %lu types prevailed (%lu associated trees)\n",
3036 pfx, num_prevailing_types, num_type_scc_trees);
3037 fprintf (stderr, "[%s] GIMPLE canonical type table: size %ld, "
3038 "%ld elements, %ld searches, %ld collisions (ratio: %f)\n", pfx,
3039 (long) htab_size (gimple_canonical_types),
3040 (long) htab_elements (gimple_canonical_types),
3041 (long) gimple_canonical_types->searches,
3042 (long) gimple_canonical_types->collisions,
3043 htab_collisions (gimple_canonical_types));
3044 fprintf (stderr, "[%s] GIMPLE canonical type pointer-map: "
3045 "%lu elements, %ld searches\n", pfx,
3046 num_canonical_type_hash_entries,
3047 num_canonical_type_hash_queries);
3050 print_lto_report (pfx);
3053 /* Perform whole program analysis (WPA) on the callgraph and write out the
3054 optimization plan. */
3056 static void
3057 do_whole_program_analysis (void)
3059 symtab_node *node;
3061 lto_parallelism = 1;
3063 /* TODO: jobserver communicatoin is not supported, yet. */
3064 if (!strcmp (flag_wpa, "jobserver"))
3065 lto_parallelism = -1;
3066 else
3068 lto_parallelism = atoi (flag_wpa);
3069 if (lto_parallelism <= 0)
3070 lto_parallelism = 0;
3073 timevar_start (TV_PHASE_OPT_GEN);
3075 /* Note that since we are in WPA mode, materialize_cgraph will not
3076 actually read in all the function bodies. It only materializes
3077 the decls and cgraph nodes so that analysis can be performed. */
3078 materialize_cgraph ();
3080 /* Reading in the cgraph uses different timers, start timing WPA now. */
3081 timevar_push (TV_WHOPR_WPA);
3083 if (pre_ipa_mem_report)
3085 fprintf (stderr, "Memory consumption before IPA\n");
3086 dump_memory_report (false);
3089 symtab->function_flags_ready = true;
3091 if (symtab->dump_file)
3092 symtab_node::dump_table (symtab->dump_file);
3093 bitmap_obstack_initialize (NULL);
3094 symtab->state = IPA_SSA;
3096 execute_ipa_pass_list (g->get_passes ()->all_regular_ipa_passes);
3098 if (symtab->dump_file)
3100 fprintf (symtab->dump_file, "Optimized ");
3101 symtab_node::dump_table (symtab->dump_file);
3103 #ifdef ENABLE_CHECKING
3104 symtab_node::verify_symtab_nodes ();
3105 #endif
3106 bitmap_obstack_release (NULL);
3108 /* We are about to launch the final LTRANS phase, stop the WPA timer. */
3109 timevar_pop (TV_WHOPR_WPA);
3111 timevar_push (TV_WHOPR_PARTITIONING);
3112 if (flag_lto_partition == LTO_PARTITION_1TO1)
3113 lto_1_to_1_map ();
3114 else if (flag_lto_partition == LTO_PARTITION_MAX)
3115 lto_max_map ();
3116 else if (flag_lto_partition == LTO_PARTITION_ONE)
3117 lto_balanced_map (1);
3118 else if (flag_lto_partition == LTO_PARTITION_BALANCED)
3119 lto_balanced_map (PARAM_VALUE (PARAM_LTO_PARTITIONS));
3120 else
3121 gcc_unreachable ();
3123 /* Inline summaries are needed for balanced partitioning. Free them now so
3124 the memory can be used for streamer caches. */
3125 inline_free_summary ();
3127 /* AUX pointers are used by partitioning code to bookkeep number of
3128 partitions symbol is in. This is no longer needed. */
3129 FOR_EACH_SYMBOL (node)
3130 node->aux = NULL;
3132 lto_stats.num_cgraph_partitions += ltrans_partitions.length ();
3134 /* Find out statics that need to be promoted
3135 to globals with hidden visibility because they are accessed from multiple
3136 partitions. */
3137 lto_promote_cross_file_statics ();
3138 timevar_pop (TV_WHOPR_PARTITIONING);
3140 timevar_stop (TV_PHASE_OPT_GEN);
3142 /* Collect a last time - in lto_wpa_write_files we may end up forking
3143 with the idea that this doesn't increase memory usage. So we
3144 absoultely do not want to collect after that. */
3145 ggc_collect ();
3147 timevar_start (TV_PHASE_STREAM_OUT);
3148 if (!quiet_flag)
3150 fprintf (stderr, "\nStreaming out");
3151 fflush (stderr);
3153 lto_wpa_write_files ();
3154 if (!quiet_flag)
3155 fprintf (stderr, "\n");
3156 timevar_stop (TV_PHASE_STREAM_OUT);
3158 if (post_ipa_mem_report)
3160 fprintf (stderr, "Memory consumption after IPA\n");
3161 dump_memory_report (false);
3164 /* Show the LTO report before launching LTRANS. */
3165 if (flag_lto_report || (flag_wpa && flag_lto_report_wpa))
3166 print_lto_report_1 ();
3167 if (mem_report_wpa)
3168 dump_memory_report (true);
3172 static GTY(()) tree lto_eh_personality_decl;
3174 /* Return the LTO personality function decl. */
3176 tree
3177 lto_eh_personality (void)
3179 if (!lto_eh_personality_decl)
3181 /* Use the first personality DECL for our personality if we don't
3182 support multiple ones. This ensures that we don't artificially
3183 create the need for them in a single-language program. */
3184 if (first_personality_decl && !dwarf2out_do_cfi_asm ())
3185 lto_eh_personality_decl = first_personality_decl;
3186 else
3187 lto_eh_personality_decl = lhd_gcc_personality ();
3190 return lto_eh_personality_decl;
3193 /* Set the process name based on the LTO mode. */
3195 static void
3196 lto_process_name (void)
3198 if (flag_lto)
3199 setproctitle ("lto1-lto");
3200 if (flag_wpa)
3201 setproctitle ("lto1-wpa");
3202 if (flag_ltrans)
3203 setproctitle ("lto1-ltrans");
3207 /* Initialize the LTO front end. */
3209 static void
3210 lto_init (void)
3212 lto_process_name ();
3213 lto_streamer_hooks_init ();
3214 lto_reader_init ();
3215 lto_set_in_hooks (NULL, get_section_data, free_section_data);
3216 memset (&lto_stats, 0, sizeof (lto_stats));
3217 bitmap_obstack_initialize (NULL);
3218 gimple_register_cfg_hooks ();
3219 #ifndef ACCEL_COMPILER
3220 unsigned char *table
3221 = ggc_vec_alloc<unsigned char> (MAX_MACHINE_MODE);
3222 for (int m = 0; m < MAX_MACHINE_MODE; m++)
3223 table[m] = m;
3224 lto_mode_identity_table = table;
3225 #endif
3229 /* Main entry point for the GIMPLE front end. This front end has
3230 three main personalities:
3232 - LTO (-flto). All the object files on the command line are
3233 loaded in memory and processed as a single translation unit.
3234 This is the traditional link-time optimization behavior.
3236 - WPA (-fwpa). Only the callgraph and summary information for
3237 files in the command file are loaded. A single callgraph
3238 (without function bodies) is instantiated for the whole set of
3239 files. IPA passes are only allowed to analyze the call graph
3240 and make transformation decisions. The callgraph is
3241 partitioned, each partition is written to a new object file
3242 together with the transformation decisions.
3244 - LTRANS (-fltrans). Similar to -flto but it prevents the IPA
3245 summary files from running again. Since WPA computed summary
3246 information and decided what transformations to apply, LTRANS
3247 simply applies them. */
3249 void
3250 lto_main (void)
3252 /* LTO is called as a front end, even though it is not a front end.
3253 Because it is called as a front end, TV_PHASE_PARSING and
3254 TV_PARSE_GLOBAL are active, and we need to turn them off while
3255 doing LTO. Later we turn them back on so they are active up in
3256 toplev.c. */
3257 timevar_pop (TV_PARSE_GLOBAL);
3258 timevar_stop (TV_PHASE_PARSING);
3260 timevar_start (TV_PHASE_SETUP);
3262 /* Initialize the LTO front end. */
3263 lto_init ();
3265 timevar_stop (TV_PHASE_SETUP);
3266 timevar_start (TV_PHASE_STREAM_IN);
3268 /* Read all the symbols and call graph from all the files in the
3269 command line. */
3270 read_cgraph_and_symbols (num_in_fnames, in_fnames);
3272 timevar_stop (TV_PHASE_STREAM_IN);
3274 if (!seen_error ())
3276 /* If WPA is enabled analyze the whole call graph and create an
3277 optimization plan. Otherwise, read in all the function
3278 bodies and continue with optimization. */
3279 if (flag_wpa)
3280 do_whole_program_analysis ();
3281 else
3283 timevar_start (TV_PHASE_OPT_GEN);
3285 materialize_cgraph ();
3286 if (!flag_ltrans)
3287 lto_promote_statics_nonwpa ();
3289 /* Let the middle end know that we have read and merged all of
3290 the input files. */
3291 symtab->compile ();
3293 timevar_stop (TV_PHASE_OPT_GEN);
3295 /* FIXME lto, if the processes spawned by WPA fail, we miss
3296 the chance to print WPA's report, so WPA will call
3297 print_lto_report before launching LTRANS. If LTRANS was
3298 launched directly by the driver we would not need to do
3299 this. */
3300 if (flag_lto_report || (flag_wpa && flag_lto_report_wpa))
3301 print_lto_report_1 ();
3305 /* Here we make LTO pretend to be a parser. */
3306 timevar_start (TV_PHASE_PARSING);
3307 timevar_push (TV_PARSE_GLOBAL);
3310 #include "gt-lto-lto.h"