1 /* Write the GIMPLE representation to a file stream.
3 Copyright (C) 2009-2015 Free Software Foundation, Inc.
4 Contributed by Kenneth Zadeck <zadeck@naturalbridge.com>
5 Re-implemented by Diego Novillo <dnovillo@google.com>
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify it under
10 the terms of the GNU General Public License as published by the Free
11 Software Foundation; either version 3, or (at your option) any later
14 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15 WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
25 #include "coretypes.h"
30 #include "double-int.h"
37 #include "fold-const.h"
38 #include "stor-layout.h"
39 #include "stringpool.h"
41 #include "hard-reg-set.h"
45 #include "statistics.h"
47 #include "fixed-value.h"
48 #include "insn-config.h"
59 #include "dominance.h"
61 #include "basic-block.h"
62 #include "tree-ssa-alias.h"
63 #include "internal-fn.h"
64 #include "gimple-expr.h"
67 #include "gimple-iterator.h"
68 #include "gimple-ssa.h"
69 #include "tree-ssanames.h"
70 #include "tree-pass.h"
71 #include "diagnostic-core.h"
73 #include "lto-symtab.h"
75 #include "plugin-api.h"
78 #include "lto-streamer.h"
79 #include "data-streamer.h"
80 #include "gimple-streamer.h"
81 #include "tree-streamer.h"
82 #include "streamer-hooks.h"
85 #include "gomp-constants.h"
88 static void lto_write_tree (struct output_block
*, tree
, bool);
90 /* Clear the line info stored in DATA_IN. */
93 clear_line_info (struct output_block
*ob
)
95 ob
->current_file
= NULL
;
101 /* Create the output block and return it. SECTION_TYPE is
102 LTO_section_function_body or LTO_static_initializer. */
104 struct output_block
*
105 create_output_block (enum lto_section_type section_type
)
107 struct output_block
*ob
= XCNEW (struct output_block
);
109 ob
->section_type
= section_type
;
110 ob
->decl_state
= lto_get_out_decl_state ();
111 ob
->main_stream
= XCNEW (struct lto_output_stream
);
112 ob
->string_stream
= XCNEW (struct lto_output_stream
);
113 ob
->writer_cache
= streamer_tree_cache_create (!flag_wpa
, true, false);
115 if (section_type
== LTO_section_function_body
)
116 ob
->cfg_stream
= XCNEW (struct lto_output_stream
);
118 clear_line_info (ob
);
120 ob
->string_hash_table
= new hash_table
<string_slot_hasher
> (37);
121 gcc_obstack_init (&ob
->obstack
);
127 /* Destroy the output block OB. */
130 destroy_output_block (struct output_block
*ob
)
132 enum lto_section_type section_type
= ob
->section_type
;
134 delete ob
->string_hash_table
;
135 ob
->string_hash_table
= NULL
;
137 free (ob
->main_stream
);
138 free (ob
->string_stream
);
139 if (section_type
== LTO_section_function_body
)
140 free (ob
->cfg_stream
);
142 streamer_tree_cache_delete (ob
->writer_cache
);
143 obstack_free (&ob
->obstack
, NULL
);
149 /* Look up NODE in the type table and write the index for it to OB. */
152 output_type_ref (struct output_block
*ob
, tree node
)
154 streamer_write_record_start (ob
, LTO_type_ref
);
155 lto_output_type_ref_index (ob
->decl_state
, ob
->main_stream
, node
);
159 /* Return true if tree node T is written to various tables. For these
160 nodes, we sometimes want to write their phyiscal representation
161 (via lto_output_tree), and sometimes we need to emit an index
162 reference into a table (via lto_output_tree_ref). */
165 tree_is_indexable (tree t
)
167 /* Parameters and return values of functions of variably modified types
168 must go to global stream, because they may be used in the type
170 if ((TREE_CODE (t
) == PARM_DECL
|| TREE_CODE (t
) == RESULT_DECL
)
172 return variably_modified_type_p (TREE_TYPE (DECL_CONTEXT (t
)), NULL_TREE
);
173 /* IMPORTED_DECL is put into BLOCK and thus it never can be shared. */
174 else if (TREE_CODE (t
) == IMPORTED_DECL
)
176 else if (((TREE_CODE (t
) == VAR_DECL
&& !TREE_STATIC (t
))
177 || TREE_CODE (t
) == TYPE_DECL
178 || TREE_CODE (t
) == CONST_DECL
179 || TREE_CODE (t
) == NAMELIST_DECL
)
180 && decl_function_context (t
))
182 else if (TREE_CODE (t
) == DEBUG_EXPR_DECL
)
184 /* Variably modified types need to be streamed alongside function
185 bodies because they can refer to local entities. Together with
186 them we have to localize their members as well.
187 ??? In theory that includes non-FIELD_DECLs as well. */
189 && variably_modified_type_p (t
, NULL_TREE
))
191 else if (TREE_CODE (t
) == FIELD_DECL
192 && variably_modified_type_p (DECL_CONTEXT (t
), NULL_TREE
))
195 return (TYPE_P (t
) || DECL_P (t
) || TREE_CODE (t
) == SSA_NAME
);
199 /* Output info about new location into bitpack BP.
200 After outputting bitpack, lto_output_location_data has
201 to be done to output actual data. */
204 lto_output_location (struct output_block
*ob
, struct bitpack_d
*bp
,
207 expanded_location xloc
;
209 loc
= LOCATION_LOCUS (loc
);
210 bp_pack_value (bp
, loc
== UNKNOWN_LOCATION
, 1);
211 if (loc
== UNKNOWN_LOCATION
)
214 xloc
= expand_location (loc
);
216 bp_pack_value (bp
, ob
->current_file
!= xloc
.file
, 1);
217 bp_pack_value (bp
, ob
->current_line
!= xloc
.line
, 1);
218 bp_pack_value (bp
, ob
->current_col
!= xloc
.column
, 1);
220 if (ob
->current_file
!= xloc
.file
)
221 bp_pack_string (ob
, bp
, xloc
.file
, true);
222 ob
->current_file
= xloc
.file
;
224 if (ob
->current_line
!= xloc
.line
)
225 bp_pack_var_len_unsigned (bp
, xloc
.line
);
226 ob
->current_line
= xloc
.line
;
228 if (ob
->current_col
!= xloc
.column
)
229 bp_pack_var_len_unsigned (bp
, xloc
.column
);
230 ob
->current_col
= xloc
.column
;
234 /* If EXPR is an indexable tree node, output a reference to it to
235 output block OB. Otherwise, output the physical representation of
239 lto_output_tree_ref (struct output_block
*ob
, tree expr
)
245 output_type_ref (ob
, expr
);
249 code
= TREE_CODE (expr
);
253 streamer_write_record_start (ob
, LTO_ssa_name_ref
);
254 streamer_write_uhwi (ob
, SSA_NAME_VERSION (expr
));
258 streamer_write_record_start (ob
, LTO_field_decl_ref
);
259 lto_output_field_decl_index (ob
->decl_state
, ob
->main_stream
, expr
);
263 streamer_write_record_start (ob
, LTO_function_decl_ref
);
264 lto_output_fn_decl_index (ob
->decl_state
, ob
->main_stream
, expr
);
268 case DEBUG_EXPR_DECL
:
269 gcc_assert (decl_function_context (expr
) == NULL
|| TREE_STATIC (expr
));
271 streamer_write_record_start (ob
, LTO_global_decl_ref
);
272 lto_output_var_decl_index (ob
->decl_state
, ob
->main_stream
, expr
);
276 streamer_write_record_start (ob
, LTO_const_decl_ref
);
277 lto_output_var_decl_index (ob
->decl_state
, ob
->main_stream
, expr
);
281 gcc_assert (decl_function_context (expr
) == NULL
);
282 streamer_write_record_start (ob
, LTO_imported_decl_ref
);
283 lto_output_var_decl_index (ob
->decl_state
, ob
->main_stream
, expr
);
287 streamer_write_record_start (ob
, LTO_type_decl_ref
);
288 lto_output_type_decl_index (ob
->decl_state
, ob
->main_stream
, expr
);
292 streamer_write_record_start (ob
, LTO_namelist_decl_ref
);
293 lto_output_var_decl_index (ob
->decl_state
, ob
->main_stream
, expr
);
297 streamer_write_record_start (ob
, LTO_namespace_decl_ref
);
298 lto_output_namespace_decl_index (ob
->decl_state
, ob
->main_stream
, expr
);
302 streamer_write_record_start (ob
, LTO_label_decl_ref
);
303 lto_output_var_decl_index (ob
->decl_state
, ob
->main_stream
, expr
);
307 streamer_write_record_start (ob
, LTO_result_decl_ref
);
308 lto_output_var_decl_index (ob
->decl_state
, ob
->main_stream
, expr
);
311 case TRANSLATION_UNIT_DECL
:
312 streamer_write_record_start (ob
, LTO_translation_unit_decl_ref
);
313 lto_output_var_decl_index (ob
->decl_state
, ob
->main_stream
, expr
);
317 /* No other node is indexable, so it should have been handled by
324 /* Return true if EXPR is a tree node that can be written to disk. */
327 lto_is_streamable (tree expr
)
329 enum tree_code code
= TREE_CODE (expr
);
331 /* Notice that we reject SSA_NAMEs as well. We only emit the SSA
332 name version in lto_output_tree_ref (see output_ssa_names). */
333 return !is_lang_specific (expr
)
337 && code
!= MODIFY_EXPR
339 && code
!= TARGET_EXPR
341 && code
!= WITH_CLEANUP_EXPR
342 && code
!= STATEMENT_LIST
343 && (code
== CASE_LABEL_EXPR
345 || TREE_CODE_CLASS (code
) != tcc_statement
);
349 /* For EXPR lookup and return what we want to stream to OB as DECL_INITIAL. */
352 get_symbol_initial_value (lto_symtab_encoder_t encoder
, tree expr
)
354 gcc_checking_assert (DECL_P (expr
)
355 && TREE_CODE (expr
) != FUNCTION_DECL
356 && TREE_CODE (expr
) != TRANSLATION_UNIT_DECL
);
358 /* Handle DECL_INITIAL for symbols. */
359 tree initial
= DECL_INITIAL (expr
);
360 if (TREE_CODE (expr
) == VAR_DECL
361 && (TREE_STATIC (expr
) || DECL_EXTERNAL (expr
))
362 && !DECL_IN_CONSTANT_POOL (expr
)
366 /* Extra section needs about 30 bytes; do not produce it for simple
368 if (TREE_CODE (DECL_INITIAL (expr
)) == CONSTRUCTOR
369 || !(vnode
= varpool_node::get (expr
))
370 || !lto_symtab_encoder_encode_initializer_p (encoder
, vnode
))
371 initial
= error_mark_node
;
378 /* Write a physical representation of tree node EXPR to output block
379 OB. If REF_P is true, the leaves of EXPR are emitted as references
380 via lto_output_tree_ref. IX is the index into the streamer cache
381 where EXPR is stored. */
384 lto_write_tree_1 (struct output_block
*ob
, tree expr
, bool ref_p
)
386 /* Pack all the non-pointer fields in EXPR into a bitpack and write
387 the resulting bitpack. */
388 bitpack_d bp
= bitpack_create (ob
->main_stream
);
389 streamer_pack_tree_bitfields (ob
, &bp
, expr
);
390 streamer_write_bitpack (&bp
);
392 /* Write all the pointer fields in EXPR. */
393 streamer_write_tree_body (ob
, expr
, ref_p
);
395 /* Write any LTO-specific data to OB. */
397 && TREE_CODE (expr
) != FUNCTION_DECL
398 && TREE_CODE (expr
) != TRANSLATION_UNIT_DECL
)
400 /* Handle DECL_INITIAL for symbols. */
401 tree initial
= get_symbol_initial_value
402 (ob
->decl_state
->symtab_node_encoder
, expr
);
403 stream_write_tree (ob
, initial
, ref_p
);
407 /* Write a physical representation of tree node EXPR to output block
408 OB. If REF_P is true, the leaves of EXPR are emitted as references
409 via lto_output_tree_ref. IX is the index into the streamer cache
410 where EXPR is stored. */
413 lto_write_tree (struct output_block
*ob
, tree expr
, bool ref_p
)
415 if (!lto_is_streamable (expr
))
416 internal_error ("tree code %qs is not supported in LTO streams",
417 get_tree_code_name (TREE_CODE (expr
)));
419 /* Write the header, containing everything needed to materialize
420 EXPR on the reading side. */
421 streamer_write_tree_header (ob
, expr
);
423 lto_write_tree_1 (ob
, expr
, ref_p
);
425 /* Mark the end of EXPR. */
426 streamer_write_zero (ob
);
429 /* Emit the physical representation of tree node EXPR to output block
430 OB. If THIS_REF_P is true, the leaves of EXPR are emitted as references
431 via lto_output_tree_ref. REF_P is used for streaming siblings of EXPR. */
434 lto_output_tree_1 (struct output_block
*ob
, tree expr
, hashval_t hash
,
435 bool ref_p
, bool this_ref_p
)
439 gcc_checking_assert (expr
!= NULL_TREE
440 && !(this_ref_p
&& tree_is_indexable (expr
)));
442 bool exists_p
= streamer_tree_cache_insert (ob
->writer_cache
,
444 gcc_assert (!exists_p
);
445 if (streamer_handle_as_builtin_p (expr
))
447 /* MD and NORMAL builtins do not need to be written out
448 completely as they are always instantiated by the
449 compiler on startup. The only builtins that need to
450 be written out are BUILT_IN_FRONTEND. For all other
451 builtins, we simply write the class and code. */
452 streamer_write_builtin (ob
, expr
);
454 else if (TREE_CODE (expr
) == INTEGER_CST
455 && !TREE_OVERFLOW (expr
))
457 /* Shared INTEGER_CST nodes are special because they need their
458 original type to be materialized by the reader (to implement
459 TYPE_CACHED_VALUES). */
460 streamer_write_integer_cst (ob
, expr
, ref_p
);
464 /* This is the first time we see EXPR, write its fields
466 lto_write_tree (ob
, expr
, ref_p
);
473 DFS (struct output_block
*ob
, tree expr
, bool ref_p
, bool this_ref_p
,
482 vec
<scc_entry
> sccstack
;
491 static int scc_entry_compare (const void *, const void *);
493 void DFS_write_tree_body (struct output_block
*ob
,
494 tree expr
, sccs
*expr_state
, bool ref_p
,
497 void DFS_write_tree (struct output_block
*ob
, sccs
*from_state
,
498 tree expr
, bool ref_p
, bool this_ref_p
,
501 hash_scc (struct output_block
*ob
, unsigned first
, unsigned size
);
503 unsigned int next_dfs_num
;
504 hash_map
<tree
, sccs
*> sccstate
;
505 struct obstack sccstate_obstack
;
508 DFS::DFS (struct output_block
*ob
, tree expr
, bool ref_p
, bool this_ref_p
,
512 gcc_obstack_init (&sccstate_obstack
);
514 DFS_write_tree (ob
, NULL
, expr
, ref_p
, this_ref_p
, single_p
);
520 obstack_free (&sccstate_obstack
, NULL
);
523 /* Handle the tree EXPR in the DFS walk with SCC state EXPR_STATE and
524 DFS recurse for all tree edges originating from it. */
527 DFS::DFS_write_tree_body (struct output_block
*ob
,
528 tree expr
, sccs
*expr_state
, bool ref_p
,
531 #define DFS_follow_tree_edge(DEST) \
532 DFS_write_tree (ob, expr_state, DEST, ref_p, ref_p, single_p)
536 code
= TREE_CODE (expr
);
538 if (CODE_CONTAINS_STRUCT (code
, TS_TYPED
))
540 if (TREE_CODE (expr
) != IDENTIFIER_NODE
)
541 DFS_follow_tree_edge (TREE_TYPE (expr
));
544 if (CODE_CONTAINS_STRUCT (code
, TS_VECTOR
))
546 for (unsigned i
= 0; i
< VECTOR_CST_NELTS (expr
); ++i
)
547 DFS_follow_tree_edge (VECTOR_CST_ELT (expr
, i
));
550 if (CODE_CONTAINS_STRUCT (code
, TS_COMPLEX
))
552 DFS_follow_tree_edge (TREE_REALPART (expr
));
553 DFS_follow_tree_edge (TREE_IMAGPART (expr
));
556 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_MINIMAL
))
558 /* Drop names that were created for anonymous entities. */
560 && TREE_CODE (DECL_NAME (expr
)) == IDENTIFIER_NODE
561 && ANON_AGGRNAME_P (DECL_NAME (expr
)))
564 DFS_follow_tree_edge (DECL_NAME (expr
));
565 DFS_follow_tree_edge (DECL_CONTEXT (expr
));
568 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_COMMON
))
570 DFS_follow_tree_edge (DECL_SIZE (expr
));
571 DFS_follow_tree_edge (DECL_SIZE_UNIT (expr
));
573 /* Note, DECL_INITIAL is not handled here. Since DECL_INITIAL needs
574 special handling in LTO, it must be handled by streamer hooks. */
576 DFS_follow_tree_edge (DECL_ATTRIBUTES (expr
));
578 /* Do not follow DECL_ABSTRACT_ORIGIN. We cannot handle debug information
579 for early inlining so drop it on the floor instead of ICEing in
582 if ((TREE_CODE (expr
) == VAR_DECL
583 || TREE_CODE (expr
) == PARM_DECL
)
584 && DECL_HAS_VALUE_EXPR_P (expr
))
585 DFS_follow_tree_edge (DECL_VALUE_EXPR (expr
));
586 if (TREE_CODE (expr
) == VAR_DECL
)
587 DFS_follow_tree_edge (DECL_DEBUG_EXPR (expr
));
590 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_NON_COMMON
))
592 if (TREE_CODE (expr
) == TYPE_DECL
)
593 DFS_follow_tree_edge (DECL_ORIGINAL_TYPE (expr
));
596 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_WITH_VIS
))
598 /* Make sure we don't inadvertently set the assembler name. */
599 if (DECL_ASSEMBLER_NAME_SET_P (expr
))
600 DFS_follow_tree_edge (DECL_ASSEMBLER_NAME (expr
));
603 if (CODE_CONTAINS_STRUCT (code
, TS_FIELD_DECL
))
605 DFS_follow_tree_edge (DECL_FIELD_OFFSET (expr
));
606 DFS_follow_tree_edge (DECL_BIT_FIELD_TYPE (expr
));
607 DFS_follow_tree_edge (DECL_BIT_FIELD_REPRESENTATIVE (expr
));
608 DFS_follow_tree_edge (DECL_FIELD_BIT_OFFSET (expr
));
609 DFS_follow_tree_edge (DECL_FCONTEXT (expr
));
612 if (CODE_CONTAINS_STRUCT (code
, TS_FUNCTION_DECL
))
614 DFS_follow_tree_edge (DECL_VINDEX (expr
));
615 DFS_follow_tree_edge (DECL_FUNCTION_PERSONALITY (expr
));
616 DFS_follow_tree_edge (DECL_FUNCTION_SPECIFIC_TARGET (expr
));
617 DFS_follow_tree_edge (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr
));
620 if (CODE_CONTAINS_STRUCT (code
, TS_TYPE_COMMON
))
622 DFS_follow_tree_edge (TYPE_SIZE (expr
));
623 DFS_follow_tree_edge (TYPE_SIZE_UNIT (expr
));
624 DFS_follow_tree_edge (TYPE_ATTRIBUTES (expr
));
625 DFS_follow_tree_edge (TYPE_NAME (expr
));
626 /* Do not follow TYPE_POINTER_TO or TYPE_REFERENCE_TO. They will be
627 reconstructed during fixup. */
628 /* Do not follow TYPE_NEXT_VARIANT, we reconstruct the variant lists
630 DFS_follow_tree_edge (TYPE_MAIN_VARIANT (expr
));
631 DFS_follow_tree_edge (TYPE_CONTEXT (expr
));
632 /* TYPE_CANONICAL is re-computed during type merging, so no need
633 to follow it here. */
634 DFS_follow_tree_edge (TYPE_STUB_DECL (expr
));
637 if (CODE_CONTAINS_STRUCT (code
, TS_TYPE_NON_COMMON
))
639 if (TREE_CODE (expr
) == ENUMERAL_TYPE
)
640 DFS_follow_tree_edge (TYPE_VALUES (expr
));
641 else if (TREE_CODE (expr
) == ARRAY_TYPE
)
642 DFS_follow_tree_edge (TYPE_DOMAIN (expr
));
643 else if (RECORD_OR_UNION_TYPE_P (expr
))
644 for (tree t
= TYPE_FIELDS (expr
); t
; t
= TREE_CHAIN (t
))
645 DFS_follow_tree_edge (t
);
646 else if (TREE_CODE (expr
) == FUNCTION_TYPE
647 || TREE_CODE (expr
) == METHOD_TYPE
)
648 DFS_follow_tree_edge (TYPE_ARG_TYPES (expr
));
650 if (!POINTER_TYPE_P (expr
))
651 DFS_follow_tree_edge (TYPE_MINVAL (expr
));
652 DFS_follow_tree_edge (TYPE_MAXVAL (expr
));
653 if (RECORD_OR_UNION_TYPE_P (expr
))
654 DFS_follow_tree_edge (TYPE_BINFO (expr
));
657 if (CODE_CONTAINS_STRUCT (code
, TS_LIST
))
659 DFS_follow_tree_edge (TREE_PURPOSE (expr
));
660 DFS_follow_tree_edge (TREE_VALUE (expr
));
661 DFS_follow_tree_edge (TREE_CHAIN (expr
));
664 if (CODE_CONTAINS_STRUCT (code
, TS_VEC
))
666 for (int i
= 0; i
< TREE_VEC_LENGTH (expr
); i
++)
667 DFS_follow_tree_edge (TREE_VEC_ELT (expr
, i
));
670 if (CODE_CONTAINS_STRUCT (code
, TS_EXP
))
672 for (int i
= 0; i
< TREE_OPERAND_LENGTH (expr
); i
++)
673 DFS_follow_tree_edge (TREE_OPERAND (expr
, i
));
674 DFS_follow_tree_edge (TREE_BLOCK (expr
));
677 if (CODE_CONTAINS_STRUCT (code
, TS_BLOCK
))
679 for (tree t
= BLOCK_VARS (expr
); t
; t
= TREE_CHAIN (t
))
680 if (VAR_OR_FUNCTION_DECL_P (t
)
681 && DECL_EXTERNAL (t
))
682 /* We have to stream externals in the block chain as
683 non-references. See also
684 tree-streamer-out.c:streamer_write_chain. */
685 DFS_write_tree (ob
, expr_state
, t
, ref_p
, false, single_p
);
687 DFS_follow_tree_edge (t
);
689 DFS_follow_tree_edge (BLOCK_SUPERCONTEXT (expr
));
691 /* Follow BLOCK_ABSTRACT_ORIGIN for the limited cases we can
692 handle - those that represent inlined function scopes.
693 For the drop rest them on the floor instead of ICEing
695 if (inlined_function_outer_scope_p (expr
))
697 tree ultimate_origin
= block_ultimate_origin (expr
);
698 DFS_follow_tree_edge (ultimate_origin
);
700 /* Do not follow BLOCK_NONLOCALIZED_VARS. We cannot handle debug
701 information for early inlined BLOCKs so drop it on the floor instead
702 of ICEing in dwarf2out.c. */
704 /* BLOCK_FRAGMENT_ORIGIN and BLOCK_FRAGMENT_CHAIN is not live at LTO
707 /* Do not output BLOCK_SUBBLOCKS. Instead on streaming-in this
708 list is re-constructed from BLOCK_SUPERCONTEXT. */
711 if (CODE_CONTAINS_STRUCT (code
, TS_BINFO
))
716 /* Note that the number of BINFO slots has already been emitted in
717 EXPR's header (see streamer_write_tree_header) because this length
718 is needed to build the empty BINFO node on the reader side. */
719 FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (expr
), i
, t
)
720 DFS_follow_tree_edge (t
);
721 DFS_follow_tree_edge (BINFO_OFFSET (expr
));
722 DFS_follow_tree_edge (BINFO_VTABLE (expr
));
723 DFS_follow_tree_edge (BINFO_VPTR_FIELD (expr
));
725 /* The number of BINFO_BASE_ACCESSES has already been emitted in
726 EXPR's bitfield section. */
727 FOR_EACH_VEC_SAFE_ELT (BINFO_BASE_ACCESSES (expr
), i
, t
)
728 DFS_follow_tree_edge (t
);
730 /* Do not walk BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX
731 and BINFO_VPTR_INDEX; these are used by C++ FE only. */
734 if (CODE_CONTAINS_STRUCT (code
, TS_CONSTRUCTOR
))
739 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (expr
), i
, index
, value
)
741 DFS_follow_tree_edge (index
);
742 DFS_follow_tree_edge (value
);
746 if (code
== OMP_CLAUSE
)
749 for (i
= 0; i
< omp_clause_num_ops
[OMP_CLAUSE_CODE (expr
)]; i
++)
750 DFS_follow_tree_edge (OMP_CLAUSE_OPERAND (expr
, i
));
751 DFS_follow_tree_edge (OMP_CLAUSE_CHAIN (expr
));
754 #undef DFS_follow_tree_edge
757 /* Return a hash value for the tree T.
758 CACHE holds hash values of trees outside current SCC. MAP, if non-NULL,
759 may hold hash values if trees inside current SCC. */
762 hash_tree (struct streamer_tree_cache_d
*cache
, hash_map
<tree
, hashval_t
> *map
, tree t
)
764 inchash::hash hstate
;
766 #define visit(SIBLING) \
770 hstate.add_int (0); \
771 else if (streamer_tree_cache_lookup (cache, SIBLING, &ix)) \
772 hstate.add_int (streamer_tree_cache_get_hash (cache, ix)); \
774 hstate.add_int (*map->get (SIBLING)); \
776 hstate.add_int (1); \
780 enum tree_code code
= TREE_CODE (t
);
781 hstate
.add_int (code
);
784 hstate
.add_flag (TREE_SIDE_EFFECTS (t
));
785 hstate
.add_flag (TREE_CONSTANT (t
));
786 hstate
.add_flag (TREE_READONLY (t
));
787 hstate
.add_flag (TREE_PUBLIC (t
));
789 hstate
.add_flag (TREE_ADDRESSABLE (t
));
790 hstate
.add_flag (TREE_THIS_VOLATILE (t
));
792 hstate
.add_flag (DECL_UNSIGNED (t
));
794 hstate
.add_flag (TYPE_UNSIGNED (t
));
796 hstate
.add_flag (TYPE_ARTIFICIAL (t
));
798 hstate
.add_flag (TREE_NO_WARNING (t
));
799 hstate
.add_flag (TREE_NOTHROW (t
));
800 hstate
.add_flag (TREE_STATIC (t
));
801 hstate
.add_flag (TREE_PROTECTED (t
));
802 hstate
.add_flag (TREE_DEPRECATED (t
));
803 if (code
!= TREE_BINFO
)
804 hstate
.add_flag (TREE_PRIVATE (t
));
807 hstate
.add_flag (TYPE_SATURATING (t
));
808 hstate
.add_flag (TYPE_ADDR_SPACE (t
));
810 else if (code
== SSA_NAME
)
811 hstate
.add_flag (SSA_NAME_IS_DEFAULT_DEF (t
));
812 hstate
.commit_flag ();
814 if (CODE_CONTAINS_STRUCT (code
, TS_INT_CST
))
817 hstate
.add_wide_int (TREE_INT_CST_NUNITS (t
));
818 hstate
.add_wide_int (TREE_INT_CST_EXT_NUNITS (t
));
819 for (i
= 0; i
< TREE_INT_CST_NUNITS (t
); i
++)
820 hstate
.add_wide_int (TREE_INT_CST_ELT (t
, i
));
823 if (CODE_CONTAINS_STRUCT (code
, TS_REAL_CST
))
825 REAL_VALUE_TYPE r
= TREE_REAL_CST (t
);
826 hstate
.add_flag (r
.cl
);
827 hstate
.add_flag (r
.sign
);
828 hstate
.add_flag (r
.signalling
);
829 hstate
.add_flag (r
.canonical
);
830 hstate
.commit_flag ();
831 hstate
.add_int (r
.uexp
);
832 hstate
.add (r
.sig
, sizeof (r
.sig
));
835 if (CODE_CONTAINS_STRUCT (code
, TS_FIXED_CST
))
837 FIXED_VALUE_TYPE f
= TREE_FIXED_CST (t
);
838 hstate
.add_int (f
.mode
);
839 hstate
.add_int (f
.data
.low
);
840 hstate
.add_int (f
.data
.high
);
843 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_COMMON
))
845 hstate
.add_wide_int (DECL_MODE (t
));
846 hstate
.add_flag (DECL_NONLOCAL (t
));
847 hstate
.add_flag (DECL_VIRTUAL_P (t
));
848 hstate
.add_flag (DECL_IGNORED_P (t
));
849 hstate
.add_flag (DECL_ABSTRACT_P (t
));
850 hstate
.add_flag (DECL_ARTIFICIAL (t
));
851 hstate
.add_flag (DECL_USER_ALIGN (t
));
852 hstate
.add_flag (DECL_PRESERVE_P (t
));
853 hstate
.add_flag (DECL_EXTERNAL (t
));
854 hstate
.add_flag (DECL_GIMPLE_REG_P (t
));
855 hstate
.commit_flag ();
856 hstate
.add_int (DECL_ALIGN (t
));
857 if (code
== LABEL_DECL
)
859 hstate
.add_int (EH_LANDING_PAD_NR (t
));
860 hstate
.add_int (LABEL_DECL_UID (t
));
862 else if (code
== FIELD_DECL
)
864 hstate
.add_flag (DECL_PACKED (t
));
865 hstate
.add_flag (DECL_NONADDRESSABLE_P (t
));
866 hstate
.add_int (DECL_OFFSET_ALIGN (t
));
868 else if (code
== VAR_DECL
)
870 hstate
.add_flag (DECL_HAS_DEBUG_EXPR_P (t
));
871 hstate
.add_flag (DECL_NONLOCAL_FRAME (t
));
873 if (code
== RESULT_DECL
877 hstate
.add_flag (DECL_BY_REFERENCE (t
));
879 || code
== PARM_DECL
)
880 hstate
.add_flag (DECL_HAS_VALUE_EXPR_P (t
));
882 hstate
.commit_flag ();
885 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_WRTL
))
886 hstate
.add_int (DECL_REGISTER (t
));
888 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_WITH_VIS
))
890 hstate
.add_flag (DECL_COMMON (t
));
891 hstate
.add_flag (DECL_DLLIMPORT_P (t
));
892 hstate
.add_flag (DECL_WEAK (t
));
893 hstate
.add_flag (DECL_SEEN_IN_BIND_EXPR_P (t
));
894 hstate
.add_flag (DECL_COMDAT (t
));
895 hstate
.add_flag (DECL_VISIBILITY_SPECIFIED (t
));
896 hstate
.add_int (DECL_VISIBILITY (t
));
897 if (code
== VAR_DECL
)
899 /* DECL_IN_TEXT_SECTION is set during final asm output only. */
900 hstate
.add_flag (DECL_HARD_REGISTER (t
));
901 hstate
.add_flag (DECL_IN_CONSTANT_POOL (t
));
903 if (TREE_CODE (t
) == FUNCTION_DECL
)
905 hstate
.add_flag (DECL_FINAL_P (t
));
906 hstate
.add_flag (DECL_CXX_CONSTRUCTOR_P (t
));
907 hstate
.add_flag (DECL_CXX_DESTRUCTOR_P (t
));
909 hstate
.commit_flag ();
912 if (CODE_CONTAINS_STRUCT (code
, TS_FUNCTION_DECL
))
914 hstate
.add_int (DECL_BUILT_IN_CLASS (t
));
915 hstate
.add_flag (DECL_STATIC_CONSTRUCTOR (t
));
916 hstate
.add_flag (DECL_STATIC_DESTRUCTOR (t
));
917 hstate
.add_flag (DECL_UNINLINABLE (t
));
918 hstate
.add_flag (DECL_POSSIBLY_INLINED (t
));
919 hstate
.add_flag (DECL_IS_NOVOPS (t
));
920 hstate
.add_flag (DECL_IS_RETURNS_TWICE (t
));
921 hstate
.add_flag (DECL_IS_MALLOC (t
));
922 hstate
.add_flag (DECL_IS_OPERATOR_NEW (t
));
923 hstate
.add_flag (DECL_DECLARED_INLINE_P (t
));
924 hstate
.add_flag (DECL_STATIC_CHAIN (t
));
925 hstate
.add_flag (DECL_NO_INLINE_WARNING_P (t
));
926 hstate
.add_flag (DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (t
));
927 hstate
.add_flag (DECL_NO_LIMIT_STACK (t
));
928 hstate
.add_flag (DECL_DISREGARD_INLINE_LIMITS (t
));
929 hstate
.add_flag (DECL_PURE_P (t
));
930 hstate
.add_flag (DECL_LOOPING_CONST_OR_PURE_P (t
));
931 hstate
.commit_flag ();
932 if (DECL_BUILT_IN_CLASS (t
) != NOT_BUILT_IN
)
933 hstate
.add_int (DECL_FUNCTION_CODE (t
));
936 if (CODE_CONTAINS_STRUCT (code
, TS_TYPE_COMMON
))
938 hstate
.add_wide_int (TYPE_MODE (t
));
939 hstate
.add_flag (TYPE_STRING_FLAG (t
));
940 hstate
.add_flag (TYPE_NO_FORCE_BLK (t
));
941 hstate
.add_flag (TYPE_NEEDS_CONSTRUCTING (t
));
942 hstate
.add_flag (TYPE_PACKED (t
));
943 hstate
.add_flag (TYPE_RESTRICT (t
));
944 hstate
.add_flag (TYPE_USER_ALIGN (t
));
945 hstate
.add_flag (TYPE_READONLY (t
));
946 if (RECORD_OR_UNION_TYPE_P (t
))
948 hstate
.add_flag (TYPE_TRANSPARENT_AGGR (t
));
949 hstate
.add_flag (TYPE_FINAL_P (t
));
951 else if (code
== ARRAY_TYPE
)
952 hstate
.add_flag (TYPE_NONALIASED_COMPONENT (t
));
953 hstate
.commit_flag ();
954 hstate
.add_int (TYPE_PRECISION (t
));
955 hstate
.add_int (TYPE_ALIGN (t
));
956 hstate
.add_int ((TYPE_ALIAS_SET (t
) == 0
958 && get_alias_set (t
) == 0))
962 if (CODE_CONTAINS_STRUCT (code
, TS_TRANSLATION_UNIT_DECL
))
963 hstate
.add (TRANSLATION_UNIT_LANGUAGE (t
),
964 strlen (TRANSLATION_UNIT_LANGUAGE (t
)));
966 if (CODE_CONTAINS_STRUCT (code
, TS_TARGET_OPTION
)
967 /* We don't stream these when passing things to a different target. */
968 && !lto_stream_offload_p
)
969 hstate
.add_wide_int (cl_target_option_hash (TREE_TARGET_OPTION (t
)));
971 if (CODE_CONTAINS_STRUCT (code
, TS_OPTIMIZATION
))
972 hstate
.add_wide_int (cl_optimization_hash (TREE_OPTIMIZATION (t
)));
974 if (CODE_CONTAINS_STRUCT (code
, TS_IDENTIFIER
))
975 hstate
.merge_hash (IDENTIFIER_HASH_VALUE (t
));
977 if (CODE_CONTAINS_STRUCT (code
, TS_STRING
))
978 hstate
.add (TREE_STRING_POINTER (t
), TREE_STRING_LENGTH (t
));
980 if (CODE_CONTAINS_STRUCT (code
, TS_TYPED
))
982 if (code
!= IDENTIFIER_NODE
)
983 visit (TREE_TYPE (t
));
986 if (CODE_CONTAINS_STRUCT (code
, TS_VECTOR
))
987 for (unsigned i
= 0; i
< VECTOR_CST_NELTS (t
); ++i
)
988 visit (VECTOR_CST_ELT (t
, i
));
990 if (CODE_CONTAINS_STRUCT (code
, TS_COMPLEX
))
992 visit (TREE_REALPART (t
));
993 visit (TREE_IMAGPART (t
));
996 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_MINIMAL
))
998 /* Drop names that were created for anonymous entities. */
1000 && TREE_CODE (DECL_NAME (t
)) == IDENTIFIER_NODE
1001 && ANON_AGGRNAME_P (DECL_NAME (t
)))
1004 visit (DECL_NAME (t
));
1005 if (DECL_FILE_SCOPE_P (t
))
1008 visit (DECL_CONTEXT (t
));
1011 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_COMMON
))
1013 visit (DECL_SIZE (t
));
1014 visit (DECL_SIZE_UNIT (t
));
1015 visit (DECL_ATTRIBUTES (t
));
1016 if ((code
== VAR_DECL
1017 || code
== PARM_DECL
)
1018 && DECL_HAS_VALUE_EXPR_P (t
))
1019 visit (DECL_VALUE_EXPR (t
));
1020 if (code
== VAR_DECL
1021 && DECL_HAS_DEBUG_EXPR_P (t
))
1022 visit (DECL_DEBUG_EXPR (t
));
1023 /* ??? Hash DECL_INITIAL as streamed. Needs the output-block to
1024 be able to call get_symbol_initial_value. */
1027 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_NON_COMMON
))
1029 if (code
== TYPE_DECL
)
1030 visit (DECL_ORIGINAL_TYPE (t
));
1033 if (CODE_CONTAINS_STRUCT (code
, TS_DECL_WITH_VIS
))
1035 if (DECL_ASSEMBLER_NAME_SET_P (t
))
1036 visit (DECL_ASSEMBLER_NAME (t
));
1039 if (CODE_CONTAINS_STRUCT (code
, TS_FIELD_DECL
))
1041 visit (DECL_FIELD_OFFSET (t
));
1042 visit (DECL_BIT_FIELD_TYPE (t
));
1043 visit (DECL_BIT_FIELD_REPRESENTATIVE (t
));
1044 visit (DECL_FIELD_BIT_OFFSET (t
));
1045 visit (DECL_FCONTEXT (t
));
1048 if (CODE_CONTAINS_STRUCT (code
, TS_FUNCTION_DECL
))
1050 visit (DECL_VINDEX (t
));
1051 visit (DECL_FUNCTION_PERSONALITY (t
));
1052 visit (DECL_FUNCTION_SPECIFIC_TARGET (t
));
1053 visit (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (t
));
1056 if (CODE_CONTAINS_STRUCT (code
, TS_TYPE_COMMON
))
1058 visit (TYPE_SIZE (t
));
1059 visit (TYPE_SIZE_UNIT (t
));
1060 visit (TYPE_ATTRIBUTES (t
));
1061 visit (TYPE_NAME (t
));
1062 visit (TYPE_MAIN_VARIANT (t
));
1063 if (TYPE_FILE_SCOPE_P (t
))
1066 visit (TYPE_CONTEXT (t
));
1067 visit (TYPE_STUB_DECL (t
));
1070 if (CODE_CONTAINS_STRUCT (code
, TS_TYPE_NON_COMMON
))
1072 if (code
== ENUMERAL_TYPE
)
1073 visit (TYPE_VALUES (t
));
1074 else if (code
== ARRAY_TYPE
)
1075 visit (TYPE_DOMAIN (t
));
1076 else if (RECORD_OR_UNION_TYPE_P (t
))
1077 for (tree f
= TYPE_FIELDS (t
); f
; f
= TREE_CHAIN (f
))
1079 else if (code
== FUNCTION_TYPE
1080 || code
== METHOD_TYPE
)
1081 visit (TYPE_ARG_TYPES (t
));
1082 if (!POINTER_TYPE_P (t
))
1083 visit (TYPE_MINVAL (t
));
1084 visit (TYPE_MAXVAL (t
));
1085 if (RECORD_OR_UNION_TYPE_P (t
))
1086 visit (TYPE_BINFO (t
));
1089 if (CODE_CONTAINS_STRUCT (code
, TS_LIST
))
1091 visit (TREE_PURPOSE (t
));
1092 visit (TREE_VALUE (t
));
1093 visit (TREE_CHAIN (t
));
1096 if (CODE_CONTAINS_STRUCT (code
, TS_VEC
))
1097 for (int i
= 0; i
< TREE_VEC_LENGTH (t
); ++i
)
1098 visit (TREE_VEC_ELT (t
, i
));
1100 if (CODE_CONTAINS_STRUCT (code
, TS_EXP
))
1102 hstate
.add_wide_int (TREE_OPERAND_LENGTH (t
));
1103 for (int i
= 0; i
< TREE_OPERAND_LENGTH (t
); ++i
)
1104 visit (TREE_OPERAND (t
, i
));
1107 if (CODE_CONTAINS_STRUCT (code
, TS_BINFO
))
1111 FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (t
), i
, b
)
1113 visit (BINFO_OFFSET (t
));
1114 visit (BINFO_VTABLE (t
));
1115 visit (BINFO_VPTR_FIELD (t
));
1116 FOR_EACH_VEC_SAFE_ELT (BINFO_BASE_ACCESSES (t
), i
, b
)
1118 /* Do not walk BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX
1119 and BINFO_VPTR_INDEX; these are used by C++ FE only. */
1122 if (CODE_CONTAINS_STRUCT (code
, TS_CONSTRUCTOR
))
1126 hstate
.add_wide_int (CONSTRUCTOR_NELTS (t
));
1127 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t
), i
, index
, value
)
1134 if (code
== OMP_CLAUSE
)
1139 hstate
.add_wide_int (OMP_CLAUSE_CODE (t
));
1140 switch (OMP_CLAUSE_CODE (t
))
1142 case OMP_CLAUSE_DEFAULT
:
1143 val
= OMP_CLAUSE_DEFAULT_KIND (t
);
1145 case OMP_CLAUSE_SCHEDULE
:
1146 val
= OMP_CLAUSE_SCHEDULE_KIND (t
);
1148 case OMP_CLAUSE_DEPEND
:
1149 val
= OMP_CLAUSE_DEPEND_KIND (t
);
1151 case OMP_CLAUSE_MAP
:
1152 val
= OMP_CLAUSE_MAP_KIND (t
);
1154 case OMP_CLAUSE_PROC_BIND
:
1155 val
= OMP_CLAUSE_PROC_BIND_KIND (t
);
1157 case OMP_CLAUSE_REDUCTION
:
1158 val
= OMP_CLAUSE_REDUCTION_CODE (t
);
1164 hstate
.add_wide_int (val
);
1165 for (i
= 0; i
< omp_clause_num_ops
[OMP_CLAUSE_CODE (t
)]; i
++)
1166 visit (OMP_CLAUSE_OPERAND (t
, i
));
1167 visit (OMP_CLAUSE_CHAIN (t
));
1170 return hstate
.end ();
1175 /* Compare two SCC entries by their hash value for qsorting them. */
1178 DFS::scc_entry_compare (const void *p1_
, const void *p2_
)
1180 const scc_entry
*p1
= (const scc_entry
*) p1_
;
1181 const scc_entry
*p2
= (const scc_entry
*) p2_
;
1182 if (p1
->hash
< p2
->hash
)
1184 else if (p1
->hash
> p2
->hash
)
1189 /* Return a hash value for the SCC on the SCC stack from FIRST with
1193 DFS::hash_scc (struct output_block
*ob
,
1194 unsigned first
, unsigned size
)
1196 unsigned int last_classes
= 0, iterations
= 0;
1198 /* Compute hash values for the SCC members. */
1199 for (unsigned i
= 0; i
< size
; ++i
)
1200 sccstack
[first
+i
].hash
= hash_tree (ob
->writer_cache
, NULL
,
1201 sccstack
[first
+i
].t
);
1204 return sccstack
[first
].hash
;
1206 /* We aim to get unique hash for every tree within SCC and compute hash value
1207 of the whole SCC by combing all values together in an stable (entry point
1208 independent) order. This guarantees that the same SCC regions within
1209 different translation units will get the same hash values and therefore
1210 will be merged at WPA time.
1212 Often the hashes are already unique. In that case we compute scc hash
1213 by combining individual hash values in an increasing order.
1215 If thre are duplicates we seek at least one tree with unique hash (and
1216 pick one with minimal hash and this property). Then we obtain stable
1217 order by DFS walk starting from this unique tree and then use index
1218 within this order to make individual hash values unique.
1220 If there is no tree with unique hash, we iteratively propagate the hash
1221 values across the internal edges of SCC. This usually quickly leads
1222 to unique hashes. Consider, for example, an SCC containing two pointers
1223 that are identical except for type they point and assume that these
1224 types are also part of the SCC.
1225 The propagation will add the points-to type information into their hash
1229 /* Sort the SCC so we can easily see check for uniqueness. */
1230 qsort (&sccstack
[first
], size
, sizeof (scc_entry
), scc_entry_compare
);
1232 unsigned int classes
= 1;
1233 int firstunique
= -1;
1235 /* Find tree with lowest unique hash (if it exists) and compute
1236 number of equivalence classes. */
1237 if (sccstack
[first
].hash
!= sccstack
[first
+1].hash
)
1239 for (unsigned i
= 1; i
< size
; ++i
)
1240 if (sccstack
[first
+i
-1].hash
!= sccstack
[first
+i
].hash
)
1243 if (firstunique
== -1
1245 || sccstack
[first
+i
+1].hash
!= sccstack
[first
+i
].hash
))
1249 /* If we found tree with unique hash; stop the iteration. */
1250 if (firstunique
!= -1
1251 /* Also terminate if we run out of iterations or if the number of
1252 equivalence classes is no longer increasing.
1253 For example a cyclic list of trees that are all equivalent will
1254 never have unique entry point; we however do not build such SCCs
1256 || classes
<= last_classes
|| iterations
> 16)
1260 /* If some hashes are not unique (CLASSES != SIZE), use the DFS walk
1261 starting from FIRSTUNIQUE to obstain stable order. */
1262 if (classes
!= size
&& firstunique
!= -1)
1264 hash_map
<tree
, hashval_t
> map(size
*2);
1266 /* Store hash values into a map, so we can associate them with
1268 for (unsigned i
= 0; i
< size
; ++i
)
1269 map
.put (sccstack
[first
+i
].t
, sccstack
[first
+i
].hash
);
1271 DFS
again (ob
, sccstack
[first
+firstunique
].t
, false, false, true);
1272 gcc_assert (again
.sccstack
.length () == size
);
1274 memcpy (sccstack
.address () + first
,
1275 again
.sccstack
.address (),
1276 sizeof (scc_entry
) * size
);
1278 /* Update hash values of individual members by hashing in the
1279 index within the stable order. This ensures uniqueness.
1280 Also compute the scc_hash by mixing in all hash values in the
1281 stable order we obtained. */
1282 sccstack
[first
].hash
= *map
.get (sccstack
[first
].t
);
1283 scc_hash
= sccstack
[first
].hash
;
1284 for (unsigned i
= 1; i
< size
; ++i
)
1286 sccstack
[first
+i
].hash
1287 = iterative_hash_hashval_t (i
,
1288 *map
.get (sccstack
[first
+i
].t
));
1289 scc_hash
= iterative_hash_hashval_t (scc_hash
,
1290 sccstack
[first
+i
].hash
);
1293 /* If we got unique hash values for each tree, then sort already
1294 ensured entry point independent order. Only compute the final
1297 If we failed to find the unique entry point, we go by the same
1298 route. We will eventually introduce unwanted hash conflicts. */
1301 scc_hash
= sccstack
[first
].hash
;
1302 for (unsigned i
= 1; i
< size
; ++i
)
1303 scc_hash
= iterative_hash_hashval_t (scc_hash
,
1304 sccstack
[first
+i
].hash
);
1305 /* We can not 100% guarantee that the hash will not conflict in
1306 in a way so the unique hash is not found. This however
1307 should be extremely rare situation. ICE for now so possible
1308 issues are found and evaulated. */
1309 gcc_checking_assert (classes
== size
);
1312 /* To avoid conflicts across SCCs iteratively hash the whole SCC
1313 hash into the hash of each of the elements. */
1314 for (unsigned i
= 0; i
< size
; ++i
)
1315 sccstack
[first
+i
].hash
1316 = iterative_hash_hashval_t (sccstack
[first
+i
].hash
, scc_hash
);
1320 last_classes
= classes
;
1323 /* We failed to identify the entry point; propagate hash values across
1326 hash_map
<tree
, hashval_t
> map(size
*2);
1327 for (unsigned i
= 0; i
< size
; ++i
)
1328 map
.put (sccstack
[first
+i
].t
, sccstack
[first
+i
].hash
);
1330 for (unsigned i
= 0; i
< size
; i
++)
1331 sccstack
[first
+i
].hash
= hash_tree (ob
->writer_cache
, &map
,
1332 sccstack
[first
+i
].t
);
1338 /* DFS walk EXPR and stream SCCs of tree bodies if they are not
1339 already in the streamer cache. Main routine called for
1340 each visit of EXPR. */
1343 DFS::DFS_write_tree (struct output_block
*ob
, sccs
*from_state
,
1344 tree expr
, bool ref_p
, bool this_ref_p
, bool single_p
)
1348 /* Handle special cases. */
1349 if (expr
== NULL_TREE
)
1352 /* Do not DFS walk into indexable trees. */
1353 if (this_ref_p
&& tree_is_indexable (expr
))
1356 /* Check if we already streamed EXPR. */
1357 if (streamer_tree_cache_lookup (ob
->writer_cache
, expr
, &ix
))
1360 sccs
**slot
= &sccstate
.get_or_insert (expr
);
1361 sccs
*cstate
= *slot
;
1364 scc_entry e
= { expr
, 0 };
1365 /* Not yet visited. DFS recurse and push it onto the stack. */
1366 *slot
= cstate
= XOBNEW (&sccstate_obstack
, struct sccs
);
1367 sccstack
.safe_push (e
);
1368 cstate
->dfsnum
= next_dfs_num
++;
1369 cstate
->low
= cstate
->dfsnum
;
1371 if (streamer_handle_as_builtin_p (expr
))
1373 else if (TREE_CODE (expr
) == INTEGER_CST
1374 && !TREE_OVERFLOW (expr
))
1375 DFS_write_tree (ob
, cstate
, TREE_TYPE (expr
), ref_p
, ref_p
, single_p
);
1378 DFS_write_tree_body (ob
, expr
, cstate
, ref_p
, single_p
);
1380 /* Walk any LTO-specific edges. */
1382 && TREE_CODE (expr
) != FUNCTION_DECL
1383 && TREE_CODE (expr
) != TRANSLATION_UNIT_DECL
)
1385 /* Handle DECL_INITIAL for symbols. */
1386 tree initial
= get_symbol_initial_value (ob
->decl_state
->symtab_node_encoder
,
1388 DFS_write_tree (ob
, cstate
, initial
, ref_p
, ref_p
, single_p
);
1392 /* See if we found an SCC. */
1393 if (cstate
->low
== cstate
->dfsnum
)
1395 unsigned first
, size
;
1398 /* If we are re-walking a single leaf-SCC just return and
1399 let the caller access the sccstack. */
1403 /* Pop the SCC and compute its size. */
1404 first
= sccstack
.length ();
1407 x
= sccstack
[--first
].t
;
1410 size
= sccstack
.length () - first
;
1412 /* No need to compute hashes for LTRANS units, we don't perform
1413 any merging there. */
1414 hashval_t scc_hash
= 0;
1415 unsigned scc_entry_len
= 0;
1418 scc_hash
= hash_scc (ob
, first
, size
);
1420 /* Put the entries with the least number of collisions first. */
1421 unsigned entry_start
= 0;
1422 scc_entry_len
= size
+ 1;
1423 for (unsigned i
= 0; i
< size
;)
1426 for (i
= i
+ 1; i
< size
1427 && (sccstack
[first
+ i
].hash
1428 == sccstack
[first
+ from
].hash
); ++i
)
1430 if (i
- from
< scc_entry_len
)
1432 scc_entry_len
= i
- from
;
1436 for (unsigned i
= 0; i
< scc_entry_len
; ++i
)
1438 scc_entry tem
= sccstack
[first
+ i
];
1439 sccstack
[first
+ i
] = sccstack
[first
+ entry_start
+ i
];
1440 sccstack
[first
+ entry_start
+ i
] = tem
;
1443 if (scc_entry_len
== 1)
1444 ; /* We already sorted SCC deterministically in hash_scc. */
1446 /* Check that we have only one SCC.
1447 Naturally we may have conflicts if hash function is not
1448 strong enough. Lets see how far this gets. */
1450 #ifdef ENABLE_CHECKING
1456 /* Write LTO_tree_scc. */
1457 streamer_write_record_start (ob
, LTO_tree_scc
);
1458 streamer_write_uhwi (ob
, size
);
1459 streamer_write_uhwi (ob
, scc_hash
);
1461 /* Write size-1 SCCs without wrapping them inside SCC bundles.
1462 All INTEGER_CSTs need to be handled this way as we need
1463 their type to materialize them. Also builtins are handled
1465 ??? We still wrap these in LTO_tree_scc so at the
1466 input side we can properly identify the tree we want
1467 to ultimatively return. */
1469 lto_output_tree_1 (ob
, expr
, scc_hash
, ref_p
, this_ref_p
);
1472 /* Write the size of the SCC entry candidates. */
1473 streamer_write_uhwi (ob
, scc_entry_len
);
1475 /* Write all headers and populate the streamer cache. */
1476 for (unsigned i
= 0; i
< size
; ++i
)
1478 hashval_t hash
= sccstack
[first
+i
].hash
;
1479 tree t
= sccstack
[first
+i
].t
;
1480 bool exists_p
= streamer_tree_cache_insert (ob
->writer_cache
,
1482 gcc_assert (!exists_p
);
1484 if (!lto_is_streamable (t
))
1485 internal_error ("tree code %qs is not supported "
1487 get_tree_code_name (TREE_CODE (t
)));
1489 gcc_checking_assert (!streamer_handle_as_builtin_p (t
));
1491 /* Write the header, containing everything needed to
1492 materialize EXPR on the reading side. */
1493 streamer_write_tree_header (ob
, t
);
1496 /* Write the bitpacks and tree references. */
1497 for (unsigned i
= 0; i
< size
; ++i
)
1499 lto_write_tree_1 (ob
, sccstack
[first
+i
].t
, ref_p
);
1501 /* Mark the end of the tree. */
1502 streamer_write_zero (ob
);
1506 /* Finally truncate the vector. */
1507 sccstack
.truncate (first
);
1510 from_state
->low
= MIN (from_state
->low
, cstate
->low
);
1515 from_state
->low
= MIN (from_state
->low
, cstate
->low
);
1517 gcc_checking_assert (from_state
);
1518 if (cstate
->dfsnum
< from_state
->dfsnum
)
1519 from_state
->low
= MIN (cstate
->dfsnum
, from_state
->low
);
1523 /* Emit the physical representation of tree node EXPR to output block
1524 OB. If THIS_REF_P is true, the leaves of EXPR are emitted as references
1525 via lto_output_tree_ref. REF_P is used for streaming siblings of EXPR. */
1528 lto_output_tree (struct output_block
*ob
, tree expr
,
1529 bool ref_p
, bool this_ref_p
)
1534 if (expr
== NULL_TREE
)
1536 streamer_write_record_start (ob
, LTO_null
);
1540 if (this_ref_p
&& tree_is_indexable (expr
))
1542 lto_output_tree_ref (ob
, expr
);
1546 existed_p
= streamer_tree_cache_lookup (ob
->writer_cache
, expr
, &ix
);
1549 /* If a node has already been streamed out, make sure that
1550 we don't write it more than once. Otherwise, the reader
1551 will instantiate two different nodes for the same object. */
1552 streamer_write_record_start (ob
, LTO_tree_pickle_reference
);
1553 streamer_write_uhwi (ob
, ix
);
1554 streamer_write_enum (ob
->main_stream
, LTO_tags
, LTO_NUM_TAGS
,
1555 lto_tree_code_to_tag (TREE_CODE (expr
)));
1556 lto_stats
.num_pickle_refs_output
++;
1560 /* This is the first time we see EXPR, write all reachable
1562 static bool in_dfs_walk
;
1564 /* Protect against recursion which means disconnect between
1565 what tree edges we walk in the DFS walk and what edges
1567 gcc_assert (!in_dfs_walk
);
1569 /* Start the DFS walk. */
1570 /* Save ob state ... */
1573 DFS (ob
, expr
, ref_p
, this_ref_p
, false);
1574 in_dfs_walk
= false;
1576 /* Finally append a reference to the tree we were writing.
1577 ??? If expr ended up as a singleton we could have
1578 inlined it here and avoid outputting a reference. */
1579 existed_p
= streamer_tree_cache_lookup (ob
->writer_cache
, expr
, &ix
);
1580 gcc_assert (existed_p
);
1581 streamer_write_record_start (ob
, LTO_tree_pickle_reference
);
1582 streamer_write_uhwi (ob
, ix
);
1583 streamer_write_enum (ob
->main_stream
, LTO_tags
, LTO_NUM_TAGS
,
1584 lto_tree_code_to_tag (TREE_CODE (expr
)));
1585 lto_stats
.num_pickle_refs_output
++;
1590 /* Output to OB a list of try/catch handlers starting with FIRST. */
1593 output_eh_try_list (struct output_block
*ob
, eh_catch first
)
1597 for (n
= first
; n
; n
= n
->next_catch
)
1599 streamer_write_record_start (ob
, LTO_eh_catch
);
1600 stream_write_tree (ob
, n
->type_list
, true);
1601 stream_write_tree (ob
, n
->filter_list
, true);
1602 stream_write_tree (ob
, n
->label
, true);
1605 streamer_write_record_start (ob
, LTO_null
);
1609 /* Output EH region R in function FN to OB. CURR_RN is the slot index
1610 that is being emitted in FN->EH->REGION_ARRAY. This is used to
1611 detect EH region sharing. */
1614 output_eh_region (struct output_block
*ob
, eh_region r
)
1620 streamer_write_record_start (ob
, LTO_null
);
1624 if (r
->type
== ERT_CLEANUP
)
1625 tag
= LTO_ert_cleanup
;
1626 else if (r
->type
== ERT_TRY
)
1628 else if (r
->type
== ERT_ALLOWED_EXCEPTIONS
)
1629 tag
= LTO_ert_allowed_exceptions
;
1630 else if (r
->type
== ERT_MUST_NOT_THROW
)
1631 tag
= LTO_ert_must_not_throw
;
1635 streamer_write_record_start (ob
, tag
);
1636 streamer_write_hwi (ob
, r
->index
);
1639 streamer_write_hwi (ob
, r
->outer
->index
);
1641 streamer_write_zero (ob
);
1644 streamer_write_hwi (ob
, r
->inner
->index
);
1646 streamer_write_zero (ob
);
1649 streamer_write_hwi (ob
, r
->next_peer
->index
);
1651 streamer_write_zero (ob
);
1653 if (r
->type
== ERT_TRY
)
1655 output_eh_try_list (ob
, r
->u
.eh_try
.first_catch
);
1657 else if (r
->type
== ERT_ALLOWED_EXCEPTIONS
)
1659 stream_write_tree (ob
, r
->u
.allowed
.type_list
, true);
1660 stream_write_tree (ob
, r
->u
.allowed
.label
, true);
1661 streamer_write_uhwi (ob
, r
->u
.allowed
.filter
);
1663 else if (r
->type
== ERT_MUST_NOT_THROW
)
1665 stream_write_tree (ob
, r
->u
.must_not_throw
.failure_decl
, true);
1666 bitpack_d bp
= bitpack_create (ob
->main_stream
);
1667 stream_output_location (ob
, &bp
, r
->u
.must_not_throw
.failure_loc
);
1668 streamer_write_bitpack (&bp
);
1671 if (r
->landing_pads
)
1672 streamer_write_hwi (ob
, r
->landing_pads
->index
);
1674 streamer_write_zero (ob
);
1678 /* Output landing pad LP to OB. */
1681 output_eh_lp (struct output_block
*ob
, eh_landing_pad lp
)
1685 streamer_write_record_start (ob
, LTO_null
);
1689 streamer_write_record_start (ob
, LTO_eh_landing_pad
);
1690 streamer_write_hwi (ob
, lp
->index
);
1692 streamer_write_hwi (ob
, lp
->next_lp
->index
);
1694 streamer_write_zero (ob
);
1697 streamer_write_hwi (ob
, lp
->region
->index
);
1699 streamer_write_zero (ob
);
1701 stream_write_tree (ob
, lp
->post_landing_pad
, true);
1705 /* Output the existing eh_table to OB. */
1708 output_eh_regions (struct output_block
*ob
, struct function
*fn
)
1710 if (fn
->eh
&& fn
->eh
->region_tree
)
1717 streamer_write_record_start (ob
, LTO_eh_table
);
1719 /* Emit the index of the root of the EH region tree. */
1720 streamer_write_hwi (ob
, fn
->eh
->region_tree
->index
);
1722 /* Emit all the EH regions in the region array. */
1723 streamer_write_hwi (ob
, vec_safe_length (fn
->eh
->region_array
));
1724 FOR_EACH_VEC_SAFE_ELT (fn
->eh
->region_array
, i
, eh
)
1725 output_eh_region (ob
, eh
);
1727 /* Emit all landing pads. */
1728 streamer_write_hwi (ob
, vec_safe_length (fn
->eh
->lp_array
));
1729 FOR_EACH_VEC_SAFE_ELT (fn
->eh
->lp_array
, i
, lp
)
1730 output_eh_lp (ob
, lp
);
1732 /* Emit all the runtime type data. */
1733 streamer_write_hwi (ob
, vec_safe_length (fn
->eh
->ttype_data
));
1734 FOR_EACH_VEC_SAFE_ELT (fn
->eh
->ttype_data
, i
, ttype
)
1735 stream_write_tree (ob
, ttype
, true);
1737 /* Emit the table of action chains. */
1738 if (targetm
.arm_eabi_unwinder
)
1741 streamer_write_hwi (ob
, vec_safe_length (fn
->eh
->ehspec_data
.arm_eabi
));
1742 FOR_EACH_VEC_SAFE_ELT (fn
->eh
->ehspec_data
.arm_eabi
, i
, t
)
1743 stream_write_tree (ob
, t
, true);
1748 streamer_write_hwi (ob
, vec_safe_length (fn
->eh
->ehspec_data
.other
));
1749 FOR_EACH_VEC_SAFE_ELT (fn
->eh
->ehspec_data
.other
, i
, c
)
1750 streamer_write_char_stream (ob
->main_stream
, c
);
1754 /* The LTO_null either terminates the record or indicates that there
1755 are no eh_records at all. */
1756 streamer_write_record_start (ob
, LTO_null
);
1760 /* Output all of the active ssa names to the ssa_names stream. */
1763 output_ssa_names (struct output_block
*ob
, struct function
*fn
)
1765 unsigned int i
, len
;
1767 len
= vec_safe_length (SSANAMES (fn
));
1768 streamer_write_uhwi (ob
, len
);
1770 for (i
= 1; i
< len
; i
++)
1772 tree ptr
= (*SSANAMES (fn
))[i
];
1774 if (ptr
== NULL_TREE
1775 || SSA_NAME_IN_FREE_LIST (ptr
)
1776 || virtual_operand_p (ptr
))
1779 streamer_write_uhwi (ob
, i
);
1780 streamer_write_char_stream (ob
->main_stream
,
1781 SSA_NAME_IS_DEFAULT_DEF (ptr
));
1782 if (SSA_NAME_VAR (ptr
))
1783 stream_write_tree (ob
, SSA_NAME_VAR (ptr
), true);
1785 /* ??? This drops SSA_NAME_IDENTIFIER on the floor. */
1786 stream_write_tree (ob
, TREE_TYPE (ptr
), true);
1789 streamer_write_zero (ob
);
1793 /* Output a wide-int. */
1796 streamer_write_wi (struct output_block
*ob
,
1797 const widest_int
&w
)
1799 int len
= w
.get_len ();
1801 streamer_write_uhwi (ob
, w
.get_precision ());
1802 streamer_write_uhwi (ob
, len
);
1803 for (int i
= 0; i
< len
; i
++)
1804 streamer_write_hwi (ob
, w
.elt (i
));
1808 /* Output the cfg. */
1811 output_cfg (struct output_block
*ob
, struct function
*fn
)
1813 struct lto_output_stream
*tmp_stream
= ob
->main_stream
;
1816 ob
->main_stream
= ob
->cfg_stream
;
1818 streamer_write_enum (ob
->main_stream
, profile_status_d
, PROFILE_LAST
,
1819 profile_status_for_fn (fn
));
1821 /* Output the number of the highest basic block. */
1822 streamer_write_uhwi (ob
, last_basic_block_for_fn (fn
));
1824 FOR_ALL_BB_FN (bb
, fn
)
1829 streamer_write_hwi (ob
, bb
->index
);
1831 /* Output the successors and the edge flags. */
1832 streamer_write_uhwi (ob
, EDGE_COUNT (bb
->succs
));
1833 FOR_EACH_EDGE (e
, ei
, bb
->succs
)
1835 streamer_write_uhwi (ob
, e
->dest
->index
);
1836 streamer_write_hwi (ob
, e
->probability
);
1837 streamer_write_gcov_count (ob
, e
->count
);
1838 streamer_write_uhwi (ob
, e
->flags
);
1842 streamer_write_hwi (ob
, -1);
1844 bb
= ENTRY_BLOCK_PTR_FOR_FN (cfun
);
1847 streamer_write_hwi (ob
, bb
->next_bb
->index
);
1851 streamer_write_hwi (ob
, -1);
1853 /* ??? The cfgloop interface is tied to cfun. */
1854 gcc_assert (cfun
== fn
);
1856 /* Output the number of loops. */
1857 streamer_write_uhwi (ob
, number_of_loops (fn
));
1859 /* Output each loop, skipping the tree root which has number zero. */
1860 for (unsigned i
= 1; i
< number_of_loops (fn
); ++i
)
1862 struct loop
*loop
= get_loop (fn
, i
);
1864 /* Write the index of the loop header. That's enough to rebuild
1865 the loop tree on the reader side. Stream -1 for an unused
1869 streamer_write_hwi (ob
, -1);
1873 streamer_write_hwi (ob
, loop
->header
->index
);
1875 /* Write everything copy_loop_info copies. */
1876 streamer_write_enum (ob
->main_stream
,
1877 loop_estimation
, EST_LAST
, loop
->estimate_state
);
1878 streamer_write_hwi (ob
, loop
->any_upper_bound
);
1879 if (loop
->any_upper_bound
)
1880 streamer_write_wi (ob
, loop
->nb_iterations_upper_bound
);
1881 streamer_write_hwi (ob
, loop
->any_estimate
);
1882 if (loop
->any_estimate
)
1883 streamer_write_wi (ob
, loop
->nb_iterations_estimate
);
1885 /* Write OMP SIMD related info. */
1886 streamer_write_hwi (ob
, loop
->safelen
);
1887 streamer_write_hwi (ob
, loop
->dont_vectorize
);
1888 streamer_write_hwi (ob
, loop
->force_vectorize
);
1889 stream_write_tree (ob
, loop
->simduid
, true);
1892 ob
->main_stream
= tmp_stream
;
1896 /* Create the header in the file using OB. If the section type is for
1897 a function, set FN to the decl for that function. */
1900 produce_asm (struct output_block
*ob
, tree fn
)
1902 enum lto_section_type section_type
= ob
->section_type
;
1903 struct lto_function_header header
;
1906 if (section_type
== LTO_section_function_body
)
1908 const char *name
= IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fn
));
1909 section_name
= lto_get_section_name (section_type
, name
, NULL
);
1912 section_name
= lto_get_section_name (section_type
, NULL
, NULL
);
1914 lto_begin_section (section_name
, !flag_wpa
);
1915 free (section_name
);
1917 /* The entire header is stream computed here. */
1918 memset (&header
, 0, sizeof (struct lto_function_header
));
1920 /* Write the header. */
1921 header
.major_version
= LTO_major_version
;
1922 header
.minor_version
= LTO_minor_version
;
1924 if (section_type
== LTO_section_function_body
)
1925 header
.cfg_size
= ob
->cfg_stream
->total_size
;
1926 header
.main_size
= ob
->main_stream
->total_size
;
1927 header
.string_size
= ob
->string_stream
->total_size
;
1928 lto_write_data (&header
, sizeof header
);
1930 /* Put all of the gimple and the string table out the asm file as a
1932 if (section_type
== LTO_section_function_body
)
1933 lto_write_stream (ob
->cfg_stream
);
1934 lto_write_stream (ob
->main_stream
);
1935 lto_write_stream (ob
->string_stream
);
1941 /* Output the base body of struct function FN using output block OB. */
1944 output_struct_function_base (struct output_block
*ob
, struct function
*fn
)
1946 struct bitpack_d bp
;
1950 /* Output the static chain and non-local goto save area. */
1951 stream_write_tree (ob
, fn
->static_chain_decl
, true);
1952 stream_write_tree (ob
, fn
->nonlocal_goto_save_area
, true);
1954 /* Output all the local variables in the function. */
1955 streamer_write_hwi (ob
, vec_safe_length (fn
->local_decls
));
1956 FOR_EACH_VEC_SAFE_ELT (fn
->local_decls
, i
, t
)
1957 stream_write_tree (ob
, t
, true);
1959 /* Output current IL state of the function. */
1960 streamer_write_uhwi (ob
, fn
->curr_properties
);
1962 /* Write all the attributes for FN. */
1963 bp
= bitpack_create (ob
->main_stream
);
1964 bp_pack_value (&bp
, fn
->is_thunk
, 1);
1965 bp_pack_value (&bp
, fn
->has_local_explicit_reg_vars
, 1);
1966 bp_pack_value (&bp
, fn
->returns_pcc_struct
, 1);
1967 bp_pack_value (&bp
, fn
->returns_struct
, 1);
1968 bp_pack_value (&bp
, fn
->can_throw_non_call_exceptions
, 1);
1969 bp_pack_value (&bp
, fn
->can_delete_dead_exceptions
, 1);
1970 bp_pack_value (&bp
, fn
->always_inline_functions_inlined
, 1);
1971 bp_pack_value (&bp
, fn
->after_inlining
, 1);
1972 bp_pack_value (&bp
, fn
->stdarg
, 1);
1973 bp_pack_value (&bp
, fn
->has_nonlocal_label
, 1);
1974 bp_pack_value (&bp
, fn
->calls_alloca
, 1);
1975 bp_pack_value (&bp
, fn
->calls_setjmp
, 1);
1976 bp_pack_value (&bp
, fn
->has_force_vectorize_loops
, 1);
1977 bp_pack_value (&bp
, fn
->has_simduid_loops
, 1);
1978 bp_pack_value (&bp
, fn
->va_list_fpr_size
, 8);
1979 bp_pack_value (&bp
, fn
->va_list_gpr_size
, 8);
1980 bp_pack_value (&bp
, fn
->last_clique
, sizeof (short) * 8);
1982 /* Output the function start and end loci. */
1983 stream_output_location (ob
, &bp
, fn
->function_start_locus
);
1984 stream_output_location (ob
, &bp
, fn
->function_end_locus
);
1986 streamer_write_bitpack (&bp
);
1990 /* Output the body of function NODE->DECL. */
1993 output_function (struct cgraph_node
*node
)
1996 struct function
*fn
;
1998 struct output_block
*ob
;
2000 function
= node
->decl
;
2001 fn
= DECL_STRUCT_FUNCTION (function
);
2002 ob
= create_output_block (LTO_section_function_body
);
2004 clear_line_info (ob
);
2007 gcc_assert (current_function_decl
== NULL_TREE
&& cfun
== NULL
);
2009 /* Set current_function_decl and cfun. */
2012 /* Make string 0 be a NULL string. */
2013 streamer_write_char_stream (ob
->string_stream
, 0);
2015 streamer_write_record_start (ob
, LTO_function
);
2017 /* Output decls for parameters and args. */
2018 stream_write_tree (ob
, DECL_RESULT (function
), true);
2019 streamer_write_chain (ob
, DECL_ARGUMENTS (function
), true);
2021 /* Output DECL_INITIAL for the function, which contains the tree of
2023 stream_write_tree (ob
, DECL_INITIAL (function
), true);
2025 /* We also stream abstract functions where we stream only stuff needed for
2027 if (gimple_has_body_p (function
))
2029 streamer_write_uhwi (ob
, 1);
2030 output_struct_function_base (ob
, fn
);
2032 /* Output all the SSA names used in the function. */
2033 output_ssa_names (ob
, fn
);
2035 /* Output any exception handling regions. */
2036 output_eh_regions (ob
, fn
);
2039 /* We will renumber the statements. The code that does this uses
2040 the same ordering that we use for serializing them so we can use
2041 the same code on the other end and not have to write out the
2042 statement numbers. We do not assign UIDs to PHIs here because
2043 virtual PHIs get re-computed on-the-fly which would make numbers
2045 set_gimple_stmt_max_uid (cfun
, 0);
2046 FOR_ALL_BB_FN (bb
, cfun
)
2048 for (gphi_iterator gsi
= gsi_start_phis (bb
); !gsi_end_p (gsi
);
2051 gphi
*stmt
= gsi
.phi ();
2053 /* Virtual PHIs are not going to be streamed. */
2054 if (!virtual_operand_p (gimple_phi_result (stmt
)))
2055 gimple_set_uid (stmt
, inc_gimple_stmt_max_uid (cfun
));
2057 for (gimple_stmt_iterator gsi
= gsi_start_bb (bb
); !gsi_end_p (gsi
);
2060 gimple stmt
= gsi_stmt (gsi
);
2061 gimple_set_uid (stmt
, inc_gimple_stmt_max_uid (cfun
));
2064 /* To avoid keeping duplicate gimple IDs in the statements, renumber
2065 virtual phis now. */
2066 FOR_ALL_BB_FN (bb
, cfun
)
2068 for (gphi_iterator gsi
= gsi_start_phis (bb
); !gsi_end_p (gsi
);
2071 gphi
*stmt
= gsi
.phi ();
2072 if (virtual_operand_p (gimple_phi_result (stmt
)))
2073 gimple_set_uid (stmt
, inc_gimple_stmt_max_uid (cfun
));
2077 /* Output the code for the function. */
2078 FOR_ALL_BB_FN (bb
, fn
)
2079 output_bb (ob
, bb
, fn
);
2081 /* The terminator for this function. */
2082 streamer_write_record_start (ob
, LTO_null
);
2084 output_cfg (ob
, fn
);
2089 streamer_write_uhwi (ob
, 0);
2091 /* Create a section to hold the pickled output of this function. */
2092 produce_asm (ob
, function
);
2094 destroy_output_block (ob
);
2097 /* Output the body of function NODE->DECL. */
2100 output_constructor (struct varpool_node
*node
)
2102 tree var
= node
->decl
;
2103 struct output_block
*ob
;
2105 ob
= create_output_block (LTO_section_function_body
);
2107 clear_line_info (ob
);
2110 /* Make string 0 be a NULL string. */
2111 streamer_write_char_stream (ob
->string_stream
, 0);
2113 /* Output DECL_INITIAL for the function, which contains the tree of
2115 stream_write_tree (ob
, DECL_INITIAL (var
), true);
2117 /* Create a section to hold the pickled output of this function. */
2118 produce_asm (ob
, var
);
2120 destroy_output_block (ob
);
2124 /* Emit toplevel asms. */
2127 lto_output_toplevel_asms (void)
2129 struct output_block
*ob
;
2130 struct asm_node
*can
;
2132 struct lto_simple_header_with_strings header
;
2134 if (!symtab
->first_asm_symbol ())
2137 ob
= create_output_block (LTO_section_asm
);
2139 /* Make string 0 be a NULL string. */
2140 streamer_write_char_stream (ob
->string_stream
, 0);
2142 for (can
= symtab
->first_asm_symbol (); can
; can
= can
->next
)
2144 streamer_write_string_cst (ob
, ob
->main_stream
, can
->asm_str
);
2145 streamer_write_hwi (ob
, can
->order
);
2148 streamer_write_string_cst (ob
, ob
->main_stream
, NULL_TREE
);
2150 section_name
= lto_get_section_name (LTO_section_asm
, NULL
, NULL
);
2151 lto_begin_section (section_name
, !flag_wpa
);
2152 free (section_name
);
2154 /* The entire header stream is computed here. */
2155 memset (&header
, 0, sizeof (header
));
2157 /* Write the header. */
2158 header
.major_version
= LTO_major_version
;
2159 header
.minor_version
= LTO_minor_version
;
2161 header
.main_size
= ob
->main_stream
->total_size
;
2162 header
.string_size
= ob
->string_stream
->total_size
;
2163 lto_write_data (&header
, sizeof header
);
2165 /* Put all of the gimple and the string table out the asm file as a
2167 lto_write_stream (ob
->main_stream
);
2168 lto_write_stream (ob
->string_stream
);
2172 destroy_output_block (ob
);
2176 /* Copy the function body or variable constructor of NODE without deserializing. */
2179 copy_function_or_variable (struct symtab_node
*node
)
2181 tree function
= node
->decl
;
2182 struct lto_file_decl_data
*file_data
= node
->lto_file_data
;
2185 const char *name
= IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (function
));
2186 char *section_name
=
2187 lto_get_section_name (LTO_section_function_body
, name
, NULL
);
2189 struct lto_in_decl_state
*in_state
;
2190 struct lto_out_decl_state
*out_state
= lto_get_out_decl_state ();
2192 lto_begin_section (section_name
, !flag_wpa
);
2193 free (section_name
);
2195 /* We may have renamed the declaration, e.g., a static function. */
2196 name
= lto_get_decl_name_mapping (file_data
, name
);
2198 data
= lto_get_section_data (file_data
, LTO_section_function_body
,
2202 /* Do a bit copy of the function body. */
2203 lto_write_data (data
, len
);
2207 lto_get_function_in_decl_state (node
->lto_file_data
, function
);
2208 gcc_assert (in_state
);
2210 for (i
= 0; i
< LTO_N_DECL_STREAMS
; i
++)
2212 size_t n
= vec_safe_length (in_state
->streams
[i
]);
2213 vec
<tree
, va_gc
> *trees
= in_state
->streams
[i
];
2214 struct lto_tree_ref_encoder
*encoder
= &(out_state
->streams
[i
]);
2216 /* The out state must have the same indices and the in state.
2217 So just copy the vector. All the encoders in the in state
2218 must be empty where we reach here. */
2219 gcc_assert (lto_tree_ref_encoder_size (encoder
) == 0);
2220 encoder
->trees
.reserve_exact (n
);
2221 for (j
= 0; j
< n
; j
++)
2222 encoder
->trees
.safe_push ((*trees
)[j
]);
2225 lto_free_section_data (file_data
, LTO_section_function_body
, name
,
2230 /* Wrap symbol references in *TP inside a type-preserving MEM_REF. */
2233 wrap_refs (tree
*tp
, int *ws
, void *)
2236 if (handled_component_p (t
)
2237 && TREE_CODE (TREE_OPERAND (t
, 0)) == VAR_DECL
)
2239 tree decl
= TREE_OPERAND (t
, 0);
2240 tree ptrtype
= build_pointer_type (TREE_TYPE (decl
));
2241 TREE_OPERAND (t
, 0) = build2 (MEM_REF
, TREE_TYPE (decl
),
2242 build1 (ADDR_EXPR
, ptrtype
, decl
),
2243 build_int_cst (ptrtype
, 0));
2244 TREE_THIS_VOLATILE (TREE_OPERAND (t
, 0)) = TREE_THIS_VOLATILE (decl
);
2247 else if (TREE_CODE (t
) == CONSTRUCTOR
)
2249 else if (!EXPR_P (t
))
2254 /* Main entry point from the pass manager. */
2259 struct lto_out_decl_state
*decl_state
;
2260 #ifdef ENABLE_CHECKING
2261 bitmap output
= lto_bitmap_alloc ();
2264 lto_symtab_encoder_t encoder
= lto_get_out_decl_state ()->symtab_node_encoder
;
2266 /* Initialize the streamer. */
2267 lto_streamer_init ();
2269 n_nodes
= lto_symtab_encoder_size (encoder
);
2270 /* Process only the functions with bodies. */
2271 for (i
= 0; i
< n_nodes
; i
++)
2273 symtab_node
*snode
= lto_symtab_encoder_deref (encoder
, i
);
2274 if (cgraph_node
*node
= dyn_cast
<cgraph_node
*> (snode
))
2276 if (lto_symtab_encoder_encode_body_p (encoder
, node
)
2279 #ifdef ENABLE_CHECKING
2280 gcc_assert (!bitmap_bit_p (output
, DECL_UID (node
->decl
)));
2281 bitmap_set_bit (output
, DECL_UID (node
->decl
));
2283 decl_state
= lto_new_out_decl_state ();
2284 lto_push_out_decl_state (decl_state
);
2285 if (gimple_has_body_p (node
->decl
) || !flag_wpa
2286 /* Thunks have no body but they may be synthetized
2288 || DECL_ARGUMENTS (node
->decl
))
2289 output_function (node
);
2291 copy_function_or_variable (node
);
2292 gcc_assert (lto_get_out_decl_state () == decl_state
);
2293 lto_pop_out_decl_state ();
2294 lto_record_function_out_decl_state (node
->decl
, decl_state
);
2297 else if (varpool_node
*node
= dyn_cast
<varpool_node
*> (snode
))
2299 /* Wrap symbol references inside the ctor in a type
2300 preserving MEM_REF. */
2301 tree ctor
= DECL_INITIAL (node
->decl
);
2302 if (ctor
&& !in_lto_p
)
2303 walk_tree (&ctor
, wrap_refs
, NULL
, NULL
);
2304 if (get_symbol_initial_value (encoder
, node
->decl
) == error_mark_node
2305 && lto_symtab_encoder_encode_initializer_p (encoder
, node
)
2308 timevar_push (TV_IPA_LTO_CTORS_OUT
);
2309 #ifdef ENABLE_CHECKING
2310 gcc_assert (!bitmap_bit_p (output
, DECL_UID (node
->decl
)));
2311 bitmap_set_bit (output
, DECL_UID (node
->decl
));
2313 decl_state
= lto_new_out_decl_state ();
2314 lto_push_out_decl_state (decl_state
);
2315 if (DECL_INITIAL (node
->decl
) != error_mark_node
2317 output_constructor (node
);
2319 copy_function_or_variable (node
);
2320 gcc_assert (lto_get_out_decl_state () == decl_state
);
2321 lto_pop_out_decl_state ();
2322 lto_record_function_out_decl_state (node
->decl
, decl_state
);
2323 timevar_pop (TV_IPA_LTO_CTORS_OUT
);
2328 /* Emit the callgraph after emitting function bodies. This needs to
2329 be done now to make sure that all the statements in every function
2330 have been renumbered so that edges can be associated with call
2331 statements using the statement UIDs. */
2334 output_offload_tables ();
2336 #ifdef ENABLE_CHECKING
2337 lto_bitmap_free (output
);
2341 /* Write each node in encoded by ENCODER to OB, as well as those reachable
2342 from it and required for correct representation of its semantics.
2343 Each node in ENCODER must be a global declaration or a type. A node
2344 is written only once, even if it appears multiple times in the
2345 vector. Certain transitively-reachable nodes, such as those
2346 representing expressions, may be duplicated, but such nodes
2347 must not appear in ENCODER itself. */
2350 write_global_stream (struct output_block
*ob
,
2351 struct lto_tree_ref_encoder
*encoder
)
2355 const size_t size
= lto_tree_ref_encoder_size (encoder
);
2357 for (index
= 0; index
< size
; index
++)
2359 t
= lto_tree_ref_encoder_get_tree (encoder
, index
);
2360 if (!streamer_tree_cache_lookup (ob
->writer_cache
, t
, NULL
))
2361 stream_write_tree (ob
, t
, false);
2366 /* Write a sequence of indices into the globals vector corresponding
2367 to the trees in ENCODER. These are used by the reader to map the
2368 indices used to refer to global entities within function bodies to
2372 write_global_references (struct output_block
*ob
,
2373 struct lto_tree_ref_encoder
*encoder
)
2377 const uint32_t size
= lto_tree_ref_encoder_size (encoder
);
2379 /* Write size and slot indexes as 32-bit unsigned numbers. */
2380 uint32_t *data
= XNEWVEC (uint32_t, size
+ 1);
2383 for (index
= 0; index
< size
; index
++)
2387 t
= lto_tree_ref_encoder_get_tree (encoder
, index
);
2388 streamer_tree_cache_lookup (ob
->writer_cache
, t
, &slot_num
);
2389 gcc_assert (slot_num
!= (unsigned)-1);
2390 data
[index
+ 1] = slot_num
;
2393 lto_write_data (data
, sizeof (int32_t) * (size
+ 1));
2398 /* Write all the streams in an lto_out_decl_state STATE using
2399 output block OB and output stream OUT_STREAM. */
2402 lto_output_decl_state_streams (struct output_block
*ob
,
2403 struct lto_out_decl_state
*state
)
2407 for (i
= 0; i
< LTO_N_DECL_STREAMS
; i
++)
2408 write_global_stream (ob
, &state
->streams
[i
]);
2412 /* Write all the references in an lto_out_decl_state STATE using
2413 output block OB and output stream OUT_STREAM. */
2416 lto_output_decl_state_refs (struct output_block
*ob
,
2417 struct lto_out_decl_state
*state
)
2423 /* Write reference to FUNCTION_DECL. If there is not function,
2424 write reference to void_type_node. */
2425 decl
= (state
->fn_decl
) ? state
->fn_decl
: void_type_node
;
2426 streamer_tree_cache_lookup (ob
->writer_cache
, decl
, &ref
);
2427 gcc_assert (ref
!= (unsigned)-1);
2428 lto_write_data (&ref
, sizeof (uint32_t));
2430 for (i
= 0; i
< LTO_N_DECL_STREAMS
; i
++)
2431 write_global_references (ob
, &state
->streams
[i
]);
2435 /* Return the written size of STATE. */
2438 lto_out_decl_state_written_size (struct lto_out_decl_state
*state
)
2443 size
= sizeof (int32_t); /* fn_ref. */
2444 for (i
= 0; i
< LTO_N_DECL_STREAMS
; i
++)
2446 size
+= sizeof (int32_t); /* vector size. */
2447 size
+= (lto_tree_ref_encoder_size (&state
->streams
[i
])
2448 * sizeof (int32_t));
2454 /* Write symbol T into STREAM in CACHE. SEEN specifies symbols we wrote
2458 write_symbol (struct streamer_tree_cache_d
*cache
,
2459 tree t
, hash_set
<const char *> *seen
, bool alias
)
2462 enum gcc_plugin_symbol_kind kind
;
2463 enum gcc_plugin_symbol_visibility visibility
= GCCPV_DEFAULT
;
2469 /* None of the following kinds of symbols are needed in the
2471 if (!TREE_PUBLIC (t
)
2472 || is_builtin_fn (t
)
2473 || DECL_ABSTRACT_P (t
)
2474 || (TREE_CODE (t
) == VAR_DECL
&& DECL_HARD_REGISTER (t
)))
2476 gcc_assert (TREE_CODE (t
) != RESULT_DECL
);
2478 gcc_assert (TREE_CODE (t
) == VAR_DECL
2479 || TREE_CODE (t
) == FUNCTION_DECL
);
2481 name
= IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (t
));
2483 /* This behaves like assemble_name_raw in varasm.c, performing the
2484 same name manipulations that ASM_OUTPUT_LABELREF does. */
2485 name
= IDENTIFIER_POINTER ((*targetm
.asm_out
.mangle_assembler_name
) (name
));
2487 if (seen
->add (name
))
2490 streamer_tree_cache_lookup (cache
, t
, &slot_num
);
2491 gcc_assert (slot_num
!= (unsigned)-1);
2493 if (DECL_EXTERNAL (t
))
2496 kind
= GCCPK_WEAKUNDEF
;
2503 kind
= GCCPK_WEAKDEF
;
2504 else if (DECL_COMMON (t
))
2505 kind
= GCCPK_COMMON
;
2509 /* When something is defined, it should have node attached. */
2510 gcc_assert (alias
|| TREE_CODE (t
) != VAR_DECL
2511 || varpool_node::get (t
)->definition
);
2512 gcc_assert (alias
|| TREE_CODE (t
) != FUNCTION_DECL
2513 || (cgraph_node::get (t
)
2514 && cgraph_node::get (t
)->definition
));
2517 /* Imitate what default_elf_asm_output_external do.
2518 When symbol is external, we need to output it with DEFAULT visibility
2519 when compiling with -fvisibility=default, while with HIDDEN visibility
2520 when symbol has attribute (visibility("hidden")) specified.
2521 targetm.binds_local_p check DECL_VISIBILITY_SPECIFIED and gets this
2524 if (DECL_EXTERNAL (t
)
2525 && !targetm
.binds_local_p (t
))
2526 visibility
= GCCPV_DEFAULT
;
2528 switch (DECL_VISIBILITY (t
))
2530 case VISIBILITY_DEFAULT
:
2531 visibility
= GCCPV_DEFAULT
;
2533 case VISIBILITY_PROTECTED
:
2534 visibility
= GCCPV_PROTECTED
;
2536 case VISIBILITY_HIDDEN
:
2537 visibility
= GCCPV_HIDDEN
;
2539 case VISIBILITY_INTERNAL
:
2540 visibility
= GCCPV_INTERNAL
;
2544 if (kind
== GCCPK_COMMON
2545 && DECL_SIZE_UNIT (t
)
2546 && TREE_CODE (DECL_SIZE_UNIT (t
)) == INTEGER_CST
)
2547 size
= TREE_INT_CST_LOW (DECL_SIZE_UNIT (t
));
2551 if (DECL_ONE_ONLY (t
))
2552 comdat
= IDENTIFIER_POINTER (decl_comdat_group_id (t
));
2556 lto_write_data (name
, strlen (name
) + 1);
2557 lto_write_data (comdat
, strlen (comdat
) + 1);
2558 c
= (unsigned char) kind
;
2559 lto_write_data (&c
, 1);
2560 c
= (unsigned char) visibility
;
2561 lto_write_data (&c
, 1);
2562 lto_write_data (&size
, 8);
2563 lto_write_data (&slot_num
, 4);
2566 /* Return true if NODE should appear in the plugin symbol table. */
2569 output_symbol_p (symtab_node
*node
)
2571 struct cgraph_node
*cnode
;
2572 if (!node
->real_symbol_p ())
2574 /* We keep external functions in symtab for sake of inlining
2575 and devirtualization. We do not want to see them in symbol table as
2576 references unless they are really used. */
2577 cnode
= dyn_cast
<cgraph_node
*> (node
);
2578 if (cnode
&& (!node
->definition
|| DECL_EXTERNAL (cnode
->decl
))
2582 /* Ignore all references from external vars initializers - they are not really
2583 part of the compilation unit until they are used by folding. Some symbols,
2584 like references to external construction vtables can not be referred to at all.
2585 We decide this at can_refer_decl_in_current_unit_p. */
2586 if (!node
->definition
|| DECL_EXTERNAL (node
->decl
))
2589 struct ipa_ref
*ref
;
2590 for (i
= 0; node
->iterate_referring (i
, ref
); i
++)
2592 if (ref
->use
== IPA_REF_ALIAS
)
2594 if (is_a
<cgraph_node
*> (ref
->referring
))
2596 if (!DECL_EXTERNAL (ref
->referring
->decl
))
2605 /* Write an IL symbol table to OB.
2606 SET and VSET are cgraph/varpool node sets we are outputting. */
2609 produce_symtab (struct output_block
*ob
)
2611 struct streamer_tree_cache_d
*cache
= ob
->writer_cache
;
2612 char *section_name
= lto_get_section_name (LTO_section_symtab
, NULL
, NULL
);
2613 lto_symtab_encoder_t encoder
= ob
->decl_state
->symtab_node_encoder
;
2614 lto_symtab_encoder_iterator lsei
;
2616 lto_begin_section (section_name
, false);
2617 free (section_name
);
2619 hash_set
<const char *> seen
;
2621 /* Write the symbol table.
2622 First write everything defined and then all declarations.
2623 This is necessary to handle cases where we have duplicated symbols. */
2624 for (lsei
= lsei_start (encoder
);
2625 !lsei_end_p (lsei
); lsei_next (&lsei
))
2627 symtab_node
*node
= lsei_node (lsei
);
2629 if (!output_symbol_p (node
) || DECL_EXTERNAL (node
->decl
))
2631 write_symbol (cache
, node
->decl
, &seen
, false);
2633 for (lsei
= lsei_start (encoder
);
2634 !lsei_end_p (lsei
); lsei_next (&lsei
))
2636 symtab_node
*node
= lsei_node (lsei
);
2638 if (!output_symbol_p (node
) || !DECL_EXTERNAL (node
->decl
))
2640 write_symbol (cache
, node
->decl
, &seen
, false);
2647 /* This pass is run after all of the functions are serialized and all
2648 of the IPA passes have written their serialized forms. This pass
2649 causes the vector of all of the global decls and types used from
2650 this file to be written in to a section that can then be read in to
2651 recover these on other side. */
2654 produce_asm_for_decls (void)
2656 struct lto_out_decl_state
*out_state
;
2657 struct lto_out_decl_state
*fn_out_state
;
2658 struct lto_decl_header header
;
2660 struct output_block
*ob
;
2661 unsigned idx
, num_fns
;
2662 size_t decl_state_size
;
2663 int32_t num_decl_states
;
2665 ob
= create_output_block (LTO_section_decls
);
2667 memset (&header
, 0, sizeof (struct lto_decl_header
));
2669 section_name
= lto_get_section_name (LTO_section_decls
, NULL
, NULL
);
2670 lto_begin_section (section_name
, !flag_wpa
);
2671 free (section_name
);
2673 /* Make string 0 be a NULL string. */
2674 streamer_write_char_stream (ob
->string_stream
, 0);
2676 gcc_assert (!alias_pairs
);
2678 /* Get rid of the global decl state hash tables to save some memory. */
2679 out_state
= lto_get_out_decl_state ();
2680 for (int i
= 0; i
< LTO_N_DECL_STREAMS
; i
++)
2681 if (out_state
->streams
[i
].tree_hash_table
)
2683 delete out_state
->streams
[i
].tree_hash_table
;
2684 out_state
->streams
[i
].tree_hash_table
= NULL
;
2687 /* Write the global symbols. */
2688 lto_output_decl_state_streams (ob
, out_state
);
2689 num_fns
= lto_function_decl_states
.length ();
2690 for (idx
= 0; idx
< num_fns
; idx
++)
2693 lto_function_decl_states
[idx
];
2694 lto_output_decl_state_streams (ob
, fn_out_state
);
2697 header
.major_version
= LTO_major_version
;
2698 header
.minor_version
= LTO_minor_version
;
2700 /* Currently not used. This field would allow us to preallocate
2701 the globals vector, so that it need not be resized as it is extended. */
2702 header
.num_nodes
= -1;
2704 /* Compute the total size of all decl out states. */
2705 decl_state_size
= sizeof (int32_t);
2706 decl_state_size
+= lto_out_decl_state_written_size (out_state
);
2707 for (idx
= 0; idx
< num_fns
; idx
++)
2710 lto_function_decl_states
[idx
];
2711 decl_state_size
+= lto_out_decl_state_written_size (fn_out_state
);
2713 header
.decl_state_size
= decl_state_size
;
2715 header
.main_size
= ob
->main_stream
->total_size
;
2716 header
.string_size
= ob
->string_stream
->total_size
;
2718 lto_write_data (&header
, sizeof header
);
2720 /* Write the main out-decl state, followed by out-decl states of
2722 num_decl_states
= num_fns
+ 1;
2723 lto_write_data (&num_decl_states
, sizeof (num_decl_states
));
2724 lto_output_decl_state_refs (ob
, out_state
);
2725 for (idx
= 0; idx
< num_fns
; idx
++)
2727 fn_out_state
= lto_function_decl_states
[idx
];
2728 lto_output_decl_state_refs (ob
, fn_out_state
);
2731 lto_write_stream (ob
->main_stream
);
2732 lto_write_stream (ob
->string_stream
);
2736 /* Write the symbol table. It is used by linker to determine dependencies
2737 and thus we can skip it for WPA. */
2739 produce_symtab (ob
);
2741 /* Write command line opts. */
2742 lto_write_options ();
2744 /* Deallocate memory and clean up. */
2745 for (idx
= 0; idx
< num_fns
; idx
++)
2748 lto_function_decl_states
[idx
];
2749 lto_delete_out_decl_state (fn_out_state
);
2751 lto_symtab_encoder_delete (ob
->decl_state
->symtab_node_encoder
);
2752 lto_function_decl_states
.release ();
2753 destroy_output_block (ob
);