1 /* Top-level LTO routines.
2 Copyright (C) 2009-2013 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"
27 #include "diagnostic-core.h"
31 #include "tree-ssa-operands.h"
32 #include "tree-pass.h"
33 #include "langhooks.h"
36 #include "pointer-set.h"
43 #include "lto-streamer.h"
44 #include "tree-streamer.h"
45 #include "splay-tree.h"
46 #include "lto-partition.h"
47 #include "data-streamer.h"
49 #include "pass_manager.h"
51 /* Vector to keep track of external variables we've seen so far. */
52 vec
<tree
, va_gc
> *lto_global_var_decls
;
54 static GTY(()) tree first_personality_decl
;
56 /* Returns a hash code for P. */
59 hash_name (const void *p
)
61 const struct lto_section_slot
*ds
= (const struct lto_section_slot
*) p
;
62 return (hashval_t
) htab_hash_string (ds
->name
);
66 /* Returns nonzero if P1 and P2 are equal. */
69 eq_name (const void *p1
, const void *p2
)
71 const struct lto_section_slot
*s1
=
72 (const struct lto_section_slot
*) p1
;
73 const struct lto_section_slot
*s2
=
74 (const struct lto_section_slot
*) p2
;
76 return strcmp (s1
->name
, s2
->name
) == 0;
79 /* Free lto_section_slot */
82 free_with_string (void *arg
)
84 struct lto_section_slot
*s
= (struct lto_section_slot
*)arg
;
86 free (CONST_CAST (char *, s
->name
));
90 /* Create section hash table */
93 lto_obj_create_section_hash_table (void)
95 return htab_create (37, hash_name
, eq_name
, free_with_string
);
98 /* Delete an allocated integer KEY in the splay tree. */
101 lto_splay_tree_delete_id (splay_tree_key key
)
106 /* Compare splay tree node ids A and B. */
109 lto_splay_tree_compare_ids (splay_tree_key a
, splay_tree_key b
)
111 unsigned HOST_WIDE_INT ai
;
112 unsigned HOST_WIDE_INT bi
;
114 ai
= *(unsigned HOST_WIDE_INT
*) a
;
115 bi
= *(unsigned HOST_WIDE_INT
*) b
;
124 /* Look up splay tree node by ID in splay tree T. */
126 static splay_tree_node
127 lto_splay_tree_lookup (splay_tree t
, unsigned HOST_WIDE_INT id
)
129 return splay_tree_lookup (t
, (splay_tree_key
) &id
);
132 /* Check if KEY has ID. */
135 lto_splay_tree_id_equal_p (splay_tree_key key
, unsigned HOST_WIDE_INT id
)
137 return *(unsigned HOST_WIDE_INT
*) key
== id
;
140 /* Insert a splay tree node into tree T with ID as key and FILE_DATA as value.
141 The ID is allocated separately because we need HOST_WIDE_INTs which may
142 be wider than a splay_tree_key. */
145 lto_splay_tree_insert (splay_tree t
, unsigned HOST_WIDE_INT id
,
146 struct lto_file_decl_data
*file_data
)
148 unsigned HOST_WIDE_INT
*idp
= XCNEW (unsigned HOST_WIDE_INT
);
150 splay_tree_insert (t
, (splay_tree_key
) idp
, (splay_tree_value
) file_data
);
153 /* Create a splay tree. */
156 lto_splay_tree_new (void)
158 return splay_tree_new (lto_splay_tree_compare_ids
,
159 lto_splay_tree_delete_id
,
163 /* Return true when NODE has a clone that is analyzed (i.e. we need
164 to load its body even if the node itself is not needed). */
167 has_analyzed_clone_p (struct cgraph_node
*node
)
169 struct cgraph_node
*orig
= node
;
178 else if (node
->next_sibling_clone
)
179 node
= node
->next_sibling_clone
;
182 while (node
!= orig
&& !node
->next_sibling_clone
)
183 node
= node
->clone_of
;
185 node
= node
->next_sibling_clone
;
191 /* Read the function body for the function associated with NODE. */
194 lto_materialize_function (struct cgraph_node
*node
)
199 /* Read in functions with body (analyzed nodes)
200 and also functions that are needed to produce virtual clones. */
201 if ((cgraph_function_with_gimple_body_p (node
) && node
->analyzed
)
202 || node
->used_as_abstract_origin
203 || has_analyzed_clone_p (node
))
205 /* Clones don't need to be read. */
208 if (DECL_FUNCTION_PERSONALITY (decl
) && !first_personality_decl
)
209 first_personality_decl
= DECL_FUNCTION_PERSONALITY (decl
);
212 /* Let the middle end know about the function. */
213 rest_of_decl_compilation (decl
, 1, 0);
217 /* Decode the content of memory pointed to by DATA in the in decl
218 state object STATE. DATA_IN points to a data_in structure for
219 decoding. Return the address after the decoded object in the
222 static const uint32_t *
223 lto_read_in_decl_state (struct data_in
*data_in
, const uint32_t *data
,
224 struct lto_in_decl_state
*state
)
231 decl
= streamer_tree_cache_get_tree (data_in
->reader_cache
, ix
);
232 if (TREE_CODE (decl
) != FUNCTION_DECL
)
234 gcc_assert (decl
== void_type_node
);
237 state
->fn_decl
= decl
;
239 for (i
= 0; i
< LTO_N_DECL_STREAMS
; i
++)
241 uint32_t size
= *data
++;
242 tree
*decls
= ggc_alloc_vec_tree (size
);
244 for (j
= 0; j
< size
; j
++)
245 decls
[j
] = streamer_tree_cache_get_tree (data_in
->reader_cache
, data
[j
]);
247 state
->streams
[i
].size
= size
;
248 state
->streams
[i
].trees
= decls
;
256 /* Global canonical type table. */
257 static htab_t gimple_canonical_types
;
258 static pointer_map
<hashval_t
> *canonical_type_hash_cache
;
259 static unsigned long num_canonical_type_hash_entries
;
260 static unsigned long num_canonical_type_hash_queries
;
262 static hashval_t
iterative_hash_canonical_type (tree type
, hashval_t val
);
263 static hashval_t
gimple_canonical_type_hash (const void *p
);
264 static void gimple_register_canonical_type_1 (tree t
, hashval_t hash
);
266 /* Returning a hash value for gimple type TYPE.
268 The hash value returned is equal for types considered compatible
269 by gimple_canonical_types_compatible_p. */
272 hash_canonical_type (tree type
)
276 /* Combine a few common features of types so that types are grouped into
277 smaller sets; when searching for existing matching types to merge,
278 only existing types having the same features as the new type will be
280 v
= iterative_hash_hashval_t (TREE_CODE (type
), 0);
281 v
= iterative_hash_hashval_t (TREE_ADDRESSABLE (type
), v
);
282 v
= iterative_hash_hashval_t (TYPE_ALIGN (type
), v
);
283 v
= iterative_hash_hashval_t (TYPE_MODE (type
), v
);
285 /* Incorporate common features of numerical types. */
286 if (INTEGRAL_TYPE_P (type
)
287 || SCALAR_FLOAT_TYPE_P (type
)
288 || FIXED_POINT_TYPE_P (type
)
289 || TREE_CODE (type
) == OFFSET_TYPE
290 || POINTER_TYPE_P (type
))
292 v
= iterative_hash_hashval_t (TYPE_PRECISION (type
), v
);
293 v
= iterative_hash_hashval_t (TYPE_UNSIGNED (type
), v
);
296 if (VECTOR_TYPE_P (type
))
298 v
= iterative_hash_hashval_t (TYPE_VECTOR_SUBPARTS (type
), v
);
299 v
= iterative_hash_hashval_t (TYPE_UNSIGNED (type
), v
);
302 if (TREE_CODE (type
) == COMPLEX_TYPE
)
303 v
= iterative_hash_hashval_t (TYPE_UNSIGNED (type
), v
);
305 /* For pointer and reference types, fold in information about the type
306 pointed to but do not recurse to the pointed-to type. */
307 if (POINTER_TYPE_P (type
))
309 v
= iterative_hash_hashval_t (TYPE_REF_CAN_ALIAS_ALL (type
), v
);
310 v
= iterative_hash_hashval_t (TYPE_ADDR_SPACE (TREE_TYPE (type
)), v
);
311 v
= iterative_hash_hashval_t (TYPE_RESTRICT (type
), v
);
312 v
= iterative_hash_hashval_t (TREE_CODE (TREE_TYPE (type
)), v
);
315 /* For integer types hash only the string flag. */
316 if (TREE_CODE (type
) == INTEGER_TYPE
)
317 v
= iterative_hash_hashval_t (TYPE_STRING_FLAG (type
), v
);
319 /* For array types hash the domain bounds and the string flag. */
320 if (TREE_CODE (type
) == ARRAY_TYPE
&& TYPE_DOMAIN (type
))
322 v
= iterative_hash_hashval_t (TYPE_STRING_FLAG (type
), v
);
323 /* OMP lowering can introduce error_mark_node in place of
324 random local decls in types. */
325 if (TYPE_MIN_VALUE (TYPE_DOMAIN (type
)) != error_mark_node
)
326 v
= iterative_hash_expr (TYPE_MIN_VALUE (TYPE_DOMAIN (type
)), v
);
327 if (TYPE_MAX_VALUE (TYPE_DOMAIN (type
)) != error_mark_node
)
328 v
= iterative_hash_expr (TYPE_MAX_VALUE (TYPE_DOMAIN (type
)), v
);
331 /* Recurse for aggregates with a single element type. */
332 if (TREE_CODE (type
) == ARRAY_TYPE
333 || TREE_CODE (type
) == COMPLEX_TYPE
334 || TREE_CODE (type
) == VECTOR_TYPE
)
335 v
= iterative_hash_canonical_type (TREE_TYPE (type
), v
);
337 /* Incorporate function return and argument types. */
338 if (TREE_CODE (type
) == FUNCTION_TYPE
|| TREE_CODE (type
) == METHOD_TYPE
)
343 /* For method types also incorporate their parent class. */
344 if (TREE_CODE (type
) == METHOD_TYPE
)
345 v
= iterative_hash_canonical_type (TYPE_METHOD_BASETYPE (type
), v
);
347 v
= iterative_hash_canonical_type (TREE_TYPE (type
), v
);
349 for (p
= TYPE_ARG_TYPES (type
), na
= 0; p
; p
= TREE_CHAIN (p
))
351 v
= iterative_hash_canonical_type (TREE_VALUE (p
), v
);
355 v
= iterative_hash_hashval_t (na
, v
);
358 if (RECORD_OR_UNION_TYPE_P (type
))
363 for (f
= TYPE_FIELDS (type
), nf
= 0; f
; f
= TREE_CHAIN (f
))
364 if (TREE_CODE (f
) == FIELD_DECL
)
366 v
= iterative_hash_canonical_type (TREE_TYPE (f
), v
);
370 v
= iterative_hash_hashval_t (nf
, v
);
376 /* Returning a hash value for gimple type TYPE combined with VAL. */
379 iterative_hash_canonical_type (tree type
, hashval_t val
)
382 /* An already processed type. */
383 if (TYPE_CANONICAL (type
))
385 type
= TYPE_CANONICAL (type
);
386 v
= gimple_canonical_type_hash (type
);
390 /* Canonical types should not be able to form SCCs by design, this
391 recursion is just because we do not register canonical types in
392 optimal order. To avoid quadratic behavior also register the
394 v
= hash_canonical_type (type
);
395 gimple_register_canonical_type_1 (type
, v
);
397 return iterative_hash_hashval_t (v
, val
);
400 /* Returns the hash for a canonical type P. */
403 gimple_canonical_type_hash (const void *p
)
405 num_canonical_type_hash_queries
++;
407 = canonical_type_hash_cache
->contains (CONST_CAST_TREE ((const_tree
) p
));
408 gcc_assert (slot
!= NULL
);
413 /* The TYPE_CANONICAL merging machinery. It should closely resemble
414 the middle-end types_compatible_p function. It needs to avoid
415 claiming types are different for types that should be treated
416 the same with respect to TBAA. Canonical types are also used
417 for IL consistency checks via the useless_type_conversion_p
418 predicate which does not handle all type kinds itself but falls
419 back to pointer-comparison of TYPE_CANONICAL for aggregates
422 /* Return true iff T1 and T2 are structurally identical for what
423 TBAA is concerned. */
426 gimple_canonical_types_compatible_p (tree t1
, tree t2
)
428 /* Before starting to set up the SCC machinery handle simple cases. */
430 /* Check first for the obvious case of pointer identity. */
434 /* Check that we have two types to compare. */
435 if (t1
== NULL_TREE
|| t2
== NULL_TREE
)
438 /* If the types have been previously registered and found equal
440 if (TYPE_CANONICAL (t1
)
441 && TYPE_CANONICAL (t1
) == TYPE_CANONICAL (t2
))
444 /* Can't be the same type if the types don't have the same code. */
445 if (TREE_CODE (t1
) != TREE_CODE (t2
))
448 if (TREE_ADDRESSABLE (t1
) != TREE_ADDRESSABLE (t2
))
451 /* Qualifiers do not matter for canonical type comparison purposes. */
453 /* Void types and nullptr types are always the same. */
454 if (TREE_CODE (t1
) == VOID_TYPE
455 || TREE_CODE (t1
) == NULLPTR_TYPE
)
458 /* Can't be the same type if they have different alignment, or mode. */
459 if (TYPE_ALIGN (t1
) != TYPE_ALIGN (t2
)
460 || TYPE_MODE (t1
) != TYPE_MODE (t2
))
463 /* Non-aggregate types can be handled cheaply. */
464 if (INTEGRAL_TYPE_P (t1
)
465 || SCALAR_FLOAT_TYPE_P (t1
)
466 || FIXED_POINT_TYPE_P (t1
)
467 || TREE_CODE (t1
) == VECTOR_TYPE
468 || TREE_CODE (t1
) == COMPLEX_TYPE
469 || TREE_CODE (t1
) == OFFSET_TYPE
470 || POINTER_TYPE_P (t1
))
472 /* Can't be the same type if they have different sign or precision. */
473 if (TYPE_PRECISION (t1
) != TYPE_PRECISION (t2
)
474 || TYPE_UNSIGNED (t1
) != TYPE_UNSIGNED (t2
))
477 if (TREE_CODE (t1
) == INTEGER_TYPE
478 && TYPE_STRING_FLAG (t1
) != TYPE_STRING_FLAG (t2
))
481 /* For canonical type comparisons we do not want to build SCCs
482 so we cannot compare pointed-to types. But we can, for now,
483 require the same pointed-to type kind and match what
484 useless_type_conversion_p would do. */
485 if (POINTER_TYPE_P (t1
))
487 /* If the two pointers have different ref-all attributes,
488 they can't be the same type. */
489 if (TYPE_REF_CAN_ALIAS_ALL (t1
) != TYPE_REF_CAN_ALIAS_ALL (t2
))
492 if (TYPE_ADDR_SPACE (TREE_TYPE (t1
))
493 != TYPE_ADDR_SPACE (TREE_TYPE (t2
)))
496 if (TYPE_RESTRICT (t1
) != TYPE_RESTRICT (t2
))
499 if (TREE_CODE (TREE_TYPE (t1
)) != TREE_CODE (TREE_TYPE (t2
)))
503 /* Tail-recurse to components. */
504 if (TREE_CODE (t1
) == VECTOR_TYPE
505 || TREE_CODE (t1
) == COMPLEX_TYPE
)
506 return gimple_canonical_types_compatible_p (TREE_TYPE (t1
),
512 /* Do type-specific comparisons. */
513 switch (TREE_CODE (t1
))
516 /* Array types are the same if the element types are the same and
517 the number of elements are the same. */
518 if (!gimple_canonical_types_compatible_p (TREE_TYPE (t1
), TREE_TYPE (t2
))
519 || TYPE_STRING_FLAG (t1
) != TYPE_STRING_FLAG (t2
)
520 || TYPE_NONALIASED_COMPONENT (t1
) != TYPE_NONALIASED_COMPONENT (t2
))
524 tree i1
= TYPE_DOMAIN (t1
);
525 tree i2
= TYPE_DOMAIN (t2
);
527 /* For an incomplete external array, the type domain can be
528 NULL_TREE. Check this condition also. */
529 if (i1
== NULL_TREE
&& i2
== NULL_TREE
)
531 else if (i1
== NULL_TREE
|| i2
== NULL_TREE
)
535 tree min1
= TYPE_MIN_VALUE (i1
);
536 tree min2
= TYPE_MIN_VALUE (i2
);
537 tree max1
= TYPE_MAX_VALUE (i1
);
538 tree max2
= TYPE_MAX_VALUE (i2
);
540 /* The minimum/maximum values have to be the same. */
543 && ((TREE_CODE (min1
) == PLACEHOLDER_EXPR
544 && TREE_CODE (min2
) == PLACEHOLDER_EXPR
)
545 || operand_equal_p (min1
, min2
, 0))))
548 && ((TREE_CODE (max1
) == PLACEHOLDER_EXPR
549 && TREE_CODE (max2
) == PLACEHOLDER_EXPR
)
550 || operand_equal_p (max1
, max2
, 0)))))
559 /* Function types are the same if the return type and arguments types
561 if (!gimple_canonical_types_compatible_p (TREE_TYPE (t1
), TREE_TYPE (t2
)))
564 if (!comp_type_attributes (t1
, t2
))
567 if (TYPE_ARG_TYPES (t1
) == TYPE_ARG_TYPES (t2
))
573 for (parms1
= TYPE_ARG_TYPES (t1
), parms2
= TYPE_ARG_TYPES (t2
);
575 parms1
= TREE_CHAIN (parms1
), parms2
= TREE_CHAIN (parms2
))
577 if (!gimple_canonical_types_compatible_p
578 (TREE_VALUE (parms1
), TREE_VALUE (parms2
)))
582 if (parms1
|| parms2
)
590 case QUAL_UNION_TYPE
:
594 /* For aggregate types, all the fields must be the same. */
595 for (f1
= TYPE_FIELDS (t1
), f2
= TYPE_FIELDS (t2
);
597 f1
= TREE_CHAIN (f1
), f2
= TREE_CHAIN (f2
))
599 /* Skip non-fields. */
600 while (f1
&& TREE_CODE (f1
) != FIELD_DECL
)
601 f1
= TREE_CHAIN (f1
);
602 while (f2
&& TREE_CODE (f2
) != FIELD_DECL
)
603 f2
= TREE_CHAIN (f2
);
606 /* The fields must have the same name, offset and type. */
607 if (DECL_NONADDRESSABLE_P (f1
) != DECL_NONADDRESSABLE_P (f2
)
608 || !gimple_compare_field_offset (f1
, f2
)
609 || !gimple_canonical_types_compatible_p
610 (TREE_TYPE (f1
), TREE_TYPE (f2
)))
614 /* If one aggregate has more fields than the other, they
628 /* Returns nonzero if P1 and P2 are equal. */
631 gimple_canonical_type_eq (const void *p1
, const void *p2
)
633 const_tree t1
= (const_tree
) p1
;
634 const_tree t2
= (const_tree
) p2
;
635 return gimple_canonical_types_compatible_p (CONST_CAST_TREE (t1
),
636 CONST_CAST_TREE (t2
));
639 /* Main worker for gimple_register_canonical_type. */
642 gimple_register_canonical_type_1 (tree t
, hashval_t hash
)
646 gcc_checking_assert (TYPE_P (t
) && !TYPE_CANONICAL (t
));
648 slot
= htab_find_slot_with_hash (gimple_canonical_types
, t
, hash
, INSERT
);
651 tree new_type
= (tree
)(*slot
);
652 gcc_checking_assert (new_type
!= t
);
653 TYPE_CANONICAL (t
) = new_type
;
657 TYPE_CANONICAL (t
) = t
;
659 /* Cache the just computed hash value. */
660 num_canonical_type_hash_entries
++;
662 hashval_t
*hslot
= canonical_type_hash_cache
->insert (t
, &existed_p
);
663 gcc_assert (!existed_p
);
668 /* Register type T in the global type table gimple_types and set
669 TYPE_CANONICAL of T accordingly.
670 This is used by LTO to merge structurally equivalent types for
671 type-based aliasing purposes across different TUs and languages.
673 ??? This merging does not exactly match how the tree.c middle-end
674 functions will assign TYPE_CANONICAL when new types are created
675 during optimization (which at least happens for pointer and array
679 gimple_register_canonical_type (tree t
)
681 if (TYPE_CANONICAL (t
))
684 gimple_register_canonical_type_1 (t
, hash_canonical_type (t
));
687 /* Re-compute TYPE_CANONICAL for NODE and related types. */
690 lto_register_canonical_types (tree node
, bool first_p
)
697 TYPE_CANONICAL (node
) = NULL_TREE
;
699 if (POINTER_TYPE_P (node
)
700 || TREE_CODE (node
) == COMPLEX_TYPE
701 || TREE_CODE (node
) == ARRAY_TYPE
)
702 lto_register_canonical_types (TREE_TYPE (node
), first_p
);
705 gimple_register_canonical_type (node
);
709 /* Remember trees that contains references to declarations. */
710 static GTY(()) vec
<tree
, va_gc
> *tree_with_vars
;
712 #define CHECK_VAR(tt) \
715 if ((tt) && VAR_OR_FUNCTION_DECL_P (tt) \
716 && (TREE_PUBLIC (tt) || DECL_EXTERNAL (tt))) \
720 #define CHECK_NO_VAR(tt) \
721 gcc_checking_assert (!(tt) || !VAR_OR_FUNCTION_DECL_P (tt))
723 /* Check presence of pointers to decls in fields of a tree_typed T. */
726 mentions_vars_p_typed (tree t
)
728 CHECK_NO_VAR (TREE_TYPE (t
));
732 /* Check presence of pointers to decls in fields of a tree_common T. */
735 mentions_vars_p_common (tree t
)
737 if (mentions_vars_p_typed (t
))
739 CHECK_NO_VAR (TREE_CHAIN (t
));
743 /* Check presence of pointers to decls in fields of a decl_minimal T. */
746 mentions_vars_p_decl_minimal (tree t
)
748 if (mentions_vars_p_common (t
))
750 CHECK_NO_VAR (DECL_NAME (t
));
751 CHECK_VAR (DECL_CONTEXT (t
));
755 /* Check presence of pointers to decls in fields of a decl_common T. */
758 mentions_vars_p_decl_common (tree t
)
760 if (mentions_vars_p_decl_minimal (t
))
762 CHECK_VAR (DECL_SIZE (t
));
763 CHECK_VAR (DECL_SIZE_UNIT (t
));
764 CHECK_VAR (DECL_INITIAL (t
));
765 CHECK_NO_VAR (DECL_ATTRIBUTES (t
));
766 CHECK_VAR (DECL_ABSTRACT_ORIGIN (t
));
770 /* Check presence of pointers to decls in fields of a decl_with_vis T. */
773 mentions_vars_p_decl_with_vis (tree t
)
775 if (mentions_vars_p_decl_common (t
))
778 /* Accessor macro has side-effects, use field-name here. */
779 CHECK_NO_VAR (t
->decl_with_vis
.assembler_name
);
780 CHECK_NO_VAR (DECL_SECTION_NAME (t
));
784 /* Check presence of pointers to decls in fields of a decl_non_common T. */
787 mentions_vars_p_decl_non_common (tree t
)
789 if (mentions_vars_p_decl_with_vis (t
))
791 CHECK_NO_VAR (DECL_ARGUMENT_FLD (t
));
792 CHECK_NO_VAR (DECL_RESULT_FLD (t
));
793 CHECK_NO_VAR (DECL_VINDEX (t
));
797 /* Check presence of pointers to decls in fields of a decl_non_common T. */
800 mentions_vars_p_function (tree t
)
802 if (mentions_vars_p_decl_non_common (t
))
804 CHECK_VAR (DECL_FUNCTION_PERSONALITY (t
));
808 /* Check presence of pointers to decls in fields of a field_decl T. */
811 mentions_vars_p_field_decl (tree t
)
813 if (mentions_vars_p_decl_common (t
))
815 CHECK_VAR (DECL_FIELD_OFFSET (t
));
816 CHECK_NO_VAR (DECL_BIT_FIELD_TYPE (t
));
817 CHECK_NO_VAR (DECL_QUALIFIER (t
));
818 CHECK_NO_VAR (DECL_FIELD_BIT_OFFSET (t
));
819 CHECK_NO_VAR (DECL_FCONTEXT (t
));
823 /* Check presence of pointers to decls in fields of a type T. */
826 mentions_vars_p_type (tree t
)
828 if (mentions_vars_p_common (t
))
830 CHECK_NO_VAR (TYPE_CACHED_VALUES (t
));
831 CHECK_VAR (TYPE_SIZE (t
));
832 CHECK_VAR (TYPE_SIZE_UNIT (t
));
833 CHECK_NO_VAR (TYPE_ATTRIBUTES (t
));
834 CHECK_NO_VAR (TYPE_NAME (t
));
836 CHECK_VAR (TYPE_MINVAL (t
));
837 CHECK_VAR (TYPE_MAXVAL (t
));
839 /* Accessor is for derived node types only. */
840 CHECK_NO_VAR (t
->type_non_common
.binfo
);
842 CHECK_VAR (TYPE_CONTEXT (t
));
843 CHECK_NO_VAR (TYPE_CANONICAL (t
));
844 CHECK_NO_VAR (TYPE_MAIN_VARIANT (t
));
845 CHECK_NO_VAR (TYPE_NEXT_VARIANT (t
));
849 /* Check presence of pointers to decls in fields of a BINFO T. */
852 mentions_vars_p_binfo (tree t
)
854 unsigned HOST_WIDE_INT i
, n
;
856 if (mentions_vars_p_common (t
))
858 CHECK_VAR (BINFO_VTABLE (t
));
859 CHECK_NO_VAR (BINFO_OFFSET (t
));
860 CHECK_NO_VAR (BINFO_VIRTUALS (t
));
861 CHECK_NO_VAR (BINFO_VPTR_FIELD (t
));
862 n
= vec_safe_length (BINFO_BASE_ACCESSES (t
));
863 for (i
= 0; i
< n
; i
++)
864 CHECK_NO_VAR (BINFO_BASE_ACCESS (t
, i
));
865 /* Do not walk BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX
866 and BINFO_VPTR_INDEX; these are used by C++ FE only. */
867 n
= BINFO_N_BASE_BINFOS (t
);
868 for (i
= 0; i
< n
; i
++)
869 CHECK_NO_VAR (BINFO_BASE_BINFO (t
, i
));
873 /* Check presence of pointers to decls in fields of a CONSTRUCTOR T. */
876 mentions_vars_p_constructor (tree t
)
878 unsigned HOST_WIDE_INT idx
;
881 if (mentions_vars_p_typed (t
))
884 for (idx
= 0; vec_safe_iterate (CONSTRUCTOR_ELTS (t
), idx
, &ce
); idx
++)
886 CHECK_NO_VAR (ce
->index
);
887 CHECK_VAR (ce
->value
);
892 /* Check presence of pointers to decls in fields of an expression tree T. */
895 mentions_vars_p_expr (tree t
)
898 if (mentions_vars_p_typed (t
))
900 for (i
= TREE_OPERAND_LENGTH (t
) - 1; i
>= 0; --i
)
901 CHECK_VAR (TREE_OPERAND (t
, i
));
905 /* Check presence of pointers to decls that needs later fixup in T. */
908 mentions_vars_p (tree t
)
910 switch (TREE_CODE (t
))
912 case IDENTIFIER_NODE
:
916 CHECK_VAR (TREE_VALUE (t
));
917 CHECK_VAR (TREE_PURPOSE (t
));
918 CHECK_NO_VAR (TREE_CHAIN (t
));
922 return mentions_vars_p_field_decl (t
);
931 return mentions_vars_p_decl_common (t
);
935 return mentions_vars_p_decl_with_vis (t
);
939 return mentions_vars_p_decl_non_common (t
);
943 return mentions_vars_p_function (t
);
947 return mentions_vars_p_binfo (t
);
950 case PLACEHOLDER_EXPR
:
951 return mentions_vars_p_common (t
);
955 case TRANSLATION_UNIT_DECL
:
956 case OPTIMIZATION_NODE
:
957 case TARGET_OPTION_NODE
:
961 return mentions_vars_p_constructor (t
);
967 if (mentions_vars_p_type (t
))
972 if (mentions_vars_p_expr (t
))
975 else if (CONSTANT_CLASS_P (t
))
976 CHECK_NO_VAR (TREE_TYPE (t
));
984 /* Return the resolution for the decl with index INDEX from DATA_IN. */
986 static enum ld_plugin_symbol_resolution
987 get_resolution (struct data_in
*data_in
, unsigned index
)
989 if (data_in
->globals_resolution
.exists ())
991 ld_plugin_symbol_resolution_t ret
;
992 /* We can have references to not emitted functions in
993 DECL_FUNCTION_PERSONALITY at least. So we can and have
994 to indeed return LDPR_UNKNOWN in some cases. */
995 if (data_in
->globals_resolution
.length () <= index
)
997 ret
= data_in
->globals_resolution
[index
];
1001 /* Delay resolution finding until decl merging. */
1002 return LDPR_UNKNOWN
;
1005 /* We need to record resolutions until symbol table is read. */
1007 register_resolution (struct lto_file_decl_data
*file_data
, tree decl
,
1008 enum ld_plugin_symbol_resolution resolution
)
1010 if (resolution
== LDPR_UNKNOWN
)
1012 if (!file_data
->resolution_map
)
1013 file_data
->resolution_map
= pointer_map_create ();
1014 *pointer_map_insert (file_data
->resolution_map
, decl
) = (void *)(size_t)resolution
;
1017 /* Register DECL with the global symbol table and change its
1018 name if necessary to avoid name clashes for static globals across
1022 lto_register_var_decl_in_symtab (struct data_in
*data_in
, tree decl
,
1027 /* Variable has file scope, not local. */
1028 if (!TREE_PUBLIC (decl
)
1029 && !((context
= decl_function_context (decl
))
1030 && auto_var_in_fn_p (decl
, context
)))
1031 rest_of_decl_compilation (decl
, 1, 0);
1033 /* If this variable has already been declared, queue the
1034 declaration for merging. */
1035 if (TREE_PUBLIC (decl
))
1036 register_resolution (data_in
->file_data
,
1037 decl
, get_resolution (data_in
, ix
));
1041 /* Register DECL with the global symbol table and change its
1042 name if necessary to avoid name clashes for static globals across
1043 different files. DATA_IN contains descriptors and tables for the
1047 lto_register_function_decl_in_symtab (struct data_in
*data_in
, tree decl
,
1050 /* If this variable has already been declared, queue the
1051 declaration for merging. */
1052 if (TREE_PUBLIC (decl
) && !DECL_ABSTRACT (decl
))
1053 register_resolution (data_in
->file_data
,
1054 decl
, get_resolution (data_in
, ix
));
1058 /* For the type T re-materialize it in the type variant list and
1059 the pointer/reference-to chains. */
1062 lto_fixup_prevailing_type (tree t
)
1064 /* The following re-creates proper variant lists while fixing up
1065 the variant leaders. We do not stream TYPE_NEXT_VARIANT so the
1066 variant list state before fixup is broken. */
1068 /* If we are not our own variant leader link us into our new leaders
1070 if (TYPE_MAIN_VARIANT (t
) != t
)
1072 tree mv
= TYPE_MAIN_VARIANT (t
);
1073 TYPE_NEXT_VARIANT (t
) = TYPE_NEXT_VARIANT (mv
);
1074 TYPE_NEXT_VARIANT (mv
) = t
;
1077 /* The following reconstructs the pointer chains
1078 of the new pointed-to type if we are a main variant. We do
1079 not stream those so they are broken before fixup. */
1080 if (TREE_CODE (t
) == POINTER_TYPE
1081 && TYPE_MAIN_VARIANT (t
) == t
)
1083 TYPE_NEXT_PTR_TO (t
) = TYPE_POINTER_TO (TREE_TYPE (t
));
1084 TYPE_POINTER_TO (TREE_TYPE (t
)) = t
;
1086 else if (TREE_CODE (t
) == REFERENCE_TYPE
1087 && TYPE_MAIN_VARIANT (t
) == t
)
1089 TYPE_NEXT_REF_TO (t
) = TYPE_REFERENCE_TO (TREE_TYPE (t
));
1090 TYPE_REFERENCE_TO (TREE_TYPE (t
)) = t
;
1095 /* We keep prevailing tree SCCs in a hashtable with manual collision
1096 handling (in case all hashes compare the same) and keep the colliding
1097 entries in the tree_scc->next chain. */
1102 /* Hash of the whole SCC. */
1104 /* Number of trees in the SCC. */
1106 /* Number of possible entries into the SCC (tree nodes [0..entry_len-1]
1107 which share the same individual tree hash). */
1109 /* The members of the SCC.
1110 We only need to remember the first entry node candidate for prevailing
1111 SCCs (but of course have access to all entries for SCCs we are
1113 ??? For prevailing SCCs we really only need hash and the first
1114 entry candidate, but that's too awkward to implement. */
1118 struct tree_scc_hasher
: typed_noop_remove
<tree_scc
>
1120 typedef tree_scc value_type
;
1121 typedef tree_scc compare_type
;
1122 static inline hashval_t
hash (const value_type
*);
1123 static inline bool equal (const value_type
*, const compare_type
*);
1127 tree_scc_hasher::hash (const value_type
*scc
)
1133 tree_scc_hasher::equal (const value_type
*scc1
, const compare_type
*scc2
)
1135 if (scc1
->hash
!= scc2
->hash
1136 || scc1
->len
!= scc2
->len
1137 || scc1
->entry_len
!= scc2
->entry_len
)
1142 static hash_table
<tree_scc_hasher
> tree_scc_hash
;
1143 static struct obstack tree_scc_hash_obstack
;
1145 static unsigned long num_merged_types
;
1146 static unsigned long num_prevailing_types
;
1147 static unsigned long num_type_scc_trees
;
1148 static unsigned long total_scc_size
;
1149 static unsigned long num_sccs_read
;
1150 static unsigned long total_scc_size_merged
;
1151 static unsigned long num_sccs_merged
;
1152 static unsigned long num_scc_compares
;
1153 static unsigned long num_scc_compare_collisions
;
1156 /* Compare the two entries T1 and T2 of two SCCs that are possibly equal,
1157 recursing through in-SCC tree edges. Returns true if the SCCs entered
1158 through T1 and T2 are equal and fills in *MAP with the pairs of
1159 SCC entries we visited, starting with (*MAP)[0] = T1 and (*MAP)[1] = T2. */
1162 compare_tree_sccs_1 (tree t1
, tree t2
, tree
**map
)
1164 enum tree_code code
;
1166 /* Mark already visited nodes. */
1167 TREE_ASM_WRITTEN (t2
) = 1;
1169 /* Push the pair onto map. */
1174 /* Compare value-fields. */
1175 #define compare_values(X) \
1177 if (X(t1) != X(t2)) \
1181 compare_values (TREE_CODE
);
1182 code
= TREE_CODE (t1
);
1186 compare_values (TREE_SIDE_EFFECTS
);
1187 compare_values (TREE_CONSTANT
);
1188 compare_values (TREE_READONLY
);
1189 compare_values (TREE_PUBLIC
);
1191 compare_values (TREE_ADDRESSABLE
);
1192 compare_values (TREE_THIS_VOLATILE
);
1194 compare_values (DECL_UNSIGNED
);
1195 else if (TYPE_P (t1
))
1196 compare_values (TYPE_UNSIGNED
);
1198 compare_values (TYPE_ARTIFICIAL
);
1200 compare_values (TREE_NO_WARNING
);
1201 compare_values (TREE_NOTHROW
);
1202 compare_values (TREE_STATIC
);
1203 if (code
!= TREE_BINFO
)
1204 compare_values (TREE_PRIVATE
);
1205 compare_values (TREE_PROTECTED
);
1206 compare_values (TREE_DEPRECATED
);
1209 compare_values (TYPE_SATURATING
);
1210 compare_values (TYPE_ADDR_SPACE
);
1212 else if (code
== SSA_NAME
)
1213 compare_values (SSA_NAME_IS_DEFAULT_DEF
);
1215 if (CODE_CONTAINS_STRUCT (code
, TS_INT_CST
))
1217 compare_values (TREE_INT_CST_LOW
);
1218 compare_values (TREE_INT_CST_HIGH
);
1221 if (CODE_CONTAINS_STRUCT (code
, TS_REAL_CST
))
1223 /* ??? No suitable compare routine available. */
1224 REAL_VALUE_TYPE r1
= TREE_REAL_CST (t1
);
1225 REAL_VALUE_TYPE r2
= TREE_REAL_CST (t2
);
1227 || r1
.decimal
!= r2
.decimal
1228 || r1
.sign
!= r2
.sign
1229 || r1
.signalling
!= r2
.signalling
1230 || r1
.canonical
!= r2
.canonical
1231 || r1
.uexp
!= r2
.uexp
)
1233 for (unsigned i
= 0; i
< SIGSZ
; ++i
)
1234 if (r1
.sig
[i
] != r2
.sig
[i
])
1238 if (CODE_CONTAINS_STRUCT (code
, TS_FIXED_CST
))
1239 if (!fixed_compare (EQ_EXPR
,
1240 TREE_FIXED_CST_PTR (t1
), TREE_FIXED_CST_PTR (t2
)))
1244 /* We don't want to compare locations, so there is nothing do compare
1245 for TS_DECL_MINIMAL. */
1247 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_COMMON
))
1249 compare_values (DECL_MODE
);
1250 compare_values (DECL_NONLOCAL
);
1251 compare_values (DECL_VIRTUAL_P
);
1252 compare_values (DECL_IGNORED_P
);
1253 compare_values (DECL_ABSTRACT
);
1254 compare_values (DECL_ARTIFICIAL
);
1255 compare_values (DECL_USER_ALIGN
);
1256 compare_values (DECL_PRESERVE_P
);
1257 compare_values (DECL_EXTERNAL
);
1258 compare_values (DECL_GIMPLE_REG_P
);
1259 compare_values (DECL_ALIGN
);
1260 if (code
== LABEL_DECL
)
1262 compare_values (EH_LANDING_PAD_NR
);
1263 compare_values (LABEL_DECL_UID
);
1265 else if (code
== FIELD_DECL
)
1267 compare_values (DECL_PACKED
);
1268 compare_values (DECL_NONADDRESSABLE_P
);
1269 compare_values (DECL_OFFSET_ALIGN
);
1271 else if (code
== VAR_DECL
)
1273 compare_values (DECL_HAS_DEBUG_EXPR_P
);
1274 compare_values (DECL_NONLOCAL_FRAME
);
1276 if (code
== RESULT_DECL
1277 || code
== PARM_DECL
1278 || code
== VAR_DECL
)
1280 compare_values (DECL_BY_REFERENCE
);
1281 if (code
== VAR_DECL
1282 || code
== PARM_DECL
)
1283 compare_values (DECL_HAS_VALUE_EXPR_P
);
1287 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_WRTL
))
1288 compare_values (DECL_REGISTER
);
1290 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_WITH_VIS
))
1292 compare_values (DECL_COMMON
);
1293 compare_values (DECL_DLLIMPORT_P
);
1294 compare_values (DECL_WEAK
);
1295 compare_values (DECL_SEEN_IN_BIND_EXPR_P
);
1296 compare_values (DECL_COMDAT
);
1297 compare_values (DECL_VISIBILITY
);
1298 compare_values (DECL_VISIBILITY_SPECIFIED
);
1299 if (code
== VAR_DECL
)
1301 compare_values (DECL_HARD_REGISTER
);
1302 /* DECL_IN_TEXT_SECTION is set during final asm output only. */
1303 compare_values (DECL_IN_CONSTANT_POOL
);
1304 compare_values (DECL_TLS_MODEL
);
1306 if (VAR_OR_FUNCTION_DECL_P (t1
))
1307 compare_values (DECL_INIT_PRIORITY
);
1310 if (CODE_CONTAINS_STRUCT (code
, TS_FUNCTION_DECL
))
1312 compare_values (DECL_BUILT_IN_CLASS
);
1313 compare_values (DECL_STATIC_CONSTRUCTOR
);
1314 compare_values (DECL_STATIC_DESTRUCTOR
);
1315 compare_values (DECL_UNINLINABLE
);
1316 compare_values (DECL_POSSIBLY_INLINED
);
1317 compare_values (DECL_IS_NOVOPS
);
1318 compare_values (DECL_IS_RETURNS_TWICE
);
1319 compare_values (DECL_IS_MALLOC
);
1320 compare_values (DECL_IS_OPERATOR_NEW
);
1321 compare_values (DECL_DECLARED_INLINE_P
);
1322 compare_values (DECL_STATIC_CHAIN
);
1323 compare_values (DECL_NO_INLINE_WARNING_P
);
1324 compare_values (DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT
);
1325 compare_values (DECL_NO_LIMIT_STACK
);
1326 compare_values (DECL_DISREGARD_INLINE_LIMITS
);
1327 compare_values (DECL_PURE_P
);
1328 compare_values (DECL_LOOPING_CONST_OR_PURE_P
);
1329 compare_values (DECL_FINAL_P
);
1330 compare_values (DECL_CXX_CONSTRUCTOR_P
);
1331 compare_values (DECL_CXX_DESTRUCTOR_P
);
1332 if (DECL_BUILT_IN_CLASS (t1
) != NOT_BUILT_IN
)
1333 compare_values (DECL_FUNCTION_CODE
);
1334 if (DECL_STATIC_DESTRUCTOR (t1
))
1335 compare_values (DECL_FINI_PRIORITY
);
1338 if (CODE_CONTAINS_STRUCT (code
, TS_TYPE_COMMON
))
1340 compare_values (TYPE_MODE
);
1341 compare_values (TYPE_STRING_FLAG
);
1342 compare_values (TYPE_NO_FORCE_BLK
);
1343 compare_values (TYPE_NEEDS_CONSTRUCTING
);
1344 if (RECORD_OR_UNION_TYPE_P (t1
))
1346 compare_values (TYPE_TRANSPARENT_AGGR
);
1347 compare_values (TYPE_FINAL_P
);
1349 else if (code
== ARRAY_TYPE
)
1350 compare_values (TYPE_NONALIASED_COMPONENT
);
1351 compare_values (TYPE_PACKED
);
1352 compare_values (TYPE_RESTRICT
);
1353 compare_values (TYPE_USER_ALIGN
);
1354 compare_values (TYPE_READONLY
);
1355 compare_values (TYPE_PRECISION
);
1356 compare_values (TYPE_ALIGN
);
1357 compare_values (TYPE_ALIAS_SET
);
1360 /* We don't want to compare locations, so there is nothing do compare
1363 /* BLOCKs are function local and we don't merge anything there, so
1364 simply refuse to merge. */
1365 if (CODE_CONTAINS_STRUCT (code
, TS_BLOCK
))
1368 if (CODE_CONTAINS_STRUCT (code
, TS_TRANSLATION_UNIT_DECL
))
1369 if (strcmp (TRANSLATION_UNIT_LANGUAGE (t1
),
1370 TRANSLATION_UNIT_LANGUAGE (t2
)) != 0)
1373 if (CODE_CONTAINS_STRUCT (code
, TS_TARGET_OPTION
))
1374 if (memcmp (TREE_TARGET_OPTION (t1
), TREE_TARGET_OPTION (t2
),
1375 sizeof (struct cl_target_option
)) != 0)
1378 if (CODE_CONTAINS_STRUCT (code
, TS_OPTIMIZATION
))
1379 if (memcmp (TREE_OPTIMIZATION (t1
), TREE_OPTIMIZATION (t2
),
1380 sizeof (struct cl_optimization
)) != 0)
1383 if (CODE_CONTAINS_STRUCT (code
, TS_BINFO
))
1384 if (vec_safe_length (BINFO_BASE_ACCESSES (t1
))
1385 != vec_safe_length (BINFO_BASE_ACCESSES (t2
)))
1388 if (CODE_CONTAINS_STRUCT (code
, TS_CONSTRUCTOR
))
1389 compare_values (CONSTRUCTOR_NELTS
);
1391 if (CODE_CONTAINS_STRUCT (code
, TS_IDENTIFIER
))
1392 if (IDENTIFIER_LENGTH (t1
) != IDENTIFIER_LENGTH (t2
)
1393 || memcmp (IDENTIFIER_POINTER (t1
), IDENTIFIER_POINTER (t2
),
1394 IDENTIFIER_LENGTH (t1
)) != 0)
1397 if (CODE_CONTAINS_STRUCT (code
, TS_STRING
))
1398 if (TREE_STRING_LENGTH (t1
) != TREE_STRING_LENGTH (t2
)
1399 || memcmp (TREE_STRING_POINTER (t1
), TREE_STRING_POINTER (t2
),
1400 TREE_STRING_LENGTH (t1
)) != 0)
1403 #undef compare_values
1406 /* Compare pointer fields. */
1408 /* Recurse. Search & Replaced from DFS_write_tree_body.
1409 Folding the early checks into the compare_tree_edges recursion
1410 macro makes debugging way quicker as you are able to break on
1411 compare_tree_sccs_1 and simply finish until a call returns false
1412 to spot the SCC members with the difference. */
1413 #define compare_tree_edges(E1, E2) \
1415 tree t1_ = (E1), t2_ = (E2); \
1418 || !TREE_VISITED (t2_) \
1419 || (!TREE_ASM_WRITTEN (t2_) \
1420 && !compare_tree_sccs_1 (t1_, t2_, map)))) \
1422 /* Only non-NULL trees outside of the SCC may compare equal. */ \
1423 gcc_checking_assert (t1_ != t2_ || (!t2_ || !TREE_VISITED (t2_))); \
1426 if (CODE_CONTAINS_STRUCT (code
, TS_TYPED
))
1428 if (code
!= IDENTIFIER_NODE
)
1429 compare_tree_edges (TREE_TYPE (t1
), TREE_TYPE (t2
));
1432 if (CODE_CONTAINS_STRUCT (code
, TS_VECTOR
))
1435 /* Note that the number of elements for EXPR has already been emitted
1436 in EXPR's header (see streamer_write_tree_header). */
1437 for (i
= 0; i
< VECTOR_CST_NELTS (t1
); ++i
)
1438 compare_tree_edges (VECTOR_CST_ELT (t1
, i
), VECTOR_CST_ELT (t2
, i
));
1441 if (CODE_CONTAINS_STRUCT (code
, TS_COMPLEX
))
1443 compare_tree_edges (TREE_REALPART (t1
), TREE_REALPART (t2
));
1444 compare_tree_edges (TREE_IMAGPART (t1
), TREE_IMAGPART (t2
));
1447 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_MINIMAL
))
1449 compare_tree_edges (DECL_NAME (t1
), DECL_NAME (t2
));
1450 /* ??? Global decls from different TUs have non-matching
1451 TRANSLATION_UNIT_DECLs. Only consider a small set of
1452 decls equivalent, we should not end up merging others. */
1453 if ((code
== TYPE_DECL
1454 || code
== NAMESPACE_DECL
1455 || code
== IMPORTED_DECL
1456 || code
== CONST_DECL
1457 || (VAR_OR_FUNCTION_DECL_P (t1
)
1458 && (TREE_PUBLIC (t1
) || DECL_EXTERNAL (t1
))))
1459 && DECL_FILE_SCOPE_P (t1
) && DECL_FILE_SCOPE_P (t2
))
1462 compare_tree_edges (DECL_CONTEXT (t1
), DECL_CONTEXT (t2
));
1465 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_COMMON
))
1467 compare_tree_edges (DECL_SIZE (t1
), DECL_SIZE (t2
));
1468 compare_tree_edges (DECL_SIZE_UNIT (t1
), DECL_SIZE_UNIT (t2
));
1469 compare_tree_edges (DECL_ATTRIBUTES (t1
), DECL_ATTRIBUTES (t2
));
1470 if ((code
== VAR_DECL
1471 || code
== PARM_DECL
)
1472 && DECL_HAS_VALUE_EXPR_P (t1
))
1473 compare_tree_edges (DECL_VALUE_EXPR (t1
), DECL_VALUE_EXPR (t2
));
1474 if (code
== VAR_DECL
1475 && DECL_HAS_DEBUG_EXPR_P (t1
))
1476 compare_tree_edges (DECL_DEBUG_EXPR (t1
), DECL_DEBUG_EXPR (t2
));
1477 /* LTO specific edges. */
1478 if (code
!= FUNCTION_DECL
1479 && code
!= TRANSLATION_UNIT_DECL
)
1480 compare_tree_edges (DECL_INITIAL (t1
), DECL_INITIAL (t2
));
1483 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_NON_COMMON
))
1485 if (code
== FUNCTION_DECL
)
1488 for (a1
= DECL_ARGUMENTS (t1
), a2
= DECL_ARGUMENTS (t2
);
1490 a1
= TREE_CHAIN (a1
), a2
= TREE_CHAIN (a2
))
1491 compare_tree_edges (a1
, a2
);
1492 compare_tree_edges (DECL_RESULT (t1
), DECL_RESULT (t2
));
1494 else if (code
== TYPE_DECL
)
1495 compare_tree_edges (DECL_ORIGINAL_TYPE (t1
), DECL_ORIGINAL_TYPE (t2
));
1496 compare_tree_edges (DECL_VINDEX (t1
), DECL_VINDEX (t2
));
1499 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_WITH_VIS
))
1501 /* Make sure we don't inadvertently set the assembler name. */
1502 if (DECL_ASSEMBLER_NAME_SET_P (t1
))
1503 compare_tree_edges (DECL_ASSEMBLER_NAME (t1
),
1504 DECL_ASSEMBLER_NAME (t2
));
1505 compare_tree_edges (DECL_SECTION_NAME (t1
), DECL_SECTION_NAME (t2
));
1506 compare_tree_edges (DECL_COMDAT_GROUP (t1
), DECL_COMDAT_GROUP (t2
));
1509 if (CODE_CONTAINS_STRUCT (code
, TS_FIELD_DECL
))
1511 compare_tree_edges (DECL_FIELD_OFFSET (t1
), DECL_FIELD_OFFSET (t2
));
1512 compare_tree_edges (DECL_BIT_FIELD_TYPE (t1
), DECL_BIT_FIELD_TYPE (t2
));
1513 compare_tree_edges (DECL_BIT_FIELD_REPRESENTATIVE (t1
),
1514 DECL_BIT_FIELD_REPRESENTATIVE (t2
));
1515 compare_tree_edges (DECL_FIELD_BIT_OFFSET (t1
),
1516 DECL_FIELD_BIT_OFFSET (t2
));
1517 compare_tree_edges (DECL_FCONTEXT (t1
), DECL_FCONTEXT (t2
));
1520 if (CODE_CONTAINS_STRUCT (code
, TS_FUNCTION_DECL
))
1522 compare_tree_edges (DECL_FUNCTION_PERSONALITY (t1
),
1523 DECL_FUNCTION_PERSONALITY (t2
));
1524 compare_tree_edges (DECL_FUNCTION_SPECIFIC_TARGET (t1
),
1525 DECL_FUNCTION_SPECIFIC_TARGET (t2
));
1526 compare_tree_edges (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (t1
),
1527 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (t2
));
1530 if (CODE_CONTAINS_STRUCT (code
, TS_TYPE_COMMON
))
1532 compare_tree_edges (TYPE_SIZE (t1
), TYPE_SIZE (t2
));
1533 compare_tree_edges (TYPE_SIZE_UNIT (t1
), TYPE_SIZE_UNIT (t2
));
1534 compare_tree_edges (TYPE_ATTRIBUTES (t1
), TYPE_ATTRIBUTES (t2
));
1535 compare_tree_edges (TYPE_NAME (t1
), TYPE_NAME (t2
));
1536 /* Do not compare TYPE_POINTER_TO or TYPE_REFERENCE_TO. They will be
1537 reconstructed during fixup. */
1538 /* Do not compare TYPE_NEXT_VARIANT, we reconstruct the variant lists
1540 compare_tree_edges (TYPE_MAIN_VARIANT (t1
), TYPE_MAIN_VARIANT (t2
));
1541 /* ??? Global types from different TUs have non-matching
1542 TRANSLATION_UNIT_DECLs. Still merge them if they are otherwise
1544 if (TYPE_FILE_SCOPE_P (t1
) && TYPE_FILE_SCOPE_P (t2
))
1547 compare_tree_edges (TYPE_CONTEXT (t1
), TYPE_CONTEXT (t2
));
1548 /* TYPE_CANONICAL is re-computed during type merging, so do not
1550 compare_tree_edges (TYPE_STUB_DECL (t1
), TYPE_STUB_DECL (t2
));
1553 if (CODE_CONTAINS_STRUCT (code
, TS_TYPE_NON_COMMON
))
1555 if (code
== ENUMERAL_TYPE
)
1556 compare_tree_edges (TYPE_VALUES (t1
), TYPE_VALUES (t2
));
1557 else if (code
== ARRAY_TYPE
)
1558 compare_tree_edges (TYPE_DOMAIN (t1
), TYPE_DOMAIN (t2
));
1559 else if (RECORD_OR_UNION_TYPE_P (t1
))
1562 for (f1
= TYPE_FIELDS (t1
), f2
= TYPE_FIELDS (t2
);
1564 f1
= TREE_CHAIN (f1
), f2
= TREE_CHAIN (f2
))
1565 compare_tree_edges (f1
, f2
);
1566 compare_tree_edges (TYPE_BINFO (t1
), TYPE_BINFO (t2
));
1568 else if (code
== FUNCTION_TYPE
1569 || code
== METHOD_TYPE
)
1570 compare_tree_edges (TYPE_ARG_TYPES (t1
), TYPE_ARG_TYPES (t2
));
1571 if (!POINTER_TYPE_P (t1
))
1572 compare_tree_edges (TYPE_MINVAL (t1
), TYPE_MINVAL (t2
));
1573 compare_tree_edges (TYPE_MAXVAL (t1
), TYPE_MAXVAL (t2
));
1576 if (CODE_CONTAINS_STRUCT (code
, TS_LIST
))
1578 compare_tree_edges (TREE_PURPOSE (t1
), TREE_PURPOSE (t2
));
1579 compare_tree_edges (TREE_VALUE (t1
), TREE_VALUE (t2
));
1580 compare_tree_edges (TREE_CHAIN (t1
), TREE_CHAIN (t2
));
1583 if (CODE_CONTAINS_STRUCT (code
, TS_VEC
))
1584 for (int i
= 0; i
< TREE_VEC_LENGTH (t1
); i
++)
1585 compare_tree_edges (TREE_VEC_ELT (t1
, i
), TREE_VEC_ELT (t2
, i
));
1587 if (CODE_CONTAINS_STRUCT (code
, TS_EXP
))
1589 for (int i
= 0; i
< TREE_OPERAND_LENGTH (t1
); i
++)
1590 compare_tree_edges (TREE_OPERAND (t1
, i
),
1591 TREE_OPERAND (t2
, i
));
1593 /* BLOCKs are function local and we don't merge anything there. */
1594 if (TREE_BLOCK (t1
) || TREE_BLOCK (t2
))
1598 if (CODE_CONTAINS_STRUCT (code
, TS_BINFO
))
1602 /* Lengths have already been compared above. */
1603 FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (t1
), i
, t
)
1604 compare_tree_edges (t
, BINFO_BASE_BINFO (t2
, i
));
1605 FOR_EACH_VEC_SAFE_ELT (BINFO_BASE_ACCESSES (t1
), i
, t
)
1606 compare_tree_edges (t
, BINFO_BASE_ACCESS (t2
, i
));
1607 compare_tree_edges (BINFO_OFFSET (t1
), BINFO_OFFSET (t2
));
1608 compare_tree_edges (BINFO_VTABLE (t1
), BINFO_VTABLE (t2
));
1609 compare_tree_edges (BINFO_VPTR_FIELD (t1
), BINFO_VPTR_FIELD (t2
));
1610 /* Do not walk BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX
1611 and BINFO_VPTR_INDEX; these are used by C++ FE only. */
1614 if (CODE_CONTAINS_STRUCT (code
, TS_CONSTRUCTOR
))
1618 /* Lengths have already been compared above. */
1619 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t1
), i
, index
, value
)
1621 compare_tree_edges (index
, CONSTRUCTOR_ELT (t2
, i
)->index
);
1622 compare_tree_edges (value
, CONSTRUCTOR_ELT (t2
, i
)->value
);
1626 #undef compare_tree_edges
1631 /* Compare the tree scc SCC to the prevailing candidate PSCC, filling
1632 out MAP if they are equal. */
1635 compare_tree_sccs (tree_scc
*pscc
, tree_scc
*scc
,
1638 /* Assume SCC entry hashes are sorted after their cardinality. Which
1639 means we can simply take the first n-tuple of equal hashes
1640 (which is recorded as entry_len) and do n SCC entry candidate
1642 for (unsigned i
= 0; i
< pscc
->entry_len
; ++i
)
1645 num_scc_compare_collisions
++;
1646 if (compare_tree_sccs_1 (pscc
->entries
[0], scc
->entries
[i
], &mapp
))
1648 /* Equal - no need to reset TREE_VISITED or TREE_ASM_WRITTEN
1649 on the scc as all trees will be freed. */
1652 /* Reset TREE_ASM_WRITTEN on scc for the next compare or in case
1653 the SCC prevails. */
1654 for (unsigned j
= 0; j
< scc
->len
; ++j
)
1655 TREE_ASM_WRITTEN (scc
->entries
[j
]) = 0;
1661 /* QSort sort function to sort a map of two pointers after the 2nd
1665 cmp_tree (const void *p1_
, const void *p2_
)
1667 tree
*p1
= (tree
*)(const_cast<void *>(p1_
));
1668 tree
*p2
= (tree
*)(const_cast<void *>(p2_
));
1671 return ((uintptr_t)p1
[1] < (uintptr_t)p2
[1]) ? -1 : 1;
1674 /* Try to unify the SCC with nodes FROM to FROM + LEN in CACHE and
1675 hash value SCC_HASH with an already recorded SCC. Return true if
1676 that was successful, otherwise return false. */
1679 unify_scc (struct streamer_tree_cache_d
*cache
, unsigned from
,
1680 unsigned len
, unsigned scc_entry_len
, hashval_t scc_hash
)
1682 bool unified_p
= false;
1684 = (tree_scc
*) alloca (sizeof (tree_scc
) + (len
- 1) * sizeof (tree
));
1686 scc
->hash
= scc_hash
;
1688 scc
->entry_len
= scc_entry_len
;
1689 for (unsigned i
= 0; i
< len
; ++i
)
1691 tree t
= streamer_tree_cache_get_tree (cache
, from
+ i
);
1692 scc
->entries
[i
] = t
;
1693 /* Do not merge SCCs with local entities inside them. Also do
1694 not merge TRANSLATION_UNIT_DECLs. */
1695 if (TREE_CODE (t
) == TRANSLATION_UNIT_DECL
1696 || (VAR_OR_FUNCTION_DECL_P (t
)
1697 && !(TREE_PUBLIC (t
) || DECL_EXTERNAL (t
)))
1698 || TREE_CODE (t
) == LABEL_DECL
)
1700 /* Avoid doing any work for these cases and do not worry to
1701 record the SCCs for further merging. */
1706 /* Look for the list of candidate SCCs to compare against. */
1708 slot
= tree_scc_hash
.find_slot_with_hash (scc
, scc_hash
, INSERT
);
1711 /* Try unifying against each candidate. */
1714 /* Set TREE_VISITED on the scc so we can easily identify tree nodes
1715 outside of the scc when following tree edges. Make sure
1716 that TREE_ASM_WRITTEN is unset so we can use it as 2nd bit
1717 to track whether we visited the SCC member during the compare.
1718 We cannot use TREE_VISITED on the pscc members as the extended
1719 scc and pscc can overlap. */
1720 for (unsigned i
= 0; i
< scc
->len
; ++i
)
1722 TREE_VISITED (scc
->entries
[i
]) = 1;
1723 gcc_checking_assert (!TREE_ASM_WRITTEN (scc
->entries
[i
]));
1726 tree
*map
= XALLOCAVEC (tree
, 2 * len
);
1727 for (tree_scc
*pscc
= *slot
; pscc
; pscc
= pscc
->next
)
1729 if (!compare_tree_sccs (pscc
, scc
, map
))
1732 /* Found an equal SCC. */
1734 num_scc_compare_collisions
--;
1736 total_scc_size_merged
+= len
;
1738 #ifdef ENABLE_CHECKING
1739 for (unsigned i
= 0; i
< len
; ++i
)
1741 tree t
= map
[2*i
+1];
1742 enum tree_code code
= TREE_CODE (t
);
1743 /* IDENTIFIER_NODEs should be singletons and are merged by the
1744 streamer. The others should be singletons, too, and we
1745 should not merge them in any way. */
1746 gcc_assert (code
!= TRANSLATION_UNIT_DECL
1747 && code
!= IDENTIFIER_NODE
1748 && !streamer_handle_as_builtin_p (t
));
1752 /* Fixup the streamer cache with the prevailing nodes according
1753 to the tree node mapping computed by compare_tree_sccs. */
1755 streamer_tree_cache_replace_tree (cache
, pscc
->entries
[0], from
);
1758 tree
*map2
= XALLOCAVEC (tree
, 2 * len
);
1759 for (unsigned i
= 0; i
< len
; ++i
)
1761 map2
[i
*2] = (tree
)(uintptr_t)(from
+ i
);
1762 map2
[i
*2+1] = scc
->entries
[i
];
1764 qsort (map2
, len
, 2 * sizeof (tree
), cmp_tree
);
1765 qsort (map
, len
, 2 * sizeof (tree
), cmp_tree
);
1766 for (unsigned i
= 0; i
< len
; ++i
)
1767 streamer_tree_cache_replace_tree (cache
, map
[2*i
],
1768 (uintptr_t)map2
[2*i
]);
1771 /* Free the tree nodes from the read SCC. */
1772 for (unsigned i
= 0; i
< len
; ++i
)
1774 if (TYPE_P (scc
->entries
[i
]))
1776 ggc_free (scc
->entries
[i
]);
1782 /* Reset TREE_VISITED if we didn't unify the SCC with another. */
1784 for (unsigned i
= 0; i
< scc
->len
; ++i
)
1785 TREE_VISITED (scc
->entries
[i
]) = 0;
1788 /* If we didn't unify it to any candidate duplicate the relevant
1789 pieces to permanent storage and link it into the chain. */
1793 = XOBNEWVAR (&tree_scc_hash_obstack
, tree_scc
, sizeof (tree_scc
));
1794 memcpy (pscc
, scc
, sizeof (tree_scc
));
1795 pscc
->next
= (*slot
);
1802 /* Read all the symbols from buffer DATA, using descriptors in DECL_DATA.
1803 RESOLUTIONS is the set of symbols picked by the linker (read from the
1804 resolution file when the linker plugin is being used). */
1807 lto_read_decls (struct lto_file_decl_data
*decl_data
, const void *data
,
1808 vec
<ld_plugin_symbol_resolution_t
> resolutions
)
1810 const struct lto_decl_header
*header
= (const struct lto_decl_header
*) data
;
1811 const int decl_offset
= sizeof (struct lto_decl_header
);
1812 const int main_offset
= decl_offset
+ header
->decl_state_size
;
1813 const int string_offset
= main_offset
+ header
->main_size
;
1814 struct lto_input_block ib_main
;
1815 struct data_in
*data_in
;
1817 const uint32_t *data_ptr
, *data_end
;
1818 uint32_t num_decl_states
;
1820 LTO_INIT_INPUT_BLOCK (ib_main
, (const char *) data
+ main_offset
, 0,
1823 data_in
= lto_data_in_create (decl_data
, (const char *) data
+ string_offset
,
1824 header
->string_size
, resolutions
);
1826 /* We do not uniquify the pre-loaded cache entries, those are middle-end
1827 internal types that should not be merged. */
1829 /* Read the global declarations and types. */
1830 while (ib_main
.p
< ib_main
.len
)
1833 unsigned from
= data_in
->reader_cache
->nodes
.length ();
1834 /* Read and uniquify SCCs as in the input stream. */
1835 enum LTO_tags tag
= streamer_read_record_start (&ib_main
);
1836 if (tag
== LTO_tree_scc
)
1839 unsigned scc_entry_len
;
1840 hashval_t scc_hash
= lto_input_scc (&ib_main
, data_in
, &len_
,
1842 unsigned len
= data_in
->reader_cache
->nodes
.length () - from
;
1843 gcc_assert (len
== len_
);
1845 total_scc_size
+= len
;
1848 /* We have the special case of size-1 SCCs that are pre-merged
1849 by means of identifier and string sharing for example.
1850 ??? Maybe we should avoid streaming those as SCCs. */
1851 tree first
= streamer_tree_cache_get_tree (data_in
->reader_cache
,
1854 && (TREE_CODE (first
) == IDENTIFIER_NODE
1855 || TREE_CODE (first
) == INTEGER_CST
1856 || TREE_CODE (first
) == TRANSLATION_UNIT_DECL
1857 || streamer_handle_as_builtin_p (first
)))
1860 /* Try to unify the SCC with already existing ones. */
1862 && unify_scc (data_in
->reader_cache
, from
,
1863 len
, scc_entry_len
, scc_hash
))
1866 /* Do remaining fixup tasks for prevailing nodes. */
1867 bool seen_type
= false;
1868 for (unsigned i
= 0; i
< len
; ++i
)
1870 tree t
= streamer_tree_cache_get_tree (data_in
->reader_cache
,
1872 /* Reconstruct the type variant and pointer-to/reference-to
1877 num_prevailing_types
++;
1878 lto_fixup_prevailing_type (t
);
1880 /* Compute the canonical type of all types.
1881 ??? Should be able to assert that !TYPE_CANONICAL. */
1882 if (TYPE_P (t
) && !TYPE_CANONICAL (t
))
1883 gimple_register_canonical_type (t
);
1884 /* Link shared INTEGER_CSTs into TYPE_CACHED_VALUEs of its
1885 type which is also member of this SCC. */
1886 if (TREE_CODE (t
) == INTEGER_CST
1887 && !TREE_OVERFLOW (t
))
1888 cache_integer_cst (t
);
1889 /* Register TYPE_DECLs with the debuginfo machinery. */
1891 && TREE_CODE (t
) == TYPE_DECL
)
1892 debug_hooks
->type_decl (t
, !DECL_FILE_SCOPE_P (t
));
1895 /* Register variables and functions with the
1897 if (TREE_CODE (t
) == VAR_DECL
)
1898 lto_register_var_decl_in_symtab (data_in
, t
, from
+ i
);
1899 else if (TREE_CODE (t
) == FUNCTION_DECL
1900 && !DECL_BUILT_IN (t
))
1901 lto_register_function_decl_in_symtab (data_in
, t
, from
+ i
);
1902 /* Scan the tree for references to global functions or
1903 variables and record those for later fixup. */
1904 if (mentions_vars_p (t
))
1905 vec_safe_push (tree_with_vars
, t
);
1909 num_type_scc_trees
+= len
;
1913 /* Pickle stray references. */
1914 t
= lto_input_tree_1 (&ib_main
, data_in
, tag
, 0);
1915 gcc_assert (t
&& data_in
->reader_cache
->nodes
.length () == from
);
1919 /* Read in lto_in_decl_state objects. */
1920 data_ptr
= (const uint32_t *) ((const char*) data
+ decl_offset
);
1922 (const uint32_t *) ((const char*) data_ptr
+ header
->decl_state_size
);
1923 num_decl_states
= *data_ptr
++;
1925 gcc_assert (num_decl_states
> 0);
1926 decl_data
->global_decl_state
= lto_new_in_decl_state ();
1927 data_ptr
= lto_read_in_decl_state (data_in
, data_ptr
,
1928 decl_data
->global_decl_state
);
1930 /* Read in per-function decl states and enter them in hash table. */
1931 decl_data
->function_decl_states
=
1932 htab_create_ggc (37, lto_hash_in_decl_state
, lto_eq_in_decl_state
, NULL
);
1934 for (i
= 1; i
< num_decl_states
; i
++)
1936 struct lto_in_decl_state
*state
= lto_new_in_decl_state ();
1939 data_ptr
= lto_read_in_decl_state (data_in
, data_ptr
, state
);
1940 slot
= htab_find_slot (decl_data
->function_decl_states
, state
, INSERT
);
1941 gcc_assert (*slot
== NULL
);
1945 if (data_ptr
!= data_end
)
1946 internal_error ("bytecode stream: garbage at the end of symbols section");
1948 /* Set the current decl state to be the global state. */
1949 decl_data
->current_decl_state
= decl_data
->global_decl_state
;
1951 lto_data_in_delete (data_in
);
1954 /* Custom version of strtoll, which is not portable. */
1956 static HOST_WIDEST_INT
1957 lto_parse_hex (const char *p
)
1959 HOST_WIDEST_INT ret
= 0;
1961 for (; *p
!= '\0'; ++p
)
1966 if (c
>= '0' && c
<= '9')
1968 else if (c
>= 'a' && c
<= 'f')
1969 part
= c
- 'a' + 10;
1970 else if (c
>= 'A' && c
<= 'F')
1971 part
= c
- 'A' + 10;
1973 internal_error ("could not parse hex number");
1980 /* Read resolution for file named FILE_NAME. The resolution is read from
1984 lto_resolution_read (splay_tree file_ids
, FILE *resolution
, lto_file
*file
)
1986 /* We require that objects in the resolution file are in the same
1987 order as the lto1 command line. */
1988 unsigned int name_len
;
1990 unsigned int num_symbols
;
1992 struct lto_file_decl_data
*file_data
;
1993 splay_tree_node nd
= NULL
;
1998 name_len
= strlen (file
->filename
);
1999 obj_name
= XNEWVEC (char, name_len
+ 1);
2000 fscanf (resolution
, " "); /* Read white space. */
2002 fread (obj_name
, sizeof (char), name_len
, resolution
);
2003 obj_name
[name_len
] = '\0';
2004 if (filename_cmp (obj_name
, file
->filename
) != 0)
2005 internal_error ("unexpected file name %s in linker resolution file. "
2006 "Expected %s", obj_name
, file
->filename
);
2007 if (file
->offset
!= 0)
2011 HOST_WIDEST_INT offset
;
2012 t
= fscanf (resolution
, "@0x%16s", offset_p
);
2014 internal_error ("could not parse file offset");
2015 offset
= lto_parse_hex (offset_p
);
2016 if (offset
!= file
->offset
)
2017 internal_error ("unexpected offset");
2022 fscanf (resolution
, "%u", &num_symbols
);
2024 for (i
= 0; i
< num_symbols
; i
++)
2028 unsigned HOST_WIDE_INT id
;
2030 enum ld_plugin_symbol_resolution r
= (enum ld_plugin_symbol_resolution
) 0;
2032 unsigned int lto_resolution_str_len
=
2033 sizeof (lto_resolution_str
) / sizeof (char *);
2036 t
= fscanf (resolution
, "%u " HOST_WIDE_INT_PRINT_HEX_PURE
" %26s %*[^\n]\n",
2037 &index
, &id
, r_str
);
2039 internal_error ("invalid line in the resolution file");
2041 for (j
= 0; j
< lto_resolution_str_len
; j
++)
2043 if (strcmp (lto_resolution_str
[j
], r_str
) == 0)
2045 r
= (enum ld_plugin_symbol_resolution
) j
;
2049 if (j
== lto_resolution_str_len
)
2050 internal_error ("invalid resolution in the resolution file");
2052 if (!(nd
&& lto_splay_tree_id_equal_p (nd
->key
, id
)))
2054 nd
= lto_splay_tree_lookup (file_ids
, id
);
2056 internal_error ("resolution sub id %wx not in object file", id
);
2059 file_data
= (struct lto_file_decl_data
*)nd
->value
;
2060 /* The indexes are very sparse. To save memory save them in a compact
2061 format that is only unpacked later when the subfile is processed. */
2064 file_data
->respairs
.safe_push (rp
);
2065 if (file_data
->max_index
< index
)
2066 file_data
->max_index
= index
;
2070 /* List of file_decl_datas */
2071 struct file_data_list
2073 struct lto_file_decl_data
*first
, *last
;
2076 /* Is the name for a id'ed LTO section? */
2079 lto_section_with_id (const char *name
, unsigned HOST_WIDE_INT
*id
)
2083 if (strncmp (name
, LTO_SECTION_NAME_PREFIX
, strlen (LTO_SECTION_NAME_PREFIX
)))
2085 s
= strrchr (name
, '.');
2086 return s
&& sscanf (s
, "." HOST_WIDE_INT_PRINT_HEX_PURE
, id
) == 1;
2089 /* Create file_data of each sub file id */
2092 create_subid_section_table (struct lto_section_slot
*ls
, splay_tree file_ids
,
2093 struct file_data_list
*list
)
2095 struct lto_section_slot s_slot
, *new_slot
;
2096 unsigned HOST_WIDE_INT id
;
2100 struct lto_file_decl_data
*file_data
;
2102 if (!lto_section_with_id (ls
->name
, &id
))
2105 /* Find hash table of sub module id */
2106 nd
= lto_splay_tree_lookup (file_ids
, id
);
2109 file_data
= (struct lto_file_decl_data
*)nd
->value
;
2113 file_data
= ggc_alloc_lto_file_decl_data ();
2114 memset(file_data
, 0, sizeof (struct lto_file_decl_data
));
2116 file_data
->section_hash_table
= lto_obj_create_section_hash_table ();;
2117 lto_splay_tree_insert (file_ids
, id
, file_data
);
2119 /* Maintain list in linker order */
2121 list
->first
= file_data
;
2123 list
->last
->next
= file_data
;
2124 list
->last
= file_data
;
2127 /* Copy section into sub module hash table */
2128 new_name
= XDUPVEC (char, ls
->name
, strlen (ls
->name
) + 1);
2129 s_slot
.name
= new_name
;
2130 hash_slot
= htab_find_slot (file_data
->section_hash_table
, &s_slot
, INSERT
);
2131 gcc_assert (*hash_slot
== NULL
);
2133 new_slot
= XDUP (struct lto_section_slot
, ls
);
2134 new_slot
->name
= new_name
;
2135 *hash_slot
= new_slot
;
2139 /* Read declarations and other initializations for a FILE_DATA. */
2142 lto_file_finalize (struct lto_file_decl_data
*file_data
, lto_file
*file
)
2146 vec
<ld_plugin_symbol_resolution_t
>
2147 resolutions
= vNULL
;
2151 /* Create vector for fast access of resolution. We do this lazily
2153 resolutions
.safe_grow_cleared (file_data
->max_index
+ 1);
2154 for (i
= 0; file_data
->respairs
.iterate (i
, &rp
); i
++)
2155 resolutions
[rp
->index
] = rp
->res
;
2156 file_data
->respairs
.release ();
2158 file_data
->renaming_hash_table
= lto_create_renaming_table ();
2159 file_data
->file_name
= file
->filename
;
2160 data
= lto_get_section_data (file_data
, LTO_section_decls
, NULL
, &len
);
2163 internal_error ("cannot read LTO decls from %s", file_data
->file_name
);
2166 /* Frees resolutions */
2167 lto_read_decls (file_data
, data
, resolutions
);
2168 lto_free_section_data (file_data
, LTO_section_decls
, NULL
, data
, len
);
2171 /* Finalize FILE_DATA in FILE and increase COUNT. */
2174 lto_create_files_from_ids (lto_file
*file
, struct lto_file_decl_data
*file_data
,
2177 lto_file_finalize (file_data
, file
);
2178 if (cgraph_dump_file
)
2179 fprintf (cgraph_dump_file
, "Creating file %s with sub id " HOST_WIDE_INT_PRINT_HEX
"\n",
2180 file_data
->file_name
, file_data
->id
);
2185 /* Generate a TREE representation for all types and external decls
2188 Read all of the globals out of the file. Then read the cgraph
2189 and process the .o index into the cgraph nodes so that it can open
2190 the .o file to load the functions and ipa information. */
2192 static struct lto_file_decl_data
*
2193 lto_file_read (lto_file
*file
, FILE *resolution_file
, int *count
)
2195 struct lto_file_decl_data
*file_data
= NULL
;
2196 splay_tree file_ids
;
2197 htab_t section_hash_table
;
2198 struct lto_section_slot
*section
;
2199 struct file_data_list file_list
;
2200 struct lto_section_list section_list
;
2202 memset (§ion_list
, 0, sizeof (struct lto_section_list
));
2203 section_hash_table
= lto_obj_build_section_table (file
, §ion_list
);
2205 /* Find all sub modules in the object and put their sections into new hash
2206 tables in a splay tree. */
2207 file_ids
= lto_splay_tree_new ();
2208 memset (&file_list
, 0, sizeof (struct file_data_list
));
2209 for (section
= section_list
.first
; section
!= NULL
; section
= section
->next
)
2210 create_subid_section_table (section
, file_ids
, &file_list
);
2212 /* Add resolutions to file ids */
2213 lto_resolution_read (file_ids
, resolution_file
, file
);
2215 /* Finalize each lto file for each submodule in the merged object */
2216 for (file_data
= file_list
.first
; file_data
!= NULL
; file_data
= file_data
->next
)
2217 lto_create_files_from_ids (file
, file_data
, count
);
2219 splay_tree_delete (file_ids
);
2220 htab_delete (section_hash_table
);
2222 return file_list
.first
;
2225 #if HAVE_MMAP_FILE && HAVE_SYSCONF && defined _SC_PAGE_SIZE
2226 #define LTO_MMAP_IO 1
2230 /* Page size of machine is used for mmap and munmap calls. */
2231 static size_t page_mask
;
2234 /* Get the section data of length LEN from FILENAME starting at
2235 OFFSET. The data segment must be freed by the caller when the
2236 caller is finished. Returns NULL if all was not well. */
2239 lto_read_section_data (struct lto_file_decl_data
*file_data
,
2240 intptr_t offset
, size_t len
)
2244 static char *fd_name
;
2246 intptr_t computed_len
;
2247 intptr_t computed_offset
;
2251 /* Keep a single-entry file-descriptor cache. The last file we
2252 touched will get closed at exit.
2253 ??? Eventually we want to add a more sophisticated larger cache
2254 or rather fix function body streaming to not stream them in
2255 practically random order. */
2257 && filename_cmp (fd_name
, file_data
->file_name
) != 0)
2265 fd
= open (file_data
->file_name
, O_RDONLY
|O_BINARY
);
2268 fatal_error ("Cannot open %s", file_data
->file_name
);
2271 fd_name
= xstrdup (file_data
->file_name
);
2277 size_t page_size
= sysconf (_SC_PAGE_SIZE
);
2278 page_mask
= ~(page_size
- 1);
2281 computed_offset
= offset
& page_mask
;
2282 diff
= offset
- computed_offset
;
2283 computed_len
= len
+ diff
;
2285 result
= (char *) mmap (NULL
, computed_len
, PROT_READ
, MAP_PRIVATE
,
2286 fd
, computed_offset
);
2287 if (result
== MAP_FAILED
)
2289 fatal_error ("Cannot map %s", file_data
->file_name
);
2293 return result
+ diff
;
2295 result
= (char *) xmalloc (len
);
2296 if (lseek (fd
, offset
, SEEK_SET
) != offset
2297 || read (fd
, result
, len
) != (ssize_t
) len
)
2300 fatal_error ("Cannot read %s", file_data
->file_name
);
2304 /* Native windows doesn't supports delayed unlink on opened file. So
2305 we close file here again. This produces higher I/O load, but at least
2306 it prevents to have dangling file handles preventing unlink. */
2317 /* Get the section data from FILE_DATA of SECTION_TYPE with NAME.
2318 NAME will be NULL unless the section type is for a function
2322 get_section_data (struct lto_file_decl_data
*file_data
,
2323 enum lto_section_type section_type
,
2327 htab_t section_hash_table
= file_data
->section_hash_table
;
2328 struct lto_section_slot
*f_slot
;
2329 struct lto_section_slot s_slot
;
2330 const char *section_name
= lto_get_section_name (section_type
, name
, file_data
);
2334 s_slot
.name
= section_name
;
2335 f_slot
= (struct lto_section_slot
*) htab_find (section_hash_table
, &s_slot
);
2338 data
= lto_read_section_data (file_data
, f_slot
->start
, f_slot
->len
);
2342 free (CONST_CAST (char *, section_name
));
2347 /* Free the section data from FILE_DATA of SECTION_TYPE with NAME that
2348 starts at OFFSET and has LEN bytes. */
2351 free_section_data (struct lto_file_decl_data
*file_data ATTRIBUTE_UNUSED
,
2352 enum lto_section_type section_type ATTRIBUTE_UNUSED
,
2353 const char *name ATTRIBUTE_UNUSED
,
2354 const char *offset
, size_t len ATTRIBUTE_UNUSED
)
2357 intptr_t computed_len
;
2358 intptr_t computed_offset
;
2363 computed_offset
= ((intptr_t) offset
) & page_mask
;
2364 diff
= (intptr_t) offset
- computed_offset
;
2365 computed_len
= len
+ diff
;
2367 munmap ((caddr_t
) computed_offset
, computed_len
);
2369 free (CONST_CAST(char *, offset
));
2373 static lto_file
*current_lto_file
;
2375 /* Helper for qsort; compare partitions and return one with smaller size.
2376 We sort from greatest to smallest so parallel build doesn't stale on the
2377 longest compilation being executed too late. */
2380 cmp_partitions_size (const void *a
, const void *b
)
2382 const struct ltrans_partition_def
*pa
2383 = *(struct ltrans_partition_def
*const *)a
;
2384 const struct ltrans_partition_def
*pb
2385 = *(struct ltrans_partition_def
*const *)b
;
2386 return pb
->insns
- pa
->insns
;
2389 /* Helper for qsort; compare partitions and return one with smaller order. */
2392 cmp_partitions_order (const void *a
, const void *b
)
2394 const struct ltrans_partition_def
*pa
2395 = *(struct ltrans_partition_def
*const *)a
;
2396 const struct ltrans_partition_def
*pb
2397 = *(struct ltrans_partition_def
*const *)b
;
2398 int ordera
= -1, orderb
= -1;
2400 if (lto_symtab_encoder_size (pa
->encoder
))
2401 ordera
= lto_symtab_encoder_deref (pa
->encoder
, 0)->order
;
2402 if (lto_symtab_encoder_size (pb
->encoder
))
2403 orderb
= lto_symtab_encoder_deref (pb
->encoder
, 0)->order
;
2404 return orderb
- ordera
;
2407 /* Write all output files in WPA mode and the file with the list of
2411 lto_wpa_write_files (void)
2415 ltrans_partition part
;
2416 FILE *ltrans_output_list_stream
;
2417 char *temp_filename
;
2420 /* Open the LTRANS output list. */
2421 if (!ltrans_output_list
)
2422 fatal_error ("no LTRANS output list filename provided");
2423 ltrans_output_list_stream
= fopen (ltrans_output_list
, "w");
2424 if (ltrans_output_list_stream
== NULL
)
2425 fatal_error ("opening LTRANS output list %s: %m", ltrans_output_list
);
2427 timevar_push (TV_WHOPR_WPA
);
2429 FOR_EACH_VEC_ELT (ltrans_partitions
, i
, part
)
2430 lto_stats
.num_output_symtab_nodes
+= lto_symtab_encoder_size (part
->encoder
);
2432 /* Find out statics that need to be promoted
2433 to globals with hidden visibility because they are accessed from multiple
2435 lto_promote_cross_file_statics ();
2437 timevar_pop (TV_WHOPR_WPA
);
2439 timevar_push (TV_WHOPR_WPA_IO
);
2441 /* Generate a prefix for the LTRANS unit files. */
2442 blen
= strlen (ltrans_output_list
);
2443 temp_filename
= (char *) xmalloc (blen
+ sizeof ("2147483648.o"));
2444 strcpy (temp_filename
, ltrans_output_list
);
2445 if (blen
> sizeof (".out")
2446 && strcmp (temp_filename
+ blen
- sizeof (".out") + 1,
2448 temp_filename
[blen
- sizeof (".out") + 1] = '\0';
2449 blen
= strlen (temp_filename
);
2451 n_sets
= ltrans_partitions
.length ();
2453 /* Sort partitions by size so small ones are compiled last.
2454 FIXME: Even when not reordering we may want to output one list for parallel make
2455 and other for final link command. */
2456 ltrans_partitions
.qsort (flag_toplevel_reorder
2457 ? cmp_partitions_size
2458 : cmp_partitions_order
);
2459 for (i
= 0; i
< n_sets
; i
++)
2462 ltrans_partition part
= ltrans_partitions
[i
];
2464 /* Write all the nodes in SET. */
2465 sprintf (temp_filename
+ blen
, "%u.o", i
);
2466 file
= lto_obj_file_open (temp_filename
, true);
2468 fatal_error ("lto_obj_file_open() failed");
2471 fprintf (stderr
, " %s (%s %i insns)", temp_filename
, part
->name
, part
->insns
);
2472 if (cgraph_dump_file
)
2474 lto_symtab_encoder_iterator lsei
;
2476 fprintf (cgraph_dump_file
, "Writing partition %s to file %s, %i insns\n",
2477 part
->name
, temp_filename
, part
->insns
);
2478 fprintf (cgraph_dump_file
, " Symbols in partition: ");
2479 for (lsei
= lsei_start_in_partition (part
->encoder
); !lsei_end_p (lsei
);
2480 lsei_next_in_partition (&lsei
))
2482 symtab_node
*node
= lsei_node (lsei
);
2483 fprintf (cgraph_dump_file
, "%s ", symtab_node_asm_name (node
));
2485 fprintf (cgraph_dump_file
, "\n Symbols in boundary: ");
2486 for (lsei
= lsei_start (part
->encoder
); !lsei_end_p (lsei
);
2489 symtab_node
*node
= lsei_node (lsei
);
2490 if (!lto_symtab_encoder_in_partition_p (part
->encoder
, node
))
2492 fprintf (cgraph_dump_file
, "%s ", symtab_node_asm_name (node
));
2493 cgraph_node
*cnode
= dyn_cast
<cgraph_node
> (node
);
2495 && lto_symtab_encoder_encode_body_p (part
->encoder
, cnode
))
2496 fprintf (cgraph_dump_file
, "(body included)");
2499 varpool_node
*vnode
= dyn_cast
<varpool_node
> (node
);
2501 && lto_symtab_encoder_encode_initializer_p (part
->encoder
, vnode
))
2502 fprintf (cgraph_dump_file
, "(initializer included)");
2506 fprintf (cgraph_dump_file
, "\n");
2508 gcc_checking_assert (lto_symtab_encoder_size (part
->encoder
) || !i
);
2510 lto_set_current_out_file (file
);
2512 ipa_write_optimization_summaries (part
->encoder
);
2514 lto_set_current_out_file (NULL
);
2515 lto_obj_file_close (file
);
2517 part
->encoder
= NULL
;
2519 len
= strlen (temp_filename
);
2520 if (fwrite (temp_filename
, 1, len
, ltrans_output_list_stream
) < len
2521 || fwrite ("\n", 1, 1, ltrans_output_list_stream
) < 1)
2522 fatal_error ("writing to LTRANS output list %s: %m",
2523 ltrans_output_list
);
2526 lto_stats
.num_output_files
+= n_sets
;
2528 /* Close the LTRANS output list. */
2529 if (fclose (ltrans_output_list_stream
))
2530 fatal_error ("closing LTRANS output list %s: %m", ltrans_output_list
);
2532 free_ltrans_partitions();
2533 free (temp_filename
);
2535 timevar_pop (TV_WHOPR_WPA_IO
);
2539 /* If TT is a variable or function decl replace it with its
2540 prevailing variant. */
2541 #define LTO_SET_PREVAIL(tt) \
2543 if ((tt) && VAR_OR_FUNCTION_DECL_P (tt) \
2544 && (TREE_PUBLIC (tt) || DECL_EXTERNAL (tt))) \
2546 tt = lto_symtab_prevailing_decl (tt); \
2551 /* Ensure that TT isn't a replacable var of function decl. */
2552 #define LTO_NO_PREVAIL(tt) \
2553 gcc_assert (!(tt) || !VAR_OR_FUNCTION_DECL_P (tt))
2555 /* Given a tree T replace all fields referring to variables or functions
2556 with their prevailing variant. */
2558 lto_fixup_prevailing_decls (tree t
)
2560 enum tree_code code
= TREE_CODE (t
);
2563 gcc_checking_assert (code
!= CONSTRUCTOR
&& code
!= TREE_BINFO
);
2564 LTO_NO_PREVAIL (TREE_TYPE (t
));
2565 if (CODE_CONTAINS_STRUCT (code
, TS_COMMON
))
2566 LTO_NO_PREVAIL (TREE_CHAIN (t
));
2569 LTO_NO_PREVAIL (DECL_NAME (t
));
2570 LTO_SET_PREVAIL (DECL_CONTEXT (t
));
2571 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_COMMON
))
2573 LTO_SET_PREVAIL (DECL_SIZE (t
));
2574 LTO_SET_PREVAIL (DECL_SIZE_UNIT (t
));
2575 LTO_SET_PREVAIL (DECL_INITIAL (t
));
2576 LTO_NO_PREVAIL (DECL_ATTRIBUTES (t
));
2577 LTO_SET_PREVAIL (DECL_ABSTRACT_ORIGIN (t
));
2579 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_WITH_VIS
))
2581 LTO_NO_PREVAIL (t
->decl_with_vis
.assembler_name
);
2582 LTO_NO_PREVAIL (DECL_SECTION_NAME (t
));
2584 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_NON_COMMON
))
2586 LTO_NO_PREVAIL (DECL_ARGUMENT_FLD (t
));
2587 LTO_NO_PREVAIL (DECL_RESULT_FLD (t
));
2588 LTO_NO_PREVAIL (DECL_VINDEX (t
));
2590 if (CODE_CONTAINS_STRUCT (code
, TS_FUNCTION_DECL
))
2591 LTO_SET_PREVAIL (DECL_FUNCTION_PERSONALITY (t
));
2592 if (CODE_CONTAINS_STRUCT (code
, TS_FIELD_DECL
))
2594 LTO_SET_PREVAIL (DECL_FIELD_OFFSET (t
));
2595 LTO_NO_PREVAIL (DECL_BIT_FIELD_TYPE (t
));
2596 LTO_NO_PREVAIL (DECL_QUALIFIER (t
));
2597 LTO_NO_PREVAIL (DECL_FIELD_BIT_OFFSET (t
));
2598 LTO_NO_PREVAIL (DECL_FCONTEXT (t
));
2601 else if (TYPE_P (t
))
2603 LTO_NO_PREVAIL (TYPE_CACHED_VALUES (t
));
2604 LTO_SET_PREVAIL (TYPE_SIZE (t
));
2605 LTO_SET_PREVAIL (TYPE_SIZE_UNIT (t
));
2606 LTO_NO_PREVAIL (TYPE_ATTRIBUTES (t
));
2607 LTO_NO_PREVAIL (TYPE_NAME (t
));
2609 LTO_SET_PREVAIL (TYPE_MINVAL (t
));
2610 LTO_SET_PREVAIL (TYPE_MAXVAL (t
));
2611 LTO_NO_PREVAIL (t
->type_non_common
.binfo
);
2613 LTO_SET_PREVAIL (TYPE_CONTEXT (t
));
2615 LTO_NO_PREVAIL (TYPE_CANONICAL (t
));
2616 LTO_NO_PREVAIL (TYPE_MAIN_VARIANT (t
));
2617 LTO_NO_PREVAIL (TYPE_NEXT_VARIANT (t
));
2619 else if (EXPR_P (t
))
2622 for (i
= TREE_OPERAND_LENGTH (t
) - 1; i
>= 0; --i
)
2623 LTO_SET_PREVAIL (TREE_OPERAND (t
, i
));
2630 LTO_SET_PREVAIL (TREE_VALUE (t
));
2631 LTO_SET_PREVAIL (TREE_PURPOSE (t
));
2632 LTO_NO_PREVAIL (TREE_PURPOSE (t
));
2638 /* If we fixed nothing, then we missed something seen by
2640 gcc_checking_assert (fixed
);
2642 #undef LTO_SET_PREVAIL
2643 #undef LTO_NO_PREVAIL
2645 /* Helper function of lto_fixup_decls. Walks the var and fn streams in STATE,
2646 replaces var and function decls with the corresponding prevailing def. */
2649 lto_fixup_state (struct lto_in_decl_state
*state
)
2652 struct lto_tree_ref_table
*table
;
2654 /* Although we only want to replace FUNCTION_DECLs and VAR_DECLs,
2655 we still need to walk from all DECLs to find the reachable
2656 FUNCTION_DECLs and VAR_DECLs. */
2657 for (si
= 0; si
< LTO_N_DECL_STREAMS
; si
++)
2659 table
= &state
->streams
[si
];
2660 for (i
= 0; i
< table
->size
; i
++)
2662 tree
*tp
= table
->trees
+ i
;
2663 if (VAR_OR_FUNCTION_DECL_P (*tp
)
2664 && (TREE_PUBLIC (*tp
) || DECL_EXTERNAL (*tp
)))
2665 *tp
= lto_symtab_prevailing_decl (*tp
);
2670 /* A callback of htab_traverse. Just extracts a state from SLOT
2671 and calls lto_fixup_state. */
2674 lto_fixup_state_aux (void **slot
, void *aux ATTRIBUTE_UNUSED
)
2676 struct lto_in_decl_state
*state
= (struct lto_in_decl_state
*) *slot
;
2677 lto_fixup_state (state
);
2681 /* Fix the decls from all FILES. Replaces each decl with the corresponding
2685 lto_fixup_decls (struct lto_file_decl_data
**files
)
2691 FOR_EACH_VEC_ELT ((*tree_with_vars
), i
, t
)
2692 lto_fixup_prevailing_decls (t
);
2694 for (i
= 0; files
[i
]; i
++)
2696 struct lto_file_decl_data
*file
= files
[i
];
2697 struct lto_in_decl_state
*state
= file
->global_decl_state
;
2698 lto_fixup_state (state
);
2700 htab_traverse (file
->function_decl_states
, lto_fixup_state_aux
, NULL
);
2704 static GTY((length ("lto_stats.num_input_files + 1"))) struct lto_file_decl_data
**all_file_decl_data
;
2706 /* Turn file datas for sub files into a single array, so that they look
2707 like separate files for further passes. */
2710 lto_flatten_files (struct lto_file_decl_data
**orig
, int count
, int last_file_ix
)
2712 struct lto_file_decl_data
*n
, *next
;
2715 lto_stats
.num_input_files
= count
;
2717 = ggc_alloc_cleared_vec_lto_file_decl_data_ptr (count
+ 1);
2718 /* Set the hooks so that all of the ipa passes can read in their data. */
2719 lto_set_in_hooks (all_file_decl_data
, get_section_data
, free_section_data
);
2720 for (i
= 0, k
= 0; i
< last_file_ix
; i
++)
2722 for (n
= orig
[i
]; n
!= NULL
; n
= next
)
2724 all_file_decl_data
[k
++] = n
;
2729 all_file_decl_data
[k
] = NULL
;
2730 gcc_assert (k
== count
);
2733 /* Input file data before flattening (i.e. splitting them to subfiles to support
2734 incremental linking. */
2735 static int real_file_count
;
2736 static GTY((length ("real_file_count + 1"))) struct lto_file_decl_data
**real_file_decl_data
;
2738 static void print_lto_report_1 (void);
2740 /* Read all the symbols from the input files FNAMES. NFILES is the
2741 number of files requested in the command line. Instantiate a
2742 global call graph by aggregating all the sub-graphs found in each
2746 read_cgraph_and_symbols (unsigned nfiles
, const char **fnames
)
2748 unsigned int i
, last_file_ix
;
2751 struct lto_file_decl_data
**decl_data
;
2757 timevar_push (TV_IPA_LTO_DECL_IN
);
2760 = decl_data
= ggc_alloc_cleared_vec_lto_file_decl_data_ptr (nfiles
+ 1);
2761 real_file_count
= nfiles
;
2763 /* Read the resolution file. */
2765 if (resolution_file_name
)
2768 unsigned num_objects
;
2770 resolution
= fopen (resolution_file_name
, "r");
2771 if (resolution
== NULL
)
2772 fatal_error ("could not open symbol resolution file: %m");
2774 t
= fscanf (resolution
, "%u", &num_objects
);
2775 gcc_assert (t
== 1);
2777 /* True, since the plugin splits the archives. */
2778 gcc_assert (num_objects
== nfiles
);
2780 cgraph_state
= CGRAPH_LTO_STREAMING
;
2782 canonical_type_hash_cache
= new pointer_map
<hashval_t
>;
2783 gimple_canonical_types
= htab_create_ggc (16381, gimple_canonical_type_hash
,
2784 gimple_canonical_type_eq
, 0);
2785 gcc_obstack_init (&tree_scc_hash_obstack
);
2786 tree_scc_hash
.create (4096);
2788 /* Register the common node types with the canonical type machinery so
2789 we properly share alias-sets across languages and TUs. Do not
2790 expose the common nodes as type merge target - those that should be
2791 are already exposed so by pre-loading the LTO streamer caches.
2792 Do two passes - first clear TYPE_CANONICAL and then re-compute it. */
2793 for (i
= 0; i
< itk_none
; ++i
)
2794 lto_register_canonical_types (integer_types
[i
], true);
2795 for (i
= 0; i
< stk_type_kind_last
; ++i
)
2796 lto_register_canonical_types (sizetype_tab
[i
], true);
2797 for (i
= 0; i
< TI_MAX
; ++i
)
2798 lto_register_canonical_types (global_trees
[i
], true);
2799 for (i
= 0; i
< itk_none
; ++i
)
2800 lto_register_canonical_types (integer_types
[i
], false);
2801 for (i
= 0; i
< stk_type_kind_last
; ++i
)
2802 lto_register_canonical_types (sizetype_tab
[i
], false);
2803 for (i
= 0; i
< TI_MAX
; ++i
)
2804 lto_register_canonical_types (global_trees
[i
], false);
2807 fprintf (stderr
, "Reading object files:");
2809 /* Read all of the object files specified on the command line. */
2810 for (i
= 0, last_file_ix
= 0; i
< nfiles
; ++i
)
2812 struct lto_file_decl_data
*file_data
= NULL
;
2815 fprintf (stderr
, " %s", fnames
[i
]);
2819 current_lto_file
= lto_obj_file_open (fnames
[i
], false);
2820 if (!current_lto_file
)
2823 file_data
= lto_file_read (current_lto_file
, resolution
, &count
);
2826 lto_obj_file_close (current_lto_file
);
2827 free (current_lto_file
);
2828 current_lto_file
= NULL
;
2832 decl_data
[last_file_ix
++] = file_data
;
2834 lto_obj_file_close (current_lto_file
);
2835 free (current_lto_file
);
2836 current_lto_file
= NULL
;
2839 lto_flatten_files (decl_data
, count
, last_file_ix
);
2840 lto_stats
.num_input_files
= count
;
2841 ggc_free(decl_data
);
2842 real_file_decl_data
= NULL
;
2844 if (resolution_file_name
)
2845 fclose (resolution
);
2847 /* Show the LTO report before launching LTRANS. */
2848 if (flag_lto_report
|| (flag_wpa
&& flag_lto_report_wpa
))
2849 print_lto_report_1 ();
2851 /* Free gimple type merging datastructures. */
2852 tree_scc_hash
.dispose ();
2853 obstack_free (&tree_scc_hash_obstack
, NULL
);
2854 htab_delete (gimple_canonical_types
);
2855 gimple_canonical_types
= NULL
;
2856 delete canonical_type_hash_cache
;
2857 canonical_type_hash_cache
= NULL
;
2860 /* Set the hooks so that all of the ipa passes can read in their data. */
2861 lto_set_in_hooks (all_file_decl_data
, get_section_data
, free_section_data
);
2863 timevar_pop (TV_IPA_LTO_DECL_IN
);
2866 fprintf (stderr
, "\nReading the callgraph\n");
2868 timevar_push (TV_IPA_LTO_CGRAPH_IO
);
2869 /* Read the symtab. */
2872 /* Store resolutions into the symbol table. */
2874 FOR_EACH_SYMBOL (snode
)
2875 if (symtab_real_symbol_p (snode
)
2876 && snode
->lto_file_data
2877 && snode
->lto_file_data
->resolution_map
2878 && (res
= pointer_map_contains (snode
->lto_file_data
->resolution_map
,
2881 = (enum ld_plugin_symbol_resolution
)(size_t)*res
;
2882 for (i
= 0; all_file_decl_data
[i
]; i
++)
2883 if (all_file_decl_data
[i
]->resolution_map
)
2885 pointer_map_destroy (all_file_decl_data
[i
]->resolution_map
);
2886 all_file_decl_data
[i
]->resolution_map
= NULL
;
2889 timevar_pop (TV_IPA_LTO_CGRAPH_IO
);
2892 fprintf (stderr
, "Merging declarations\n");
2894 timevar_push (TV_IPA_LTO_DECL_MERGE
);
2895 /* Merge global decls. In ltrans mode we read merged cgraph, we do not
2896 need to care about resolving symbols again, we only need to replace
2897 duplicated declarations read from the callgraph and from function
2901 lto_symtab_merge_decls ();
2903 /* If there were errors during symbol merging bail out, we have no
2904 good way to recover here. */
2906 fatal_error ("errors during merging of translation units");
2908 /* Fixup all decls. */
2909 lto_fixup_decls (all_file_decl_data
);
2912 ggc_free (tree_with_vars
);
2913 tree_with_vars
= NULL
;
2916 timevar_pop (TV_IPA_LTO_DECL_MERGE
);
2917 /* Each pass will set the appropriate timer. */
2920 fprintf (stderr
, "Reading summaries\n");
2922 /* Read the IPA summary data. */
2924 ipa_read_optimization_summaries ();
2926 ipa_read_summaries ();
2928 for (i
= 0; all_file_decl_data
[i
]; i
++)
2930 gcc_assert (all_file_decl_data
[i
]->symtab_node_encoder
);
2931 lto_symtab_encoder_delete (all_file_decl_data
[i
]->symtab_node_encoder
);
2932 all_file_decl_data
[i
]->symtab_node_encoder
= NULL
;
2933 lto_free_function_in_decl_state (all_file_decl_data
[i
]->global_decl_state
);
2934 all_file_decl_data
[i
]->global_decl_state
= NULL
;
2935 all_file_decl_data
[i
]->current_decl_state
= NULL
;
2938 /* Finally merge the cgraph according to the decl merging decisions. */
2939 timevar_push (TV_IPA_LTO_CGRAPH_MERGE
);
2940 if (cgraph_dump_file
)
2942 fprintf (cgraph_dump_file
, "Before merging:\n");
2943 dump_symtab (cgraph_dump_file
);
2945 lto_symtab_merge_symbols ();
2947 cgraph_state
= CGRAPH_STATE_IPA_SSA
;
2949 timevar_pop (TV_IPA_LTO_CGRAPH_MERGE
);
2951 timevar_push (TV_IPA_LTO_DECL_INIT_IO
);
2953 /* Indicate that the cgraph is built and ready. */
2954 cgraph_function_flags_ready
= true;
2956 timevar_pop (TV_IPA_LTO_DECL_INIT_IO
);
2957 ggc_free (all_file_decl_data
);
2958 all_file_decl_data
= NULL
;
2962 /* Materialize all the bodies for all the nodes in the callgraph. */
2965 materialize_cgraph (void)
2968 struct cgraph_node
*node
;
2970 timevar_id_t lto_timer
;
2974 flag_wpa
? "Materializing decls:" : "Reading function bodies:");
2976 /* Now that we have input the cgraph, we need to clear all of the aux
2977 nodes and read the functions if we are not running in WPA mode. */
2978 timevar_push (TV_IPA_LTO_GIMPLE_IN
);
2980 FOR_EACH_FUNCTION (node
)
2982 if (node
->lto_file_data
)
2984 lto_materialize_function (node
);
2985 lto_stats
.num_input_cgraph_nodes
++;
2989 timevar_pop (TV_IPA_LTO_GIMPLE_IN
);
2991 /* Start the appropriate timer depending on the mode that we are
2993 lto_timer
= (flag_wpa
) ? TV_WHOPR_WPA
2994 : (flag_ltrans
) ? TV_WHOPR_LTRANS
2996 timevar_push (lto_timer
);
2998 current_function_decl
= NULL
;
3001 /* Inform the middle end about the global variables we have seen. */
3002 FOR_EACH_VEC_ELT (*lto_global_var_decls
, i
, decl
)
3003 rest_of_decl_compilation (decl
, 1, 0);
3006 fprintf (stderr
, "\n");
3008 timevar_pop (lto_timer
);
3012 /* Show various memory usage statistics related to LTO. */
3014 print_lto_report_1 (void)
3016 const char *pfx
= (flag_lto
) ? "LTO" : (flag_wpa
) ? "WPA" : "LTRANS";
3017 fprintf (stderr
, "%s statistics\n", pfx
);
3019 fprintf (stderr
, "[%s] read %lu SCCs of average size %f\n",
3020 pfx
, num_sccs_read
, total_scc_size
/ (double)num_sccs_read
);
3021 fprintf (stderr
, "[%s] %lu tree bodies read in total\n", pfx
, total_scc_size
);
3022 if (flag_wpa
&& tree_scc_hash
.is_created ())
3024 fprintf (stderr
, "[%s] tree SCC table: size %ld, %ld elements, "
3025 "collision ratio: %f\n", pfx
,
3026 (long) tree_scc_hash
.size (),
3027 (long) tree_scc_hash
.elements (),
3028 tree_scc_hash
.collisions ());
3029 hash_table
<tree_scc_hasher
>::iterator hiter
;
3030 tree_scc
*scc
, *max_scc
= NULL
;
3031 unsigned max_length
= 0;
3032 FOR_EACH_HASH_TABLE_ELEMENT (tree_scc_hash
, scc
, x
, hiter
)
3034 unsigned length
= 0;
3036 for (; s
; s
= s
->next
)
3038 if (length
> max_length
)
3040 max_length
= length
;
3044 fprintf (stderr
, "[%s] tree SCC max chain length %u (size %u)\n",
3045 pfx
, max_length
, max_scc
->len
);
3046 fprintf (stderr
, "[%s] Compared %lu SCCs, %lu collisions (%f)\n", pfx
,
3047 num_scc_compares
, num_scc_compare_collisions
,
3048 num_scc_compare_collisions
/ (double) num_scc_compares
);
3049 fprintf (stderr
, "[%s] Merged %lu SCCs\n", pfx
, num_sccs_merged
);
3050 fprintf (stderr
, "[%s] Merged %lu tree bodies\n", pfx
,
3051 total_scc_size_merged
);
3052 fprintf (stderr
, "[%s] Merged %lu types\n", pfx
, num_merged_types
);
3053 fprintf (stderr
, "[%s] %lu types prevailed (%lu associated trees)\n",
3054 pfx
, num_prevailing_types
, num_type_scc_trees
);
3055 fprintf (stderr
, "[%s] GIMPLE canonical type table: size %ld, "
3056 "%ld elements, %ld searches, %ld collisions (ratio: %f)\n", pfx
,
3057 (long) htab_size (gimple_canonical_types
),
3058 (long) htab_elements (gimple_canonical_types
),
3059 (long) gimple_canonical_types
->searches
,
3060 (long) gimple_canonical_types
->collisions
,
3061 htab_collisions (gimple_canonical_types
));
3062 fprintf (stderr
, "[%s] GIMPLE canonical type pointer-map: "
3063 "%lu elements, %ld searches\n", pfx
,
3064 num_canonical_type_hash_entries
,
3065 num_canonical_type_hash_queries
);
3068 print_lto_report (pfx
);
3071 /* Perform whole program analysis (WPA) on the callgraph and write out the
3072 optimization plan. */
3075 do_whole_program_analysis (void)
3079 timevar_start (TV_PHASE_OPT_GEN
);
3081 /* Note that since we are in WPA mode, materialize_cgraph will not
3082 actually read in all the function bodies. It only materializes
3083 the decls and cgraph nodes so that analysis can be performed. */
3084 materialize_cgraph ();
3086 /* Reading in the cgraph uses different timers, start timing WPA now. */
3087 timevar_push (TV_WHOPR_WPA
);
3089 if (pre_ipa_mem_report
)
3091 fprintf (stderr
, "Memory consumption before IPA\n");
3092 dump_memory_report (false);
3095 cgraph_function_flags_ready
= true;
3097 if (cgraph_dump_file
)
3098 dump_symtab (cgraph_dump_file
);
3099 bitmap_obstack_initialize (NULL
);
3100 cgraph_state
= CGRAPH_STATE_IPA_SSA
;
3102 execute_ipa_pass_list (g
->get_passes ()->all_regular_ipa_passes
);
3103 symtab_remove_unreachable_nodes (false, dump_file
);
3105 if (cgraph_dump_file
)
3107 fprintf (cgraph_dump_file
, "Optimized ");
3108 dump_symtab (cgraph_dump_file
);
3110 #ifdef ENABLE_CHECKING
3113 bitmap_obstack_release (NULL
);
3115 /* We are about to launch the final LTRANS phase, stop the WPA timer. */
3116 timevar_pop (TV_WHOPR_WPA
);
3118 timevar_push (TV_WHOPR_PARTITIONING
);
3119 if (flag_lto_partition_1to1
)
3121 else if (flag_lto_partition_max
)
3124 lto_balanced_map ();
3126 /* AUX pointers are used by partitioning code to bookkeep number of
3127 partitions symbol is in. This is no longer needed. */
3128 FOR_EACH_SYMBOL (node
)
3131 lto_stats
.num_cgraph_partitions
+= ltrans_partitions
.length ();
3132 timevar_pop (TV_WHOPR_PARTITIONING
);
3134 timevar_stop (TV_PHASE_OPT_GEN
);
3135 timevar_start (TV_PHASE_STREAM_OUT
);
3139 fprintf (stderr
, "\nStreaming out");
3142 lto_wpa_write_files ();
3144 fprintf (stderr
, "\n");
3146 timevar_stop (TV_PHASE_STREAM_OUT
);
3149 if (post_ipa_mem_report
)
3151 fprintf (stderr
, "Memory consumption after IPA\n");
3152 dump_memory_report (false);
3155 /* Show the LTO report before launching LTRANS. */
3156 if (flag_lto_report
|| (flag_wpa
&& flag_lto_report_wpa
))
3157 print_lto_report_1 ();
3159 dump_memory_report (true);
3163 static GTY(()) tree lto_eh_personality_decl
;
3165 /* Return the LTO personality function decl. */
3168 lto_eh_personality (void)
3170 if (!lto_eh_personality_decl
)
3172 /* Use the first personality DECL for our personality if we don't
3173 support multiple ones. This ensures that we don't artificially
3174 create the need for them in a single-language program. */
3175 if (first_personality_decl
&& !dwarf2out_do_cfi_asm ())
3176 lto_eh_personality_decl
= first_personality_decl
;
3178 lto_eh_personality_decl
= lhd_gcc_personality ();
3181 return lto_eh_personality_decl
;
3184 /* Set the process name based on the LTO mode. */
3187 lto_process_name (void)
3190 setproctitle ("lto1-lto");
3192 setproctitle ("lto1-wpa");
3194 setproctitle ("lto1-ltrans");
3198 /* Initialize the LTO front end. */
3203 lto_process_name ();
3204 lto_streamer_hooks_init ();
3206 lto_set_in_hooks (NULL
, get_section_data
, free_section_data
);
3207 memset (<o_stats
, 0, sizeof (lto_stats
));
3208 bitmap_obstack_initialize (NULL
);
3209 gimple_register_cfg_hooks ();
3213 /* Main entry point for the GIMPLE front end. This front end has
3214 three main personalities:
3216 - LTO (-flto). All the object files on the command line are
3217 loaded in memory and processed as a single translation unit.
3218 This is the traditional link-time optimization behavior.
3220 - WPA (-fwpa). Only the callgraph and summary information for
3221 files in the command file are loaded. A single callgraph
3222 (without function bodies) is instantiated for the whole set of
3223 files. IPA passes are only allowed to analyze the call graph
3224 and make transformation decisions. The callgraph is
3225 partitioned, each partition is written to a new object file
3226 together with the transformation decisions.
3228 - LTRANS (-fltrans). Similar to -flto but it prevents the IPA
3229 summary files from running again. Since WPA computed summary
3230 information and decided what transformations to apply, LTRANS
3231 simply applies them. */
3236 /* LTO is called as a front end, even though it is not a front end.
3237 Because it is called as a front end, TV_PHASE_PARSING and
3238 TV_PARSE_GLOBAL are active, and we need to turn them off while
3239 doing LTO. Later we turn them back on so they are active up in
3241 timevar_pop (TV_PARSE_GLOBAL
);
3242 timevar_stop (TV_PHASE_PARSING
);
3244 timevar_start (TV_PHASE_SETUP
);
3246 /* Initialize the LTO front end. */
3249 timevar_stop (TV_PHASE_SETUP
);
3250 timevar_start (TV_PHASE_STREAM_IN
);
3252 /* Read all the symbols and call graph from all the files in the
3254 read_cgraph_and_symbols (num_in_fnames
, in_fnames
);
3256 timevar_stop (TV_PHASE_STREAM_IN
);
3260 /* If WPA is enabled analyze the whole call graph and create an
3261 optimization plan. Otherwise, read in all the function
3262 bodies and continue with optimization. */
3264 do_whole_program_analysis ();
3267 struct varpool_node
*vnode
;
3269 timevar_start (TV_PHASE_OPT_GEN
);
3271 materialize_cgraph ();
3273 lto_promote_statics_nonwpa ();
3275 /* Let the middle end know that we have read and merged all of
3279 timevar_stop (TV_PHASE_OPT_GEN
);
3281 /* FIXME lto, if the processes spawned by WPA fail, we miss
3282 the chance to print WPA's report, so WPA will call
3283 print_lto_report before launching LTRANS. If LTRANS was
3284 launched directly by the driver we would not need to do
3286 if (flag_lto_report
|| (flag_wpa
&& flag_lto_report_wpa
))
3287 print_lto_report_1 ();
3289 /* Record the global variables. */
3290 FOR_EACH_DEFINED_VARIABLE (vnode
)
3291 vec_safe_push (lto_global_var_decls
, vnode
->decl
);
3295 /* Here we make LTO pretend to be a parser. */
3296 timevar_start (TV_PHASE_PARSING
);
3297 timevar_push (TV_PARSE_GLOBAL
);
3300 #include "gt-lto-lto.h"