GCC Middle and Back End API Reference
lto-streamer.h
Go to the documentation of this file.
1/* Data structures and declarations used for reading and writing
2 GIMPLE to a file stream.
3
4 Copyright (C) 2009-2026 Free Software Foundation, Inc.
5 Contributed by Doug Kwan <dougkwan@google.com>
6
7This file is part of GCC.
8
9GCC is free software; you can redistribute it and/or modify it under
10the terms of the GNU General Public License as published by the Free
11Software Foundation; either version 3, or (at your option) any later
12version.
13
14GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15WARRANTY; without even the implied warranty of MERCHANTABILITY or
16FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17for more details.
18
19You should have received a copy of the GNU General Public License
20along with GCC; see the file COPYING3. If not see
21<http://www.gnu.org/licenses/>. */
22
23#ifndef GCC_LTO_STREAMER_H
24#define GCC_LTO_STREAMER_H
25
26#include "plugin-api.h"
27#include "gcov-io.h"
28#include "diagnostic.h"
29#include "version.h"
30
31/* The encoding for a function consists of the following sections:
32
33 1) The header.
34 2) FIELD_DECLS.
35 3) FUNCTION_DECLS.
36 4) global VAR_DECLS.
37 5) type_decls
38 6) types.
39 7) Names for the labels that have names
40 8) The SSA names.
41 9) The control flow graph.
42 10-11)Gimple for local decls.
43 12) Gimple for the function.
44 13) Strings.
45
46 1) THE HEADER.
47 2-6) THE GLOBAL DECLS AND TYPES.
48
49 The global decls and types are encoded in the same way. For each
50 entry, there is word with the offset within the section to the
51 entry.
52
53 7) THE LABEL NAMES.
54
55 Since most labels do not have names, this section my be of zero
56 length. It consists of an array of string table references, one
57 per label. In the lto code, the labels are given either
58 positive or negative indexes. the positive ones have names and
59 the negative ones do not. The positive index can be used to
60 find the name in this array.
61
62 9) THE CFG.
63
64 10) Index into the local decls. Since local decls can have local
65 decls inside them, they must be read in randomly in order to
66 properly restore them.
67
68 11-12) GIMPLE FOR THE LOCAL DECLS AND THE FUNCTION BODY.
69
70 The gimple consists of a set of records.
71
72 THE FUNCTION
73
74 At the top level of (8) is the function. It consists of five
75 pieces:
76
77 LTO_function - The tag.
78 eh tree - This is all of the exception handling regions
79 put out in a post order traversial of the
80 tree. Siblings are output as lists terminated
81 by a 0. The set of fields matches the fields
82 defined in except.cc.
83
84 last_basic_block - in uleb128 form.
85
86 basic blocks - This is the set of basic blocks.
87
88 zero - The termination of the basic blocks.
89
90 BASIC BLOCKS
91
92 There are two forms of basic blocks depending on if they are
93 empty or not.
94
95 The basic block consists of:
96
97 LTO_bb1 or LTO_bb0 - The tag.
98
99 bb->index - the index in uleb128 form.
100
101 #succs - The number of successors un uleb128 form.
102
103 the successors - For each edge, a pair. The first of the
104 pair is the index of the successor in
105 uleb128 form and the second are the flags in
106 uleb128 form.
107
108 the statements - A gimple tree, as described above.
109 These are only present for LTO_BB1.
110 Following each statement is an optional
111 exception handling record LTO_eh_region
112 which contains the region number (for
113 regions >= 0).
114
115 zero - This is only present for LTO_BB1 and is used
116 to terminate the statements and exception
117 regions within this block.
118
119 12) STRINGS
120
121 String are represented in the table as pairs, a length in ULEB128
122 form followed by the data for the string. */
123
124#define LTO_major_version GCC_major_version
125#define LTO_minor_version 0
126
127typedef unsigned char lto_decl_flags_t;
128
129/* Tags representing the various IL objects written to the bytecode file
130 (GIMPLE statements, basic blocks, EH regions, tree nodes, etc).
131
132 NOTE, when adding new LTO tags, also update lto_tag_name. */
134{
136
137 /* Reference to previously-streamed node. */
139
140 /* References to indexable tree nodes. These objects are stored in
141 tables that are written separately from the function bodies
142 and variable constructors that reference them. This way they can be
143 instantiated even when the referencing functions aren't (e.g., during WPA)
144 and it also allows functions to be copied from one file to another without
145 having to unpickle the body first (the references are location
146 independent). */
148
150
151 /* Special for global streamer. A blob of unnamed tree nodes. */
153
154 /* Sequence of trees. */
156
157 /* Shared INTEGER_CST node. */
159
160 /* Tags of trees are encoded as
161 LTO_first_tree_tag + TREE_CODE. */
163 /* Tags of gimple tuples are encoded as
164 LTO_first_gimple_tag + gimple_code. */
166
167 /* Entry and exit basic blocks. */
168 LTO_bb0 = LTO_first_gimple_tag + LAST_AND_UNUSED_GIMPLE_CODE,
170
171 /* EH region holding the previous statement. */
173
174 /* Function body. */
176
177 /* EH table. */
179
180 /* EH region types. These mirror enum eh_region_type. */
185
186 /* EH landing pad. */
188
189 /* EH try/catch node. */
191
192 /* This tag must always be last. */
194};
195
196
197/* Set of section types that are in an LTO file. This list will grow
198 as the number of IPA passes grows since each IPA pass will need its
199 own section type to store its summary information.
200
201 When adding a new section type, you must also extend the
202 LTO_SECTION_NAME array in lto-section-in.cc. */
230
231/* Indices to the various function, type and symbol streams. */
233{
234 LTO_DECL_STREAM = 0, /* Must be first. */
236};
237
238typedef enum ld_plugin_symbol_resolution ld_plugin_symbol_resolution_t;
239
240/* Return a char pointer to the start of a data stream for an lto pass
241 or function. The first parameter is the file data that contains
242 the information. The second parameter is the type of information
243 to be obtained. The third parameter is the name of the function
244 and is only used when finding a function body; otherwise it is
245 NULL. The fourth parameter is the length of the data returned. */
246typedef const char* (lto_get_section_data_f) (struct lto_file_decl_data *,
247 enum lto_section_type,
248 const char *,
249 int,
250 size_t *);
251
252/* Return the data found from the above call. The first three
253 parameters are the same as above. The fourth parameter is the data
254 itself and the fifth is the length of the data. */
256 enum lto_section_type,
257 const char *,
258 const char *,
259 size_t);
260
261/* The location cache holds expanded locations for streamed in trees.
262 This is done to reduce memory usage of libcpp linemap that strongly prefers
263 locations to be inserted in the source order. */
264
266{
267public:
268 /* Apply all changes in location cache. Add locations into linemap and patch
269 trees. */
270 bool apply_location_cache ();
271 /* Tree merging did not succeed; mark all changes in the cache as
272 accepted. */
273 void accept_location_cache ();
274 /* Tree merging did succeed; throw away recent changes. */
275 void revert_location_cache ();
276 void input_location (location_t *loc, struct bitpack_d *bp,
277 class data_in *data_in);
278 void input_location_and_block (location_t *loc, struct bitpack_d *bp,
279 class lto_input_block *ib,
280 class data_in *data_in);
295
296 /* There can be at most one instance of location cache (combining multiple
297 would bring it out of sync with libcpp linemap); point to current
298 one. */
300
301private:
302 static int cmp_loc (const void *pa, const void *pb);
303
305 {
306 const char *file;
307 location_t *loc;
308 int line, col;
309 bool sysp;
311 unsigned discr;
312 };
313
314 /* The location cache. */
315
317
318 /* Accepted entries are ones used by trees that are known to be not unified
319 by tree merging. */
320
322
323 /* Bookkeeping to remember state in between calls to lto_apply_location_cache
324 When streaming gimple, the location cache is not used and thus
325 lto_apply_location_cache happens per location basis. It is then
326 useful to avoid redundant calls of linemap API. */
327
328 const char *current_file;
332 location_t current_loc;
335};
336
337/* Structure used as buffer for reading an LTO file. */
339{
340public:
341 /* Special constructor for the string table, it abuses this to
342 do random access but use the uhwi decoder. */
343 lto_input_block (const char *data_, unsigned int p_, unsigned int len_,
344 const lto_file_decl_data *file_data_)
345 : data (data_), file_data (file_data_), p (p_), len (len_) {}
346 lto_input_block (const char *data_, unsigned int len_,
347 const lto_file_decl_data *file_data_)
348 : data (data_), file_data (file_data_), p (0), len (len_) {}
349
350 const char *data;
352 unsigned int p;
353 unsigned int len;
354};
355
356/* Compression algorithm used for compression of LTO bytecode. */
357
363
364/* Structure that represents LTO ELF section with information
365 about the format. */
366
368{
371 unsigned char slim_object;
372 unsigned char _padding;
373
374 /* Flags is a private field that is not defined publicly. */
375 uint16_t flags;
376
377 /* Set compression to FLAGS. */
379 {
380 flags = c;
381 }
382
383 /* Get compression from FLAGS. */
385 {
386 return (lto_compression) flags;
387 }
388};
389
391
392/* The is the first part of the record in an LTO file for many of the
393 IPA passes. */
395{
396 /* Size of main gimple body of function. */
397 int32_t main_size;
398};
399
401{
402 /* Size of the string table. */
403 int32_t string_size;
404};
405
406/* The header for a function body. */
408{
409 /* Size of the cfg. */
410 int32_t cfg_size;
411};
412
413
414/* Structure describing a symbol section. */
416{
417 /* Size of region for decl state. */
419
420 /* Number of nodes in globals stream. */
421 int32_t num_nodes;
422};
423
424
425/* Statistics gathered during LTO, WPA and LTRANS. */
427{
428 unsigned HOST_WIDE_INT num_input_cgraph_nodes;
429 unsigned HOST_WIDE_INT num_output_symtab_nodes;
430 unsigned HOST_WIDE_INT num_input_files;
431 unsigned HOST_WIDE_INT num_output_files;
432 unsigned HOST_WIDE_INT num_cgraph_partitions;
433 unsigned HOST_WIDE_INT section_size[LTO_N_SECTION_TYPES];
434 unsigned HOST_WIDE_INT num_function_bodies;
435 unsigned HOST_WIDE_INT num_trees[NUM_TREE_CODES];
436 unsigned HOST_WIDE_INT num_output_il_bytes;
437 unsigned HOST_WIDE_INT num_compressed_il_bytes;
438 unsigned HOST_WIDE_INT num_input_il_bytes;
439 unsigned HOST_WIDE_INT num_uncompressed_il_bytes;
440 unsigned HOST_WIDE_INT num_tree_bodies_output;
441 unsigned HOST_WIDE_INT num_pickle_refs_output;
442};
443
444/* Entry of LTO symtab encoder. */
446{
447 /* Constructor. */
452
454 /* Is the node in this partition (i.e. ltrans of this partition will
455 be responsible for outputting it)? */
456 unsigned int in_partition:1;
457 /* Do we encode body in this partition? */
458 unsigned int body:1;
459 /* Do we stream this node only for inlining? */
460 unsigned int only_for_inlining:1;
461 /* Do we encode initializer in this partition?
462 For example the readonly variable initializers are encoded to aid
463 constant folding even if they are not in the partition. */
464 unsigned int initializer:1;
465};
466
467
468/* Encoder data structure used to stream callgraph nodes. */
470{
473
474 /* Mapping of input order of nodes onto output order. */
475 hash_map<int_hash<int, -1, -2>, int> *order_remap;
476};
477
479
480/* Iterator structure for cgraph node sets. */
486
487
488
489/* The lto_tree_ref_encoder struct is used to encode trees into indices. */
490
492{
493 hash_map<tree, unsigned> *tree_hash_table; /* Maps pointers to indices. */
494 vec<tree> trees; /* Maps indices to pointers. */
495};
496
497
498/* Structure to hold states of input scope. */
499struct GTY((for_user)) lto_in_decl_state
500{
501 /* Array of lto_in_decl_buffers to store type and decls streams. */
503
504 /* If this in-decl state is associated with a function. FN_DECL
505 point to the FUNCTION_DECL. */
507
508 /* True if decl state is compressed. */
510};
511
513
514struct decl_state_hasher : ggc_ptr_hash<lto_in_decl_state>
515{
516 static hashval_t
518 {
519 return htab_hash_pointer (s->fn_decl);
520 }
521
522 static bool
524 {
525 return a->fn_decl == b->fn_decl;
526 }
527};
528
529/* The structure that holds all of the vectors of global types,
530 decls and cgraph nodes used in the serialization of this file. */
532{
533 /* The buffers contain the sets of decls of various kinds and types we have
534 seen so far and the indexes assigned to them. */
536
537 /* Encoder for cgraph nodes. */
539
540 /* If this out-decl state belongs to a function, fn_decl points to that
541 function. Otherwise, it is NULL. */
543
544 /* True if decl state is compressed. */
546
547 /* True if offload tables should be output. */
549};
550
552
553
554/* Compact representation of a index <-> resolution pair. Unpacked to an
555 vector later. */
561
562
563/* One of these is allocated for each object file that being compiled
564 by lto. This structure contains the tables that are needed by the
565 serialized functions and ipa passes to connect themselves to the
566 global types and decls as they are reconstituted. */
568{
569 /* Decl state currently used. */
571
572 /* Decl state corresponding to regions outside of any functions
573 in the compilation unit. */
575
576 /* Table of cgraph nodes present in this file. */
578
579 /* Hash table maps lto-related section names to location in file. */
581
582 /* The .o file that these offsets relate to. */
583 const char *GTY((skip)) file_name;
584
585 /* Hash table maps lto-related section names to location in file. */
586 htab_t GTY((skip)) section_hash_table;
587
588 /* Hash new name of renamed global declaration to its original name. */
589 htab_t GTY((skip)) renaming_hash_table;
590
591 /* Linked list used temporarily in reader */
593
594 /* Order in which the file appears on the command line. */
595 int order;
596
597 /* Sub ID for merged objects. */
598 unsigned HOST_WIDE_INT id;
599
600 /* Symbol resolutions for this file */
602 unsigned max_index;
603
605
606 /* Map assigning declarations their resolutions. */
608
609 /* Mode translation table. */
610 const unsigned char *mode_table;
611
612 /* Read LTO section. */
614
616
618
619 unsigned mode_bits;
620};
621
623
625{
626 char *ptr;
627};
628
629/* An incore byte stream to buffer the various parts of the function.
630 The entire structure should be zeroed when created. The record
631 consists of a set of blocks. The first sizeof (ptr) bytes are used
632 as a chain, and the rest store the bytes to be written. */
634{
635 /* The pointer to the first block in the stream. */
637
638 /* The pointer to the last and current block in the stream. */
640
641 /* The pointer to where the next char should be written. */
643
644 /* The number of characters left in the current block. */
645 unsigned int left_in_block;
646
647 /* The block size of the last block allocated. */
648 unsigned int block_size;
649
650 /* The total number of characters written. */
651 unsigned int total_size;
652};
653
654/* A simple output block. This can be used for simple IPA passes that
655 do not need more than one stream. */
657{
660
661 /* The stream that the main tree codes are written to. */
663};
664
665/* String hashing. */
666
668{
669 const char *s;
670 int len;
671 unsigned int slot_num;
672};
673
674/* Hashtable helpers. */
675
677{
678 static inline hashval_t hash (const string_slot *);
679 static inline bool equal (const string_slot *, const string_slot *);
680};
681
682/* Returns a hash code for DS. Adapted from libiberty's htab_hash_string
683 to support strings that may not end in '\0'. */
684
685inline hashval_t
687{
688 hashval_t r = ds->len;
689 int i;
690
691 for (i = 0; i < ds->len; i++)
692 r = r * 67 + (unsigned)ds->s[i] - 113;
693 return r;
694}
695
696/* Returns nonzero if DS1 and DS2 are equal. */
697
698inline bool
700{
701 if (ds1->len == ds2->len)
702 return memcmp (ds1->s, ds2->s, ds1->len) == 0;
703
704 return 0;
705}
706
707/* Data structure holding all the data and descriptors used when writing
708 an LTO file. */
710{
713
714 /* The stream that the main tree codes are written to. */
716
717 /* The stream that contains the string table. */
719
720 /* The stream that contains the cfg. */
722
723 /* The hash table that contains the set of strings we have seen so
724 far and the indexes assigned to them. */
726
727 /* The current symbol that we are currently serializing. Null
728 if we are serializing something else. */
730
731 /* These are the last file and line that were seen in the stream.
732 If the current node differs from these, it needs to insert
733 something into the stream and fix these up. */
734 const char *current_file;
742
743 /* Cache of nodes written in this section. */
745
746 /* All trees identified as local to the unit streamed. */
748
749 /* All data persistent across whole duration of output block
750 can go here. */
752};
753
754
755/* Data and descriptors used when reading from an LTO file. */
757{
758public:
759 /* The global decls and types. */
761
762 /* The string table. */
763 const char *strings;
764
765 /* The length of the string table. */
766 unsigned int strings_len;
767
768 /* Maps each reference number to the resolution done by the linker. */
770
771 /* Cache of pickled nodes. */
773
774 /* Cache of source code location. */
776};
777
778
779/* In lto-section-in.cc */
781 struct lto_file_decl_data *,
782 enum lto_section_type, const char **, size_t *);
783extern void
785 enum lto_section_type,
786 class lto_input_block *, const char *, size_t);
787extern void lto_set_in_hooks (struct lto_file_decl_data **,
790extern struct lto_file_decl_data **lto_get_file_decl_data (void);
791extern const char *lto_get_section_data (struct lto_file_decl_data *,
792 enum lto_section_type,
793 const char *, int, size_t *,
794 bool decompress = false);
795extern const char *lto_get_summary_section_data (struct lto_file_decl_data *,
796 enum lto_section_type,
797 size_t *);
798extern const char *lto_get_raw_section_data (struct lto_file_decl_data *,
799 enum lto_section_type,
800 const char *, int, size_t *);
801extern void lto_free_section_data (struct lto_file_decl_data *,
802 enum lto_section_type,
803 const char *, const char *, size_t,
804 bool decompress = false);
806 enum lto_section_type,
807 const char *, const char *, size_t);
808extern htab_t lto_create_renaming_table (void);
809extern void lto_record_renamed_decl (struct lto_file_decl_data *,
810 const char *, const char *);
811extern const char *lto_get_decl_name_mapping (struct lto_file_decl_data *,
812 const char *);
813extern struct lto_in_decl_state *lto_new_in_decl_state (void);
814extern void lto_delete_in_decl_state (struct lto_in_decl_state *);
816 struct lto_file_decl_data *, tree);
820extern void lto_value_range_error (const char *,
821 HOST_WIDE_INT, HOST_WIDE_INT,
822 HOST_WIDE_INT) ATTRIBUTE_NORETURN;
823
824/* In lto-section-out.cc */
825extern void lto_begin_section (const char *, bool);
826extern void lto_end_section (void);
827extern void lto_write_data (const void *, unsigned int);
828extern void lto_write_raw_data (const void *, unsigned int);
829extern void lto_write_stream (struct lto_output_stream *);
831 enum lto_section_type);
833extern struct lto_out_decl_state *lto_new_out_decl_state (void);
834extern void lto_delete_out_decl_state (struct lto_out_decl_state *);
835extern struct lto_out_decl_state *lto_get_out_decl_state (void);
836extern void lto_push_out_decl_state (struct lto_out_decl_state *);
837extern struct lto_out_decl_state *lto_pop_out_decl_state (void);
839 struct lto_out_decl_state *);
840extern void lto_append_block (struct lto_output_stream *);
841
842
843/* In lto-streamer.cc. */
844
845/* Set when streaming LTO for offloading compiler. */
846extern bool lto_stream_offload_p;
847
848extern const char *lto_tag_name (enum LTO_tags);
849extern char *lto_get_section_name (int, const char *, int,
850 struct lto_file_decl_data *);
851extern void print_lto_report (const char *);
852extern void lto_streamer_init (void);
853extern bool gate_lto_out (void);
854extern void lto_check_version (int, int, const char *);
855extern void lto_streamer_hooks_init (void);
856
857/* In lto-streamer-in.cc */
858extern void lto_input_cgraph (struct lto_file_decl_data *, const char *);
859extern void lto_reader_init (void);
860extern void lto_free_file_name_hash (void);
861extern void lto_input_function_body (struct lto_file_decl_data *,
862 struct cgraph_node *,
863 const char *);
865 struct varpool_node *,
866 const char *);
868 const char *);
869extern void lto_input_toplevel_asms (struct lto_file_decl_data *, int);
870extern void lto_input_mode_table (struct lto_file_decl_data *);
871extern class data_in *lto_data_in_create (struct lto_file_decl_data *,
872 const char *, unsigned,
874extern void lto_data_in_delete (class data_in *);
875extern void lto_input_data_block (class lto_input_block *, void *, size_t);
876void lto_input_location (location_t *, struct bitpack_d *, class data_in *);
878 struct function *, enum LTO_tags);
879void lto_tag_check_set (enum LTO_tags, int, ...);
880void lto_init_eh (void);
881hashval_t lto_input_scc (class lto_input_block *, class data_in *,
882 unsigned *, unsigned *, bool);
884 enum LTO_tags, hashval_t hash);
885tree lto_input_tree (class lto_input_block *, class data_in *);
887
888
889/* In lto-streamer-out.cc */
892extern void destroy_output_block (struct output_block *);
893extern void lto_output_tree (struct output_block *, tree, bool, bool);
894extern void stream_write_tree_ref (struct output_block *, tree);
895extern void lto_output_var_decl_ref (struct lto_out_decl_state *,
896 struct lto_output_stream *, tree);
897extern void lto_output_fn_decl_ref (struct lto_out_decl_state *,
898 struct lto_output_stream *, tree);
902extern void produce_asm (struct output_block *ob);
903extern void lto_output ();
904extern void produce_asm_for_decls ();
906 struct lto_out_decl_state *);
908 struct lto_output_stream *,
909 struct lto_out_decl_state *);
911void lto_output_location (struct output_block *, struct bitpack_d *,
912 location_t);
914 location_t);
917
918
919/* In lto-cgraph.cc */
925 struct cgraph_node *);
927 struct cgraph_node *);
929 toplevel_node *);
931 toplevel_node *);
932
934 varpool_node *);
935void output_symtab (void);
936void input_symtab (void);
937void input_toplevel_asms (void);
938void output_offload_tables (void);
939void input_offload_tables (bool);
949void select_what_to_stream (void);
950
951/* In options-save.cc. */
953 struct cl_target_option *);
954
956 struct bitpack_d *,
957 struct cl_target_option *);
958
960 struct bitpack_d *, struct cl_optimization *);
961
963 struct bitpack_d *, struct cl_optimization *);
964
965
966
967/* In lto-opts.cc. */
968extern void lto_write_options (void);
969
970
971/* Statistics gathered during LTO, WPA and LTRANS. */
972extern struct lto_stats_d lto_stats;
973
974/* Section names corresponding to the values of enum lto_section_type. */
975extern const char *lto_section_name[];
976
977/* Holds all the out decl states of functions output so far in the
978 current output file. */
980
981/* Return true if LTO tag TAG corresponds to a tree code. */
982inline bool
984{
985 return tag > LTO_first_tree_tag && (unsigned) tag <= MAX_TREE_CODES;
986}
987
988
989/* Return true if LTO tag TAG corresponds to a gimple code. */
990inline bool
992{
993 return (unsigned) tag >= LTO_first_gimple_tag
994 && (unsigned) tag
995 < (unsigned) LTO_first_gimple_tag + LAST_AND_UNUSED_GIMPLE_CODE;
996}
997
998
999/* Return the LTO tag corresponding to gimple code CODE. See enum
1000 LTO_tags for details on the conversion. */
1001inline enum LTO_tags
1003{
1004 return (enum LTO_tags) ((unsigned) code + LTO_first_gimple_tag);
1005}
1006
1007
1008/* Return the GIMPLE code corresponding to TAG. See enum LTO_tags for
1009 details on the conversion. */
1010inline enum gimple_code
1012{
1014 return (enum gimple_code) ((unsigned) tag - LTO_first_gimple_tag);
1015}
1016
1017
1018/* Return the LTO tag corresponding to tree code CODE. See enum
1019 LTO_tags for details on the conversion. */
1020inline enum LTO_tags
1022{
1023 return (enum LTO_tags) ((unsigned) code + LTO_first_tree_tag);
1024}
1025
1026
1027/* Return the tree code corresponding to TAG. See enum LTO_tags for
1028 details on the conversion. */
1029inline enum tree_code
1031{
1033 return (enum tree_code) ((unsigned) tag - LTO_first_tree_tag);
1034}
1035
1036/* Check that tag ACTUAL == EXPECTED. */
1037inline void
1038lto_tag_check (enum LTO_tags actual, enum LTO_tags expected)
1039{
1040 if (actual != expected)
1041 internal_error ("bytecode stream: expected tag %s instead of %s",
1042 lto_tag_name (expected), lto_tag_name (actual));
1043}
1044
1045/* Check that tag ACTUAL is in the range [TAG1, TAG2]. */
1046inline void
1047lto_tag_check_range (enum LTO_tags actual, enum LTO_tags tag1,
1048 enum LTO_tags tag2)
1049{
1050 if (actual < tag1 || actual > tag2)
1051 internal_error ("bytecode stream: tag %s is not in the expected range "
1052 "[%s, %s]",
1053 lto_tag_name (actual),
1054 lto_tag_name (tag1),
1055 lto_tag_name (tag2));
1056}
1057
1058/* Initialize an lto_out_decl_buffer ENCODER. */
1059inline void
1061{
1062 encoder->tree_hash_table = new hash_map<tree, unsigned> (251);
1063 encoder->trees.create (0);
1064}
1065
1066
1067/* Destroy an lto_tree_ref_encoder ENCODER by freeing its contents. The
1068 memory used by ENCODER is not freed by this function. */
1069inline void
1071{
1072 /* Hash table may be delete already. */
1073 delete encoder->tree_hash_table;
1074 encoder->tree_hash_table = NULL;
1075 encoder->trees.release ();
1076}
1077
1078/* Return the number of trees encoded in ENCODER. */
1079inline unsigned int
1081{
1082 return encoder->trees.length ();
1083}
1084
1085/* Return the IDX-th tree in ENCODER. */
1086inline tree
1088 unsigned int idx)
1089{
1090 return encoder->trees[idx];
1091}
1092
1093/* Return number of encoded nodes in ENCODER. */
1094inline int
1096{
1097 return encoder->nodes.length ();
1098}
1099
1100/* Value used to represent failure of lto_symtab_encoder_lookup. */
1101#define LCC_NOT_FOUND (-1)
1102
1103/* Look up NODE in encoder. Return NODE's reference if it has been encoded
1104 or LCC_NOT_FOUND if it is not there. */
1105
1106inline int
1109{
1110 size_t *slot = encoder->map->get (node);
1111 return (slot && *slot ? *(slot) - 1 : LCC_NOT_FOUND);
1112}
1113
1114/* Return true if iterator LSE points to nothing. */
1115inline bool
1117{
1118 return lsei.index >= (unsigned)lto_symtab_encoder_size (lsei.encoder);
1119}
1120
1121/* Advance iterator LSE. */
1122inline void
1124{
1125 lsei->index++;
1126}
1127
1128/* Return the node pointed to by LSI. */
1129inline toplevel_node *
1131{
1132 return lsei.encoder->nodes[lsei.index].node;
1133}
1134
1135/* Return the node pointed to by LSI. */
1136inline struct cgraph_node *
1141
1142/* Return the node pointed to by LSI. */
1143inline varpool_node *
1148
1149/* Return the cgraph node corresponding to REF using ENCODER. */
1150
1151inline toplevel_node *
1153{
1154 if (ref == LCC_NOT_FOUND)
1155 return NULL;
1156
1157 return encoder->nodes[ref].node;
1158}
1159
1160/* Return an iterator to the first node in LSI. */
1163{
1165
1166 lsei.encoder = encoder;
1167 lsei.index = 0;
1168 return lsei;
1169}
1170
1171/* Advance iterator LSE. */
1172inline void
1174{
1175 lsei_next (lsei);
1176 while (!lsei_end_p (*lsei)
1178 lsei_next (lsei);
1179}
1180
1181/* Return an iterator to the first node in LSI. */
1184{
1185 lto_symtab_encoder_iterator lsei = lsei_start (encoder);
1186
1187 if (lsei_end_p (lsei))
1188 return lsei;
1189 if (!lto_symtab_encoder_in_partition_p (encoder, lsei_node (lsei)))
1190 lsei_next_in_partition (&lsei);
1191
1192 return lsei;
1193}
1194
1195/* Advance iterator LSE. */
1196inline void
1198{
1199 lsei_next (lsei);
1200 while (!lsei_end_p (*lsei)
1201 && (!is_a <cgraph_node *> (lsei_node (*lsei))
1203 lsei_next (lsei);
1204}
1205
1206/* Return an iterator to the first node in LSI. */
1209{
1210 lto_symtab_encoder_iterator lsei = lsei_start (encoder);
1211
1212 if (lsei_end_p (lsei))
1213 return lsei;
1214 if (!is_a <cgraph_node *> (lsei_node (lsei))
1215 || !lto_symtab_encoder_in_partition_p (encoder, lsei_node (lsei)))
1217
1218 return lsei;
1219}
1220
1221/* Advance iterator LSE. */
1222inline void
1224{
1225 lsei_next (lsei);
1226 while (!lsei_end_p (*lsei)
1227 && (!is_a <varpool_node *> (lsei_node (*lsei))
1229 lsei_next (lsei);
1230}
1231
1232/* Return an iterator to the first node in LSI. */
1235{
1236 lto_symtab_encoder_iterator lsei = lsei_start (encoder);
1237
1238 if (lsei_end_p (lsei))
1239 return lsei;
1240 if (!is_a <varpool_node *> (lsei_node (lsei))
1241 || !lto_symtab_encoder_in_partition_p (encoder, lsei_node (lsei)))
1243
1244 return lsei;
1245}
1246
1247/* Entry for the delayed registering of decl -> DIE references. */
1250 const char *sym;
1251 unsigned HOST_WIDE_INT off;
1252};
1253
1255
1256extern FILE *streamer_dump_file;
1257
1258#endif /* GCC_LTO_STREAMER_H */
Definition vec.h:1667
Definition lto-streamer.h:757
vec< ld_plugin_symbol_resolution_t > globals_resolution
Definition lto-streamer.h:769
lto_location_cache location_cache
Definition lto-streamer.h:775
struct streamer_tree_cache_d * reader_cache
Definition lto-streamer.h:772
unsigned int strings_len
Definition lto-streamer.h:766
struct lto_file_decl_data * file_data
Definition lto-streamer.h:760
const char * strings
Definition lto-streamer.h:763
Definition hash-map.h:40
Value * get(const Key &k)
Definition hash-map.h:189
Definition hash-set.h:37
Definition hash-table.h:375
Definition lto-streamer.h:339
unsigned int len
Definition lto-streamer.h:353
unsigned int p
Definition lto-streamer.h:352
lto_input_block(const char *data_, unsigned int p_, unsigned int len_, const lto_file_decl_data *file_data_)
Definition lto-streamer.h:343
const char * data
Definition lto-streamer.h:350
const lto_file_decl_data * file_data
Definition lto-streamer.h:351
lto_input_block(const char *data_, unsigned int len_, const lto_file_decl_data *file_data_)
Definition lto-streamer.h:346
Definition lto-streamer.h:266
void revert_location_cache()
Definition lto-streamer-in.cc:503
static int cmp_loc(const void *pa, const void *pb)
Definition lto-streamer-in.cc:386
lto_location_cache()
Definition lto-streamer.h:281
auto_vec< cached_location > loc_cache
Definition lto-streamer.h:316
void accept_location_cache()
Definition lto-streamer-in.cc:494
int accepted_length
Definition lto-streamer.h:321
void input_location_and_block(location_t *loc, struct bitpack_d *bp, class lto_input_block *ib, class data_in *data_in)
Definition lto-streamer-in.cc:514
~lto_location_cache()
Definition lto-streamer.h:289
tree current_block
Definition lto-streamer.h:333
const char * current_file
Definition lto-streamer.h:328
unsigned current_discr
Definition lto-streamer.h:334
int current_col
Definition lto-streamer.h:330
int current_line
Definition lto-streamer.h:329
bool apply_location_cache()
Definition lto-streamer-in.cc:430
location_t current_loc
Definition lto-streamer.h:332
static lto_location_cache * current_cache
Definition lto-streamer.h:299
bool current_sysp
Definition lto-streamer.h:331
Definition lra-spills.cc:101
#define GTY(x)
Definition coretypes.h:41
union tree_node * tree
Definition coretypes.h:97
void internal_error(const char *,...) ATTRIBUTE_GCC_DIAG(1
void ATTRIBUTE_NORETURN
Definition diagnostic-core.h:76
tree_code
Definition genmatch.cc:1002
gimple_code
Definition gimple.h:33
location_t input_location
Definition input.cc:41
#define UNKNOWN_LOCATION
Definition input.h:32
bool is_a(U *p)
Definition is-a.h:230
T dyn_cast(U *p)
Definition is-a.h:280
bool lto_symtab_encoder_in_partition_p(lto_symtab_encoder_t encoder, toplevel_node *node)
Definition lto-cgraph.cc:213
const char * lto_section_name[LTO_N_SECTION_TYPES]
Definition lto-section-in.cc:35
vec< lto_out_decl_state_ptr > lto_function_decl_states
Definition lto-section-out.cc:40
vec< dref_entry > dref_queue
Definition lto-streamer-in.cc:1712
const char * lto_tag_name(enum LTO_tags tag)
Definition lto-streamer.cc:47
FILE * streamer_dump_file
Definition lto-streamer.cc:42
struct lto_stats_d lto_stats
Definition lto-streamer.cc:36
bool lto_stream_offload_p
Definition lto-streamer.cc:40
void lto_section_overrun(class lto_input_block *) ATTRIBUTE_NORETURN
Definition lto-section-in.cc:457
void lto_input_variable_constructor(struct lto_file_decl_data *, struct varpool_node *, const char *)
Definition lto-streamer-in.cc:1703
void lto_output_init_mode_table(void)
Definition lto-streamer-out.cc:3283
struct lto_out_decl_state * lto_get_out_decl_state(void)
Definition lto-section-out.cc:232
void lto_free_function_in_decl_state(struct lto_in_decl_state *)
Definition lto-section-in.cc:423
tree lto_input_tree(class lto_input_block *, class data_in *)
Definition lto-streamer-in.cc:1950
void lto_free_file_name_hash(void)
Definition lto-streamer-in.cc:2182
void lto_record_function_out_decl_state(tree, struct lto_out_decl_state *)
Definition lto-section-out.cc:258
void lsei_next(lto_symtab_encoder_iterator *lsei)
Definition lto-streamer.h:1123
void input_toplevel_asms(void)
Definition lto-cgraph.cc:1890
void cl_optimization_stream_out(struct output_block *, struct bitpack_d *, struct cl_optimization *)
struct lto_symtab_encoder_d * lto_symtab_encoder_t
Definition lto-streamer.h:478
struct lto_out_decl_state * lto_out_decl_state_ptr
Definition lto-streamer.h:551
lto_symtab_encoder_iterator lsei_start_in_partition(lto_symtab_encoder_t encoder)
Definition lto-streamer.h:1183
struct lto_in_decl_state * lto_get_function_in_decl_state(struct lto_file_decl_data *, tree)
Definition lto-section-in.cc:409
class data_in * lto_data_in_create(struct lto_file_decl_data *, const char *, unsigned, vec< ld_plugin_symbol_resolution_t >)
Definition lto-streamer-in.cc:2202
lto_symtab_encoder_t compute_ltrans_boundary(lto_symtab_encoder_t encoder)
Definition lto-cgraph.cc:872
bool lto_symtab_encoder_delete_node(lto_symtab_encoder_t, toplevel_node *)
Definition lto-cgraph.cc:139
void lto_input_cgraph(struct lto_file_decl_data *, const char *)
void lto_write_raw_data(const void *, unsigned int)
Definition lto-section-out.cc:112
char * lto_get_section_name(int, const char *, int, struct lto_file_decl_data *)
Definition lto-streamer.cc:103
htab_t lto_create_renaming_table(void)
Definition lto-section-in.cc:332
const char * lto_get_summary_section_data(struct lto_file_decl_data *, enum lto_section_type, size_t *)
Definition lto-section-in.cc:184
void print_lto_report(const char *)
Definition lto-streamer.cc:159
bool lto_symtab_encoder_in_partition_p(lto_symtab_encoder_t, toplevel_node *)
Definition lto-cgraph.cc:213
void lto_free_function_in_decl_state_for_node(symtab_node *)
Definition lto-section-in.cc:435
enum tree_code lto_tag_to_tree_code(enum LTO_tags tag)
Definition lto-streamer.h:1030
lto_symtab_encoder_iterator lsei_start_variable_in_partition(lto_symtab_encoder_t encoder)
Definition lto-streamer.h:1234
void lto_output_tree(struct output_block *, tree, bool, bool)
Definition lto-streamer-out.cc:1822
void lto_destroy_simple_output_block(struct lto_simple_output_block *)
Definition lto-section-out.cc:171
tree lto_input_tree_1(class lto_input_block *, class data_in *, enum LTO_tags, hashval_t hash)
Definition lto-streamer-in.cc:1896
bool referenced_from_this_partition_p(symtab_node *, lto_symtab_encoder_t)
Definition lto-cgraph.cc:360
void stream_write_tree_ref(struct output_block *, tree)
Definition lto-streamer-out.cc:468
struct lto_file_decl_data * lto_file_decl_data_ptr
Definition lto-streamer.h:622
const char * lto_get_decl_name_mapping(struct lto_file_decl_data *, const char *)
Definition lto-section-in.cc:366
void cl_optimization_stream_in(class data_in *, struct bitpack_d *, struct cl_optimization *)
void lsei_next_function_in_partition(lto_symtab_encoder_iterator *lsei)
Definition lto-streamer.h:1197
bool lto_symtab_encoder_encode_body_p(lto_symtab_encoder_t, struct cgraph_node *)
Definition lto-cgraph.cc:181
void lto_free_section_data_f(struct lto_file_decl_data *, enum lto_section_type, const char *, const char *, size_t)
Definition lto-streamer.h:255
void lto_tag_check(enum LTO_tags actual, enum LTO_tags expected)
Definition lto-streamer.h:1038
struct lto_in_decl_state * lto_in_decl_state_ptr
Definition lto-streamer.h:512
tree lto_tree_ref_encoder_get_tree(struct lto_tree_ref_encoder *encoder, unsigned int idx)
Definition lto-streamer.h:1087
struct lto_out_decl_state * lto_new_out_decl_state(void)
Definition lto-section-out.cc:200
lto_symtab_encoder_iterator lsei_start_function_in_partition(lto_symtab_encoder_t encoder)
Definition lto-streamer.h:1208
enum gimple_code lto_tag_to_gimple_code(enum LTO_tags tag)
Definition lto-streamer.h:1011
LTO_tags
Definition lto-streamer.h:134
@ LTO_ert_allowed_exceptions
Definition lto-streamer.h:183
@ LTO_tree_scc
Definition lto-streamer.h:152
@ LTO_ert_try
Definition lto-streamer.h:182
@ LTO_bb1
Definition lto-streamer.h:169
@ LTO_eh_catch
Definition lto-streamer.h:190
@ LTO_NUM_TAGS
Definition lto-streamer.h:193
@ LTO_global_stream_ref
Definition lto-streamer.h:147
@ LTO_ert_must_not_throw
Definition lto-streamer.h:184
@ LTO_tree_pickle_reference
Definition lto-streamer.h:138
@ LTO_null
Definition lto-streamer.h:135
@ LTO_bb0
Definition lto-streamer.h:168
@ LTO_eh_region
Definition lto-streamer.h:172
@ LTO_ssa_name_ref
Definition lto-streamer.h:149
@ LTO_trees
Definition lto-streamer.h:155
@ LTO_first_tree_tag
Definition lto-streamer.h:162
@ LTO_function
Definition lto-streamer.h:175
@ LTO_first_gimple_tag
Definition lto-streamer.h:165
@ LTO_eh_landing_pad
Definition lto-streamer.h:187
@ LTO_integer_cst
Definition lto-streamer.h:158
@ LTO_eh_table
Definition lto-streamer.h:178
@ LTO_ert_cleanup
Definition lto-streamer.h:181
void lto_output_location_and_block(struct output_block *, struct bitpack_d *, location_t)
Definition lto-streamer-out.cc:284
enum ld_plugin_symbol_resolution ld_plugin_symbol_resolution_t
Definition lto-streamer.h:238
bool lsei_end_p(lto_symtab_encoder_iterator lsei)
Definition lto-streamer.h:1116
void lto_begin_section(const char *, bool)
Definition lto-section-out.cc:66
void lto_input_data_block(class lto_input_block *, void *, size_t)
Definition lto-streamer-in.cc:132
bool referenced_from_other_partition_p(struct ipa_ref_list *, lto_symtab_encoder_t)
toplevel_node * lto_symtab_encoder_deref(lto_symtab_encoder_t encoder, int ref)
Definition lto-streamer.h:1152
void lto_write_data(const void *, unsigned int)
Definition lto-section-out.cc:101
void output_symtab(void)
Definition lto-cgraph.cc:1032
void lto_streamer_hooks_init(void)
Definition lto-streamer.cc:279
void produce_asm(struct output_block *ob)
Definition lto-streamer-out.cc:2274
struct output_block * create_output_block(enum lto_section_type)
Definition lto-streamer-out.cc:78
void lto_delete_in_decl_state(struct lto_in_decl_state *)
Definition lto-section-in.cc:396
void cl_target_option_stream_out(struct output_block *, struct bitpack_d *, struct cl_target_option *)
void lto_input_mode_table(struct lto_file_decl_data *)
Definition lto-streamer-in.cc:2023
void lsei_next_in_partition(lto_symtab_encoder_iterator *lsei)
Definition lto-streamer.h:1173
lto_decl_stream_e_t
Definition lto-streamer.h:233
@ LTO_N_DECL_STREAMS
Definition lto-streamer.h:235
@ LTO_DECL_STREAM
Definition lto-streamer.h:234
lto_section_type
Definition lto-streamer.h:204
@ LTO_section_offload_table
Definition lto-streamer.h:222
@ LTO_section_symtab
Definition lto-streamer.h:208
@ LTO_section_decls
Definition lto-streamer.h:205
@ LTO_section_cgraph_opt_sum
Definition lto-streamer.h:218
@ LTO_section_jump_functions
Definition lto-streamer.h:212
@ LTO_section_ipa_modref
Definition lto-streamer.h:227
@ LTO_section_ipa_fn_summary
Definition lto-streamer.h:219
@ LTO_section_ipcp_transform
Definition lto-streamer.h:220
@ LTO_section_ipa_pure_const
Definition lto-streamer.h:213
@ LTO_section_lto
Definition lto-streamer.h:224
@ LTO_section_symtab_extension
Definition lto-streamer.h:209
@ LTO_section_symtab_nodes
Definition lto-streamer.h:216
@ LTO_section_ipa_sra
Definition lto-streamer.h:225
@ LTO_section_ipa_profile
Definition lto-streamer.h:215
@ LTO_section_static_initializer
Definition lto-streamer.h:207
@ LTO_section_odr_types
Definition lto-streamer.h:226
@ LTO_section_refs
Definition lto-streamer.h:210
@ LTO_section_opts
Definition lto-streamer.h:217
@ LTO_section_mode_table
Definition lto-streamer.h:223
@ LTO_section_asm
Definition lto-streamer.h:211
@ LTO_section_ipa_reference
Definition lto-streamer.h:214
@ LTO_N_SECTION_TYPES
Definition lto-streamer.h:228
@ LTO_section_function_body
Definition lto-streamer.h:206
@ LTO_section_ipa_icf
Definition lto-streamer.h:221
lto_symtab_encoder_iterator lsei_start(lto_symtab_encoder_t encoder)
Definition lto-streamer.h:1162
void lto_value_range_error(const char *, HOST_WIDE_INT, HOST_WIDE_INT, HOST_WIDE_INT) ATTRIBUTE_NORETURN
Definition lto-section-in.cc:466
const char * lto_get_section_data(struct lto_file_decl_data *, enum lto_section_type, const char *, int, size_t *, bool decompress=false)
Definition lto-section-in.cc:134
int lto_symtab_encoder_size(lto_symtab_encoder_t encoder)
Definition lto-streamer.h:1095
void lto_input_constructors_and_inits(struct lto_file_decl_data *, const char *)
tree lto_input_var_decl_ref(lto_input_block *, lto_file_decl_data *)
Definition lto-streamer-in.cc:669
void lto_destroy_simple_input_block(struct lto_file_decl_data *, enum lto_section_type, class lto_input_block *, const char *, size_t)
Definition lto-section-in.cc:276
void lto_init_tree_ref_encoder(struct lto_tree_ref_encoder *encoder)
Definition lto-streamer.h:1060
bool lto_variably_modified_type_p(tree)
Definition lto-streamer-out.cc:134
tree lto_input_fn_decl_ref(lto_input_block *, lto_file_decl_data *)
Definition lto-streamer-in.cc:681
void lto_output_decl_state_streams(struct output_block *, struct lto_out_decl_state *)
Definition lto-streamer-out.cc:2998
void lto_check_version(int, int, const char *)
Definition lto-streamer.cc:264
void lto_output_fn_decl_ref(struct lto_out_decl_state *, struct lto_output_stream *, tree)
Definition lto-streamer-out.cc:359
struct lto_file_decl_data ** lto_get_file_decl_data(void)
Definition lto-section-in.cc:89
void lto_delete_out_decl_state(struct lto_out_decl_state *)
Definition lto-section-out.cc:218
void lto_data_in_delete(class data_in *)
Definition lto-streamer-in.cc:2219
void lto_symtab_encoder_delete(lto_symtab_encoder_t)
Definition lto-cgraph.cc:91
bool lto_tag_is_gimple_code_p(enum LTO_tags tag)
Definition lto-streamer.h:991
void lto_output_var_decl_ref(struct lto_out_decl_state *, struct lto_output_stream *, tree)
Definition lto-streamer-out.cc:346
void destroy_output_block(struct output_block *)
Definition lto-streamer-out.cc:110
bool lto_tag_is_tree_code_p(enum LTO_tags tag)
Definition lto-streamer.h:983
lto_symtab_encoder_t lto_symtab_encoder_new(bool)
Definition lto-cgraph.cc:77
struct lto_simple_output_block * lto_create_simple_output_block(enum lto_section_type)
Definition lto-section-out.cc:153
void lto_reader_init(void)
Definition lto-streamer-in.cc:2169
void lto_tag_check_range(enum LTO_tags actual, enum LTO_tags tag1, enum LTO_tags tag2)
Definition lto-streamer.h:1047
enum LTO_tags lto_tree_code_to_tag(enum tree_code code)
Definition lto-streamer.h:1021
void input_symtab(void)
Definition lto-cgraph.cc:1833
void select_what_to_stream(void)
Definition lto-cgraph.cc:856
unsigned int lto_tree_ref_encoder_size(struct lto_tree_ref_encoder *encoder)
Definition lto-streamer.h:1080
void lsei_next_variable_in_partition(lto_symtab_encoder_iterator *lsei)
Definition lto-streamer.h:1223
void produce_asm_for_decls()
Definition lto-streamer-out.cc:3382
void lto_free_raw_section_data(struct lto_file_decl_data *, enum lto_section_type, const char *, const char *, size_t)
Definition lto-section-in.cc:234
enum LTO_tags lto_gimple_code_to_tag(enum gimple_code code)
Definition lto-streamer.h:1002
void output_offload_tables(void)
Definition lto-cgraph.cc:1135
void lto_input_toplevel_asms(struct lto_file_decl_data *, int)
Definition lto-streamer-in.cc:1982
tree lto_input_tree_ref(class lto_input_block *, class data_in *, struct function *, enum LTO_tags)
Definition lto-streamer-in.cc:642
toplevel_node * lsei_node(lto_symtab_encoder_iterator lsei)
Definition lto-streamer.h:1130
void lto_output()
Definition lto-streamer-out.cc:2812
void lto_append_block(struct lto_output_stream *)
Definition data-streamer-out.cc:38
void lto_write_options(void)
Definition lto-opts.cc:60
tree stream_read_tree_ref(class lto_input_block *, class data_in *)
Definition lto-streamer-in.cc:1870
void lto_output_toplevel_asms(lto_symtab_encoder_t)
Definition lto-streamer-out.cc:2559
void lto_push_out_decl_state(struct lto_out_decl_state *)
Definition lto-section-out.cc:240
lto_compression
Definition lto-streamer.h:359
@ ZSTD
Definition lto-streamer.h:361
@ ZLIB
Definition lto-streamer.h:360
void cl_target_option_stream_in(class data_in *, struct bitpack_d *, struct cl_target_option *)
void lto_input_function_body(struct lto_file_decl_data *, struct cgraph_node *, const char *)
Definition lto-streamer-in.cc:1693
class lto_input_block * lto_create_simple_input_block(struct lto_file_decl_data *, enum lto_section_type, const char **, size_t *)
Definition lto-section-in.cc:249
bool lto_symtab_encoder_only_for_inlining_p(lto_symtab_encoder_t, struct cgraph_node *)
Definition lto-cgraph.cc:171
void lto_input_location(location_t *, struct bitpack_d *, class data_in *)
Definition lto-streamer-in.cc:628
void lto_set_symtab_encoder_in_partition(lto_symtab_encoder_t, toplevel_node *)
Definition lto-cgraph.cc:225
varpool_node * lsei_varpool_node(lto_symtab_encoder_iterator lsei)
Definition lto-streamer.h:1144
void lto_write_stream(struct lto_output_stream *)
Definition lto-section-out.cc:121
struct lto_out_decl_state * lto_pop_out_decl_state(void)
Definition lto-section-out.cc:248
#define LCC_NOT_FOUND
Definition lto-streamer.h:1101
void lto_destroy_tree_ref_encoder(struct lto_tree_ref_encoder *encoder)
Definition lto-streamer.h:1070
void lto_register_decl_definition(tree, struct lto_file_decl_data *)
const char * lto_tag_name(enum LTO_tags)
Definition lto-streamer.cc:47
struct cgraph_node * lsei_cgraph_node(lto_symtab_encoder_iterator lsei)
Definition lto-streamer.h:1137
void lto_streamer_init(void)
Definition lto-streamer.cc:240
void input_offload_tables(bool)
Definition lto-cgraph.cc:1921
void lto_init_eh(void)
Definition lto-streamer-in.cc:897
void lto_output_location(struct output_block *, struct bitpack_d *, location_t)
Definition lto-streamer-out.cc:272
void lto_prepare_function_for_streaming(cgraph_node *)
Definition lto-streamer-out.cc:2358
bool gate_lto_out(void)
Definition lto-streamer.cc:254
bool reachable_from_other_partition_p(struct cgraph_node *, lto_symtab_encoder_t)
Definition lto-cgraph.cc:336
void lto_record_renamed_decl(struct lto_file_decl_data *, const char *, const char *)
Definition lto-section-in.cc:341
bool reachable_from_this_partition_p(struct cgraph_node *, lto_symtab_encoder_t)
Definition lto-cgraph.cc:375
unsigned char lto_decl_flags_t
Definition lto-streamer.h:127
struct lto_in_decl_state * lto_new_in_decl_state(void)
Definition lto-section-in.cc:388
void lto_end_section(void)
Definition lto-section-out.cc:88
void lto_tag_check_set(enum LTO_tags, int,...)
Definition lto-streamer-in.cc:111
void lto_set_in_hooks(struct lto_file_decl_data **, lto_get_section_data_f *, lto_free_section_data_f *)
Definition lto-section-in.cc:75
hashval_t lto_input_scc(class lto_input_block *, class data_in *, unsigned *, unsigned *, bool)
Definition lto-streamer-in.cc:1809
int lto_symtab_encoder_lookup(lto_symtab_encoder_t encoder, toplevel_node *node)
Definition lto-streamer.h:1107
const char * lto_get_section_data_f(struct lto_file_decl_data *, enum lto_section_type, const char *, int, size_t *)
Definition lto-streamer.h:246
int lto_symtab_encoder_encode(lto_symtab_encoder_t, toplevel_node *)
Definition lto-cgraph.cc:107
const char * lto_get_raw_section_data(struct lto_file_decl_data *, enum lto_section_type, const char *, int, size_t *)
Definition lto-section-in.cc:193
bool lto_symtab_encoder_encode_initializer_p(lto_symtab_encoder_t, varpool_node *)
Definition lto-cgraph.cc:191
void lto_free_section_data(struct lto_file_decl_data *, enum lto_section_type, const char *, const char *, size_t, bool decompress=false)
Definition lto-section-in.cc:206
void lto_output_decl_state_refs(struct output_block *, struct lto_output_stream *, struct lto_out_decl_state *)
Definition custom-sarif-properties/state-graphs.h:33
poly_int< N, C > r
Definition poly-int.h:774
i
Definition poly-int.h:776
Ca const poly_int< N, Cb > & b
Definition poly-int.h:771
Ca & a
Definition poly-int.h:770
Definition data-streamer.h:35
Definition cgraph.h:920
Definition lto-streamer.h:515
static bool equal(lto_in_decl_state *a, lto_in_decl_state *b)
Definition lto-streamer.h:523
static hashval_t hash(lto_in_decl_state *s)
Definition lto-streamer.h:517
Definition lto-streamer.h:1248
tree decl
Definition lto-streamer.h:1249
unsigned HOST_WIDE_INT off
Definition lto-streamer.h:1251
const char * sym
Definition lto-streamer.h:1250
Definition function.h:249
Definition gcov-io.h:351
Definition hash-traits.h:321
Definition hash-traits.h:122
Definition ipa-ref.h:75
Definition lto-streamer.h:625
char * ptr
Definition lto-streamer.h:626
Definition lto-streamer.h:416
int32_t decl_state_size
Definition lto-streamer.h:418
int32_t num_nodes
Definition lto-streamer.h:421
lto_encoder_entry(toplevel_node *n)
Definition lto-streamer.h:448
unsigned int body
Definition lto-streamer.h:458
unsigned int in_partition
Definition lto-streamer.h:456
unsigned int only_for_inlining
Definition lto-streamer.h:460
unsigned int initializer
Definition lto-streamer.h:464
Definition lto-streamer.h:568
htab_t section_hash_table
Definition lto-streamer.h:586
unsigned mode_bits
Definition lto-streamer.h:619
unsigned max_index
Definition lto-streamer.h:602
vec< res_pair > respairs
Definition lto-streamer.h:601
struct lto_file_decl_data * next
Definition lto-streamer.h:592
struct lto_in_decl_state * global_decl_state
Definition lto-streamer.h:574
gcov_summary profile_info
Definition lto-streamer.h:604
int order
Definition lto-streamer.h:595
htab_t renaming_hash_table
Definition lto-streamer.h:589
unsigned HOST_WIDE_INT id
Definition lto-streamer.h:598
const char * file_name
Definition lto-streamer.h:583
lto_section lto_section_header
Definition lto-streamer.h:613
int order_base
Definition lto-streamer.h:615
const unsigned char * mode_table
Definition lto-streamer.h:610
hash_map< tree, ld_plugin_symbol_resolution > * resolution_map
Definition lto-streamer.h:607
int unit_base
Definition lto-streamer.h:617
struct lto_in_decl_state * current_decl_state
Definition lto-streamer.h:570
hash_table< decl_state_hasher > * function_decl_states
Definition lto-streamer.h:580
lto_symtab_encoder_t symtab_node_encoder
Definition lto-streamer.h:577
Definition lto-streamer.h:408
int32_t cfg_size
Definition lto-streamer.h:410
Definition lto-streamer.h:500
bool compressed
Definition lto-streamer.h:509
tree fn_decl
Definition lto-streamer.h:506
vec< tree, va_gc > * streams[LTO_N_DECL_STREAMS]
Definition lto-streamer.h:502
Definition lto-streamer.h:305
tree block
Definition lto-streamer.h:310
const char * file
Definition lto-streamer.h:306
unsigned discr
Definition lto-streamer.h:311
int line
Definition lto-streamer.h:308
location_t * loc
Definition lto-streamer.h:307
int col
Definition lto-streamer.h:308
bool sysp
Definition lto-streamer.h:309
Definition lto-streamer.h:532
lto_symtab_encoder_t symtab_node_encoder
Definition lto-streamer.h:538
bool compressed
Definition lto-streamer.h:545
tree fn_decl
Definition lto-streamer.h:542
bool output_offload_tables_p
Definition lto-streamer.h:548
struct lto_tree_ref_encoder streams[LTO_N_DECL_STREAMS]
Definition lto-streamer.h:535
Definition lto-streamer.h:634
struct lto_char_ptr_base * current_block
Definition lto-streamer.h:639
unsigned int total_size
Definition lto-streamer.h:651
unsigned int block_size
Definition lto-streamer.h:648
unsigned int left_in_block
Definition lto-streamer.h:645
char * current_pointer
Definition lto-streamer.h:642
struct lto_char_ptr_base * first_block
Definition lto-streamer.h:636
Definition lto-streamer.h:368
uint16_t flags
Definition lto-streamer.h:375
unsigned char _padding
Definition lto-streamer.h:372
int16_t minor_version
Definition lto-streamer.h:370
unsigned char slim_object
Definition lto-streamer.h:371
int16_t major_version
Definition lto-streamer.h:369
lto_compression get_compression()
Definition lto-streamer.h:384
void set_compression(lto_compression c)
Definition lto-streamer.h:378
Definition lto-streamer.h:401
int32_t string_size
Definition lto-streamer.h:403
Definition lto-streamer.h:395
int32_t main_size
Definition lto-streamer.h:397
Definition lto-streamer.h:657
struct lto_output_stream * main_stream
Definition lto-streamer.h:662
enum lto_section_type section_type
Definition lto-streamer.h:658
struct lto_out_decl_state * decl_state
Definition lto-streamer.h:659
Definition lto-streamer.h:427
unsigned HOST_WIDE_INT num_pickle_refs_output
Definition lto-streamer.h:441
unsigned HOST_WIDE_INT num_input_cgraph_nodes
Definition lto-streamer.h:428
unsigned HOST_WIDE_INT num_output_il_bytes
Definition lto-streamer.h:436
unsigned HOST_WIDE_INT num_input_files
Definition lto-streamer.h:430
unsigned HOST_WIDE_INT num_compressed_il_bytes
Definition lto-streamer.h:437
unsigned HOST_WIDE_INT num_output_files
Definition lto-streamer.h:431
unsigned HOST_WIDE_INT num_trees[NUM_TREE_CODES]
Definition lto-streamer.h:435
unsigned HOST_WIDE_INT num_function_bodies
Definition lto-streamer.h:434
unsigned HOST_WIDE_INT num_input_il_bytes
Definition lto-streamer.h:438
unsigned HOST_WIDE_INT section_size[LTO_N_SECTION_TYPES]
Definition lto-streamer.h:433
unsigned HOST_WIDE_INT num_uncompressed_il_bytes
Definition lto-streamer.h:439
unsigned HOST_WIDE_INT num_cgraph_partitions
Definition lto-streamer.h:432
unsigned HOST_WIDE_INT num_output_symtab_nodes
Definition lto-streamer.h:429
unsigned HOST_WIDE_INT num_tree_bodies_output
Definition lto-streamer.h:440
Definition lto-streamer.h:470
hash_map< toplevel_node *, size_t > * map
Definition lto-streamer.h:472
hash_map< int_hash< int, -1, -2 >, int > * order_remap
Definition lto-streamer.h:475
vec< lto_encoder_entry > nodes
Definition lto-streamer.h:471
Definition lto-streamer.h:482
lto_symtab_encoder_t encoder
Definition lto-streamer.h:483
unsigned index
Definition lto-streamer.h:484
Definition lto-streamer.h:492
hash_map< tree, unsigned > * tree_hash_table
Definition lto-streamer.h:493
vec< tree > trees
Definition lto-streamer.h:494
Definition hash-traits.h:303
Definition lto-streamer.h:710
unsigned current_discr
Definition lto-streamer.h:741
struct obstack obstack
Definition lto-streamer.h:751
int current_line
Definition lto-streamer.h:735
struct lto_output_stream * cfg_stream
Definition lto-streamer.h:721
struct lto_output_stream * string_stream
Definition lto-streamer.h:718
enum lto_section_type section_type
Definition lto-streamer.h:711
hash_set< tree > * local_trees
Definition lto-streamer.h:747
bool current_sysp
Definition lto-streamer.h:737
int current_col
Definition lto-streamer.h:736
tree current_block
Definition lto-streamer.h:740
struct lto_out_decl_state * decl_state
Definition lto-streamer.h:712
bool emit_pwd
Definition lto-streamer.h:739
hash_table< string_slot_hasher > * string_hash_table
Definition lto-streamer.h:725
symtab_node * symbol
Definition lto-streamer.h:729
const char * current_file
Definition lto-streamer.h:734
bool reset_locus
Definition lto-streamer.h:738
struct streamer_tree_cache_d * writer_cache
Definition lto-streamer.h:744
struct lto_output_stream * main_stream
Definition lto-streamer.h:715
Definition lto-streamer.h:557
ld_plugin_symbol_resolution_t res
Definition lto-streamer.h:558
unsigned index
Definition lto-streamer.h:559
Definition tree-streamer.h:47
Definition lto-streamer.h:677
static bool equal(const string_slot *, const string_slot *)
Definition lto-streamer.h:699
static hashval_t hash(const string_slot *)
Definition lto-streamer.h:686
Definition lto-streamer.h:668
int len
Definition lto-streamer.h:670
unsigned int slot_num
Definition lto-streamer.h:671
const char * s
Definition lto-streamer.h:669
Definition cgraph.h:133
Definition cgraph.h:110
Definition cgraph.h:2235
Definition vec.h:450
#define NULL
Definition system.h:50
#define gcc_assert(EXPR)
Definition system.h:817
#define true
Definition system.h:890
#define false
Definition system.h:891
#define STATIC_ASSERT(X)
Definition system.h:867
#define NUM_TREE_CODES
Definition tree-core.h:163
@ MAX_TREE_CODES
Definition tree-core.h:156
#define NULL_TREE
Definition tree.h:318