Home | History | Annotate | Line # | Download | only in gcc
lto-streamer.h revision 1.3
      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 (at) 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  */
   1158