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
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
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/>. */
23 #include "coretypes.h"
30 #include "fold-const.h"
31 #include "stor-layout.h"
32 #include "diagnostic-core.h"
35 #include "basic-block.h"
36 #include "hard-reg-set.h"
39 #include "tree-ssa-operands.h"
40 #include "tree-pass.h"
41 #include "langhooks.h"
43 #include "alloc-pool.h"
44 #include "symbol-summary.h"
48 #include "tree-ssa-alias.h"
49 #include "internal-fn.h"
50 #include "gimple-expr.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"
61 #include "pass_manager.h"
62 #include "ipa-inline.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. */
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. */
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 */
101 free_with_string (void *arg
)
103 struct lto_section_slot
*s
= (struct lto_section_slot
*)arg
;
105 free (CONST_CAST (char *, s
->name
));
109 /* Create section hash table */
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. */
120 lto_splay_tree_delete_id (splay_tree_key key
)
125 /* Compare splay tree node ids A and B. */
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
;
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. */
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. */
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
);
169 splay_tree_insert (t
, (splay_tree_key
) idp
, (splay_tree_value
) file_data
);
172 /* Create a splay tree. */
175 lto_splay_tree_new (void)
177 return splay_tree_new (lto_splay_tree_compare_ids
,
178 lto_splay_tree_delete_id
,
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). */
186 has_analyzed_clone_p (struct cgraph_node
*node
)
188 struct cgraph_node
*orig
= node
;
197 else if (node
->next_sibling_clone
)
198 node
= node
->next_sibling_clone
;
201 while (node
!= orig
&& !node
->next_sibling_clone
)
202 node
= node
->clone_of
;
204 node
= node
->next_sibling_clone
;
210 /* Read the function body for the function associated with NODE. */
213 lto_materialize_function (struct cgraph_node
*node
)
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. */
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
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
)
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
);
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
,
269 state
->streams
[i
] = decls
;
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. */
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
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
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
)
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
);
375 if (RECORD_OR_UNION_TYPE_P (type
))
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
);
393 /* Returning a hash value for gimple type TYPE combined with VAL. */
396 iterative_hash_canonical_type (tree type
, inchash::hash
&hstate
)
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
);
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
414 v
= hash_canonical_type (type
);
415 gimple_register_canonical_type_1 (type
, v
);
420 /* Returns the hash for a canonical type P. */
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
);
433 /* Returns nonzero if P1 and P2 are equal. */
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. */
447 gimple_register_canonical_type_1 (tree t
, hashval_t hash
)
451 gcc_checking_assert (TYPE_P (t
) && !TYPE_CANONICAL (t
));
453 slot
= htab_find_slot_with_hash (gimple_canonical_types
, t
, hash
, INSERT
);
456 tree new_type
= (tree
)(*slot
);
457 gcc_checking_assert (new_type
!= t
);
458 TYPE_CANONICAL (t
) = new_type
;
462 TYPE_CANONICAL (t
) = 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
482 gimple_register_canonical_type (tree t
)
484 if (TYPE_CANONICAL (t
) || !type_with_alias_set_p (t
))
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
));
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. */
501 lto_register_canonical_types (tree node
, bool 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
);
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) \
526 if ((tt) && VAR_OR_FUNCTION_DECL_P (tt) \
527 && (TREE_PUBLIC (tt) || DECL_EXTERNAL (tt))) \
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. */
537 mentions_vars_p_typed (tree t
)
539 CHECK_NO_VAR (TREE_TYPE (t
));
543 /* Check presence of pointers to decls in fields of a tree_common T. */
546 mentions_vars_p_common (tree t
)
548 if (mentions_vars_p_typed (t
))
550 CHECK_NO_VAR (TREE_CHAIN (t
));
554 /* Check presence of pointers to decls in fields of a decl_minimal T. */
557 mentions_vars_p_decl_minimal (tree t
)
559 if (mentions_vars_p_common (t
))
561 CHECK_NO_VAR (DECL_NAME (t
));
562 CHECK_VAR (DECL_CONTEXT (t
));
566 /* Check presence of pointers to decls in fields of a decl_common T. */
569 mentions_vars_p_decl_common (tree t
)
571 if (mentions_vars_p_decl_minimal (t
))
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
));
581 /* Check presence of pointers to decls in fields of a decl_with_vis T. */
584 mentions_vars_p_decl_with_vis (tree t
)
586 if (mentions_vars_p_decl_common (t
))
589 /* Accessor macro has side-effects, use field-name here. */
590 CHECK_NO_VAR (t
->decl_with_vis
.assembler_name
);
594 /* Check presence of pointers to decls in fields of a decl_non_common T. */
597 mentions_vars_p_decl_non_common (tree t
)
599 if (mentions_vars_p_decl_with_vis (t
))
601 CHECK_NO_VAR (DECL_RESULT_FLD (t
));
605 /* Check presence of pointers to decls in fields of a decl_non_common T. */
608 mentions_vars_p_function (tree t
)
610 if (mentions_vars_p_decl_non_common (t
))
612 CHECK_NO_VAR (DECL_ARGUMENTS (t
));
613 CHECK_NO_VAR (DECL_VINDEX (t
));
614 CHECK_VAR (DECL_FUNCTION_PERSONALITY (t
));
618 /* Check presence of pointers to decls in fields of a field_decl T. */
621 mentions_vars_p_field_decl (tree t
)
623 if (mentions_vars_p_decl_common (t
))
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
));
633 /* Check presence of pointers to decls in fields of a type T. */
636 mentions_vars_p_type (tree t
)
638 if (mentions_vars_p_common (t
))
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
));
659 /* Check presence of pointers to decls in fields of a BINFO T. */
662 mentions_vars_p_binfo (tree t
)
664 unsigned HOST_WIDE_INT i
, n
;
666 if (mentions_vars_p_common (t
))
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
));
683 /* Check presence of pointers to decls in fields of a CONSTRUCTOR T. */
686 mentions_vars_p_constructor (tree t
)
688 unsigned HOST_WIDE_INT idx
;
691 if (mentions_vars_p_typed (t
))
694 for (idx
= 0; vec_safe_iterate (CONSTRUCTOR_ELTS (t
), idx
, &ce
); idx
++)
696 CHECK_NO_VAR (ce
->index
);
697 CHECK_VAR (ce
->value
);
702 /* Check presence of pointers to decls in fields of an expression tree T. */
705 mentions_vars_p_expr (tree t
)
708 if (mentions_vars_p_typed (t
))
710 for (i
= TREE_OPERAND_LENGTH (t
) - 1; i
>= 0; --i
)
711 CHECK_VAR (TREE_OPERAND (t
, i
));
715 /* Check presence of pointers to decls in fields of an OMP_CLAUSE T. */
718 mentions_vars_p_omp_clause (tree t
)
721 if (mentions_vars_p_common (t
))
723 for (i
= omp_clause_num_ops
[OMP_CLAUSE_CODE (t
)] - 1; i
>= 0; --i
)
724 CHECK_VAR (OMP_CLAUSE_OPERAND (t
, i
));
728 /* Check presence of pointers to decls that needs later fixup in T. */
731 mentions_vars_p (tree t
)
733 switch (TREE_CODE (t
))
735 case IDENTIFIER_NODE
:
739 CHECK_VAR (TREE_VALUE (t
));
740 CHECK_VAR (TREE_PURPOSE (t
));
741 CHECK_NO_VAR (TREE_CHAIN (t
));
745 return mentions_vars_p_field_decl (t
);
754 return mentions_vars_p_decl_common (t
);
757 return mentions_vars_p_decl_with_vis (t
);
760 return mentions_vars_p_decl_non_common (t
);
763 return mentions_vars_p_function (t
);
766 return mentions_vars_p_binfo (t
);
768 case PLACEHOLDER_EXPR
:
769 return mentions_vars_p_common (t
);
772 case TRANSLATION_UNIT_DECL
:
773 case OPTIMIZATION_NODE
:
774 case TARGET_OPTION_NODE
:
778 return mentions_vars_p_constructor (t
);
781 return mentions_vars_p_omp_clause (t
);
786 if (mentions_vars_p_type (t
))
791 if (mentions_vars_p_expr (t
))
794 else if (CONSTANT_CLASS_P (t
))
795 CHECK_NO_VAR (TREE_TYPE (t
));
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
)
816 ret
= data_in
->globals_resolution
[index
];
820 /* Delay resolution finding until decl merging. */
824 /* We need to record resolutions until symbol table is read. */
826 register_resolution (struct lto_file_decl_data
*file_data
, tree decl
,
827 enum ld_plugin_symbol_resolution resolution
)
829 if (resolution
== LDPR_UNKNOWN
)
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
842 lto_register_var_decl_in_symtab (struct data_in
*data_in
, tree decl
,
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
867 lto_register_function_decl_in_symtab (struct data_in
*data_in
, tree decl
,
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. */
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
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. */
922 /* Hash of the whole SCC. */
924 /* Number of trees in the SCC. */
926 /* Number of possible entries into the SCC (tree nodes [0..entry_len-1]
927 which share the same individual tree hash). */
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
933 ??? For prevailing SCCs we really only need hash and the first
934 entry candidate, but that's too awkward to implement. */
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
*);
945 tree_scc_hasher::hash (const tree_scc
*scc
)
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
)
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. */
980 compare_tree_sccs_1 (tree t1
, tree t2
, tree
**map
)
984 /* Mark already visited nodes. */
985 TREE_ASM_WRITTEN (t2
) = 1;
987 /* Push the pair onto map. */
992 /* Compare value-fields. */
993 #define compare_values(X) \
995 if (X(t1) != X(t2)) \
999 compare_values (TREE_CODE
);
1000 code
= TREE_CODE (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
);
1012 compare_values (DECL_UNSIGNED
);
1013 else if (TYPE_P (t1
))
1014 compare_values (TYPE_UNSIGNED
);
1016 compare_values (TYPE_ARTIFICIAL
);
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
);
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
))
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
);
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
)
1051 for (unsigned i
= 0; i
< SIGSZ
; ++i
)
1052 if (r1
.sig
[i
] != r2
.sig
[i
])
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
)))
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
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
))
1180 if (CODE_CONTAINS_STRUCT (code
, TS_TRANSLATION_UNIT_DECL
))
1181 if (strcmp (TRANSLATION_UNIT_LANGUAGE (t1
),
1182 TRANSLATION_UNIT_LANGUAGE (t2
)) != 0)
1185 if (CODE_CONTAINS_STRUCT (code
, TS_TARGET_OPTION
))
1186 if (!cl_target_option_eq (TREE_TARGET_OPTION (t1
), TREE_TARGET_OPTION (t2
)))
1189 if (CODE_CONTAINS_STRUCT (code
, TS_OPTIMIZATION
))
1190 if (memcmp (TREE_OPTIMIZATION (t1
), TREE_OPTIMIZATION (t2
),
1191 sizeof (struct cl_optimization
)) != 0)
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
)))
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)
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)
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
);
1222 case OMP_CLAUSE_SCHEDULE
:
1223 compare_values (OMP_CLAUSE_SCHEDULE_KIND
);
1225 case OMP_CLAUSE_DEPEND
:
1226 compare_values (OMP_CLAUSE_DEPEND_KIND
);
1228 case OMP_CLAUSE_MAP
:
1229 compare_values (OMP_CLAUSE_MAP_KIND
);
1231 case OMP_CLAUSE_PROC_BIND
:
1232 compare_values (OMP_CLAUSE_PROC_BIND_KIND
);
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
);
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) \
1256 tree t1_ = (E1), t2_ = (E2); \
1259 || !TREE_VISITED (t2_) \
1260 || (!TREE_ASM_WRITTEN (t2_) \
1261 && !compare_tree_sccs_1 (t1_, t2_, map)))) \
1263 /* Only non-NULL trees outside of the SCC may compare equal. */ \
1264 gcc_checking_assert (t1_ != t2_ || (!t2_ || !TREE_VISITED (t2_))); \
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
))
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
))
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
)
1329 for (a1
= DECL_ARGUMENTS (t1
), a2
= DECL_ARGUMENTS (t2
);
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
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
1383 if (TYPE_FILE_SCOPE_P (t1
) && TYPE_FILE_SCOPE_P (t2
))
1386 compare_tree_edges (TYPE_CONTEXT (t1
), TYPE_CONTEXT (t2
));
1387 /* TYPE_CANONICAL is re-computed during type merging, so do not
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
))
1401 for (f1
= TYPE_FIELDS (t1
), f2
= TYPE_FIELDS (t2
);
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
))
1437 if (CODE_CONTAINS_STRUCT (code
, TS_BINFO
))
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
))
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
)
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
1480 /* Compare the tree scc SCC to the prevailing candidate PSCC, filling
1481 out MAP if they are equal. */
1484 compare_tree_sccs (tree_scc
*pscc
, tree_scc
*scc
,
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
1491 for (unsigned i
= 0; i
< pscc
->entry_len
; ++i
)
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. */
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;
1510 /* QSort sort function to sort a map of two pointers after the 2nd
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_
));
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. */
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
;
1534 = (tree_scc
*) alloca (sizeof (tree_scc
) + (len
- 1) * sizeof (tree
));
1536 scc
->hash
= scc_hash
;
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. */
1556 /* Look for the list of candidate SCCs to compare against. */
1558 slot
= tree_scc_hash
->find_slot_with_hash (scc
, scc_hash
, INSERT
);
1561 /* Try unifying against each candidate. */
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
))
1582 /* Found an equal SCC. */
1584 num_scc_compare_collisions
--;
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
));
1602 /* Fixup the streamer cache with the prevailing nodes according
1603 to the tree node mapping computed by compare_tree_sccs. */
1605 streamer_tree_cache_replace_tree (cache
, pscc
->entries
[0], from
);
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
]))
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
]);
1637 /* Reset TREE_VISITED if we didn't unify the SCC with another. */
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. */
1648 = XOBNEWVAR (&tree_scc_hash_obstack
, tree_scc
, sizeof (tree_scc
));
1649 memcpy (pscc
, scc
, sizeof (tree_scc
));
1650 pscc
->next
= (*slot
);
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). */
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
;
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
)
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
)
1693 unsigned scc_entry_len
;
1694 hashval_t scc_hash
= lto_input_scc (&ib_main
, data_in
, &len_
,
1696 unsigned len
= data_in
->reader_cache
->nodes
.length () - from
;
1697 gcc_assert (len
== len_
);
1699 total_scc_size
+= len
;
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
,
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
)))
1714 /* Try to unify the SCC with already existing ones. */
1716 && unify_scc (data_in
, from
,
1717 len
, scc_entry_len
, scc_hash
))
1720 /* Tree merging failed, mark entries in location cache as
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
,
1729 /* Reconstruct the type variant and pointer-to/reference-to
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
);
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. */
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
));
1762 /* Register variables and functions with the
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
);
1776 num_type_scc_trees
+= len
;
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
);
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
);
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. */
1825 lto_parse_hex (const char *p
)
1829 for (; *p
!= '\0'; ++p
)
1834 if (c
>= '0' && c
<= '9')
1836 else if (c
>= 'a' && c
<= 'f')
1837 part
= c
- 'a' + 10;
1838 else if (c
>= 'A' && c
<= 'F')
1839 part
= c
- 'A' + 10;
1841 internal_error ("could not parse hex number");
1848 /* Read resolution for file named FILE_NAME. The resolution is read from
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
;
1858 unsigned int num_symbols
;
1860 struct lto_file_decl_data
*file_data
;
1861 splay_tree_node nd
= NULL
;
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)
1880 t
= fscanf (resolution
, "@0x%16s", offset_p
);
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");
1890 fscanf (resolution
, "%u", &num_symbols
);
1892 for (i
= 0; i
< num_symbols
; i
++)
1896 unsigned HOST_WIDE_INT id
;
1898 enum ld_plugin_symbol_resolution r
= (enum ld_plugin_symbol_resolution
) 0;
1900 unsigned int lto_resolution_str_len
=
1901 sizeof (lto_resolution_str
) / sizeof (char *);
1904 t
= fscanf (resolution
, "%u " HOST_WIDE_INT_PRINT_HEX_PURE
" %26s %*[^\n]\n",
1905 &index
, &id
, r_str
);
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
;
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
);
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. */
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? */
1947 lto_section_with_id (const char *name
, unsigned HOST_WIDE_INT
*id
)
1951 if (strncmp (name
, section_name_prefix
, strlen (section_name_prefix
)))
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 */
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
;
1968 struct lto_file_decl_data
*file_data
;
1970 if (!lto_section_with_id (ls
->name
, &id
))
1973 /* Find hash table of sub module id */
1974 nd
= lto_splay_tree_lookup (file_ids
, id
);
1977 file_data
= (struct lto_file_decl_data
*)nd
->value
;
1981 file_data
= ggc_alloc
<lto_file_decl_data
> ();
1982 memset(file_data
, 0, sizeof (struct lto_file_decl_data
));
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 */
1989 list
->first
= file_data
;
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
;
2007 /* Read declarations and other initializations for a FILE_DATA. */
2010 lto_file_finalize (struct lto_file_decl_data
*file_data
, lto_file
*file
)
2014 vec
<ld_plugin_symbol_resolution_t
>
2015 resolutions
= vNULL
;
2019 /* Create vector for fast access of resolution. We do this lazily
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
);
2031 file_data
->mode_table
= lto_mode_identity_table
;
2033 data
= lto_get_section_data (file_data
, LTO_section_decls
, NULL
, &len
);
2036 internal_error ("cannot read LTO decls from %s", file_data
->file_name
);
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. */
2047 lto_create_files_from_ids (lto_file
*file
, struct lto_file_decl_data
*file_data
,
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
);
2059 /* Generate a TREE representation for all types and external decls
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 (§ion_list
, 0, sizeof (struct lto_section_list
));
2077 section_hash_table
= lto_obj_build_section_table (file
, §ion_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
2104 /* Page size of machine is used for mmap and munmap calls. */
2105 static size_t page_mask
;
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. */
2113 lto_read_section_data (struct lto_file_decl_data
*file_data
,
2114 intptr_t offset
, size_t len
)
2118 static char *fd_name
;
2120 intptr_t computed_len
;
2121 intptr_t computed_offset
;
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. */
2131 && filename_cmp (fd_name
, file_data
->file_name
) != 0)
2139 fd
= open (file_data
->file_name
, O_RDONLY
|O_BINARY
);
2142 fatal_error (input_location
, "Cannot open %s", file_data
->file_name
);
2145 fd_name
= xstrdup (file_data
->file_name
);
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
);
2167 return result
+ diff
;
2169 result
= (char *) xmalloc (len
);
2170 if (lseek (fd
, offset
, SEEK_SET
) != offset
2171 || read (fd
, result
, len
) != (ssize_t
) len
)
2174 fatal_error (input_location
, "Cannot read %s", file_data
->file_name
);
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. */
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
2196 get_section_data (struct lto_file_decl_data
*file_data
,
2197 enum lto_section_type section_type
,
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
);
2208 s_slot
.name
= section_name
;
2209 f_slot
= (struct lto_section_slot
*) htab_find (section_hash_table
, &s_slot
);
2212 data
= lto_read_section_data (file_data
, f_slot
->start
, f_slot
->len
);
2216 free (CONST_CAST (char *, section_name
));
2221 /* Free the section data from FILE_DATA of SECTION_TYPE with NAME that
2222 starts at OFFSET and has LEN bytes. */
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
)
2231 intptr_t computed_len
;
2232 intptr_t computed_offset
;
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
);
2243 free (CONST_CAST(char *, offset
));
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. */
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. */
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. */
2284 do_stream_out (char *temp_filename
, lto_symtab_encoder_t encoder
)
2286 lto_file
*file
= lto_obj_file_open (temp_filename
, true);
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
);
2298 /* Wait for forked process and signal errors. */
2299 #ifdef HAVE_WORKING_FORK
2307 #define WCONTINUED 0
2309 int w
= waitpid (0, &status
, WUNTRACED
| WCONTINUED
);
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
));
2323 /* Stream out ENCODER into TEMP_FILENAME
2324 Fork if that seems to help. */
2327 stream_out (char *temp_filename
, lto_symtab_encoder_t encoder
,
2328 bool ARG_UNUSED (last
))
2330 #ifdef HAVE_WORKING_FORK
2333 if (lto_parallelism
<= 1)
2335 do_stream_out (temp_filename
, encoder
);
2339 /* Do not run more than LTO_PARALLELISM streamings
2340 FIXME: we ignore limits on jobserver. */
2341 if (lto_parallelism
> 0 && nruns
>= lto_parallelism
)
2346 /* If this is not the last parallel partition, execute new
2347 streaming process. */
2350 pid_t cpid
= fork ();
2354 setproctitle ("lto1-wpa-streaming");
2355 do_stream_out (temp_filename
, encoder
);
2358 /* Fork failed; lets do the job ourseleves. */
2359 else if (cpid
== -1)
2360 do_stream_out (temp_filename
, encoder
);
2364 /* Last partition; stream it and wait for all children to die. */
2368 do_stream_out (temp_filename
, encoder
);
2369 for (i
= 0; i
< nruns
; i
++)
2372 asm_nodes_output
= true;
2374 do_stream_out (temp_filename
, encoder
);
2378 /* Write all output files in WPA mode and the file with the list of
2382 lto_wpa_write_files (void)
2385 ltrans_partition part
;
2386 FILE *ltrans_output_list_stream
;
2387 char *temp_filename
;
2388 vec
<char *>temp_filenames
= vNULL
;
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,
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
);
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
);
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
);
2457 && lto_symtab_encoder_encode_body_p (part
->encoder
, cnode
))
2458 fprintf (symtab
->dump_file
, "(body included)");
2461 varpool_node
*vnode
= dyn_cast
<varpool_node
*> (node
);
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) \
2511 if ((tt) && VAR_OR_FUNCTION_DECL_P (tt) \
2512 && (TREE_PUBLIC (tt) || DECL_EXTERNAL (tt))) \
2514 tt = lto_symtab_prevailing_decl (tt); \
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. */
2526 lto_fixup_prevailing_decls (tree t
)
2528 enum tree_code code
= TREE_CODE (t
);
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
));
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
))
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
)
2598 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (t
), i
, val
)
2599 LTO_SET_PREVAIL (val
);
2606 LTO_SET_PREVAIL (TREE_VALUE (t
));
2607 LTO_SET_PREVAIL (TREE_PURPOSE (t
));
2608 LTO_NO_PREVAIL (TREE_PURPOSE (t
));
2614 /* If we fixed nothing, then we missed something seen by
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. */
2625 lto_fixup_state (struct lto_in_decl_state
*state
)
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
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
2653 lto_fixup_decls (struct lto_file_decl_data
**files
)
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. */
2682 lto_flatten_files (struct lto_file_decl_data
**orig
, int count
, int last_file_ix
)
2684 struct lto_file_decl_data
*n
, *next
;
2687 lto_stats
.num_input_files
= count
;
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
;
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
2718 read_cgraph_and_symbols (unsigned nfiles
, const char **fnames
)
2720 unsigned int i
, last_file_ix
;
2723 struct lto_file_decl_data
**decl_data
;
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;
2736 = decl_data
= ggc_cleared_vec_alloc
<lto_file_decl_data_ptr
> (nfiles
+ 1);
2737 real_file_count
= nfiles
;
2739 /* Read the resolution file. */
2741 if (resolution_file_name
)
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);
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
;
2792 fprintf (stderr
, " %s", fnames
[i
]);
2796 current_lto_file
= lto_obj_file_open (fnames
[i
], false);
2797 if (!current_lto_file
)
2800 file_data
= lto_file_read (current_lto_file
, resolution
, &count
);
2803 lto_obj_file_close (current_lto_file
);
2804 free (current_lto_file
);
2805 current_lto_file
= NULL
;
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. */
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
);
2848 fprintf (stderr
, "\nReading the callgraph\n");
2850 timevar_push (TV_IPA_LTO_CGRAPH_IO
);
2851 /* Read the 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
);
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
2884 lto_symtab_merge_decls ();
2886 /* If there were errors during symbol merging bail out, we have no
2887 good way to recover here. */
2889 fatal_error (input_location
,
2890 "errors during merging of translation units");
2892 /* Fixup all decls. */
2893 lto_fixup_decls (all_file_decl_data
);
2896 ggc_free (tree_with_vars
);
2897 tree_with_vars
= NULL
;
2900 timevar_pop (TV_IPA_LTO_DECL_MERGE
);
2901 /* Each pass will set the appropriate timer. */
2904 fprintf (stderr
, "Reading summaries\n");
2906 /* Read the IPA summary data. */
2908 ipa_read_optimization_summaries ();
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
);
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
);
2938 symtab
->state
= IPA_SSA
;
2939 /* FIXME: Technically all node removals happening here are useless, because
2940 WPA should not stream them. */
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. */
2957 materialize_cgraph (void)
2959 struct cgraph_node
*node
;
2960 timevar_id_t lto_timer
;
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
2979 lto_timer
= (flag_wpa
) ? TV_WHOPR_WPA
2980 : (flag_ltrans
) ? TV_WHOPR_LTRANS
2982 timevar_push (lto_timer
);
2984 current_function_decl
= NULL
;
2988 fprintf (stderr
, "\n");
2990 timevar_pop (lto_timer
);
2994 /* Show various memory usage statistics related to LTO. */
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;
3018 for (; s
; s
= s
->next
)
3020 if (length
> max_length
)
3022 max_length
= length
;
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. */
3057 do_whole_program_analysis (void)
3061 lto_parallelism
= 1;
3063 /* TODO: jobserver communicatoin is not supported, yet. */
3064 if (!strcmp (flag_wpa
, "jobserver"))
3065 lto_parallelism
= -1;
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 ();
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
)
3114 else if (flag_lto_partition
== LTO_PARTITION_MAX
)
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
));
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
)
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
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. */
3147 timevar_start (TV_PHASE_STREAM_OUT
);
3150 fprintf (stderr
, "\nStreaming out");
3153 lto_wpa_write_files ();
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 ();
3168 dump_memory_report (true);
3172 static GTY(()) tree lto_eh_personality_decl
;
3174 /* Return the LTO personality function decl. */
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
;
3187 lto_eh_personality_decl
= lhd_gcc_personality ();
3190 return lto_eh_personality_decl
;
3193 /* Set the process name based on the LTO mode. */
3196 lto_process_name (void)
3199 setproctitle ("lto1-lto");
3201 setproctitle ("lto1-wpa");
3203 setproctitle ("lto1-ltrans");
3207 /* Initialize the LTO front end. */
3212 lto_process_name ();
3213 lto_streamer_hooks_init ();
3215 lto_set_in_hooks (NULL
, get_section_data
, free_section_data
);
3216 memset (<o_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
++)
3224 lto_mode_identity_table
= table
;
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. */
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
3257 timevar_pop (TV_PARSE_GLOBAL
);
3258 timevar_stop (TV_PHASE_PARSING
);
3260 timevar_start (TV_PHASE_SETUP
);
3262 /* Initialize the LTO front end. */
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
3270 read_cgraph_and_symbols (num_in_fnames
, in_fnames
);
3272 timevar_stop (TV_PHASE_STREAM_IN
);
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. */
3280 do_whole_program_analysis ();
3283 timevar_start (TV_PHASE_OPT_GEN
);
3285 materialize_cgraph ();
3287 lto_promote_statics_nonwpa ();
3289 /* Let the middle end know that we have read and merged all of
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
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"