Update change log
[platform/upstream/gcc48.git] / gcc / lto-streamer.h
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 *
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 *
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
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
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
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
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
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
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
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
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  */