1 /* Data structures and declarations used for reading and writing
2    GIMPLE to a file stream.
3 
4    Copyright (C) 2009-2013 Free Software Foundation, Inc.
5    Contributed by Doug Kwan <dougkwan@google.com>
6 
7 This file is part of GCC.
8 
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
12 version.
13 
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
17 for more details.
18 
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/>.  */
22 
23 #ifndef GCC_LTO_STREAMER_H
24 #define GCC_LTO_STREAMER_H
25 
26 #include "plugin-api.h"
27 #include "tree.h"
28 #include "gimple.h"
29 #include "target.h"
30 #include "cgraph.h"
31 #include "vec.h"
32 #include "alloc-pool.h"
33 #include "gcov-io.h"
34 #include "diagnostic.h"
35 
36 /* Define when debugging the LTO streamer.  This causes the writer
37    to output the numeric value for the memory address of the tree node
38    being emitted.  When debugging a problem in the reader, check the
39    original address that the writer was emitting using lto_orig_address_get.
40    With this value, set a breakpoint in the writer (e.g., lto_output_tree)
41    to trace how the faulty node is being emitted.  */
42 /* #define LTO_STREAMER_DEBUG	1  */
43 
44 /* The encoding for a function consists of the following sections:
45 
46    1)    The header.
47    2)    FIELD_DECLS.
48    3)    FUNCTION_DECLS.
49    4)    global VAR_DECLS.
50    5)    type_decls
51    6)    types.
52    7)    Names for the labels that have names
53    8)    The SSA names.
54    9)    The control flow graph.
55    10-11)Gimple for local decls.
56    12)   Gimple for the function.
57    13)   Strings.
58 
59    1) THE HEADER.
60    2-6) THE GLOBAL DECLS AND TYPES.
61 
62       The global decls and types are encoded in the same way.  For each
63       entry, there is word with the offset within the section to the
64       entry.
65 
66    7) THE LABEL NAMES.
67 
68       Since most labels do not have names, this section my be of zero
69       length.  It consists of an array of string table references, one
70       per label.  In the lto code, the labels are given either
71       positive or negative indexes.  the positive ones have names and
72       the negative ones do not.  The positive index can be used to
73       find the name in this array.
74 
75    9) THE CFG.
76 
77    10) Index into the local decls.  Since local decls can have local
78       decls inside them, they must be read in randomly in order to
79       properly restore them.
80 
81    11-12) GIMPLE FOR THE LOCAL DECLS AND THE FUNCTION BODY.
82 
83      The gimple consists of a set of records.
84 
85      THE FUNCTION
86 
87      At the top level of (8) is the function. It consists of five
88      pieces:
89 
90      LTO_function     - The tag.
91      eh tree          - This is all of the exception handling regions
92                         put out in a post order traversial of the
93                         tree.  Siblings are output as lists terminated
94 			by a 0.  The set of fields matches the fields
95 			defined in except.c.
96 
97      last_basic_block - in uleb128 form.
98 
99      basic blocks     - This is the set of basic blocks.
100 
101      zero             - The termination of the basic blocks.
102 
103      BASIC BLOCKS
104 
105      There are two forms of basic blocks depending on if they are
106      empty or not.
107 
108      The basic block consists of:
109 
110      LTO_bb1 or LTO_bb0 - The tag.
111 
112      bb->index          - the index in uleb128 form.
113 
114      #succs             - The number of successors un uleb128 form.
115 
116      the successors     - For each edge, a pair.  The first of the
117                           pair is the index of the successor in
118                           uleb128 form and the second are the flags in
119                           uleb128 form.
120 
121      the statements     - A gimple tree, as described above.
122                           These are only present for LTO_BB1.
123                           Following each statement is an optional
124                           exception handling record LTO_eh_region
125 			  which contains the region number (for
126 			  regions >= 0).
127 
128      zero               - This is only present for LTO_BB1 and is used
129 			  to terminate the statements and exception
130 			  regions within this block.
131 
132    12) STRINGS
133 
134      String are represented in the table as pairs, a length in ULEB128
135      form followed by the data for the string.  */
136 
137 /* The string that is the prefix on the section names we make for lto.
138    For decls the DECL_ASSEMBLER_NAME is appended to make the section
139    name for the functions and static_initializers.  For other types of
140    sections a '.' and the section type are appended.  */
141 #define LTO_SECTION_NAME_PREFIX         ".gnu.lto_"
142 
143 #define LTO_major_version 2
144 #define LTO_minor_version 2
145 
146 typedef unsigned char	lto_decl_flags_t;
147 
148 
149 /* Tags representing the various IL objects written to the bytecode file
150    (GIMPLE statements, basic blocks, EH regions, tree nodes, etc).
151 
152    NOTE, when adding new LTO tags, also update lto_tag_name.  */
153 enum LTO_tags
154 {
155   LTO_null = 0,
156 
157   /* Reserve enough entries to fit all the tree and gimple codes handled
158      by the streamer.  This guarantees that:
159 
160      1- Given a tree code C:
161      		enum LTO_tags tag == C + 1
162 
163      2- Given a gimple code C:
164 		enum LTO_tags tag == C + NUM_TREE_CODES + 1
165 
166      Conversely, to map between LTO tags and tree/gimple codes, the
167      reverse operation must be applied.  */
168   LTO_bb0 = 1 + MAX_TREE_CODES + LAST_AND_UNUSED_GIMPLE_CODE,
169   LTO_bb1,
170 
171   /* EH region holding the previous statement.  */
172   LTO_eh_region,
173 
174   /* An MD or NORMAL builtin.  Only the code and class are streamed out.  */
175   LTO_builtin_decl,
176 
177   /* Shared INTEGER_CST node.  */
178   LTO_integer_cst,
179 
180   /* Function body.  */
181   LTO_function,
182 
183   /* EH table.  */
184   LTO_eh_table,
185 
186   /* EH region types.  These mirror enum eh_region_type.  */
187   LTO_ert_cleanup,
188   LTO_ert_try,
189   LTO_ert_allowed_exceptions,
190   LTO_ert_must_not_throw,
191 
192   /* EH landing pad.  */
193   LTO_eh_landing_pad,
194 
195   /* EH try/catch node.  */
196   LTO_eh_catch,
197 
198   /* Special for global streamer. Reference to previously-streamed node.  */
199   LTO_tree_pickle_reference,
200 
201   /* References to indexable tree nodes.  These objects are stored in
202      tables that are written separately from the function bodies that
203      reference them.  This way they can be instantiated even when the
204      referencing functions aren't (e.g., during WPA) and it also allows
205      functions to be copied from one file to another without having
206      to unpickle the body first (the references are location
207      independent).
208 
209      NOTE, do not regroup these values as the grouping is exposed
210      in the range checks done in lto_input_tree.  */
211   LTO_field_decl_ref,			/* Do not change.  */
212   LTO_function_decl_ref,
213   LTO_label_decl_ref,
214   LTO_namespace_decl_ref,
215   LTO_result_decl_ref,
216   LTO_ssa_name_ref,
217   LTO_type_decl_ref,
218   LTO_type_ref,
219   LTO_const_decl_ref,
220   LTO_imported_decl_ref,
221   LTO_translation_unit_decl_ref,
222   LTO_global_decl_ref,			/* Do not change.  */
223 
224   /* This tag must always be last.  */
225   LTO_NUM_TAGS
226 };
227 
228 
229 /* Set of section types that are in an LTO file.  This list will grow
230    as the number of IPA passes grows since each IPA pass will need its
231    own section type to store its summary information.
232 
233    When adding a new section type, you must also extend the
234    LTO_SECTION_NAME array in lto-section-in.c.  */
235 enum lto_section_type
236 {
237   LTO_section_decls = 0,
238   LTO_section_function_body,
239   LTO_section_static_initializer,
240   LTO_section_symtab,
241   LTO_section_refs,
242   LTO_section_asm,
243   LTO_section_jump_functions,
244   LTO_section_ipa_pure_const,
245   LTO_section_ipa_reference,
246   LTO_section_symtab_nodes,
247   LTO_section_opts,
248   LTO_section_cgraph_opt_sum,
249   LTO_section_inline_summary,
250   LTO_section_ipcp_transform,
251   LTO_N_SECTION_TYPES		/* Must be last.  */
252 };
253 
254 /* Indices to the various function, type and symbol streams. */
255 typedef enum
256 {
257   LTO_DECL_STREAM_TYPE = 0,		/* Must be first. */
258   LTO_DECL_STREAM_FIELD_DECL,
259   LTO_DECL_STREAM_FN_DECL,
260   LTO_DECL_STREAM_VAR_DECL,
261   LTO_DECL_STREAM_TYPE_DECL,
262   LTO_DECL_STREAM_NAMESPACE_DECL,
263   LTO_DECL_STREAM_LABEL_DECL,
264   LTO_N_DECL_STREAMS
265 } lto_decl_stream_e_t;
266 
267 typedef enum ld_plugin_symbol_resolution ld_plugin_symbol_resolution_t;
268 
269 
270 /* Macro to define convenience functions for type and decl streams
271    in lto_file_decl_data.  */
272 #define DEFINE_DECL_STREAM_FUNCS(UPPER_NAME, name) \
273 static inline tree \
274 lto_file_decl_data_get_ ## name (struct lto_file_decl_data *data, \
275 				 unsigned int idx) \
276 { \
277   struct lto_in_decl_state *state = data->current_decl_state; \
278   gcc_assert (idx < state->streams[LTO_DECL_STREAM_## UPPER_NAME].size); \
279   return state->streams[LTO_DECL_STREAM_## UPPER_NAME].trees[idx]; \
280 } \
281 \
282 static inline unsigned int \
283 lto_file_decl_data_num_ ## name ## s (struct lto_file_decl_data *data) \
284 { \
285   struct lto_in_decl_state *state = data->current_decl_state; \
286   return state->streams[LTO_DECL_STREAM_## UPPER_NAME].size; \
287 }
288 
289 
290 /* Return a char pointer to the start of a data stream for an lto pass
291    or function.  The first parameter is the file data that contains
292    the information.  The second parameter is the type of information
293    to be obtained.  The third parameter is the name of the function
294    and is only used when finding a function body; otherwise it is
295    NULL.  The fourth parameter is the length of the data returned.  */
296 typedef const char* (lto_get_section_data_f) (struct lto_file_decl_data *,
297 					      enum lto_section_type,
298 					      const char *,
299 					      size_t *);
300 
301 /* Return the data found from the above call.  The first three
302    parameters are the same as above.  The fourth parameter is the data
303    itself and the fifth is the length of the data. */
304 typedef void (lto_free_section_data_f) (struct lto_file_decl_data *,
305 					enum lto_section_type,
306 					const char *,
307 					const char *,
308 					size_t);
309 
310 /* Structure used as buffer for reading an LTO file.  */
311 struct lto_input_block
312 {
313   const char *data;
314   unsigned int p;
315   unsigned int len;
316 };
317 
318 #define LTO_INIT_INPUT_BLOCK(BASE,D,P,L)   \
319   do {                                     \
320     BASE.data = D;                         \
321     BASE.p = P;                            \
322     BASE.len = L;                          \
323   } while (0)
324 
325 #define LTO_INIT_INPUT_BLOCK_PTR(BASE,D,P,L) \
326   do {                                       \
327     BASE->data = D;                          \
328     BASE->p = P;                             \
329     BASE->len = L;                           \
330   } while (0)
331 
332 
333 /* The is the first part of the record for a function or constructor
334    in the .o file.  */
335 struct lto_header
336 {
337   int16_t major_version;
338   int16_t minor_version;
339 };
340 
341 /* The header for a function body.  */
342 struct lto_function_header
343 {
344   /* The header for all types of sections. */
345   struct lto_header lto_header;
346 
347   /* Number of labels with names.  */
348   int32_t num_named_labels;
349 
350   /* Number of labels without names.  */
351   int32_t num_unnamed_labels;
352 
353   /* Size compressed or 0 if not compressed.  */
354   int32_t compressed_size;
355 
356   /* Size of names for named labels.  */
357   int32_t named_label_size;
358 
359   /* Size of the cfg.  */
360   int32_t cfg_size;
361 
362   /* Size of main gimple body of function.  */
363   int32_t main_size;
364 
365   /* Size of the string table.  */
366   int32_t string_size;
367 };
368 
369 
370 /* Structure describing a symbol section.  */
371 struct lto_decl_header
372 {
373   /* The header for all types of sections. */
374   struct lto_header lto_header;
375 
376   /* Size of region for decl state. */
377   int32_t decl_state_size;
378 
379   /* Number of nodes in globals stream.  */
380   int32_t num_nodes;
381 
382   /* Size of region for expressions, decls, types, etc. */
383   int32_t main_size;
384 
385   /* Size of the string table.  */
386   int32_t string_size;
387 };
388 
389 
390 /* Structure describing top level asm()s.  */
391 struct lto_asm_header
392 {
393   /* The header for all types of sections. */
394   struct lto_header lto_header;
395 
396   /* Size compressed or 0 if not compressed.  */
397   int32_t compressed_size;
398 
399   /* Size of region for expressions, decls, types, etc. */
400   int32_t main_size;
401 
402   /* Size of the string table.  */
403   int32_t string_size;
404 };
405 
406 
407 /* Statistics gathered during LTO, WPA and LTRANS.  */
408 struct lto_stats_d
409 {
410   unsigned HOST_WIDE_INT num_input_cgraph_nodes;
411   unsigned HOST_WIDE_INT num_output_symtab_nodes;
412   unsigned HOST_WIDE_INT num_input_files;
413   unsigned HOST_WIDE_INT num_output_files;
414   unsigned HOST_WIDE_INT num_cgraph_partitions;
415   unsigned HOST_WIDE_INT section_size[LTO_N_SECTION_TYPES];
416   unsigned HOST_WIDE_INT num_function_bodies;
417   unsigned HOST_WIDE_INT num_trees[NUM_TREE_CODES];
418   unsigned HOST_WIDE_INT num_output_il_bytes;
419   unsigned HOST_WIDE_INT num_compressed_il_bytes;
420   unsigned HOST_WIDE_INT num_input_il_bytes;
421   unsigned HOST_WIDE_INT num_uncompressed_il_bytes;
422 };
423 
424 /* Entry of LTO symtab encoder.  */
425 typedef struct
426 {
427   symtab_node node;
428   /* Is the node in this partition (i.e. ltrans of this partition will
429      be responsible for outputting it)? */
430   unsigned int in_partition:1;
431   /* Do we encode body in this partition?  */
432   unsigned int body:1;
433   /* Do we encode initializer in this partition?
434      For example the readonly variable initializers are encoded to aid
435      constant folding even if they are not in the partition.  */
436   unsigned int initializer:1;
437 } lto_encoder_entry;
438 
439 
440 /* Encoder data structure used to stream callgraph nodes.  */
441 struct lto_symtab_encoder_d
442 {
443   vec<lto_encoder_entry> nodes;
444   pointer_map_t *map;
445 };
446 
447 typedef struct lto_symtab_encoder_d *lto_symtab_encoder_t;
448 
449 /* Iterator structure for cgraph node sets.  */
450 typedef struct
451 {
452   lto_symtab_encoder_t encoder;
453   unsigned index;
454 } lto_symtab_encoder_iterator;
455 
456 
457 
458 
459 /* Mapping from indices to trees.  */
460 struct GTY(()) lto_tree_ref_table
461 {
462   /* Array of referenced trees . */
463   tree * GTY((length ("%h.size"))) trees;
464 
465   /* Size of array. */
466   unsigned int size;
467 };
468 
469 
470 /* Mapping between trees and slots in an array.  */
471 struct lto_decl_slot
472 {
473   tree t;
474   int slot_num;
475 };
476 
477 
478 /* The lto_tree_ref_encoder struct is used to encode trees into indices. */
479 
480 struct lto_tree_ref_encoder
481 {
482   htab_t tree_hash_table;	/* Maps pointers to indices. */
483   unsigned int next_index;	/* Next available index. */
484   vec<tree> trees;	/* Maps indices to pointers. */
485 };
486 
487 
488 /* Structure to hold states of input scope.  */
489 struct GTY(()) lto_in_decl_state
490 {
491   /* Array of lto_in_decl_buffers to store type and decls streams. */
492   struct lto_tree_ref_table streams[LTO_N_DECL_STREAMS];
493 
494   /* If this in-decl state is associated with a function. FN_DECL
495      point to the FUNCTION_DECL. */
496   tree fn_decl;
497 };
498 
499 typedef struct lto_in_decl_state *lto_in_decl_state_ptr;
500 
501 
502 /* The structure that holds all of the vectors of global types,
503    decls and cgraph nodes used in the serialization of this file.  */
504 struct lto_out_decl_state
505 {
506   /* The buffers contain the sets of decls of various kinds and types we have
507      seen so far and the indexes assigned to them.  */
508   struct lto_tree_ref_encoder streams[LTO_N_DECL_STREAMS];
509 
510   /* Encoder for cgraph nodes.  */
511   lto_symtab_encoder_t symtab_node_encoder;
512 
513   /* If this out-decl state belongs to a function, fn_decl points to that
514      function.  Otherwise, it is NULL. */
515   tree fn_decl;
516 };
517 
518 typedef struct lto_out_decl_state *lto_out_decl_state_ptr;
519 
520 
521 /* Compact representation of a index <-> resolution pair. Unpacked to an
522    vector later. */
523 struct res_pair
524 {
525   ld_plugin_symbol_resolution_t res;
526   unsigned index;
527 };
528 typedef struct res_pair res_pair;
529 
530 
531 /* One of these is allocated for each object file that being compiled
532    by lto.  This structure contains the tables that are needed by the
533    serialized functions and ipa passes to connect themselves to the
534    global types and decls as they are reconstituted.  */
535 struct GTY(()) lto_file_decl_data
536 {
537   /* Decl state currently used. */
538   struct lto_in_decl_state *current_decl_state;
539 
540   /* Decl state corresponding to regions outside of any functions
541      in the compilation unit. */
542   struct lto_in_decl_state *global_decl_state;
543 
544   /* Table of cgraph nodes present in this file.  */
545   lto_symtab_encoder_t GTY((skip)) symtab_node_encoder;
546 
547   /* Hash table maps lto-related section names to location in file.  */
548   htab_t GTY((param_is (struct lto_in_decl_state))) function_decl_states;
549 
550   /* The .o file that these offsets relate to.  */
551   const char *GTY((skip)) file_name;
552 
553   /* Hash table maps lto-related section names to location in file.  */
554   htab_t GTY((skip)) section_hash_table;
555 
556   /* Hash new name of renamed global declaration to its original name.  */
557   htab_t GTY((skip)) renaming_hash_table;
558 
559   /* Linked list used temporarily in reader */
560   struct lto_file_decl_data *next;
561 
562   /* Sub ID for merged objects. */
563   unsigned HOST_WIDE_INT id;
564 
565   /* Symbol resolutions for this file */
566   vec<res_pair>  GTY((skip)) respairs;
567   unsigned max_index;
568 
569   struct gcov_ctr_summary GTY((skip)) profile_info;
570 };
571 
572 typedef struct lto_file_decl_data *lto_file_decl_data_ptr;
573 
574 struct lto_char_ptr_base
575 {
576   char *ptr;
577 };
578 
579 /* An incore byte stream to buffer the various parts of the function.
580    The entire structure should be zeroed when created.  The record
581    consists of a set of blocks.  The first sizeof (ptr) bytes are used
582    as a chain, and the rest store the bytes to be written.  */
583 struct lto_output_stream
584 {
585   /* The pointer to the first block in the stream.  */
586   struct lto_char_ptr_base * first_block;
587 
588   /* The pointer to the last and current block in the stream.  */
589   struct lto_char_ptr_base * current_block;
590 
591   /* The pointer to where the next char should be written.  */
592   char * current_pointer;
593 
594   /* The number of characters left in the current block.  */
595   unsigned int left_in_block;
596 
597   /* The block size of the last block allocated.  */
598   unsigned int block_size;
599 
600   /* The total number of characters written.  */
601   unsigned int total_size;
602 };
603 
604 /* The is the first part of the record in an LTO file for many of the
605    IPA passes.  */
606 struct lto_simple_header
607 {
608   /* The header for all types of sections. */
609   struct lto_header lto_header;
610 
611   /* Size of main gimple body of function.  */
612   int32_t main_size;
613 
614   /* Size of main stream when compressed.  */
615   int32_t compressed_size;
616 };
617 
618 /* A simple output block.  This can be used for simple IPA passes that
619    do not need more than one stream.  */
620 struct lto_simple_output_block
621 {
622   enum lto_section_type section_type;
623   struct lto_out_decl_state *decl_state;
624 
625   /* The stream that the main tree codes are written to.  */
626   struct lto_output_stream *main_stream;
627 };
628 
629 /* Data structure holding all the data and descriptors used when writing
630    an LTO file.  */
631 struct output_block
632 {
633   enum lto_section_type section_type;
634   struct lto_out_decl_state *decl_state;
635 
636   /* The stream that the main tree codes are written to.  */
637   struct lto_output_stream *main_stream;
638 
639   /* The stream that contains the string table.  */
640   struct lto_output_stream *string_stream;
641 
642   /* The stream that contains the cfg.  */
643   struct lto_output_stream *cfg_stream;
644 
645   /* The hash table that contains the set of strings we have seen so
646      far and the indexes assigned to them.  */
647   htab_t string_hash_table;
648 
649   /* The current cgraph_node that we are currently serializing.  Null
650      if we are serializing something else.  */
651   struct cgraph_node *cgraph_node;
652 
653   /* These are the last file and line that were seen in the stream.
654      If the current node differs from these, it needs to insert
655      something into the stream and fix these up.  */
656   const char *current_file;
657   int current_line;
658   int current_col;
659 
660   /* True if writing globals and types.  */
661   bool global;
662 
663   /* Cache of nodes written in this section.  */
664   struct streamer_tree_cache_d *writer_cache;
665 
666   /* All data persistent across whole duration of output block
667      can go here.  */
668   struct obstack obstack;
669 };
670 
671 
672 /* Data and descriptors used when reading from an LTO file.  */
673 struct data_in
674 {
675   /* The global decls and types.  */
676   struct lto_file_decl_data *file_data;
677 
678   /* All of the labels.  */
679   tree *labels;
680 
681   /* The string table.  */
682   const char *strings;
683 
684   /* The length of the string table.  */
685   unsigned int strings_len;
686 
687   /* Number of named labels.  Used to find the index of unnamed labels
688      since they share space with the named labels.  */
689   unsigned int num_named_labels;
690 
691   /* Number of unnamed labels.  */
692   unsigned int num_unnamed_labels;
693 
694   /* Maps each reference number to the resolution done by the linker. */
695   vec<ld_plugin_symbol_resolution_t> globals_resolution;
696 
697   /* Cache of pickled nodes.  */
698   struct streamer_tree_cache_d *reader_cache;
699 };
700 
701 
702 /* In lto-section-in.c  */
703 extern struct lto_input_block * lto_create_simple_input_block (
704 			       struct lto_file_decl_data *,
705 			       enum lto_section_type, const char **, size_t *);
706 extern void
707 lto_destroy_simple_input_block (struct lto_file_decl_data *,
708 				enum lto_section_type,
709 				struct lto_input_block *, const char *, size_t);
710 extern void lto_set_in_hooks (struct lto_file_decl_data **,
711 			      lto_get_section_data_f *,
712 			      lto_free_section_data_f *);
713 extern struct lto_file_decl_data **lto_get_file_decl_data (void);
714 extern const char *lto_get_section_data (struct lto_file_decl_data *,
715 					 enum lto_section_type,
716 					 const char *, size_t *);
717 extern void lto_free_section_data (struct lto_file_decl_data *,
718 				   enum lto_section_type,
719 				   const char *, const char *, size_t);
720 extern htab_t lto_create_renaming_table (void);
721 extern void lto_record_renamed_decl (struct lto_file_decl_data *,
722 				     const char *, const char *);
723 extern const char *lto_get_decl_name_mapping (struct lto_file_decl_data *,
724 					      const char *);
725 extern struct lto_in_decl_state *lto_new_in_decl_state (void);
726 extern void lto_delete_in_decl_state (struct lto_in_decl_state *);
727 extern hashval_t lto_hash_in_decl_state (const void *);
728 extern int lto_eq_in_decl_state (const void *, const void *);
729 extern struct lto_in_decl_state *lto_get_function_in_decl_state (
730 				      struct lto_file_decl_data *, tree);
731 extern void lto_section_overrun (struct lto_input_block *) ATTRIBUTE_NORETURN;
732 extern void lto_value_range_error (const char *,
733 				   HOST_WIDE_INT, HOST_WIDE_INT,
734 				   HOST_WIDE_INT) ATTRIBUTE_NORETURN;
735 
736 /* In lto-section-out.c  */
737 extern hashval_t lto_hash_decl_slot_node (const void *);
738 extern int lto_eq_decl_slot_node (const void *, const void *);
739 extern hashval_t lto_hash_type_slot_node (const void *);
740 extern int lto_eq_type_slot_node (const void *, const void *);
741 extern void lto_begin_section (const char *, bool);
742 extern void lto_end_section (void);
743 extern void lto_write_stream (struct lto_output_stream *);
744 extern void lto_output_data_stream (struct lto_output_stream *, const void *,
745 				    size_t);
746 extern bool lto_output_decl_index (struct lto_output_stream *,
747 			    struct lto_tree_ref_encoder *,
748 			    tree, unsigned int *);
749 extern void lto_output_field_decl_index (struct lto_out_decl_state *,
750 				  struct lto_output_stream *, tree);
751 extern void lto_output_fn_decl_index (struct lto_out_decl_state *,
752 			       struct lto_output_stream *, tree);
753 extern void lto_output_namespace_decl_index (struct lto_out_decl_state *,
754 				      struct lto_output_stream *, tree);
755 extern void lto_output_var_decl_index (struct lto_out_decl_state *,
756 				struct lto_output_stream *, tree);
757 extern void lto_output_type_decl_index (struct lto_out_decl_state *,
758 				 struct lto_output_stream *, tree);
759 extern void lto_output_type_ref_index (struct lto_out_decl_state *,
760 				struct lto_output_stream *, tree);
761 extern struct lto_simple_output_block *lto_create_simple_output_block (
762 				enum lto_section_type);
763 extern void lto_destroy_simple_output_block (struct lto_simple_output_block *);
764 extern struct lto_out_decl_state *lto_new_out_decl_state (void);
765 extern void lto_delete_out_decl_state (struct lto_out_decl_state *);
766 extern struct lto_out_decl_state *lto_get_out_decl_state (void);
767 extern void lto_push_out_decl_state (struct lto_out_decl_state *);
768 extern struct lto_out_decl_state *lto_pop_out_decl_state (void);
769 extern void lto_record_function_out_decl_state (tree,
770 						struct lto_out_decl_state *);
771 extern void lto_append_block (struct lto_output_stream *);
772 
773 
774 /* In lto-streamer.c.  */
775 extern const char *lto_tag_name (enum LTO_tags);
776 extern bitmap lto_bitmap_alloc (void);
777 extern void lto_bitmap_free (bitmap);
778 extern char *lto_get_section_name (int, const char *, struct lto_file_decl_data *);
779 extern void print_lto_report (const char *);
780 extern void lto_streamer_init (void);
781 extern bool gate_lto_out (void);
782 #ifdef LTO_STREAMER_DEBUG
783 extern void lto_orig_address_map (tree, intptr_t);
784 extern intptr_t lto_orig_address_get (tree);
785 extern void lto_orig_address_remove (tree);
786 #endif
787 extern void lto_check_version (int, int);
788 extern void lto_streamer_hooks_init (void);
789 
790 /* In lto-streamer-in.c */
791 extern void lto_input_cgraph (struct lto_file_decl_data *, const char *);
792 extern void lto_reader_init (void);
793 extern void lto_input_function_body (struct lto_file_decl_data *, tree,
794 				     const char *);
795 extern void lto_input_constructors_and_inits (struct lto_file_decl_data *,
796 					      const char *);
797 extern void lto_input_toplevel_asms (struct lto_file_decl_data *, int);
798 extern struct data_in *lto_data_in_create (struct lto_file_decl_data *,
799 				    const char *, unsigned,
800 				    vec<ld_plugin_symbol_resolution_t> );
801 extern void lto_data_in_delete (struct data_in *);
802 extern void lto_input_data_block (struct lto_input_block *, void *, size_t);
803 location_t lto_input_location (struct bitpack_d *, struct data_in *);
804 tree lto_input_tree_ref (struct lto_input_block *, struct data_in *,
805 			 struct function *, enum LTO_tags);
806 void lto_tag_check_set (enum LTO_tags, int, ...);
807 void lto_init_eh (void);
808 tree lto_input_tree (struct lto_input_block *, struct data_in *);
809 
810 
811 /* In lto-streamer-out.c  */
812 extern void lto_register_decl_definition (tree, struct lto_file_decl_data *);
813 extern struct output_block *create_output_block (enum lto_section_type);
814 extern void destroy_output_block (struct output_block *);
815 extern void lto_output_tree (struct output_block *, tree, bool, bool);
816 extern void lto_output_toplevel_asms (void);
817 extern void produce_asm (struct output_block *ob, tree fn);
818 void lto_output_decl_state_streams (struct output_block *,
819 				    struct lto_out_decl_state *);
820 void lto_output_decl_state_refs (struct output_block *,
821 			         struct lto_output_stream *,
822 			         struct lto_out_decl_state *);
823 void lto_output_location (struct output_block *, struct bitpack_d *, location_t);
824 
825 
826 /* In lto-cgraph.c  */
827 lto_symtab_encoder_t lto_symtab_encoder_new (bool);
828 int lto_symtab_encoder_encode (lto_symtab_encoder_t, symtab_node);
829 void lto_symtab_encoder_delete (lto_symtab_encoder_t);
830 bool lto_symtab_encoder_delete_node (lto_symtab_encoder_t, symtab_node);
831 bool lto_symtab_encoder_encode_body_p (lto_symtab_encoder_t,
832 				       struct cgraph_node *);
833 bool lto_symtab_encoder_in_partition_p (lto_symtab_encoder_t,
834 					symtab_node);
835 void lto_set_symtab_encoder_in_partition (lto_symtab_encoder_t,
836 					  symtab_node);
837 
838 bool lto_symtab_encoder_encode_initializer_p (lto_symtab_encoder_t,
839 					      struct varpool_node *);
840 void output_symtab (void);
841 void input_symtab (void);
842 bool referenced_from_other_partition_p (struct ipa_ref_list *,
843 				        lto_symtab_encoder_t);
844 bool reachable_from_other_partition_p (struct cgraph_node *,
845 				       lto_symtab_encoder_t);
846 bool referenced_from_this_partition_p (struct ipa_ref_list *,
847 					lto_symtab_encoder_t);
848 bool reachable_from_this_partition_p (struct cgraph_node *,
849 				      lto_symtab_encoder_t);
850 lto_symtab_encoder_t compute_ltrans_boundary (lto_symtab_encoder_t encoder);
851 
852 
853 /* In lto-symtab.c.  */
854 extern void lto_symtab_merge_decls (void);
855 extern void lto_symtab_merge_cgraph_nodes (void);
856 extern tree lto_symtab_prevailing_decl (tree decl);
857 extern GTY(()) vec<tree, va_gc> *lto_global_var_decls;
858 
859 
860 /* In lto-opts.c.  */
861 extern void lto_write_options (void);
862 
863 
864 /* Statistics gathered during LTO, WPA and LTRANS.  */
865 extern struct lto_stats_d lto_stats;
866 
867 /* Section names corresponding to the values of enum lto_section_type.  */
868 extern const char *lto_section_name[];
869 
870 /* Holds all the out decl states of functions output so far in the
871    current output file.  */
872 extern vec<lto_out_decl_state_ptr> lto_function_decl_states;
873 
874 /* Return true if LTO tag TAG corresponds to a tree code.  */
875 static inline bool
lto_tag_is_tree_code_p(enum LTO_tags tag)876 lto_tag_is_tree_code_p (enum LTO_tags tag)
877 {
878   return tag > LTO_null && (unsigned) tag <= MAX_TREE_CODES;
879 }
880 
881 
882 /* Return true if LTO tag TAG corresponds to a gimple code.  */
883 static inline bool
lto_tag_is_gimple_code_p(enum LTO_tags tag)884 lto_tag_is_gimple_code_p (enum LTO_tags tag)
885 {
886   return (unsigned) tag >= NUM_TREE_CODES + 1
887 	 && (unsigned) tag < 1 + NUM_TREE_CODES + LAST_AND_UNUSED_GIMPLE_CODE;
888 }
889 
890 
891 /* Return the LTO tag corresponding to gimple code CODE.  See enum
892    LTO_tags for details on the conversion.  */
893 static inline enum LTO_tags
lto_gimple_code_to_tag(enum gimple_code code)894 lto_gimple_code_to_tag (enum gimple_code code)
895 {
896   return (enum LTO_tags) ((unsigned) code + NUM_TREE_CODES + 1);
897 }
898 
899 
900 /* Return the GIMPLE code corresponding to TAG.  See enum LTO_tags for
901    details on the conversion.  */
902 static inline enum gimple_code
lto_tag_to_gimple_code(enum LTO_tags tag)903 lto_tag_to_gimple_code (enum LTO_tags tag)
904 {
905   gcc_assert (lto_tag_is_gimple_code_p (tag));
906   return (enum gimple_code) ((unsigned) tag - NUM_TREE_CODES - 1);
907 }
908 
909 
910 /* Return the LTO tag corresponding to tree code CODE.  See enum
911    LTO_tags for details on the conversion.  */
912 static inline enum LTO_tags
lto_tree_code_to_tag(enum tree_code code)913 lto_tree_code_to_tag (enum tree_code code)
914 {
915   return (enum LTO_tags) ((unsigned) code + 1);
916 }
917 
918 
919 /* Return the tree code corresponding to TAG.  See enum LTO_tags for
920    details on the conversion.  */
921 static inline enum tree_code
lto_tag_to_tree_code(enum LTO_tags tag)922 lto_tag_to_tree_code (enum LTO_tags tag)
923 {
924   gcc_assert (lto_tag_is_tree_code_p (tag));
925   return (enum tree_code) ((unsigned) tag - 1);
926 }
927 
928 /* Check that tag ACTUAL == EXPECTED.  */
929 static inline void
lto_tag_check(enum LTO_tags actual,enum LTO_tags expected)930 lto_tag_check (enum LTO_tags actual, enum LTO_tags expected)
931 {
932   if (actual != expected)
933     internal_error ("bytecode stream: expected tag %s instead of %s",
934 		    lto_tag_name (expected), lto_tag_name (actual));
935 }
936 
937 /* Check that tag ACTUAL is in the range [TAG1, TAG2].  */
938 static inline void
lto_tag_check_range(enum LTO_tags actual,enum LTO_tags tag1,enum LTO_tags tag2)939 lto_tag_check_range (enum LTO_tags actual, enum LTO_tags tag1,
940 		     enum LTO_tags tag2)
941 {
942   if (actual < tag1 || actual > tag2)
943     internal_error ("bytecode stream: tag %s is not in the expected range "
944 		    "[%s, %s]",
945 		    lto_tag_name (actual),
946 		    lto_tag_name (tag1),
947 		    lto_tag_name (tag2));
948 }
949 
950 /* Initialize an lto_out_decl_buffer ENCODER.  */
951 static inline void
lto_init_tree_ref_encoder(struct lto_tree_ref_encoder * encoder,htab_hash hash_fn,htab_eq eq_fn)952 lto_init_tree_ref_encoder (struct lto_tree_ref_encoder *encoder,
953 			   htab_hash hash_fn, htab_eq eq_fn)
954 {
955   encoder->tree_hash_table = htab_create (37, hash_fn, eq_fn, free);
956   encoder->next_index = 0;
957   encoder->trees.create (0);
958 }
959 
960 
961 /* Destroy an lto_tree_ref_encoder ENCODER by freeing its contents.  The
962    memory used by ENCODER is not freed by this function.  */
963 static inline void
lto_destroy_tree_ref_encoder(struct lto_tree_ref_encoder * encoder)964 lto_destroy_tree_ref_encoder (struct lto_tree_ref_encoder *encoder)
965 {
966   /* Hash table may be delete already.  */
967   if (encoder->tree_hash_table)
968     htab_delete (encoder->tree_hash_table);
969   encoder->trees.release ();
970 }
971 
972 /* Return the number of trees encoded in ENCODER. */
973 static inline unsigned int
lto_tree_ref_encoder_size(struct lto_tree_ref_encoder * encoder)974 lto_tree_ref_encoder_size (struct lto_tree_ref_encoder *encoder)
975 {
976   return encoder->trees.length ();
977 }
978 
979 /* Return the IDX-th tree in ENCODER. */
980 static inline tree
lto_tree_ref_encoder_get_tree(struct lto_tree_ref_encoder * encoder,unsigned int idx)981 lto_tree_ref_encoder_get_tree (struct lto_tree_ref_encoder *encoder,
982 			       unsigned int idx)
983 {
984   return encoder->trees[idx];
985 }
986 
987 
988 /* Return true if LABEL should be emitted in the global context.  */
989 static inline bool
emit_label_in_global_context_p(tree label)990 emit_label_in_global_context_p (tree label)
991 {
992   return DECL_NONLOCAL (label) || FORCED_LABEL (label);
993 }
994 
995 /* Return number of encoded nodes in ENCODER.  */
996 static inline int
lto_symtab_encoder_size(lto_symtab_encoder_t encoder)997 lto_symtab_encoder_size (lto_symtab_encoder_t encoder)
998 {
999   return encoder->nodes.length ();
1000 }
1001 
1002 /* Value used to represent failure of lto_symtab_encoder_lookup.  */
1003 #define LCC_NOT_FOUND	(-1)
1004 
1005 /* Look up NODE in encoder.  Return NODE's reference if it has been encoded
1006    or LCC_NOT_FOUND if it is not there.  */
1007 
1008 static inline int
lto_symtab_encoder_lookup(lto_symtab_encoder_t encoder,symtab_node node)1009 lto_symtab_encoder_lookup (lto_symtab_encoder_t encoder,
1010 			   symtab_node node)
1011 {
1012   void **slot = pointer_map_contains (encoder->map, node);
1013   return (slot && *slot ? (size_t) *(slot) - 1 : LCC_NOT_FOUND);
1014 }
1015 
1016 /* Return true if iterator LSE points to nothing.  */
1017 static inline bool
lsei_end_p(lto_symtab_encoder_iterator lsei)1018 lsei_end_p (lto_symtab_encoder_iterator lsei)
1019 {
1020   return lsei.index >= (unsigned)lto_symtab_encoder_size (lsei.encoder);
1021 }
1022 
1023 /* Advance iterator LSE.  */
1024 static inline void
lsei_next(lto_symtab_encoder_iterator * lsei)1025 lsei_next (lto_symtab_encoder_iterator *lsei)
1026 {
1027   lsei->index++;
1028 }
1029 
1030 /* Return the node pointed to by LSI.  */
1031 static inline symtab_node
lsei_node(lto_symtab_encoder_iterator lsei)1032 lsei_node (lto_symtab_encoder_iterator lsei)
1033 {
1034   return lsei.encoder->nodes[lsei.index].node;
1035 }
1036 
1037 /* Return the node pointed to by LSI.  */
1038 static inline struct cgraph_node *
lsei_cgraph_node(lto_symtab_encoder_iterator lsei)1039 lsei_cgraph_node (lto_symtab_encoder_iterator lsei)
1040 {
1041   return cgraph (lsei.encoder->nodes[lsei.index].node);
1042 }
1043 
1044 /* Return the node pointed to by LSI.  */
1045 static inline struct varpool_node *
lsei_varpool_node(lto_symtab_encoder_iterator lsei)1046 lsei_varpool_node (lto_symtab_encoder_iterator lsei)
1047 {
1048   return varpool (lsei.encoder->nodes[lsei.index].node);
1049 }
1050 
1051 /* Return the cgraph node corresponding to REF using ENCODER.  */
1052 
1053 static inline symtab_node
lto_symtab_encoder_deref(lto_symtab_encoder_t encoder,int ref)1054 lto_symtab_encoder_deref (lto_symtab_encoder_t encoder, int ref)
1055 {
1056   if (ref == LCC_NOT_FOUND)
1057     return NULL;
1058 
1059   return encoder->nodes[ref].node;
1060 }
1061 
1062 /* Return an iterator to the first node in LSI.  */
1063 static inline lto_symtab_encoder_iterator
lsei_start(lto_symtab_encoder_t encoder)1064 lsei_start (lto_symtab_encoder_t encoder)
1065 {
1066   lto_symtab_encoder_iterator lsei;
1067 
1068   lsei.encoder = encoder;
1069   lsei.index = 0;
1070   return lsei;
1071 }
1072 
1073 /* Advance iterator LSE.  */
1074 static inline void
lsei_next_in_partition(lto_symtab_encoder_iterator * lsei)1075 lsei_next_in_partition (lto_symtab_encoder_iterator *lsei)
1076 {
1077   lsei_next (lsei);
1078   while (!lsei_end_p (*lsei)
1079 	 && !lto_symtab_encoder_in_partition_p (lsei->encoder, lsei_node (*lsei)))
1080     lsei_next (lsei);
1081 }
1082 
1083 /* Return an iterator to the first node in LSI.  */
1084 static inline lto_symtab_encoder_iterator
lsei_start_in_partition(lto_symtab_encoder_t encoder)1085 lsei_start_in_partition (lto_symtab_encoder_t encoder)
1086 {
1087   lto_symtab_encoder_iterator lsei = lsei_start (encoder);
1088 
1089   if (lsei_end_p (lsei))
1090     return lsei;
1091   if (!lto_symtab_encoder_in_partition_p (encoder, lsei_node (lsei)))
1092     lsei_next_in_partition (&lsei);
1093 
1094   return lsei;
1095 }
1096 
1097 /* Advance iterator LSE.  */
1098 static inline void
lsei_next_function_in_partition(lto_symtab_encoder_iterator * lsei)1099 lsei_next_function_in_partition (lto_symtab_encoder_iterator *lsei)
1100 {
1101   lsei_next (lsei);
1102   while (!lsei_end_p (*lsei)
1103 	 && (!is_a <cgraph_node> (lsei_node (*lsei))
1104 	     || !lto_symtab_encoder_in_partition_p (lsei->encoder, lsei_node (*lsei))))
1105     lsei_next (lsei);
1106 }
1107 
1108 /* Return an iterator to the first node in LSI.  */
1109 static inline lto_symtab_encoder_iterator
lsei_start_function_in_partition(lto_symtab_encoder_t encoder)1110 lsei_start_function_in_partition (lto_symtab_encoder_t encoder)
1111 {
1112   lto_symtab_encoder_iterator lsei = lsei_start (encoder);
1113 
1114   if (lsei_end_p (lsei))
1115     return lsei;
1116   if (!is_a <cgraph_node> (lsei_node (lsei))
1117       || !lto_symtab_encoder_in_partition_p (encoder, lsei_node (lsei)))
1118     lsei_next_function_in_partition (&lsei);
1119 
1120   return lsei;
1121 }
1122 
1123 /* Advance iterator LSE.  */
1124 static inline void
lsei_next_variable_in_partition(lto_symtab_encoder_iterator * lsei)1125 lsei_next_variable_in_partition (lto_symtab_encoder_iterator *lsei)
1126 {
1127   lsei_next (lsei);
1128   while (!lsei_end_p (*lsei)
1129 	 && (!is_a <varpool_node> (lsei_node (*lsei))
1130 	     || !lto_symtab_encoder_in_partition_p (lsei->encoder, lsei_node (*lsei))))
1131     lsei_next (lsei);
1132 }
1133 
1134 /* Return an iterator to the first node in LSI.  */
1135 static inline lto_symtab_encoder_iterator
lsei_start_variable_in_partition(lto_symtab_encoder_t encoder)1136 lsei_start_variable_in_partition (lto_symtab_encoder_t encoder)
1137 {
1138   lto_symtab_encoder_iterator lsei = lsei_start (encoder);
1139 
1140   if (lsei_end_p (lsei))
1141     return lsei;
1142   if (!is_a <varpool_node> (lsei_node (lsei))
1143       || !lto_symtab_encoder_in_partition_p (encoder, lsei_node (lsei)))
1144     lsei_next_variable_in_partition (&lsei);
1145 
1146   return lsei;
1147 }
1148 
1149 DEFINE_DECL_STREAM_FUNCS (TYPE, type)
1150 DEFINE_DECL_STREAM_FUNCS (FIELD_DECL, field_decl)
1151 DEFINE_DECL_STREAM_FUNCS (FN_DECL, fn_decl)
1152 DEFINE_DECL_STREAM_FUNCS (VAR_DECL, var_decl)
1153 DEFINE_DECL_STREAM_FUNCS (TYPE_DECL, type_decl)
1154 DEFINE_DECL_STREAM_FUNCS (NAMESPACE_DECL, namespace_decl)
1155 DEFINE_DECL_STREAM_FUNCS (LABEL_DECL, label_decl)
1156 
1157 #endif /* GCC_LTO_STREAMER_H  */
1158