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"
31 #include "basic-block.h"
34 #include "hard-reg-set.h"
36 #include "fold-const.h"
37 #include "stor-layout.h"
38 #include "diagnostic-core.h"
40 #include "tree-ssa-operands.h"
41 #include "tree-pass.h"
42 #include "langhooks.h"
43 #include "alloc-pool.h"
44 #include "symbol-summary.h"
48 #include "internal-fn.h"
51 #include "tree-streamer.h"
52 #include "lto-section-names.h"
53 #include "splay-tree.h"
54 #include "lto-partition.h"
56 #include "pass_manager.h"
57 #include "ipa-inline.h"
59 #include "ipa-utils.h"
60 #include "gomp-constants.h"
63 /* Number of parallel tasks to run, -1 if we want to use GNU Make jobserver. */
64 static int lto_parallelism
;
66 static GTY(()) tree first_personality_decl
;
68 static GTY(()) const unsigned char *lto_mode_identity_table
;
70 /* Returns a hash code for P. */
73 hash_name (const void *p
)
75 const struct lto_section_slot
*ds
= (const struct lto_section_slot
*) p
;
76 return (hashval_t
) htab_hash_string (ds
->name
);
80 /* Returns nonzero if P1 and P2 are equal. */
83 eq_name (const void *p1
, const void *p2
)
85 const struct lto_section_slot
*s1
=
86 (const struct lto_section_slot
*) p1
;
87 const struct lto_section_slot
*s2
=
88 (const struct lto_section_slot
*) p2
;
90 return strcmp (s1
->name
, s2
->name
) == 0;
93 /* Free lto_section_slot */
96 free_with_string (void *arg
)
98 struct lto_section_slot
*s
= (struct lto_section_slot
*)arg
;
100 free (CONST_CAST (char *, s
->name
));
104 /* Create section hash table */
107 lto_obj_create_section_hash_table (void)
109 return htab_create (37, hash_name
, eq_name
, free_with_string
);
112 /* Delete an allocated integer KEY in the splay tree. */
115 lto_splay_tree_delete_id (splay_tree_key key
)
120 /* Compare splay tree node ids A and B. */
123 lto_splay_tree_compare_ids (splay_tree_key a
, splay_tree_key b
)
125 unsigned HOST_WIDE_INT ai
;
126 unsigned HOST_WIDE_INT bi
;
128 ai
= *(unsigned HOST_WIDE_INT
*) a
;
129 bi
= *(unsigned HOST_WIDE_INT
*) b
;
138 /* Look up splay tree node by ID in splay tree T. */
140 static splay_tree_node
141 lto_splay_tree_lookup (splay_tree t
, unsigned HOST_WIDE_INT id
)
143 return splay_tree_lookup (t
, (splay_tree_key
) &id
);
146 /* Check if KEY has ID. */
149 lto_splay_tree_id_equal_p (splay_tree_key key
, unsigned HOST_WIDE_INT id
)
151 return *(unsigned HOST_WIDE_INT
*) key
== id
;
154 /* Insert a splay tree node into tree T with ID as key and FILE_DATA as value.
155 The ID is allocated separately because we need HOST_WIDE_INTs which may
156 be wider than a splay_tree_key. */
159 lto_splay_tree_insert (splay_tree t
, unsigned HOST_WIDE_INT id
,
160 struct lto_file_decl_data
*file_data
)
162 unsigned HOST_WIDE_INT
*idp
= XCNEW (unsigned HOST_WIDE_INT
);
164 splay_tree_insert (t
, (splay_tree_key
) idp
, (splay_tree_value
) file_data
);
167 /* Create a splay tree. */
170 lto_splay_tree_new (void)
172 return splay_tree_new (lto_splay_tree_compare_ids
,
173 lto_splay_tree_delete_id
,
177 /* Return true when NODE has a clone that is analyzed (i.e. we need
178 to load its body even if the node itself is not needed). */
181 has_analyzed_clone_p (struct cgraph_node
*node
)
183 struct cgraph_node
*orig
= node
;
192 else if (node
->next_sibling_clone
)
193 node
= node
->next_sibling_clone
;
196 while (node
!= orig
&& !node
->next_sibling_clone
)
197 node
= node
->clone_of
;
199 node
= node
->next_sibling_clone
;
205 /* Read the function body for the function associated with NODE. */
208 lto_materialize_function (struct cgraph_node
*node
)
213 /* Read in functions with body (analyzed nodes)
214 and also functions that are needed to produce virtual clones. */
215 if ((node
->has_gimple_body_p () && node
->analyzed
)
216 || node
->used_as_abstract_origin
217 || has_analyzed_clone_p (node
))
219 /* Clones don't need to be read. */
222 if (DECL_FUNCTION_PERSONALITY (decl
) && !first_personality_decl
)
223 first_personality_decl
= DECL_FUNCTION_PERSONALITY (decl
);
226 /* Let the middle end know about the function. */
227 rest_of_decl_compilation (decl
, 1, 0);
231 /* Decode the content of memory pointed to by DATA in the in decl
232 state object STATE. DATA_IN points to a data_in structure for
233 decoding. Return the address after the decoded object in the
236 static const uint32_t *
237 lto_read_in_decl_state (struct data_in
*data_in
, const uint32_t *data
,
238 struct lto_in_decl_state
*state
)
245 decl
= streamer_tree_cache_get_tree (data_in
->reader_cache
, ix
);
246 if (!VAR_OR_FUNCTION_DECL_P (decl
))
248 gcc_assert (decl
== void_type_node
);
251 state
->fn_decl
= decl
;
253 for (i
= 0; i
< LTO_N_DECL_STREAMS
; i
++)
255 uint32_t size
= *data
++;
256 vec
<tree
, va_gc
> *decls
= NULL
;
257 vec_alloc (decls
, size
);
259 for (j
= 0; j
< size
; j
++)
260 vec_safe_push (decls
,
261 streamer_tree_cache_get_tree (data_in
->reader_cache
,
264 state
->streams
[i
] = decls
;
272 /* Global canonical type table. */
273 static htab_t gimple_canonical_types
;
274 static hash_map
<const_tree
, hashval_t
> *canonical_type_hash_cache
;
275 static unsigned long num_canonical_type_hash_entries
;
276 static unsigned long num_canonical_type_hash_queries
;
278 static void iterative_hash_canonical_type (tree type
, inchash::hash
&hstate
);
279 static hashval_t
gimple_canonical_type_hash (const void *p
);
280 static void gimple_register_canonical_type_1 (tree t
, hashval_t hash
);
282 /* Returning a hash value for gimple type TYPE.
284 The hash value returned is equal for types considered compatible
285 by gimple_canonical_types_compatible_p. */
288 hash_canonical_type (tree type
)
290 inchash::hash hstate
;
293 /* We compute alias sets only for types that needs them.
294 Be sure we do not recurse to something else as we can not hash incomplete
295 types in a way they would have same hash value as compatible complete
297 gcc_checking_assert (type_with_alias_set_p (type
));
299 /* Combine a few common features of types so that types are grouped into
300 smaller sets; when searching for existing matching types to merge,
301 only existing types having the same features as the new type will be
303 code
= tree_code_for_canonical_type_merging (TREE_CODE (type
));
304 hstate
.add_int (code
);
305 hstate
.add_int (TYPE_MODE (type
));
307 /* Incorporate common features of numerical types. */
308 if (INTEGRAL_TYPE_P (type
)
309 || SCALAR_FLOAT_TYPE_P (type
)
310 || FIXED_POINT_TYPE_P (type
)
311 || TREE_CODE (type
) == OFFSET_TYPE
312 || POINTER_TYPE_P (type
))
314 hstate
.add_int (TYPE_PRECISION (type
));
315 if (!type_with_interoperable_signedness (type
))
316 hstate
.add_int (TYPE_UNSIGNED (type
));
319 if (VECTOR_TYPE_P (type
))
321 hstate
.add_int (TYPE_VECTOR_SUBPARTS (type
));
322 hstate
.add_int (TYPE_UNSIGNED (type
));
325 if (TREE_CODE (type
) == COMPLEX_TYPE
)
326 hstate
.add_int (TYPE_UNSIGNED (type
));
328 /* Fortran's C_SIGNED_CHAR is !TYPE_STRING_FLAG but needs to be
329 interoperable with "signed char". Unless all frontends are revisited to
330 agree on these types, we must ignore the flag completely. */
332 /* Fortran standard define C_PTR type that is compatible with every
333 C pointer. For this reason we need to glob all pointers into one.
334 Still pointers in different address spaces are not compatible. */
335 if (POINTER_TYPE_P (type
))
336 hstate
.add_int (TYPE_ADDR_SPACE (TREE_TYPE (type
)));
338 /* For array types hash the domain bounds and the string flag. */
339 if (TREE_CODE (type
) == ARRAY_TYPE
&& TYPE_DOMAIN (type
))
341 hstate
.add_int (TYPE_STRING_FLAG (type
));
342 /* OMP lowering can introduce error_mark_node in place of
343 random local decls in types. */
344 if (TYPE_MIN_VALUE (TYPE_DOMAIN (type
)) != error_mark_node
)
345 inchash::add_expr (TYPE_MIN_VALUE (TYPE_DOMAIN (type
)), hstate
);
346 if (TYPE_MAX_VALUE (TYPE_DOMAIN (type
)) != error_mark_node
)
347 inchash::add_expr (TYPE_MAX_VALUE (TYPE_DOMAIN (type
)), hstate
);
350 /* Recurse for aggregates with a single element type. */
351 if (TREE_CODE (type
) == ARRAY_TYPE
352 || TREE_CODE (type
) == COMPLEX_TYPE
353 || TREE_CODE (type
) == VECTOR_TYPE
)
354 iterative_hash_canonical_type (TREE_TYPE (type
), hstate
);
356 /* Incorporate function return and argument types. */
357 if (TREE_CODE (type
) == FUNCTION_TYPE
|| TREE_CODE (type
) == METHOD_TYPE
)
362 iterative_hash_canonical_type (TREE_TYPE (type
), hstate
);
364 for (p
= TYPE_ARG_TYPES (type
), na
= 0; p
; p
= TREE_CHAIN (p
))
366 iterative_hash_canonical_type (TREE_VALUE (p
), hstate
);
373 if (RECORD_OR_UNION_TYPE_P (type
))
378 for (f
= TYPE_FIELDS (type
), nf
= 0; f
; f
= TREE_CHAIN (f
))
379 if (TREE_CODE (f
) == FIELD_DECL
)
381 iterative_hash_canonical_type (TREE_TYPE (f
), hstate
);
391 /* Returning a hash value for gimple type TYPE combined with VAL. */
394 iterative_hash_canonical_type (tree type
, inchash::hash
&hstate
)
398 /* All type variants have same TYPE_CANONICAL. */
399 type
= TYPE_MAIN_VARIANT (type
);
400 /* An already processed type. */
401 if (TYPE_CANONICAL (type
))
403 type
= TYPE_CANONICAL (type
);
404 v
= gimple_canonical_type_hash (type
);
408 /* Canonical types should not be able to form SCCs by design, this
409 recursion is just because we do not register canonical types in
410 optimal order. To avoid quadratic behavior also register the
412 v
= hash_canonical_type (type
);
413 gimple_register_canonical_type_1 (type
, v
);
418 /* Returns the hash for a canonical type P. */
421 gimple_canonical_type_hash (const void *p
)
423 num_canonical_type_hash_queries
++;
424 hashval_t
*slot
= canonical_type_hash_cache
->get ((const_tree
) p
);
425 gcc_assert (slot
!= NULL
);
431 /* Returns nonzero if P1 and P2 are equal. */
434 gimple_canonical_type_eq (const void *p1
, const void *p2
)
436 const_tree t1
= (const_tree
) p1
;
437 const_tree t2
= (const_tree
) p2
;
438 return gimple_canonical_types_compatible_p (CONST_CAST_TREE (t1
),
439 CONST_CAST_TREE (t2
));
442 /* Main worker for gimple_register_canonical_type. */
445 gimple_register_canonical_type_1 (tree t
, hashval_t hash
)
449 gcc_checking_assert (TYPE_P (t
) && !TYPE_CANONICAL (t
));
451 slot
= htab_find_slot_with_hash (gimple_canonical_types
, t
, hash
, INSERT
);
454 tree new_type
= (tree
)(*slot
);
455 gcc_checking_assert (new_type
!= t
);
456 TYPE_CANONICAL (t
) = new_type
;
460 TYPE_CANONICAL (t
) = t
;
462 /* Cache the just computed hash value. */
463 num_canonical_type_hash_entries
++;
464 bool existed_p
= canonical_type_hash_cache
->put (t
, hash
);
465 gcc_assert (!existed_p
);
469 /* Register type T in the global type table gimple_types and set
470 TYPE_CANONICAL of T accordingly.
471 This is used by LTO to merge structurally equivalent types for
472 type-based aliasing purposes across different TUs and languages.
474 ??? This merging does not exactly match how the tree.c middle-end
475 functions will assign TYPE_CANONICAL when new types are created
476 during optimization (which at least happens for pointer and array
480 gimple_register_canonical_type (tree t
)
482 if (TYPE_CANONICAL (t
) || !type_with_alias_set_p (t
))
485 /* Canonical types are same among all complete variants. */
486 if (TYPE_CANONICAL (TYPE_MAIN_VARIANT (t
)))
487 TYPE_CANONICAL (t
) = TYPE_CANONICAL (TYPE_MAIN_VARIANT (t
));
490 gimple_register_canonical_type_1 (TYPE_MAIN_VARIANT (t
),
491 hash_canonical_type (TYPE_MAIN_VARIANT (t
)));
492 TYPE_CANONICAL (t
) = TYPE_CANONICAL (TYPE_MAIN_VARIANT (t
));
496 /* Re-compute TYPE_CANONICAL for NODE and related types. */
499 lto_register_canonical_types (tree node
, bool first_p
)
506 TYPE_CANONICAL (node
) = NULL_TREE
;
508 if (POINTER_TYPE_P (node
)
509 || TREE_CODE (node
) == COMPLEX_TYPE
510 || TREE_CODE (node
) == ARRAY_TYPE
)
511 lto_register_canonical_types (TREE_TYPE (node
), first_p
);
514 gimple_register_canonical_type (node
);
518 /* Remember trees that contains references to declarations. */
519 static GTY(()) vec
<tree
, va_gc
> *tree_with_vars
;
521 #define CHECK_VAR(tt) \
524 if ((tt) && VAR_OR_FUNCTION_DECL_P (tt) \
525 && (TREE_PUBLIC (tt) || DECL_EXTERNAL (tt))) \
529 #define CHECK_NO_VAR(tt) \
530 gcc_checking_assert (!(tt) || !VAR_OR_FUNCTION_DECL_P (tt))
532 /* Check presence of pointers to decls in fields of a tree_typed T. */
535 mentions_vars_p_typed (tree t
)
537 CHECK_NO_VAR (TREE_TYPE (t
));
541 /* Check presence of pointers to decls in fields of a tree_common T. */
544 mentions_vars_p_common (tree t
)
546 if (mentions_vars_p_typed (t
))
548 CHECK_NO_VAR (TREE_CHAIN (t
));
552 /* Check presence of pointers to decls in fields of a decl_minimal T. */
555 mentions_vars_p_decl_minimal (tree t
)
557 if (mentions_vars_p_common (t
))
559 CHECK_NO_VAR (DECL_NAME (t
));
560 CHECK_VAR (DECL_CONTEXT (t
));
564 /* Check presence of pointers to decls in fields of a decl_common T. */
567 mentions_vars_p_decl_common (tree t
)
569 if (mentions_vars_p_decl_minimal (t
))
571 CHECK_VAR (DECL_SIZE (t
));
572 CHECK_VAR (DECL_SIZE_UNIT (t
));
573 CHECK_VAR (DECL_INITIAL (t
));
574 CHECK_NO_VAR (DECL_ATTRIBUTES (t
));
575 CHECK_VAR (DECL_ABSTRACT_ORIGIN (t
));
579 /* Check presence of pointers to decls in fields of a decl_with_vis T. */
582 mentions_vars_p_decl_with_vis (tree t
)
584 if (mentions_vars_p_decl_common (t
))
587 /* Accessor macro has side-effects, use field-name here. */
588 CHECK_NO_VAR (t
->decl_with_vis
.assembler_name
);
592 /* Check presence of pointers to decls in fields of a decl_non_common T. */
595 mentions_vars_p_decl_non_common (tree t
)
597 if (mentions_vars_p_decl_with_vis (t
))
599 CHECK_NO_VAR (DECL_RESULT_FLD (t
));
603 /* Check presence of pointers to decls in fields of a decl_non_common T. */
606 mentions_vars_p_function (tree t
)
608 if (mentions_vars_p_decl_non_common (t
))
610 CHECK_NO_VAR (DECL_ARGUMENTS (t
));
611 CHECK_NO_VAR (DECL_VINDEX (t
));
612 CHECK_VAR (DECL_FUNCTION_PERSONALITY (t
));
616 /* Check presence of pointers to decls in fields of a field_decl T. */
619 mentions_vars_p_field_decl (tree t
)
621 if (mentions_vars_p_decl_common (t
))
623 CHECK_VAR (DECL_FIELD_OFFSET (t
));
624 CHECK_NO_VAR (DECL_BIT_FIELD_TYPE (t
));
625 CHECK_NO_VAR (DECL_QUALIFIER (t
));
626 CHECK_NO_VAR (DECL_FIELD_BIT_OFFSET (t
));
627 CHECK_NO_VAR (DECL_FCONTEXT (t
));
631 /* Check presence of pointers to decls in fields of a type T. */
634 mentions_vars_p_type (tree t
)
636 if (mentions_vars_p_common (t
))
638 CHECK_NO_VAR (TYPE_CACHED_VALUES (t
));
639 CHECK_VAR (TYPE_SIZE (t
));
640 CHECK_VAR (TYPE_SIZE_UNIT (t
));
641 CHECK_NO_VAR (TYPE_ATTRIBUTES (t
));
642 CHECK_NO_VAR (TYPE_NAME (t
));
644 CHECK_VAR (TYPE_MINVAL (t
));
645 CHECK_VAR (TYPE_MAXVAL (t
));
647 /* Accessor is for derived node types only. */
648 CHECK_NO_VAR (t
->type_non_common
.binfo
);
650 CHECK_VAR (TYPE_CONTEXT (t
));
651 CHECK_NO_VAR (TYPE_CANONICAL (t
));
652 CHECK_NO_VAR (TYPE_MAIN_VARIANT (t
));
653 CHECK_NO_VAR (TYPE_NEXT_VARIANT (t
));
657 /* Check presence of pointers to decls in fields of a BINFO T. */
660 mentions_vars_p_binfo (tree t
)
662 unsigned HOST_WIDE_INT i
, n
;
664 if (mentions_vars_p_common (t
))
666 CHECK_VAR (BINFO_VTABLE (t
));
667 CHECK_NO_VAR (BINFO_OFFSET (t
));
668 CHECK_NO_VAR (BINFO_VIRTUALS (t
));
669 CHECK_NO_VAR (BINFO_VPTR_FIELD (t
));
670 n
= vec_safe_length (BINFO_BASE_ACCESSES (t
));
671 for (i
= 0; i
< n
; i
++)
672 CHECK_NO_VAR (BINFO_BASE_ACCESS (t
, i
));
673 /* Do not walk BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX
674 and BINFO_VPTR_INDEX; these are used by C++ FE only. */
675 n
= BINFO_N_BASE_BINFOS (t
);
676 for (i
= 0; i
< n
; i
++)
677 CHECK_NO_VAR (BINFO_BASE_BINFO (t
, i
));
681 /* Check presence of pointers to decls in fields of a CONSTRUCTOR T. */
684 mentions_vars_p_constructor (tree t
)
686 unsigned HOST_WIDE_INT idx
;
689 if (mentions_vars_p_typed (t
))
692 for (idx
= 0; vec_safe_iterate (CONSTRUCTOR_ELTS (t
), idx
, &ce
); idx
++)
694 CHECK_NO_VAR (ce
->index
);
695 CHECK_VAR (ce
->value
);
700 /* Check presence of pointers to decls in fields of an expression tree T. */
703 mentions_vars_p_expr (tree t
)
706 if (mentions_vars_p_typed (t
))
708 for (i
= TREE_OPERAND_LENGTH (t
) - 1; i
>= 0; --i
)
709 CHECK_VAR (TREE_OPERAND (t
, i
));
713 /* Check presence of pointers to decls in fields of an OMP_CLAUSE T. */
716 mentions_vars_p_omp_clause (tree t
)
719 if (mentions_vars_p_common (t
))
721 for (i
= omp_clause_num_ops
[OMP_CLAUSE_CODE (t
)] - 1; i
>= 0; --i
)
722 CHECK_VAR (OMP_CLAUSE_OPERAND (t
, i
));
726 /* Check presence of pointers to decls that needs later fixup in T. */
729 mentions_vars_p (tree t
)
731 switch (TREE_CODE (t
))
733 case IDENTIFIER_NODE
:
737 CHECK_VAR (TREE_VALUE (t
));
738 CHECK_VAR (TREE_PURPOSE (t
));
739 CHECK_NO_VAR (TREE_CHAIN (t
));
743 return mentions_vars_p_field_decl (t
);
752 return mentions_vars_p_decl_common (t
);
755 return mentions_vars_p_decl_with_vis (t
);
758 return mentions_vars_p_decl_non_common (t
);
761 return mentions_vars_p_function (t
);
764 return mentions_vars_p_binfo (t
);
766 case PLACEHOLDER_EXPR
:
767 return mentions_vars_p_common (t
);
770 case TRANSLATION_UNIT_DECL
:
771 case OPTIMIZATION_NODE
:
772 case TARGET_OPTION_NODE
:
776 return mentions_vars_p_constructor (t
);
779 return mentions_vars_p_omp_clause (t
);
784 if (mentions_vars_p_type (t
))
789 if (mentions_vars_p_expr (t
))
792 else if (CONSTANT_CLASS_P (t
))
793 CHECK_NO_VAR (TREE_TYPE (t
));
801 /* Return the resolution for the decl with index INDEX from DATA_IN. */
803 static enum ld_plugin_symbol_resolution
804 get_resolution (struct data_in
*data_in
, unsigned index
)
806 if (data_in
->globals_resolution
.exists ())
808 ld_plugin_symbol_resolution_t ret
;
809 /* We can have references to not emitted functions in
810 DECL_FUNCTION_PERSONALITY at least. So we can and have
811 to indeed return LDPR_UNKNOWN in some cases. */
812 if (data_in
->globals_resolution
.length () <= index
)
814 ret
= data_in
->globals_resolution
[index
];
818 /* Delay resolution finding until decl merging. */
822 /* We need to record resolutions until symbol table is read. */
824 register_resolution (struct lto_file_decl_data
*file_data
, tree decl
,
825 enum ld_plugin_symbol_resolution resolution
)
827 if (resolution
== LDPR_UNKNOWN
)
829 if (!file_data
->resolution_map
)
830 file_data
->resolution_map
831 = new hash_map
<tree
, ld_plugin_symbol_resolution
>;
832 file_data
->resolution_map
->put (decl
, resolution
);
835 /* Register DECL with the global symbol table and change its
836 name if necessary to avoid name clashes for static globals across
840 lto_register_var_decl_in_symtab (struct data_in
*data_in
, tree decl
,
845 /* Variable has file scope, not local. */
846 if (!TREE_PUBLIC (decl
)
847 && !((context
= decl_function_context (decl
))
848 && auto_var_in_fn_p (decl
, context
)))
849 rest_of_decl_compilation (decl
, 1, 0);
851 /* If this variable has already been declared, queue the
852 declaration for merging. */
853 if (TREE_PUBLIC (decl
))
854 register_resolution (data_in
->file_data
,
855 decl
, get_resolution (data_in
, ix
));
859 /* Register DECL with the global symbol table and change its
860 name if necessary to avoid name clashes for static globals across
861 different files. DATA_IN contains descriptors and tables for the
865 lto_register_function_decl_in_symtab (struct data_in
*data_in
, tree decl
,
868 /* If this variable has already been declared, queue the
869 declaration for merging. */
870 if (TREE_PUBLIC (decl
) && !DECL_ABSTRACT_P (decl
))
871 register_resolution (data_in
->file_data
,
872 decl
, get_resolution (data_in
, ix
));
876 /* For the type T re-materialize it in the type variant list and
877 the pointer/reference-to chains. */
880 lto_fixup_prevailing_type (tree t
)
882 /* The following re-creates proper variant lists while fixing up
883 the variant leaders. We do not stream TYPE_NEXT_VARIANT so the
884 variant list state before fixup is broken. */
886 /* If we are not our own variant leader link us into our new leaders
888 if (TYPE_MAIN_VARIANT (t
) != t
)
890 tree mv
= TYPE_MAIN_VARIANT (t
);
891 TYPE_NEXT_VARIANT (t
) = TYPE_NEXT_VARIANT (mv
);
892 TYPE_NEXT_VARIANT (mv
) = t
;
895 /* The following reconstructs the pointer chains
896 of the new pointed-to type if we are a main variant. We do
897 not stream those so they are broken before fixup. */
898 if (TREE_CODE (t
) == POINTER_TYPE
899 && TYPE_MAIN_VARIANT (t
) == t
)
901 TYPE_NEXT_PTR_TO (t
) = TYPE_POINTER_TO (TREE_TYPE (t
));
902 TYPE_POINTER_TO (TREE_TYPE (t
)) = t
;
904 else if (TREE_CODE (t
) == REFERENCE_TYPE
905 && TYPE_MAIN_VARIANT (t
) == t
)
907 TYPE_NEXT_REF_TO (t
) = TYPE_REFERENCE_TO (TREE_TYPE (t
));
908 TYPE_REFERENCE_TO (TREE_TYPE (t
)) = t
;
913 /* We keep prevailing tree SCCs in a hashtable with manual collision
914 handling (in case all hashes compare the same) and keep the colliding
915 entries in the tree_scc->next chain. */
920 /* Hash of the whole SCC. */
922 /* Number of trees in the SCC. */
924 /* Number of possible entries into the SCC (tree nodes [0..entry_len-1]
925 which share the same individual tree hash). */
927 /* The members of the SCC.
928 We only need to remember the first entry node candidate for prevailing
929 SCCs (but of course have access to all entries for SCCs we are
931 ??? For prevailing SCCs we really only need hash and the first
932 entry candidate, but that's too awkward to implement. */
936 struct tree_scc_hasher
: nofree_ptr_hash
<tree_scc
>
938 static inline hashval_t
hash (const tree_scc
*);
939 static inline bool equal (const tree_scc
*, const tree_scc
*);
943 tree_scc_hasher::hash (const tree_scc
*scc
)
949 tree_scc_hasher::equal (const tree_scc
*scc1
, const tree_scc
*scc2
)
951 if (scc1
->hash
!= scc2
->hash
952 || scc1
->len
!= scc2
->len
953 || scc1
->entry_len
!= scc2
->entry_len
)
958 static hash_table
<tree_scc_hasher
> *tree_scc_hash
;
959 static struct obstack tree_scc_hash_obstack
;
961 static unsigned long num_merged_types
;
962 static unsigned long num_prevailing_types
;
963 static unsigned long num_type_scc_trees
;
964 static unsigned long total_scc_size
;
965 static unsigned long num_sccs_read
;
966 static unsigned long total_scc_size_merged
;
967 static unsigned long num_sccs_merged
;
968 static unsigned long num_scc_compares
;
969 static unsigned long num_scc_compare_collisions
;
972 /* Compare the two entries T1 and T2 of two SCCs that are possibly equal,
973 recursing through in-SCC tree edges. Returns true if the SCCs entered
974 through T1 and T2 are equal and fills in *MAP with the pairs of
975 SCC entries we visited, starting with (*MAP)[0] = T1 and (*MAP)[1] = T2. */
978 compare_tree_sccs_1 (tree t1
, tree t2
, tree
**map
)
982 /* Mark already visited nodes. */
983 TREE_ASM_WRITTEN (t2
) = 1;
985 /* Push the pair onto map. */
990 /* Compare value-fields. */
991 #define compare_values(X) \
993 if (X(t1) != X(t2)) \
997 compare_values (TREE_CODE
);
998 code
= TREE_CODE (t1
);
1002 compare_values (TREE_SIDE_EFFECTS
);
1003 compare_values (TREE_CONSTANT
);
1004 compare_values (TREE_READONLY
);
1005 compare_values (TREE_PUBLIC
);
1007 compare_values (TREE_ADDRESSABLE
);
1008 compare_values (TREE_THIS_VOLATILE
);
1010 compare_values (DECL_UNSIGNED
);
1011 else if (TYPE_P (t1
))
1012 compare_values (TYPE_UNSIGNED
);
1014 compare_values (TYPE_ARTIFICIAL
);
1016 compare_values (TREE_NO_WARNING
);
1017 compare_values (TREE_NOTHROW
);
1018 compare_values (TREE_STATIC
);
1019 if (code
!= TREE_BINFO
)
1020 compare_values (TREE_PRIVATE
);
1021 compare_values (TREE_PROTECTED
);
1022 compare_values (TREE_DEPRECATED
);
1025 compare_values (TYPE_SATURATING
);
1026 compare_values (TYPE_ADDR_SPACE
);
1028 else if (code
== SSA_NAME
)
1029 compare_values (SSA_NAME_IS_DEFAULT_DEF
);
1031 if (CODE_CONTAINS_STRUCT (code
, TS_INT_CST
))
1033 if (!wi::eq_p (t1
, t2
))
1037 if (CODE_CONTAINS_STRUCT (code
, TS_REAL_CST
))
1039 /* ??? No suitable compare routine available. */
1040 REAL_VALUE_TYPE r1
= TREE_REAL_CST (t1
);
1041 REAL_VALUE_TYPE r2
= TREE_REAL_CST (t2
);
1043 || r1
.decimal
!= r2
.decimal
1044 || r1
.sign
!= r2
.sign
1045 || r1
.signalling
!= r2
.signalling
1046 || r1
.canonical
!= r2
.canonical
1047 || r1
.uexp
!= r2
.uexp
)
1049 for (unsigned i
= 0; i
< SIGSZ
; ++i
)
1050 if (r1
.sig
[i
] != r2
.sig
[i
])
1054 if (CODE_CONTAINS_STRUCT (code
, TS_FIXED_CST
))
1055 if (!fixed_compare (EQ_EXPR
,
1056 TREE_FIXED_CST_PTR (t1
), TREE_FIXED_CST_PTR (t2
)))
1060 /* We want to compare locations up to the point where it makes
1061 a difference for streaming - thus whether the decl is builtin or not. */
1062 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_MINIMAL
))
1063 compare_values (streamer_handle_as_builtin_p
);
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 compare_tree_edges (DECL_ABSTRACT_ORIGIN (t1
), DECL_ABSTRACT_ORIGIN (t2
));
1312 if ((code
== VAR_DECL
1313 || code
== PARM_DECL
)
1314 && DECL_HAS_VALUE_EXPR_P (t1
))
1315 compare_tree_edges (DECL_VALUE_EXPR (t1
), DECL_VALUE_EXPR (t2
));
1316 if (code
== VAR_DECL
1317 && DECL_HAS_DEBUG_EXPR_P (t1
))
1318 compare_tree_edges (DECL_DEBUG_EXPR (t1
), DECL_DEBUG_EXPR (t2
));
1319 /* LTO specific edges. */
1320 if (code
!= FUNCTION_DECL
1321 && code
!= TRANSLATION_UNIT_DECL
)
1322 compare_tree_edges (DECL_INITIAL (t1
), DECL_INITIAL (t2
));
1325 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_NON_COMMON
))
1327 if (code
== FUNCTION_DECL
)
1330 for (a1
= DECL_ARGUMENTS (t1
), a2
= DECL_ARGUMENTS (t2
);
1332 a1
= TREE_CHAIN (a1
), a2
= TREE_CHAIN (a2
))
1333 compare_tree_edges (a1
, a2
);
1334 compare_tree_edges (DECL_RESULT (t1
), DECL_RESULT (t2
));
1336 else if (code
== TYPE_DECL
)
1337 compare_tree_edges (DECL_ORIGINAL_TYPE (t1
), DECL_ORIGINAL_TYPE (t2
));
1340 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_WITH_VIS
))
1342 /* Make sure we don't inadvertently set the assembler name. */
1343 if (DECL_ASSEMBLER_NAME_SET_P (t1
))
1344 compare_tree_edges (DECL_ASSEMBLER_NAME (t1
),
1345 DECL_ASSEMBLER_NAME (t2
));
1348 if (CODE_CONTAINS_STRUCT (code
, TS_FIELD_DECL
))
1350 compare_tree_edges (DECL_FIELD_OFFSET (t1
), DECL_FIELD_OFFSET (t2
));
1351 compare_tree_edges (DECL_BIT_FIELD_TYPE (t1
), DECL_BIT_FIELD_TYPE (t2
));
1352 compare_tree_edges (DECL_BIT_FIELD_REPRESENTATIVE (t1
),
1353 DECL_BIT_FIELD_REPRESENTATIVE (t2
));
1354 compare_tree_edges (DECL_FIELD_BIT_OFFSET (t1
),
1355 DECL_FIELD_BIT_OFFSET (t2
));
1356 compare_tree_edges (DECL_FCONTEXT (t1
), DECL_FCONTEXT (t2
));
1359 if (CODE_CONTAINS_STRUCT (code
, TS_FUNCTION_DECL
))
1361 compare_tree_edges (DECL_FUNCTION_PERSONALITY (t1
),
1362 DECL_FUNCTION_PERSONALITY (t2
));
1363 compare_tree_edges (DECL_VINDEX (t1
), DECL_VINDEX (t2
));
1364 compare_tree_edges (DECL_FUNCTION_SPECIFIC_TARGET (t1
),
1365 DECL_FUNCTION_SPECIFIC_TARGET (t2
));
1366 compare_tree_edges (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (t1
),
1367 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (t2
));
1370 if (CODE_CONTAINS_STRUCT (code
, TS_TYPE_COMMON
))
1372 compare_tree_edges (TYPE_SIZE (t1
), TYPE_SIZE (t2
));
1373 compare_tree_edges (TYPE_SIZE_UNIT (t1
), TYPE_SIZE_UNIT (t2
));
1374 compare_tree_edges (TYPE_ATTRIBUTES (t1
), TYPE_ATTRIBUTES (t2
));
1375 compare_tree_edges (TYPE_NAME (t1
), TYPE_NAME (t2
));
1376 /* Do not compare TYPE_POINTER_TO or TYPE_REFERENCE_TO. They will be
1377 reconstructed during fixup. */
1378 /* Do not compare TYPE_NEXT_VARIANT, we reconstruct the variant lists
1380 compare_tree_edges (TYPE_MAIN_VARIANT (t1
), TYPE_MAIN_VARIANT (t2
));
1381 /* ??? Global types from different TUs have non-matching
1382 TRANSLATION_UNIT_DECLs. Still merge them if they are otherwise
1384 if (TYPE_FILE_SCOPE_P (t1
) && TYPE_FILE_SCOPE_P (t2
))
1387 compare_tree_edges (TYPE_CONTEXT (t1
), TYPE_CONTEXT (t2
));
1388 /* TYPE_CANONICAL is re-computed during type merging, so do not
1390 compare_tree_edges (TYPE_STUB_DECL (t1
), TYPE_STUB_DECL (t2
));
1393 if (CODE_CONTAINS_STRUCT (code
, TS_TYPE_NON_COMMON
))
1395 if (code
== ENUMERAL_TYPE
)
1396 compare_tree_edges (TYPE_VALUES (t1
), TYPE_VALUES (t2
));
1397 else if (code
== ARRAY_TYPE
)
1398 compare_tree_edges (TYPE_DOMAIN (t1
), TYPE_DOMAIN (t2
));
1399 else if (RECORD_OR_UNION_TYPE_P (t1
))
1402 for (f1
= TYPE_FIELDS (t1
), f2
= TYPE_FIELDS (t2
);
1404 f1
= TREE_CHAIN (f1
), f2
= TREE_CHAIN (f2
))
1405 compare_tree_edges (f1
, f2
);
1406 compare_tree_edges (TYPE_BINFO (t1
), TYPE_BINFO (t2
));
1408 else if (code
== FUNCTION_TYPE
1409 || code
== METHOD_TYPE
)
1410 compare_tree_edges (TYPE_ARG_TYPES (t1
), TYPE_ARG_TYPES (t2
));
1411 if (!POINTER_TYPE_P (t1
))
1412 compare_tree_edges (TYPE_MINVAL (t1
), TYPE_MINVAL (t2
));
1413 compare_tree_edges (TYPE_MAXVAL (t1
), TYPE_MAXVAL (t2
));
1416 if (CODE_CONTAINS_STRUCT (code
, TS_LIST
))
1418 compare_tree_edges (TREE_PURPOSE (t1
), TREE_PURPOSE (t2
));
1419 compare_tree_edges (TREE_VALUE (t1
), TREE_VALUE (t2
));
1420 compare_tree_edges (TREE_CHAIN (t1
), TREE_CHAIN (t2
));
1423 if (CODE_CONTAINS_STRUCT (code
, TS_VEC
))
1424 for (int i
= 0; i
< TREE_VEC_LENGTH (t1
); i
++)
1425 compare_tree_edges (TREE_VEC_ELT (t1
, i
), TREE_VEC_ELT (t2
, i
));
1427 if (CODE_CONTAINS_STRUCT (code
, TS_EXP
))
1429 for (int i
= 0; i
< TREE_OPERAND_LENGTH (t1
); i
++)
1430 compare_tree_edges (TREE_OPERAND (t1
, i
),
1431 TREE_OPERAND (t2
, i
));
1433 /* BLOCKs are function local and we don't merge anything there. */
1434 if (TREE_BLOCK (t1
) || TREE_BLOCK (t2
))
1438 if (CODE_CONTAINS_STRUCT (code
, TS_BINFO
))
1442 /* Lengths have already been compared above. */
1443 FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (t1
), i
, t
)
1444 compare_tree_edges (t
, BINFO_BASE_BINFO (t2
, i
));
1445 FOR_EACH_VEC_SAFE_ELT (BINFO_BASE_ACCESSES (t1
), i
, t
)
1446 compare_tree_edges (t
, BINFO_BASE_ACCESS (t2
, i
));
1447 compare_tree_edges (BINFO_OFFSET (t1
), BINFO_OFFSET (t2
));
1448 compare_tree_edges (BINFO_VTABLE (t1
), BINFO_VTABLE (t2
));
1449 compare_tree_edges (BINFO_VPTR_FIELD (t1
), BINFO_VPTR_FIELD (t2
));
1450 /* Do not walk BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX
1451 and BINFO_VPTR_INDEX; these are used by C++ FE only. */
1454 if (CODE_CONTAINS_STRUCT (code
, TS_CONSTRUCTOR
))
1458 /* Lengths have already been compared above. */
1459 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t1
), i
, index
, value
)
1461 compare_tree_edges (index
, CONSTRUCTOR_ELT (t2
, i
)->index
);
1462 compare_tree_edges (value
, CONSTRUCTOR_ELT (t2
, i
)->value
);
1466 if (code
== OMP_CLAUSE
)
1470 for (i
= 0; i
< omp_clause_num_ops
[OMP_CLAUSE_CODE (t1
)]; i
++)
1471 compare_tree_edges (OMP_CLAUSE_OPERAND (t1
, i
),
1472 OMP_CLAUSE_OPERAND (t2
, i
));
1473 compare_tree_edges (OMP_CLAUSE_CHAIN (t1
), OMP_CLAUSE_CHAIN (t2
));
1476 #undef compare_tree_edges
1481 /* Compare the tree scc SCC to the prevailing candidate PSCC, filling
1482 out MAP if they are equal. */
1485 compare_tree_sccs (tree_scc
*pscc
, tree_scc
*scc
,
1488 /* Assume SCC entry hashes are sorted after their cardinality. Which
1489 means we can simply take the first n-tuple of equal hashes
1490 (which is recorded as entry_len) and do n SCC entry candidate
1492 for (unsigned i
= 0; i
< pscc
->entry_len
; ++i
)
1495 num_scc_compare_collisions
++;
1496 if (compare_tree_sccs_1 (pscc
->entries
[0], scc
->entries
[i
], &mapp
))
1498 /* Equal - no need to reset TREE_VISITED or TREE_ASM_WRITTEN
1499 on the scc as all trees will be freed. */
1502 /* Reset TREE_ASM_WRITTEN on scc for the next compare or in case
1503 the SCC prevails. */
1504 for (unsigned j
= 0; j
< scc
->len
; ++j
)
1505 TREE_ASM_WRITTEN (scc
->entries
[j
]) = 0;
1511 /* QSort sort function to sort a map of two pointers after the 2nd
1515 cmp_tree (const void *p1_
, const void *p2_
)
1517 tree
*p1
= (tree
*)(const_cast<void *>(p1_
));
1518 tree
*p2
= (tree
*)(const_cast<void *>(p2_
));
1521 return ((uintptr_t)p1
[1] < (uintptr_t)p2
[1]) ? -1 : 1;
1524 /* Try to unify the SCC with nodes FROM to FROM + LEN in CACHE and
1525 hash value SCC_HASH with an already recorded SCC. Return true if
1526 that was successful, otherwise return false. */
1529 unify_scc (struct data_in
*data_in
, unsigned from
,
1530 unsigned len
, unsigned scc_entry_len
, hashval_t scc_hash
)
1532 bool unified_p
= false;
1533 struct streamer_tree_cache_d
*cache
= data_in
->reader_cache
;
1535 = (tree_scc
*) alloca (sizeof (tree_scc
) + (len
- 1) * sizeof (tree
));
1537 scc
->hash
= scc_hash
;
1539 scc
->entry_len
= scc_entry_len
;
1540 for (unsigned i
= 0; i
< len
; ++i
)
1542 tree t
= streamer_tree_cache_get_tree (cache
, from
+ i
);
1543 scc
->entries
[i
] = t
;
1544 /* Do not merge SCCs with local entities inside them. Also do
1545 not merge TRANSLATION_UNIT_DECLs. */
1546 if (TREE_CODE (t
) == TRANSLATION_UNIT_DECL
1547 || (VAR_OR_FUNCTION_DECL_P (t
)
1548 && !(TREE_PUBLIC (t
) || DECL_EXTERNAL (t
)))
1549 || TREE_CODE (t
) == LABEL_DECL
)
1551 /* Avoid doing any work for these cases and do not worry to
1552 record the SCCs for further merging. */
1557 /* Look for the list of candidate SCCs to compare against. */
1559 slot
= tree_scc_hash
->find_slot_with_hash (scc
, scc_hash
, INSERT
);
1562 /* Try unifying against each candidate. */
1565 /* Set TREE_VISITED on the scc so we can easily identify tree nodes
1566 outside of the scc when following tree edges. Make sure
1567 that TREE_ASM_WRITTEN is unset so we can use it as 2nd bit
1568 to track whether we visited the SCC member during the compare.
1569 We cannot use TREE_VISITED on the pscc members as the extended
1570 scc and pscc can overlap. */
1571 for (unsigned i
= 0; i
< scc
->len
; ++i
)
1573 TREE_VISITED (scc
->entries
[i
]) = 1;
1574 gcc_checking_assert (!TREE_ASM_WRITTEN (scc
->entries
[i
]));
1577 tree
*map
= XALLOCAVEC (tree
, 2 * len
);
1578 for (tree_scc
*pscc
= *slot
; pscc
; pscc
= pscc
->next
)
1580 if (!compare_tree_sccs (pscc
, scc
, map
))
1583 /* Found an equal SCC. */
1585 num_scc_compare_collisions
--;
1587 total_scc_size_merged
+= len
;
1589 #ifdef ENABLE_CHECKING
1590 for (unsigned i
= 0; i
< len
; ++i
)
1592 tree t
= map
[2*i
+1];
1593 enum tree_code code
= TREE_CODE (t
);
1594 /* IDENTIFIER_NODEs should be singletons and are merged by the
1595 streamer. The others should be singletons, too, and we
1596 should not merge them in any way. */
1597 gcc_assert (code
!= TRANSLATION_UNIT_DECL
1598 && code
!= IDENTIFIER_NODE
1599 && !streamer_handle_as_builtin_p (t
));
1603 /* Fixup the streamer cache with the prevailing nodes according
1604 to the tree node mapping computed by compare_tree_sccs. */
1606 streamer_tree_cache_replace_tree (cache
, pscc
->entries
[0], from
);
1609 tree
*map2
= XALLOCAVEC (tree
, 2 * len
);
1610 for (unsigned i
= 0; i
< len
; ++i
)
1612 map2
[i
*2] = (tree
)(uintptr_t)(from
+ i
);
1613 map2
[i
*2+1] = scc
->entries
[i
];
1615 qsort (map2
, len
, 2 * sizeof (tree
), cmp_tree
);
1616 qsort (map
, len
, 2 * sizeof (tree
), cmp_tree
);
1617 for (unsigned i
= 0; i
< len
; ++i
)
1618 streamer_tree_cache_replace_tree (cache
, map
[2*i
],
1619 (uintptr_t)map2
[2*i
]);
1622 /* Free the tree nodes from the read SCC. */
1623 data_in
->location_cache
.revert_location_cache ();
1624 for (unsigned i
= 0; i
< len
; ++i
)
1626 enum tree_code code
;
1627 if (TYPE_P (scc
->entries
[i
]))
1629 code
= TREE_CODE (scc
->entries
[i
]);
1630 if (CODE_CONTAINS_STRUCT (code
, TS_CONSTRUCTOR
))
1631 vec_free (CONSTRUCTOR_ELTS (scc
->entries
[i
]));
1632 ggc_free (scc
->entries
[i
]);
1638 /* Reset TREE_VISITED if we didn't unify the SCC with another. */
1640 for (unsigned i
= 0; i
< scc
->len
; ++i
)
1641 TREE_VISITED (scc
->entries
[i
]) = 0;
1644 /* If we didn't unify it to any candidate duplicate the relevant
1645 pieces to permanent storage and link it into the chain. */
1649 = XOBNEWVAR (&tree_scc_hash_obstack
, tree_scc
, sizeof (tree_scc
));
1650 memcpy (pscc
, scc
, sizeof (tree_scc
));
1651 pscc
->next
= (*slot
);
1658 /* Read all the symbols from buffer DATA, using descriptors in DECL_DATA.
1659 RESOLUTIONS is the set of symbols picked by the linker (read from the
1660 resolution file when the linker plugin is being used). */
1663 lto_read_decls (struct lto_file_decl_data
*decl_data
, const void *data
,
1664 vec
<ld_plugin_symbol_resolution_t
> resolutions
)
1666 const struct lto_decl_header
*header
= (const struct lto_decl_header
*) data
;
1667 const int decl_offset
= sizeof (struct lto_decl_header
);
1668 const int main_offset
= decl_offset
+ header
->decl_state_size
;
1669 const int string_offset
= main_offset
+ header
->main_size
;
1670 struct data_in
*data_in
;
1672 const uint32_t *data_ptr
, *data_end
;
1673 uint32_t num_decl_states
;
1675 lto_input_block
ib_main ((const char *) data
+ main_offset
,
1676 header
->main_size
, decl_data
->mode_table
);
1678 data_in
= lto_data_in_create (decl_data
, (const char *) data
+ string_offset
,
1679 header
->string_size
, resolutions
);
1681 /* We do not uniquify the pre-loaded cache entries, those are middle-end
1682 internal types that should not be merged. */
1684 /* Read the global declarations and types. */
1685 while (ib_main
.p
< ib_main
.len
)
1688 unsigned from
= data_in
->reader_cache
->nodes
.length ();
1689 /* Read and uniquify SCCs as in the input stream. */
1690 enum LTO_tags tag
= streamer_read_record_start (&ib_main
);
1691 if (tag
== LTO_tree_scc
)
1694 unsigned scc_entry_len
;
1695 hashval_t scc_hash
= lto_input_scc (&ib_main
, data_in
, &len_
,
1697 unsigned len
= data_in
->reader_cache
->nodes
.length () - from
;
1698 gcc_assert (len
== len_
);
1700 total_scc_size
+= len
;
1703 /* We have the special case of size-1 SCCs that are pre-merged
1704 by means of identifier and string sharing for example.
1705 ??? Maybe we should avoid streaming those as SCCs. */
1706 tree first
= streamer_tree_cache_get_tree (data_in
->reader_cache
,
1709 && (TREE_CODE (first
) == IDENTIFIER_NODE
1710 || TREE_CODE (first
) == INTEGER_CST
1711 || TREE_CODE (first
) == TRANSLATION_UNIT_DECL
1712 || streamer_handle_as_builtin_p (first
)))
1715 /* Try to unify the SCC with already existing ones. */
1717 && unify_scc (data_in
, from
,
1718 len
, scc_entry_len
, scc_hash
))
1721 /* Tree merging failed, mark entries in location cache as
1723 data_in
->location_cache
.accept_location_cache ();
1725 bool seen_type
= false;
1726 for (unsigned i
= 0; i
< len
; ++i
)
1728 tree t
= streamer_tree_cache_get_tree (data_in
->reader_cache
,
1730 /* Reconstruct the type variant and pointer-to/reference-to
1735 num_prevailing_types
++;
1736 lto_fixup_prevailing_type (t
);
1738 /* Compute the canonical type of all types.
1739 ??? Should be able to assert that !TYPE_CANONICAL. */
1740 if (TYPE_P (t
) && !TYPE_CANONICAL (t
))
1742 gimple_register_canonical_type (t
);
1744 register_odr_type (t
);
1746 /* Link shared INTEGER_CSTs into TYPE_CACHED_VALUEs of its
1747 type which is also member of this SCC. */
1748 if (TREE_CODE (t
) == INTEGER_CST
1749 && !TREE_OVERFLOW (t
))
1750 cache_integer_cst (t
);
1751 /* Register TYPE_DECLs with the debuginfo machinery. */
1753 && TREE_CODE (t
) == TYPE_DECL
)
1755 /* Dwarf2out needs location information.
1756 TODO: Moving this out of the streamer loop may noticealy
1757 improve ltrans linemap memory use. */
1758 data_in
->location_cache
.apply_location_cache ();
1759 debug_hooks
->type_decl (t
, !DECL_FILE_SCOPE_P (t
));
1763 /* Register variables and functions with the
1765 if (TREE_CODE (t
) == VAR_DECL
)
1766 lto_register_var_decl_in_symtab (data_in
, t
, from
+ i
);
1767 else if (TREE_CODE (t
) == FUNCTION_DECL
1768 && !DECL_BUILT_IN (t
))
1769 lto_register_function_decl_in_symtab (data_in
, t
, from
+ i
);
1770 /* Scan the tree for references to global functions or
1771 variables and record those for later fixup. */
1772 if (mentions_vars_p (t
))
1773 vec_safe_push (tree_with_vars
, t
);
1777 num_type_scc_trees
+= len
;
1781 /* Pickle stray references. */
1782 t
= lto_input_tree_1 (&ib_main
, data_in
, tag
, 0);
1783 gcc_assert (t
&& data_in
->reader_cache
->nodes
.length () == from
);
1786 data_in
->location_cache
.apply_location_cache ();
1788 /* Read in lto_in_decl_state objects. */
1789 data_ptr
= (const uint32_t *) ((const char*) data
+ decl_offset
);
1791 (const uint32_t *) ((const char*) data_ptr
+ header
->decl_state_size
);
1792 num_decl_states
= *data_ptr
++;
1794 gcc_assert (num_decl_states
> 0);
1795 decl_data
->global_decl_state
= lto_new_in_decl_state ();
1796 data_ptr
= lto_read_in_decl_state (data_in
, data_ptr
,
1797 decl_data
->global_decl_state
);
1799 /* Read in per-function decl states and enter them in hash table. */
1800 decl_data
->function_decl_states
=
1801 hash_table
<decl_state_hasher
>::create_ggc (37);
1803 for (i
= 1; i
< num_decl_states
; i
++)
1805 struct lto_in_decl_state
*state
= lto_new_in_decl_state ();
1807 data_ptr
= lto_read_in_decl_state (data_in
, data_ptr
, state
);
1808 lto_in_decl_state
**slot
1809 = decl_data
->function_decl_states
->find_slot (state
, INSERT
);
1810 gcc_assert (*slot
== NULL
);
1814 if (data_ptr
!= data_end
)
1815 internal_error ("bytecode stream: garbage at the end of symbols section");
1817 /* Set the current decl state to be the global state. */
1818 decl_data
->current_decl_state
= decl_data
->global_decl_state
;
1820 lto_data_in_delete (data_in
);
1823 /* Custom version of strtoll, which is not portable. */
1826 lto_parse_hex (const char *p
)
1830 for (; *p
!= '\0'; ++p
)
1835 if (c
>= '0' && c
<= '9')
1837 else if (c
>= 'a' && c
<= 'f')
1838 part
= c
- 'a' + 10;
1839 else if (c
>= 'A' && c
<= 'F')
1840 part
= c
- 'A' + 10;
1842 internal_error ("could not parse hex number");
1849 /* Read resolution for file named FILE_NAME. The resolution is read from
1853 lto_resolution_read (splay_tree file_ids
, FILE *resolution
, lto_file
*file
)
1855 /* We require that objects in the resolution file are in the same
1856 order as the lto1 command line. */
1857 unsigned int name_len
;
1859 unsigned int num_symbols
;
1861 struct lto_file_decl_data
*file_data
;
1862 splay_tree_node nd
= NULL
;
1867 name_len
= strlen (file
->filename
);
1868 obj_name
= XNEWVEC (char, name_len
+ 1);
1869 fscanf (resolution
, " "); /* Read white space. */
1871 fread (obj_name
, sizeof (char), name_len
, resolution
);
1872 obj_name
[name_len
] = '\0';
1873 if (filename_cmp (obj_name
, file
->filename
) != 0)
1874 internal_error ("unexpected file name %s in linker resolution file. "
1875 "Expected %s", obj_name
, file
->filename
);
1876 if (file
->offset
!= 0)
1881 t
= fscanf (resolution
, "@0x%16s", offset_p
);
1883 internal_error ("could not parse file offset");
1884 offset
= lto_parse_hex (offset_p
);
1885 if (offset
!= file
->offset
)
1886 internal_error ("unexpected offset");
1891 fscanf (resolution
, "%u", &num_symbols
);
1893 for (i
= 0; i
< num_symbols
; i
++)
1897 unsigned HOST_WIDE_INT id
;
1899 enum ld_plugin_symbol_resolution r
= (enum ld_plugin_symbol_resolution
) 0;
1901 unsigned int lto_resolution_str_len
=
1902 sizeof (lto_resolution_str
) / sizeof (char *);
1905 t
= fscanf (resolution
, "%u " HOST_WIDE_INT_PRINT_HEX_PURE
" %26s %*[^\n]\n",
1906 &index
, &id
, r_str
);
1908 internal_error ("invalid line in the resolution file");
1910 for (j
= 0; j
< lto_resolution_str_len
; j
++)
1912 if (strcmp (lto_resolution_str
[j
], r_str
) == 0)
1914 r
= (enum ld_plugin_symbol_resolution
) j
;
1918 if (j
== lto_resolution_str_len
)
1919 internal_error ("invalid resolution in the resolution file");
1921 if (!(nd
&& lto_splay_tree_id_equal_p (nd
->key
, id
)))
1923 nd
= lto_splay_tree_lookup (file_ids
, id
);
1925 internal_error ("resolution sub id %wx not in object file", id
);
1928 file_data
= (struct lto_file_decl_data
*)nd
->value
;
1929 /* The indexes are very sparse. To save memory save them in a compact
1930 format that is only unpacked later when the subfile is processed. */
1933 file_data
->respairs
.safe_push (rp
);
1934 if (file_data
->max_index
< index
)
1935 file_data
->max_index
= index
;
1939 /* List of file_decl_datas */
1940 struct file_data_list
1942 struct lto_file_decl_data
*first
, *last
;
1945 /* Is the name for a id'ed LTO section? */
1948 lto_section_with_id (const char *name
, unsigned HOST_WIDE_INT
*id
)
1952 if (strncmp (name
, section_name_prefix
, strlen (section_name_prefix
)))
1954 s
= strrchr (name
, '.');
1955 return s
&& sscanf (s
, "." HOST_WIDE_INT_PRINT_HEX_PURE
, id
) == 1;
1958 /* Create file_data of each sub file id */
1961 create_subid_section_table (struct lto_section_slot
*ls
, splay_tree file_ids
,
1962 struct file_data_list
*list
)
1964 struct lto_section_slot s_slot
, *new_slot
;
1965 unsigned HOST_WIDE_INT id
;
1969 struct lto_file_decl_data
*file_data
;
1971 if (!lto_section_with_id (ls
->name
, &id
))
1974 /* Find hash table of sub module id */
1975 nd
= lto_splay_tree_lookup (file_ids
, id
);
1978 file_data
= (struct lto_file_decl_data
*)nd
->value
;
1982 file_data
= ggc_alloc
<lto_file_decl_data
> ();
1983 memset(file_data
, 0, sizeof (struct lto_file_decl_data
));
1985 file_data
->section_hash_table
= lto_obj_create_section_hash_table ();;
1986 lto_splay_tree_insert (file_ids
, id
, file_data
);
1988 /* Maintain list in linker order */
1990 list
->first
= file_data
;
1992 list
->last
->next
= file_data
;
1993 list
->last
= file_data
;
1996 /* Copy section into sub module hash table */
1997 new_name
= XDUPVEC (char, ls
->name
, strlen (ls
->name
) + 1);
1998 s_slot
.name
= new_name
;
1999 hash_slot
= htab_find_slot (file_data
->section_hash_table
, &s_slot
, INSERT
);
2000 gcc_assert (*hash_slot
== NULL
);
2002 new_slot
= XDUP (struct lto_section_slot
, ls
);
2003 new_slot
->name
= new_name
;
2004 *hash_slot
= new_slot
;
2008 /* Read declarations and other initializations for a FILE_DATA. */
2011 lto_file_finalize (struct lto_file_decl_data
*file_data
, lto_file
*file
)
2015 vec
<ld_plugin_symbol_resolution_t
>
2016 resolutions
= vNULL
;
2020 /* Create vector for fast access of resolution. We do this lazily
2022 resolutions
.safe_grow_cleared (file_data
->max_index
+ 1);
2023 for (i
= 0; file_data
->respairs
.iterate (i
, &rp
); i
++)
2024 resolutions
[rp
->index
] = rp
->res
;
2025 file_data
->respairs
.release ();
2027 file_data
->renaming_hash_table
= lto_create_renaming_table ();
2028 file_data
->file_name
= file
->filename
;
2029 #ifdef ACCEL_COMPILER
2030 lto_input_mode_table (file_data
);
2032 file_data
->mode_table
= lto_mode_identity_table
;
2034 data
= lto_get_section_data (file_data
, LTO_section_decls
, NULL
, &len
);
2037 internal_error ("cannot read LTO decls from %s", file_data
->file_name
);
2040 /* Frees resolutions */
2041 lto_read_decls (file_data
, data
, resolutions
);
2042 lto_free_section_data (file_data
, LTO_section_decls
, NULL
, data
, len
);
2045 /* Finalize FILE_DATA in FILE and increase COUNT. */
2048 lto_create_files_from_ids (lto_file
*file
, struct lto_file_decl_data
*file_data
,
2051 lto_file_finalize (file_data
, file
);
2052 if (symtab
->dump_file
)
2053 fprintf (symtab
->dump_file
,
2054 "Creating file %s with sub id " HOST_WIDE_INT_PRINT_HEX
"\n",
2055 file_data
->file_name
, file_data
->id
);
2060 /* Generate a TREE representation for all types and external decls
2063 Read all of the globals out of the file. Then read the cgraph
2064 and process the .o index into the cgraph nodes so that it can open
2065 the .o file to load the functions and ipa information. */
2067 static struct lto_file_decl_data
*
2068 lto_file_read (lto_file
*file
, FILE *resolution_file
, int *count
)
2070 struct lto_file_decl_data
*file_data
= NULL
;
2071 splay_tree file_ids
;
2072 htab_t section_hash_table
;
2073 struct lto_section_slot
*section
;
2074 struct file_data_list file_list
;
2075 struct lto_section_list section_list
;
2077 memset (§ion_list
, 0, sizeof (struct lto_section_list
));
2078 section_hash_table
= lto_obj_build_section_table (file
, §ion_list
);
2080 /* Find all sub modules in the object and put their sections into new hash
2081 tables in a splay tree. */
2082 file_ids
= lto_splay_tree_new ();
2083 memset (&file_list
, 0, sizeof (struct file_data_list
));
2084 for (section
= section_list
.first
; section
!= NULL
; section
= section
->next
)
2085 create_subid_section_table (section
, file_ids
, &file_list
);
2087 /* Add resolutions to file ids */
2088 lto_resolution_read (file_ids
, resolution_file
, file
);
2090 /* Finalize each lto file for each submodule in the merged object */
2091 for (file_data
= file_list
.first
; file_data
!= NULL
; file_data
= file_data
->next
)
2092 lto_create_files_from_ids (file
, file_data
, count
);
2094 splay_tree_delete (file_ids
);
2095 htab_delete (section_hash_table
);
2097 return file_list
.first
;
2100 #if HAVE_MMAP_FILE && HAVE_SYSCONF && defined _SC_PAGE_SIZE
2101 #define LTO_MMAP_IO 1
2105 /* Page size of machine is used for mmap and munmap calls. */
2106 static size_t page_mask
;
2109 /* Get the section data of length LEN from FILENAME starting at
2110 OFFSET. The data segment must be freed by the caller when the
2111 caller is finished. Returns NULL if all was not well. */
2114 lto_read_section_data (struct lto_file_decl_data
*file_data
,
2115 intptr_t offset
, size_t len
)
2119 static char *fd_name
;
2121 intptr_t computed_len
;
2122 intptr_t computed_offset
;
2126 /* Keep a single-entry file-descriptor cache. The last file we
2127 touched will get closed at exit.
2128 ??? Eventually we want to add a more sophisticated larger cache
2129 or rather fix function body streaming to not stream them in
2130 practically random order. */
2132 && filename_cmp (fd_name
, file_data
->file_name
) != 0)
2140 fd
= open (file_data
->file_name
, O_RDONLY
|O_BINARY
);
2143 fatal_error (input_location
, "Cannot open %s", file_data
->file_name
);
2146 fd_name
= xstrdup (file_data
->file_name
);
2152 size_t page_size
= sysconf (_SC_PAGE_SIZE
);
2153 page_mask
= ~(page_size
- 1);
2156 computed_offset
= offset
& page_mask
;
2157 diff
= offset
- computed_offset
;
2158 computed_len
= len
+ diff
;
2160 result
= (char *) mmap (NULL
, computed_len
, PROT_READ
, MAP_PRIVATE
,
2161 fd
, computed_offset
);
2162 if (result
== MAP_FAILED
)
2164 fatal_error (input_location
, "Cannot map %s", file_data
->file_name
);
2168 return result
+ diff
;
2170 result
= (char *) xmalloc (len
);
2171 if (lseek (fd
, offset
, SEEK_SET
) != offset
2172 || read (fd
, result
, len
) != (ssize_t
) len
)
2175 fatal_error (input_location
, "Cannot read %s", file_data
->file_name
);
2179 /* Native windows doesn't supports delayed unlink on opened file. So
2180 we close file here again. This produces higher I/O load, but at least
2181 it prevents to have dangling file handles preventing unlink. */
2192 /* Get the section data from FILE_DATA of SECTION_TYPE with NAME.
2193 NAME will be NULL unless the section type is for a function
2197 get_section_data (struct lto_file_decl_data
*file_data
,
2198 enum lto_section_type section_type
,
2202 htab_t section_hash_table
= file_data
->section_hash_table
;
2203 struct lto_section_slot
*f_slot
;
2204 struct lto_section_slot s_slot
;
2205 const char *section_name
= lto_get_section_name (section_type
, name
, file_data
);
2209 s_slot
.name
= section_name
;
2210 f_slot
= (struct lto_section_slot
*) htab_find (section_hash_table
, &s_slot
);
2213 data
= lto_read_section_data (file_data
, f_slot
->start
, f_slot
->len
);
2217 free (CONST_CAST (char *, section_name
));
2222 /* Free the section data from FILE_DATA of SECTION_TYPE with NAME that
2223 starts at OFFSET and has LEN bytes. */
2226 free_section_data (struct lto_file_decl_data
*file_data ATTRIBUTE_UNUSED
,
2227 enum lto_section_type section_type ATTRIBUTE_UNUSED
,
2228 const char *name ATTRIBUTE_UNUSED
,
2229 const char *offset
, size_t len ATTRIBUTE_UNUSED
)
2232 intptr_t computed_len
;
2233 intptr_t computed_offset
;
2238 computed_offset
= ((intptr_t) offset
) & page_mask
;
2239 diff
= (intptr_t) offset
- computed_offset
;
2240 computed_len
= len
+ diff
;
2242 munmap ((caddr_t
) computed_offset
, computed_len
);
2244 free (CONST_CAST(char *, offset
));
2248 static lto_file
*current_lto_file
;
2250 /* Helper for qsort; compare partitions and return one with smaller size.
2251 We sort from greatest to smallest so parallel build doesn't stale on the
2252 longest compilation being executed too late. */
2255 cmp_partitions_size (const void *a
, const void *b
)
2257 const struct ltrans_partition_def
*pa
2258 = *(struct ltrans_partition_def
*const *)a
;
2259 const struct ltrans_partition_def
*pb
2260 = *(struct ltrans_partition_def
*const *)b
;
2261 return pb
->insns
- pa
->insns
;
2264 /* Helper for qsort; compare partitions and return one with smaller order. */
2267 cmp_partitions_order (const void *a
, const void *b
)
2269 const struct ltrans_partition_def
*pa
2270 = *(struct ltrans_partition_def
*const *)a
;
2271 const struct ltrans_partition_def
*pb
2272 = *(struct ltrans_partition_def
*const *)b
;
2273 int ordera
= -1, orderb
= -1;
2275 if (lto_symtab_encoder_size (pa
->encoder
))
2276 ordera
= lto_symtab_encoder_deref (pa
->encoder
, 0)->order
;
2277 if (lto_symtab_encoder_size (pb
->encoder
))
2278 orderb
= lto_symtab_encoder_deref (pb
->encoder
, 0)->order
;
2279 return orderb
- ordera
;
2282 /* Actually stream out ENCODER into TEMP_FILENAME. */
2285 do_stream_out (char *temp_filename
, lto_symtab_encoder_t encoder
)
2287 lto_file
*file
= lto_obj_file_open (temp_filename
, true);
2289 fatal_error (input_location
, "lto_obj_file_open() failed");
2290 lto_set_current_out_file (file
);
2292 ipa_write_optimization_summaries (encoder
);
2294 lto_set_current_out_file (NULL
);
2295 lto_obj_file_close (file
);
2299 /* Wait for forked process and signal errors. */
2300 #ifdef HAVE_WORKING_FORK
2308 #define WCONTINUED 0
2310 int w
= waitpid (0, &status
, WUNTRACED
| WCONTINUED
);
2312 fatal_error (input_location
, "waitpid failed");
2314 if (WIFEXITED (status
) && WEXITSTATUS (status
))
2315 fatal_error (input_location
, "streaming subprocess failed");
2316 else if (WIFSIGNALED (status
))
2317 fatal_error (input_location
,
2318 "streaming subprocess was killed by signal");
2320 while (!WIFEXITED (status
) && !WIFSIGNALED (status
));
2324 /* Stream out ENCODER into TEMP_FILENAME
2325 Fork if that seems to help. */
2328 stream_out (char *temp_filename
, lto_symtab_encoder_t encoder
,
2329 bool ARG_UNUSED (last
))
2331 #ifdef HAVE_WORKING_FORK
2334 if (lto_parallelism
<= 1)
2336 do_stream_out (temp_filename
, encoder
);
2340 /* Do not run more than LTO_PARALLELISM streamings
2341 FIXME: we ignore limits on jobserver. */
2342 if (lto_parallelism
> 0 && nruns
>= lto_parallelism
)
2347 /* If this is not the last parallel partition, execute new
2348 streaming process. */
2351 pid_t cpid
= fork ();
2355 setproctitle ("lto1-wpa-streaming");
2356 do_stream_out (temp_filename
, encoder
);
2359 /* Fork failed; lets do the job ourseleves. */
2360 else if (cpid
== -1)
2361 do_stream_out (temp_filename
, encoder
);
2365 /* Last partition; stream it and wait for all children to die. */
2369 do_stream_out (temp_filename
, encoder
);
2370 for (i
= 0; i
< nruns
; i
++)
2373 asm_nodes_output
= true;
2375 do_stream_out (temp_filename
, encoder
);
2379 /* Write all output files in WPA mode and the file with the list of
2383 lto_wpa_write_files (void)
2386 ltrans_partition part
;
2387 FILE *ltrans_output_list_stream
;
2388 char *temp_filename
;
2389 vec
<char *>temp_filenames
= vNULL
;
2392 /* Open the LTRANS output list. */
2393 if (!ltrans_output_list
)
2394 fatal_error (input_location
, "no LTRANS output list filename provided");
2396 timevar_push (TV_WHOPR_WPA
);
2398 FOR_EACH_VEC_ELT (ltrans_partitions
, i
, part
)
2399 lto_stats
.num_output_symtab_nodes
+= lto_symtab_encoder_size (part
->encoder
);
2401 timevar_pop (TV_WHOPR_WPA
);
2403 timevar_push (TV_WHOPR_WPA_IO
);
2405 /* Generate a prefix for the LTRANS unit files. */
2406 blen
= strlen (ltrans_output_list
);
2407 temp_filename
= (char *) xmalloc (blen
+ sizeof ("2147483648.o"));
2408 strcpy (temp_filename
, ltrans_output_list
);
2409 if (blen
> sizeof (".out")
2410 && strcmp (temp_filename
+ blen
- sizeof (".out") + 1,
2412 temp_filename
[blen
- sizeof (".out") + 1] = '\0';
2413 blen
= strlen (temp_filename
);
2415 n_sets
= ltrans_partitions
.length ();
2417 /* Sort partitions by size so small ones are compiled last.
2418 FIXME: Even when not reordering we may want to output one list for parallel make
2419 and other for final link command. */
2421 if (!flag_profile_reorder_functions
|| !flag_profile_use
)
2422 ltrans_partitions
.qsort (flag_toplevel_reorder
2423 ? cmp_partitions_size
2424 : cmp_partitions_order
);
2426 for (i
= 0; i
< n_sets
; i
++)
2428 ltrans_partition part
= ltrans_partitions
[i
];
2430 /* Write all the nodes in SET. */
2431 sprintf (temp_filename
+ blen
, "%u.o", i
);
2434 fprintf (stderr
, " %s (%s %i insns)", temp_filename
, part
->name
, part
->insns
);
2435 if (symtab
->dump_file
)
2437 lto_symtab_encoder_iterator lsei
;
2439 fprintf (symtab
->dump_file
, "Writing partition %s to file %s, %i insns\n",
2440 part
->name
, temp_filename
, part
->insns
);
2441 fprintf (symtab
->dump_file
, " Symbols in partition: ");
2442 for (lsei
= lsei_start_in_partition (part
->encoder
); !lsei_end_p (lsei
);
2443 lsei_next_in_partition (&lsei
))
2445 symtab_node
*node
= lsei_node (lsei
);
2446 fprintf (symtab
->dump_file
, "%s ", node
->asm_name ());
2448 fprintf (symtab
->dump_file
, "\n Symbols in boundary: ");
2449 for (lsei
= lsei_start (part
->encoder
); !lsei_end_p (lsei
);
2452 symtab_node
*node
= lsei_node (lsei
);
2453 if (!lto_symtab_encoder_in_partition_p (part
->encoder
, node
))
2455 fprintf (symtab
->dump_file
, "%s ", node
->asm_name ());
2456 cgraph_node
*cnode
= dyn_cast
<cgraph_node
*> (node
);
2458 && lto_symtab_encoder_encode_body_p (part
->encoder
, cnode
))
2459 fprintf (symtab
->dump_file
, "(body included)");
2462 varpool_node
*vnode
= dyn_cast
<varpool_node
*> (node
);
2464 && lto_symtab_encoder_encode_initializer_p (part
->encoder
, vnode
))
2465 fprintf (symtab
->dump_file
, "(initializer included)");
2469 fprintf (symtab
->dump_file
, "\n");
2471 gcc_checking_assert (lto_symtab_encoder_size (part
->encoder
) || !i
);
2473 stream_out (temp_filename
, part
->encoder
, i
== n_sets
- 1);
2475 part
->encoder
= NULL
;
2477 temp_filenames
.safe_push (xstrdup (temp_filename
));
2479 ltrans_output_list_stream
= fopen (ltrans_output_list
, "w");
2480 if (ltrans_output_list_stream
== NULL
)
2481 fatal_error (input_location
,
2482 "opening LTRANS output list %s: %m", ltrans_output_list
);
2483 for (i
= 0; i
< n_sets
; i
++)
2485 unsigned int len
= strlen (temp_filenames
[i
]);
2486 if (fwrite (temp_filenames
[i
], 1, len
, ltrans_output_list_stream
) < len
2487 || fwrite ("\n", 1, 1, ltrans_output_list_stream
) < 1)
2488 fatal_error (input_location
, "writing to LTRANS output list %s: %m",
2489 ltrans_output_list
);
2490 free (temp_filenames
[i
]);
2492 temp_filenames
.release();
2494 lto_stats
.num_output_files
+= n_sets
;
2496 /* Close the LTRANS output list. */
2497 if (fclose (ltrans_output_list_stream
))
2498 fatal_error (input_location
,
2499 "closing LTRANS output list %s: %m", ltrans_output_list
);
2501 free_ltrans_partitions();
2502 free (temp_filename
);
2504 timevar_pop (TV_WHOPR_WPA_IO
);
2508 /* If TT is a variable or function decl replace it with its
2509 prevailing variant. */
2510 #define LTO_SET_PREVAIL(tt) \
2512 if ((tt) && VAR_OR_FUNCTION_DECL_P (tt) \
2513 && (TREE_PUBLIC (tt) || DECL_EXTERNAL (tt))) \
2515 tt = lto_symtab_prevailing_decl (tt); \
2520 /* Ensure that TT isn't a replacable var of function decl. */
2521 #define LTO_NO_PREVAIL(tt) \
2522 gcc_assert (!(tt) || !VAR_OR_FUNCTION_DECL_P (tt))
2524 /* Given a tree T replace all fields referring to variables or functions
2525 with their prevailing variant. */
2527 lto_fixup_prevailing_decls (tree t
)
2529 enum tree_code code
= TREE_CODE (t
);
2532 gcc_checking_assert (code
!= TREE_BINFO
);
2533 LTO_NO_PREVAIL (TREE_TYPE (t
));
2534 if (CODE_CONTAINS_STRUCT (code
, TS_COMMON
))
2535 LTO_NO_PREVAIL (TREE_CHAIN (t
));
2538 LTO_NO_PREVAIL (DECL_NAME (t
));
2539 LTO_SET_PREVAIL (DECL_CONTEXT (t
));
2540 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_COMMON
))
2542 LTO_SET_PREVAIL (DECL_SIZE (t
));
2543 LTO_SET_PREVAIL (DECL_SIZE_UNIT (t
));
2544 LTO_SET_PREVAIL (DECL_INITIAL (t
));
2545 LTO_NO_PREVAIL (DECL_ATTRIBUTES (t
));
2546 LTO_SET_PREVAIL (DECL_ABSTRACT_ORIGIN (t
));
2548 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_WITH_VIS
))
2550 LTO_NO_PREVAIL (t
->decl_with_vis
.assembler_name
);
2552 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_NON_COMMON
))
2554 LTO_NO_PREVAIL (DECL_RESULT_FLD (t
));
2556 if (CODE_CONTAINS_STRUCT (code
, TS_FUNCTION_DECL
))
2558 LTO_NO_PREVAIL (DECL_ARGUMENTS (t
));
2559 LTO_SET_PREVAIL (DECL_FUNCTION_PERSONALITY (t
));
2560 LTO_NO_PREVAIL (DECL_VINDEX (t
));
2562 if (CODE_CONTAINS_STRUCT (code
, TS_FIELD_DECL
))
2564 LTO_SET_PREVAIL (DECL_FIELD_OFFSET (t
));
2565 LTO_NO_PREVAIL (DECL_BIT_FIELD_TYPE (t
));
2566 LTO_NO_PREVAIL (DECL_QUALIFIER (t
));
2567 LTO_NO_PREVAIL (DECL_FIELD_BIT_OFFSET (t
));
2568 LTO_NO_PREVAIL (DECL_FCONTEXT (t
));
2571 else if (TYPE_P (t
))
2573 LTO_NO_PREVAIL (TYPE_CACHED_VALUES (t
));
2574 LTO_SET_PREVAIL (TYPE_SIZE (t
));
2575 LTO_SET_PREVAIL (TYPE_SIZE_UNIT (t
));
2576 LTO_NO_PREVAIL (TYPE_ATTRIBUTES (t
));
2577 LTO_NO_PREVAIL (TYPE_NAME (t
));
2579 LTO_SET_PREVAIL (TYPE_MINVAL (t
));
2580 LTO_SET_PREVAIL (TYPE_MAXVAL (t
));
2581 LTO_NO_PREVAIL (t
->type_non_common
.binfo
);
2583 LTO_SET_PREVAIL (TYPE_CONTEXT (t
));
2585 LTO_NO_PREVAIL (TYPE_CANONICAL (t
));
2586 LTO_NO_PREVAIL (TYPE_MAIN_VARIANT (t
));
2587 LTO_NO_PREVAIL (TYPE_NEXT_VARIANT (t
));
2589 else if (EXPR_P (t
))
2592 for (i
= TREE_OPERAND_LENGTH (t
) - 1; i
>= 0; --i
)
2593 LTO_SET_PREVAIL (TREE_OPERAND (t
, i
));
2595 else if (TREE_CODE (t
) == CONSTRUCTOR
)
2599 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (t
), i
, val
)
2600 LTO_SET_PREVAIL (val
);
2607 LTO_SET_PREVAIL (TREE_VALUE (t
));
2608 LTO_SET_PREVAIL (TREE_PURPOSE (t
));
2609 LTO_NO_PREVAIL (TREE_PURPOSE (t
));
2615 /* If we fixed nothing, then we missed something seen by
2617 gcc_checking_assert (fixed
);
2619 #undef LTO_SET_PREVAIL
2620 #undef LTO_NO_PREVAIL
2622 /* Helper function of lto_fixup_decls. Walks the var and fn streams in STATE,
2623 replaces var and function decls with the corresponding prevailing def. */
2626 lto_fixup_state (struct lto_in_decl_state
*state
)
2630 /* Although we only want to replace FUNCTION_DECLs and VAR_DECLs,
2631 we still need to walk from all DECLs to find the reachable
2632 FUNCTION_DECLs and VAR_DECLs. */
2633 for (si
= 0; si
< LTO_N_DECL_STREAMS
; si
++)
2635 vec
<tree
, va_gc
> *trees
= state
->streams
[si
];
2636 for (i
= 0; i
< vec_safe_length (trees
); i
++)
2638 tree t
= (*trees
)[i
];
2639 #ifdef ENABLE_CHECKING
2643 if (VAR_OR_FUNCTION_DECL_P (t
)
2644 && (TREE_PUBLIC (t
) || DECL_EXTERNAL (t
)))
2645 (*trees
)[i
] = lto_symtab_prevailing_decl (t
);
2650 /* Fix the decls from all FILES. Replaces each decl with the corresponding
2654 lto_fixup_decls (struct lto_file_decl_data
**files
)
2660 FOR_EACH_VEC_ELT ((*tree_with_vars
), i
, t
)
2661 lto_fixup_prevailing_decls (t
);
2663 for (i
= 0; files
[i
]; i
++)
2665 struct lto_file_decl_data
*file
= files
[i
];
2666 struct lto_in_decl_state
*state
= file
->global_decl_state
;
2667 lto_fixup_state (state
);
2669 hash_table
<decl_state_hasher
>::iterator iter
;
2670 lto_in_decl_state
*elt
;
2671 FOR_EACH_HASH_TABLE_ELEMENT (*file
->function_decl_states
, elt
,
2672 lto_in_decl_state
*, iter
)
2673 lto_fixup_state (elt
);
2677 static GTY((length ("lto_stats.num_input_files + 1"))) struct lto_file_decl_data
**all_file_decl_data
;
2679 /* Turn file datas for sub files into a single array, so that they look
2680 like separate files for further passes. */
2683 lto_flatten_files (struct lto_file_decl_data
**orig
, int count
, int last_file_ix
)
2685 struct lto_file_decl_data
*n
, *next
;
2688 lto_stats
.num_input_files
= count
;
2690 = ggc_cleared_vec_alloc
<lto_file_decl_data_ptr
> (count
+ 1);
2691 /* Set the hooks so that all of the ipa passes can read in their data. */
2692 lto_set_in_hooks (all_file_decl_data
, get_section_data
, free_section_data
);
2693 for (i
= 0, k
= 0; i
< last_file_ix
; i
++)
2695 for (n
= orig
[i
]; n
!= NULL
; n
= next
)
2697 all_file_decl_data
[k
++] = n
;
2702 all_file_decl_data
[k
] = NULL
;
2703 gcc_assert (k
== count
);
2706 /* Input file data before flattening (i.e. splitting them to subfiles to support
2707 incremental linking. */
2708 static int real_file_count
;
2709 static GTY((length ("real_file_count + 1"))) struct lto_file_decl_data
**real_file_decl_data
;
2711 static void print_lto_report_1 (void);
2713 /* Read all the symbols from the input files FNAMES. NFILES is the
2714 number of files requested in the command line. Instantiate a
2715 global call graph by aggregating all the sub-graphs found in each
2719 read_cgraph_and_symbols (unsigned nfiles
, const char **fnames
)
2721 unsigned int i
, last_file_ix
;
2724 struct lto_file_decl_data
**decl_data
;
2727 symtab
->initialize ();
2729 timevar_push (TV_IPA_LTO_DECL_IN
);
2731 #ifdef ACCEL_COMPILER
2732 section_name_prefix
= OFFLOAD_SECTION_NAME_PREFIX
;
2733 lto_stream_offload_p
= true;
2737 = decl_data
= ggc_cleared_vec_alloc
<lto_file_decl_data_ptr
> (nfiles
+ 1);
2738 real_file_count
= nfiles
;
2740 /* Read the resolution file. */
2742 if (resolution_file_name
)
2745 unsigned num_objects
;
2747 resolution
= fopen (resolution_file_name
, "r");
2748 if (resolution
== NULL
)
2749 fatal_error (input_location
,
2750 "could not open symbol resolution file: %m");
2752 t
= fscanf (resolution
, "%u", &num_objects
);
2753 gcc_assert (t
== 1);
2755 /* True, since the plugin splits the archives. */
2756 gcc_assert (num_objects
== nfiles
);
2758 symtab
->state
= LTO_STREAMING
;
2760 canonical_type_hash_cache
= new hash_map
<const_tree
, hashval_t
> (251);
2761 gimple_canonical_types
= htab_create (16381, gimple_canonical_type_hash
,
2762 gimple_canonical_type_eq
, NULL
);
2763 gcc_obstack_init (&tree_scc_hash_obstack
);
2764 tree_scc_hash
= new hash_table
<tree_scc_hasher
> (4096);
2766 /* Register the common node types with the canonical type machinery so
2767 we properly share alias-sets across languages and TUs. Do not
2768 expose the common nodes as type merge target - those that should be
2769 are already exposed so by pre-loading the LTO streamer caches.
2770 Do two passes - first clear TYPE_CANONICAL and then re-compute it. */
2771 for (i
= 0; i
< itk_none
; ++i
)
2772 lto_register_canonical_types (integer_types
[i
], true);
2773 for (i
= 0; i
< stk_type_kind_last
; ++i
)
2774 lto_register_canonical_types (sizetype_tab
[i
], true);
2775 for (i
= 0; i
< TI_MAX
; ++i
)
2776 lto_register_canonical_types (global_trees
[i
], true);
2777 for (i
= 0; i
< itk_none
; ++i
)
2778 lto_register_canonical_types (integer_types
[i
], false);
2779 for (i
= 0; i
< stk_type_kind_last
; ++i
)
2780 lto_register_canonical_types (sizetype_tab
[i
], false);
2781 for (i
= 0; i
< TI_MAX
; ++i
)
2782 lto_register_canonical_types (global_trees
[i
], false);
2785 fprintf (stderr
, "Reading object files:");
2787 /* Read all of the object files specified on the command line. */
2788 for (i
= 0, last_file_ix
= 0; i
< nfiles
; ++i
)
2790 struct lto_file_decl_data
*file_data
= NULL
;
2793 fprintf (stderr
, " %s", fnames
[i
]);
2797 current_lto_file
= lto_obj_file_open (fnames
[i
], false);
2798 if (!current_lto_file
)
2801 file_data
= lto_file_read (current_lto_file
, resolution
, &count
);
2804 lto_obj_file_close (current_lto_file
);
2805 free (current_lto_file
);
2806 current_lto_file
= NULL
;
2810 decl_data
[last_file_ix
++] = file_data
;
2812 lto_obj_file_close (current_lto_file
);
2813 free (current_lto_file
);
2814 current_lto_file
= NULL
;
2817 lto_flatten_files (decl_data
, count
, last_file_ix
);
2818 lto_stats
.num_input_files
= count
;
2819 ggc_free(decl_data
);
2820 real_file_decl_data
= NULL
;
2822 if (resolution_file_name
)
2823 fclose (resolution
);
2825 /* Show the LTO report before launching LTRANS. */
2826 if (flag_lto_report
|| (flag_wpa
&& flag_lto_report_wpa
))
2827 print_lto_report_1 ();
2829 /* Free gimple type merging datastructures. */
2830 delete tree_scc_hash
;
2831 tree_scc_hash
= NULL
;
2832 obstack_free (&tree_scc_hash_obstack
, NULL
);
2833 htab_delete (gimple_canonical_types
);
2834 gimple_canonical_types
= NULL
;
2835 delete canonical_type_hash_cache
;
2836 canonical_type_hash_cache
= NULL
;
2838 /* At this stage we know that majority of GGC memory is reachable.
2839 Growing the limits prevents unnecesary invocation of GGC. */
2843 /* Set the hooks so that all of the ipa passes can read in their data. */
2844 lto_set_in_hooks (all_file_decl_data
, get_section_data
, free_section_data
);
2846 timevar_pop (TV_IPA_LTO_DECL_IN
);
2849 fprintf (stderr
, "\nReading the callgraph\n");
2851 timevar_push (TV_IPA_LTO_CGRAPH_IO
);
2852 /* Read the symtab. */
2855 input_offload_tables ();
2857 /* Store resolutions into the symbol table. */
2859 ld_plugin_symbol_resolution_t
*res
;
2860 FOR_EACH_SYMBOL (snode
)
2861 if (snode
->real_symbol_p ()
2862 && snode
->lto_file_data
2863 && snode
->lto_file_data
->resolution_map
2864 && (res
= snode
->lto_file_data
->resolution_map
->get (snode
->decl
)))
2865 snode
->resolution
= *res
;
2866 for (i
= 0; all_file_decl_data
[i
]; i
++)
2867 if (all_file_decl_data
[i
]->resolution_map
)
2869 delete all_file_decl_data
[i
]->resolution_map
;
2870 all_file_decl_data
[i
]->resolution_map
= NULL
;
2873 timevar_pop (TV_IPA_LTO_CGRAPH_IO
);
2876 fprintf (stderr
, "Merging declarations\n");
2878 timevar_push (TV_IPA_LTO_DECL_MERGE
);
2879 /* Merge global decls. In ltrans mode we read merged cgraph, we do not
2880 need to care about resolving symbols again, we only need to replace
2881 duplicated declarations read from the callgraph and from function
2885 lto_symtab_merge_decls ();
2887 /* If there were errors during symbol merging bail out, we have no
2888 good way to recover here. */
2890 fatal_error (input_location
,
2891 "errors during merging of translation units");
2893 /* Fixup all decls. */
2894 lto_fixup_decls (all_file_decl_data
);
2897 ggc_free (tree_with_vars
);
2898 tree_with_vars
= NULL
;
2901 timevar_pop (TV_IPA_LTO_DECL_MERGE
);
2902 /* Each pass will set the appropriate timer. */
2905 fprintf (stderr
, "Reading summaries\n");
2907 /* Read the IPA summary data. */
2909 ipa_read_optimization_summaries ();
2911 ipa_read_summaries ();
2913 for (i
= 0; all_file_decl_data
[i
]; i
++)
2915 gcc_assert (all_file_decl_data
[i
]->symtab_node_encoder
);
2916 lto_symtab_encoder_delete (all_file_decl_data
[i
]->symtab_node_encoder
);
2917 all_file_decl_data
[i
]->symtab_node_encoder
= NULL
;
2918 lto_free_function_in_decl_state (all_file_decl_data
[i
]->global_decl_state
);
2919 all_file_decl_data
[i
]->global_decl_state
= NULL
;
2920 all_file_decl_data
[i
]->current_decl_state
= NULL
;
2923 /* Finally merge the cgraph according to the decl merging decisions. */
2924 timevar_push (TV_IPA_LTO_CGRAPH_MERGE
);
2925 if (symtab
->dump_file
)
2927 fprintf (symtab
->dump_file
, "Before merging:\n");
2928 symtab_node::dump_table (symtab
->dump_file
);
2932 lto_symtab_merge_symbols ();
2933 /* Removal of unreachable symbols is needed to make verify_symtab to pass;
2934 we are still having duplicated comdat groups containing local statics.
2935 We could also just remove them while merging. */
2936 symtab
->remove_unreachable_nodes (dump_file
);
2939 symtab
->state
= IPA_SSA
;
2940 /* FIXME: Technically all node removals happening here are useless, because
2941 WPA should not stream them. */
2943 symtab
->remove_unreachable_nodes (dump_file
);
2945 timevar_pop (TV_IPA_LTO_CGRAPH_MERGE
);
2947 /* Indicate that the cgraph is built and ready. */
2948 symtab
->function_flags_ready
= true;
2950 ggc_free (all_file_decl_data
);
2951 all_file_decl_data
= NULL
;
2955 /* Materialize all the bodies for all the nodes in the callgraph. */
2958 materialize_cgraph (void)
2960 struct cgraph_node
*node
;
2961 timevar_id_t lto_timer
;
2965 flag_wpa
? "Materializing decls:" : "Reading function bodies:");
2968 FOR_EACH_FUNCTION (node
)
2970 if (node
->lto_file_data
)
2972 lto_materialize_function (node
);
2973 lto_stats
.num_input_cgraph_nodes
++;
2978 /* Start the appropriate timer depending on the mode that we are
2980 lto_timer
= (flag_wpa
) ? TV_WHOPR_WPA
2981 : (flag_ltrans
) ? TV_WHOPR_LTRANS
2983 timevar_push (lto_timer
);
2985 current_function_decl
= NULL
;
2989 fprintf (stderr
, "\n");
2991 timevar_pop (lto_timer
);
2995 /* Show various memory usage statistics related to LTO. */
2997 print_lto_report_1 (void)
2999 const char *pfx
= (flag_lto
) ? "LTO" : (flag_wpa
) ? "WPA" : "LTRANS";
3000 fprintf (stderr
, "%s statistics\n", pfx
);
3002 fprintf (stderr
, "[%s] read %lu SCCs of average size %f\n",
3003 pfx
, num_sccs_read
, total_scc_size
/ (double)num_sccs_read
);
3004 fprintf (stderr
, "[%s] %lu tree bodies read in total\n", pfx
, total_scc_size
);
3005 if (flag_wpa
&& tree_scc_hash
)
3007 fprintf (stderr
, "[%s] tree SCC table: size %ld, %ld elements, "
3008 "collision ratio: %f\n", pfx
,
3009 (long) tree_scc_hash
->size (),
3010 (long) tree_scc_hash
->elements (),
3011 tree_scc_hash
->collisions ());
3012 hash_table
<tree_scc_hasher
>::iterator hiter
;
3013 tree_scc
*scc
, *max_scc
= NULL
;
3014 unsigned max_length
= 0;
3015 FOR_EACH_HASH_TABLE_ELEMENT (*tree_scc_hash
, scc
, x
, hiter
)
3017 unsigned length
= 0;
3019 for (; s
; s
= s
->next
)
3021 if (length
> max_length
)
3023 max_length
= length
;
3027 fprintf (stderr
, "[%s] tree SCC max chain length %u (size %u)\n",
3028 pfx
, max_length
, max_scc
->len
);
3029 fprintf (stderr
, "[%s] Compared %lu SCCs, %lu collisions (%f)\n", pfx
,
3030 num_scc_compares
, num_scc_compare_collisions
,
3031 num_scc_compare_collisions
/ (double) num_scc_compares
);
3032 fprintf (stderr
, "[%s] Merged %lu SCCs\n", pfx
, num_sccs_merged
);
3033 fprintf (stderr
, "[%s] Merged %lu tree bodies\n", pfx
,
3034 total_scc_size_merged
);
3035 fprintf (stderr
, "[%s] Merged %lu types\n", pfx
, num_merged_types
);
3036 fprintf (stderr
, "[%s] %lu types prevailed (%lu associated trees)\n",
3037 pfx
, num_prevailing_types
, num_type_scc_trees
);
3038 fprintf (stderr
, "[%s] GIMPLE canonical type table: size %ld, "
3039 "%ld elements, %ld searches, %ld collisions (ratio: %f)\n", pfx
,
3040 (long) htab_size (gimple_canonical_types
),
3041 (long) htab_elements (gimple_canonical_types
),
3042 (long) gimple_canonical_types
->searches
,
3043 (long) gimple_canonical_types
->collisions
,
3044 htab_collisions (gimple_canonical_types
));
3045 fprintf (stderr
, "[%s] GIMPLE canonical type pointer-map: "
3046 "%lu elements, %ld searches\n", pfx
,
3047 num_canonical_type_hash_entries
,
3048 num_canonical_type_hash_queries
);
3051 print_lto_report (pfx
);
3054 /* Perform whole program analysis (WPA) on the callgraph and write out the
3055 optimization plan. */
3058 do_whole_program_analysis (void)
3062 lto_parallelism
= 1;
3064 /* TODO: jobserver communicatoin is not supported, yet. */
3065 if (!strcmp (flag_wpa
, "jobserver"))
3066 lto_parallelism
= -1;
3069 lto_parallelism
= atoi (flag_wpa
);
3070 if (lto_parallelism
<= 0)
3071 lto_parallelism
= 0;
3074 timevar_start (TV_PHASE_OPT_GEN
);
3076 /* Note that since we are in WPA mode, materialize_cgraph will not
3077 actually read in all the function bodies. It only materializes
3078 the decls and cgraph nodes so that analysis can be performed. */
3079 materialize_cgraph ();
3081 /* Reading in the cgraph uses different timers, start timing WPA now. */
3082 timevar_push (TV_WHOPR_WPA
);
3084 if (pre_ipa_mem_report
)
3086 fprintf (stderr
, "Memory consumption before IPA\n");
3087 dump_memory_report (false);
3090 symtab
->function_flags_ready
= true;
3092 if (symtab
->dump_file
)
3093 symtab_node::dump_table (symtab
->dump_file
);
3094 bitmap_obstack_initialize (NULL
);
3095 symtab
->state
= IPA_SSA
;
3097 execute_ipa_pass_list (g
->get_passes ()->all_regular_ipa_passes
);
3099 if (symtab
->dump_file
)
3101 fprintf (symtab
->dump_file
, "Optimized ");
3102 symtab_node::dump_table (symtab
->dump_file
);
3104 #ifdef ENABLE_CHECKING
3105 symtab_node::verify_symtab_nodes ();
3107 bitmap_obstack_release (NULL
);
3109 /* We are about to launch the final LTRANS phase, stop the WPA timer. */
3110 timevar_pop (TV_WHOPR_WPA
);
3112 timevar_push (TV_WHOPR_PARTITIONING
);
3113 if (flag_lto_partition
== LTO_PARTITION_1TO1
)
3115 else if (flag_lto_partition
== LTO_PARTITION_MAX
)
3117 else if (flag_lto_partition
== LTO_PARTITION_ONE
)
3118 lto_balanced_map (1);
3119 else if (flag_lto_partition
== LTO_PARTITION_BALANCED
)
3120 lto_balanced_map (PARAM_VALUE (PARAM_LTO_PARTITIONS
));
3124 /* Inline summaries are needed for balanced partitioning. Free them now so
3125 the memory can be used for streamer caches. */
3126 inline_free_summary ();
3128 /* AUX pointers are used by partitioning code to bookkeep number of
3129 partitions symbol is in. This is no longer needed. */
3130 FOR_EACH_SYMBOL (node
)
3133 lto_stats
.num_cgraph_partitions
+= ltrans_partitions
.length ();
3135 /* Find out statics that need to be promoted
3136 to globals with hidden visibility because they are accessed from multiple
3138 lto_promote_cross_file_statics ();
3139 timevar_pop (TV_WHOPR_PARTITIONING
);
3141 timevar_stop (TV_PHASE_OPT_GEN
);
3143 /* Collect a last time - in lto_wpa_write_files we may end up forking
3144 with the idea that this doesn't increase memory usage. So we
3145 absoultely do not want to collect after that. */
3148 timevar_start (TV_PHASE_STREAM_OUT
);
3151 fprintf (stderr
, "\nStreaming out");
3154 lto_wpa_write_files ();
3156 fprintf (stderr
, "\n");
3157 timevar_stop (TV_PHASE_STREAM_OUT
);
3159 if (post_ipa_mem_report
)
3161 fprintf (stderr
, "Memory consumption after IPA\n");
3162 dump_memory_report (false);
3165 /* Show the LTO report before launching LTRANS. */
3166 if (flag_lto_report
|| (flag_wpa
&& flag_lto_report_wpa
))
3167 print_lto_report_1 ();
3169 dump_memory_report (true);
3173 static GTY(()) tree lto_eh_personality_decl
;
3175 /* Return the LTO personality function decl. */
3178 lto_eh_personality (void)
3180 if (!lto_eh_personality_decl
)
3182 /* Use the first personality DECL for our personality if we don't
3183 support multiple ones. This ensures that we don't artificially
3184 create the need for them in a single-language program. */
3185 if (first_personality_decl
&& !dwarf2out_do_cfi_asm ())
3186 lto_eh_personality_decl
= first_personality_decl
;
3188 lto_eh_personality_decl
= lhd_gcc_personality ();
3191 return lto_eh_personality_decl
;
3194 /* Set the process name based on the LTO mode. */
3197 lto_process_name (void)
3200 setproctitle ("lto1-lto");
3202 setproctitle ("lto1-wpa");
3204 setproctitle ("lto1-ltrans");
3208 /* Initialize the LTO front end. */
3213 lto_process_name ();
3214 lto_streamer_hooks_init ();
3216 lto_set_in_hooks (NULL
, get_section_data
, free_section_data
);
3217 memset (<o_stats
, 0, sizeof (lto_stats
));
3218 bitmap_obstack_initialize (NULL
);
3219 gimple_register_cfg_hooks ();
3220 #ifndef ACCEL_COMPILER
3221 unsigned char *table
3222 = ggc_vec_alloc
<unsigned char> (MAX_MACHINE_MODE
);
3223 for (int m
= 0; m
< MAX_MACHINE_MODE
; m
++)
3225 lto_mode_identity_table
= table
;
3230 /* Main entry point for the GIMPLE front end. This front end has
3231 three main personalities:
3233 - LTO (-flto). All the object files on the command line are
3234 loaded in memory and processed as a single translation unit.
3235 This is the traditional link-time optimization behavior.
3237 - WPA (-fwpa). Only the callgraph and summary information for
3238 files in the command file are loaded. A single callgraph
3239 (without function bodies) is instantiated for the whole set of
3240 files. IPA passes are only allowed to analyze the call graph
3241 and make transformation decisions. The callgraph is
3242 partitioned, each partition is written to a new object file
3243 together with the transformation decisions.
3245 - LTRANS (-fltrans). Similar to -flto but it prevents the IPA
3246 summary files from running again. Since WPA computed summary
3247 information and decided what transformations to apply, LTRANS
3248 simply applies them. */
3253 /* LTO is called as a front end, even though it is not a front end.
3254 Because it is called as a front end, TV_PHASE_PARSING and
3255 TV_PARSE_GLOBAL are active, and we need to turn them off while
3256 doing LTO. Later we turn them back on so they are active up in
3258 timevar_pop (TV_PARSE_GLOBAL
);
3259 timevar_stop (TV_PHASE_PARSING
);
3261 timevar_start (TV_PHASE_SETUP
);
3263 /* Initialize the LTO front end. */
3266 timevar_stop (TV_PHASE_SETUP
);
3267 timevar_start (TV_PHASE_STREAM_IN
);
3269 /* Read all the symbols and call graph from all the files in the
3271 read_cgraph_and_symbols (num_in_fnames
, in_fnames
);
3273 timevar_stop (TV_PHASE_STREAM_IN
);
3277 /* If WPA is enabled analyze the whole call graph and create an
3278 optimization plan. Otherwise, read in all the function
3279 bodies and continue with optimization. */
3281 do_whole_program_analysis ();
3284 timevar_start (TV_PHASE_OPT_GEN
);
3286 materialize_cgraph ();
3288 lto_promote_statics_nonwpa ();
3290 /* Let the middle end know that we have read and merged all of
3294 timevar_stop (TV_PHASE_OPT_GEN
);
3296 /* FIXME lto, if the processes spawned by WPA fail, we miss
3297 the chance to print WPA's report, so WPA will call
3298 print_lto_report before launching LTRANS. If LTRANS was
3299 launched directly by the driver we would not need to do
3301 if (flag_lto_report
|| (flag_wpa
&& flag_lto_report_wpa
))
3302 print_lto_report_1 ();
3306 /* Here we make LTO pretend to be a parser. */
3307 timevar_start (TV_PHASE_PARSING
);
3308 timevar_push (TV_PARSE_GLOBAL
);
3311 #include "gt-lto-lto.h"