Home | History | Annotate | Line # | Download | only in gcc
lto-streamer.h revision 1.1
      1  1.1  mrg /* Data structures and declarations used for reading and writing
      2  1.1  mrg    GIMPLE to a file stream.
      3  1.1  mrg 
      4  1.1  mrg    Copyright (C) 2009, 2010 Free Software Foundation, Inc.
      5  1.1  mrg    Contributed by Doug Kwan <dougkwan (at) google.com>
      6  1.1  mrg 
      7  1.1  mrg This file is part of GCC.
      8  1.1  mrg 
      9  1.1  mrg GCC is free software; you can redistribute it and/or modify it under
     10  1.1  mrg the terms of the GNU General Public License as published by the Free
     11  1.1  mrg Software Foundation; either version 3, or (at your option) any later
     12  1.1  mrg version.
     13  1.1  mrg 
     14  1.1  mrg GCC is distributed in the hope that it will be useful, but WITHOUT ANY
     15  1.1  mrg WARRANTY; without even the implied warranty of MERCHANTABILITY or
     16  1.1  mrg FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     17  1.1  mrg for more details.
     18  1.1  mrg 
     19  1.1  mrg You should have received a copy of the GNU General Public License
     20  1.1  mrg along with GCC; see the file COPYING3.  If not see
     21  1.1  mrg <http://www.gnu.org/licenses/>.  */
     22  1.1  mrg 
     23  1.1  mrg #ifndef GCC_LTO_STREAMER_H
     24  1.1  mrg #define GCC_LTO_STREAMER_H
     25  1.1  mrg 
     26  1.1  mrg #include "plugin-api.h"
     27  1.1  mrg #include "tree.h"
     28  1.1  mrg #include "gimple.h"
     29  1.1  mrg #include "target.h"
     30  1.1  mrg #include "cgraph.h"
     31  1.1  mrg #include "vec.h"
     32  1.1  mrg #include "vecprim.h"
     33  1.1  mrg 
     34  1.1  mrg /* Define when debugging the LTO streamer.  This causes the writer
     35  1.1  mrg    to output the numeric value for the memory address of the tree node
     36  1.1  mrg    being emitted.  When debugging a problem in the reader, check the
     37  1.1  mrg    original address that the writer was emitting using lto_orig_address_get.
     38  1.1  mrg    With this value, set a breakpoint in the writer (e.g., lto_output_tree)
     39  1.1  mrg    to trace how the faulty node is being emitted.  */
     40  1.1  mrg /* #define LTO_STREAMER_DEBUG	1  */
     41  1.1  mrg 
     42  1.1  mrg /* The encoding for a function consists of the following sections:
     43  1.1  mrg 
     44  1.1  mrg    1)    The header.
     45  1.1  mrg    2)    FIELD_DECLS.
     46  1.1  mrg    3)    FUNCTION_DECLS.
     47  1.1  mrg    4)    global VAR_DECLS.
     48  1.1  mrg    5)    type_decls
     49  1.1  mrg    6)    types.
     50  1.1  mrg    7)    Names for the labels that have names
     51  1.1  mrg    8)    The SSA names.
     52  1.1  mrg    9)    The control flow graph.
     53  1.1  mrg    10-11)Gimple for local decls.
     54  1.1  mrg    12)   Gimple for the function.
     55  1.1  mrg    13)   Strings.
     56  1.1  mrg 
     57  1.1  mrg    1) THE HEADER.
     58  1.1  mrg    2-6) THE GLOBAL DECLS AND TYPES.
     59  1.1  mrg 
     60  1.1  mrg       The global decls and types are encoded in the same way.  For each
     61  1.1  mrg       entry, there is word with the offset within the section to the
     62  1.1  mrg       entry.
     63  1.1  mrg 
     64  1.1  mrg    7) THE LABEL NAMES.
     65  1.1  mrg 
     66  1.1  mrg       Since most labels do not have names, this section my be of zero
     67  1.1  mrg       length.  It consists of an array of string table references, one
     68  1.1  mrg       per label.  In the lto code, the labels are given either
     69  1.1  mrg       positive or negative indexes.  the positive ones have names and
     70  1.1  mrg       the negative ones do not.  The positive index can be used to
     71  1.1  mrg       find the name in this array.
     72  1.1  mrg 
     73  1.1  mrg    9) THE CFG.
     74  1.1  mrg 
     75  1.1  mrg    10) Index into the local decls.  Since local decls can have local
     76  1.1  mrg       decls inside them, they must be read in randomly in order to
     77  1.1  mrg       properly restore them.
     78  1.1  mrg 
     79  1.1  mrg    11-12) GIMPLE FOR THE LOCAL DECLS AND THE FUNCTION BODY.
     80  1.1  mrg 
     81  1.1  mrg      The gimple consists of a set of records.
     82  1.1  mrg 
     83  1.1  mrg      THE FUNCTION
     84  1.1  mrg 
     85  1.1  mrg      At the top level of (8) is the function. It consists of five
     86  1.1  mrg      pieces:
     87  1.1  mrg 
     88  1.1  mrg      LTO_function     - The tag.
     89  1.1  mrg      eh tree          - This is all of the exception handling regions
     90  1.1  mrg                         put out in a post order traversial of the
     91  1.1  mrg                         tree.  Siblings are output as lists terminated
     92  1.1  mrg 			by a 0.  The set of fields matches the fields
     93  1.1  mrg 			defined in except.c.
     94  1.1  mrg 
     95  1.1  mrg      last_basic_block - in uleb128 form.
     96  1.1  mrg 
     97  1.1  mrg      basic blocks     - This is the set of basic blocks.
     98  1.1  mrg 
     99  1.1  mrg      zero             - The termination of the basic blocks.
    100  1.1  mrg 
    101  1.1  mrg      BASIC BLOCKS
    102  1.1  mrg 
    103  1.1  mrg      There are two forms of basic blocks depending on if they are
    104  1.1  mrg      empty or not.
    105  1.1  mrg 
    106  1.1  mrg      The basic block consists of:
    107  1.1  mrg 
    108  1.1  mrg      LTO_bb1 or LTO_bb0 - The tag.
    109  1.1  mrg 
    110  1.1  mrg      bb->index          - the index in uleb128 form.
    111  1.1  mrg 
    112  1.1  mrg      #succs             - The number of successors un uleb128 form.
    113  1.1  mrg 
    114  1.1  mrg      the successors     - For each edge, a pair.  The first of the
    115  1.1  mrg                           pair is the index of the successor in
    116  1.1  mrg                           uleb128 form and the second are the flags in
    117  1.1  mrg                           uleb128 form.
    118  1.1  mrg 
    119  1.1  mrg      the statements     - A gimple tree, as described above.
    120  1.1  mrg                           These are only present for LTO_BB1.
    121  1.1  mrg                           Following each statement is an optional
    122  1.1  mrg                           exception handling record LTO_eh_region
    123  1.1  mrg 			  which contains the region number (for
    124  1.1  mrg 			  regions >= 0).
    125  1.1  mrg 
    126  1.1  mrg      zero               - This is only present for LTO_BB1 and is used
    127  1.1  mrg 			  to terminate the statements and exception
    128  1.1  mrg 			  regions within this block.
    129  1.1  mrg 
    130  1.1  mrg    12) STRINGS
    131  1.1  mrg 
    132  1.1  mrg      String are represented in the table as pairs, a length in ULEB128
    133  1.1  mrg      form followed by the data for the string.  */
    134  1.1  mrg 
    135  1.1  mrg /* The string that is the prefix on the section names we make for lto.
    136  1.1  mrg    For decls the DECL_ASSEMBLER_NAME is appended to make the section
    137  1.1  mrg    name for the functions and static_initializers.  For other types of
    138  1.1  mrg    sections a '.' and the section type are appended.  */
    139  1.1  mrg #define LTO_SECTION_NAME_PREFIX         ".gnu.lto_"
    140  1.1  mrg 
    141  1.1  mrg #define LTO_major_version 1
    142  1.1  mrg #define LTO_minor_version 0
    143  1.1  mrg 
    144  1.1  mrg typedef unsigned char	lto_decl_flags_t;
    145  1.1  mrg 
    146  1.1  mrg 
    147  1.1  mrg /* Data structures used to pack values and bitflags into a vector of
    148  1.1  mrg    words.  Used to stream values of a fixed number of bits in a space
    149  1.1  mrg    efficient way.  */
    150  1.1  mrg static unsigned const BITS_PER_BITPACK_WORD = HOST_BITS_PER_WIDE_INT;
    151  1.1  mrg 
    152  1.1  mrg typedef unsigned HOST_WIDE_INT bitpack_word_t;
    153  1.1  mrg DEF_VEC_I(bitpack_word_t);
    154  1.1  mrg DEF_VEC_ALLOC_I(bitpack_word_t, heap);
    155  1.1  mrg 
    156  1.1  mrg struct bitpack_d
    157  1.1  mrg {
    158  1.1  mrg   /* Total number of bits packed/unpacked so far.  */
    159  1.1  mrg   size_t num_bits;
    160  1.1  mrg 
    161  1.1  mrg   /* Values are stored contiguously, so there may be internal
    162  1.1  mrg      fragmentation (words with unused bits).  Therefore, we need to
    163  1.1  mrg      keep track of the first available bit in the last word of the
    164  1.1  mrg      bitpack.  */
    165  1.1  mrg   size_t first_unused_bit;
    166  1.1  mrg 
    167  1.1  mrg   /* Vector of words holding the packed values.  */
    168  1.1  mrg   VEC(bitpack_word_t, heap) *values;
    169  1.1  mrg };
    170  1.1  mrg 
    171  1.1  mrg /* Tags representing the various IL objects written to the bytecode file
    172  1.1  mrg    (GIMPLE statements, basic blocks, EH regions, tree nodes, etc).
    173  1.1  mrg 
    174  1.1  mrg    NOTE, when adding new LTO tags, also update lto_tag_name.  */
    175  1.1  mrg enum LTO_tags
    176  1.1  mrg {
    177  1.1  mrg   LTO_null = 0,
    178  1.1  mrg 
    179  1.1  mrg   /* Reserve enough entries to fit all the tree and gimple codes handled
    180  1.1  mrg      by the streamer.  This guarantees that:
    181  1.1  mrg 
    182  1.1  mrg      1- Given a tree code C:
    183  1.1  mrg      		enum LTO_tags tag == C + 1
    184  1.1  mrg 
    185  1.1  mrg      2- Given a gimple code C:
    186  1.1  mrg 		enum LTO_tags tag == C + NUM_TREE_CODES + 1
    187  1.1  mrg 
    188  1.1  mrg      Conversely, to map between LTO tags and tree/gimple codes, the
    189  1.1  mrg      reverse operation must be applied.  */
    190  1.1  mrg   LTO_bb0 = 1 + NUM_TREE_CODES + LAST_AND_UNUSED_GIMPLE_CODE,
    191  1.1  mrg   LTO_bb1,
    192  1.1  mrg 
    193  1.1  mrg   /* EH region holding the previous statement.  */
    194  1.1  mrg   LTO_eh_region,
    195  1.1  mrg 
    196  1.1  mrg   /* An MD or NORMAL builtin.  Only the code and class are streamed out.  */
    197  1.1  mrg   LTO_builtin_decl,
    198  1.1  mrg 
    199  1.1  mrg   /* Function body.  */
    200  1.1  mrg   LTO_function,
    201  1.1  mrg 
    202  1.1  mrg   /* EH table.  */
    203  1.1  mrg   LTO_eh_table,
    204  1.1  mrg 
    205  1.1  mrg   /* EH region types.  These mirror enum eh_region_type.  */
    206  1.1  mrg   LTO_ert_cleanup,
    207  1.1  mrg   LTO_ert_try,
    208  1.1  mrg   LTO_ert_allowed_exceptions,
    209  1.1  mrg   LTO_ert_must_not_throw,
    210  1.1  mrg 
    211  1.1  mrg   /* EH landing pad.  */
    212  1.1  mrg   LTO_eh_landing_pad,
    213  1.1  mrg 
    214  1.1  mrg   /* EH try/catch node.  */
    215  1.1  mrg   LTO_eh_catch,
    216  1.1  mrg 
    217  1.1  mrg   /* Special for global streamer. Reference to previously-streamed node.  */
    218  1.1  mrg   LTO_tree_pickle_reference,
    219  1.1  mrg 
    220  1.1  mrg   /* A decl which exists only to provide an extra symbol for another var.  */
    221  1.1  mrg   LTO_var_decl_alias,
    222  1.1  mrg 
    223  1.1  mrg   /* References to indexable tree nodes.  These objects are stored in
    224  1.1  mrg      tables that are written separately from the function bodies that
    225  1.1  mrg      reference them.  This way they can be instantiated even when the
    226  1.1  mrg      referencing functions aren't (e.g., during WPA) and it also allows
    227  1.1  mrg      functions to be copied from one file to another without having
    228  1.1  mrg      to unpickle the body first (the references are location
    229  1.1  mrg      independent).
    230  1.1  mrg 
    231  1.1  mrg      NOTE, do not regroup these values as the grouping is exposed
    232  1.1  mrg      in the range checks done in lto_input_tree.  */
    233  1.1  mrg   LTO_field_decl_ref,			/* Do not change.  */
    234  1.1  mrg   LTO_function_decl_ref,
    235  1.1  mrg   LTO_label_decl_ref,
    236  1.1  mrg   LTO_namespace_decl_ref,
    237  1.1  mrg   LTO_result_decl_ref,
    238  1.1  mrg   LTO_ssa_name_ref,
    239  1.1  mrg   LTO_type_decl_ref,
    240  1.1  mrg   LTO_type_ref,
    241  1.1  mrg   LTO_const_decl_ref,
    242  1.1  mrg   LTO_imported_decl_ref,
    243  1.1  mrg   LTO_global_decl_ref,			/* Do not change.  */
    244  1.1  mrg 
    245  1.1  mrg   /* This tag must always be last.  */
    246  1.1  mrg   LTO_NUM_TAGS
    247  1.1  mrg };
    248  1.1  mrg 
    249  1.1  mrg 
    250  1.1  mrg /* Set of section types that are in an LTO file.  This list will grow
    251  1.1  mrg    as the number of IPA passes grows since each IPA pass will need its
    252  1.1  mrg    own section type to store its summary information.
    253  1.1  mrg 
    254  1.1  mrg    When adding a new section type, you must also extend the
    255  1.1  mrg    LTO_SECTION_NAME array in lto-section-in.c.  */
    256  1.1  mrg enum lto_section_type
    257  1.1  mrg {
    258  1.1  mrg   LTO_section_decls = 0,
    259  1.1  mrg   LTO_section_function_body,
    260  1.1  mrg   LTO_section_static_initializer,
    261  1.1  mrg   LTO_section_cgraph,
    262  1.1  mrg   LTO_section_jump_functions,
    263  1.1  mrg   LTO_section_ipa_pure_const,
    264  1.1  mrg   LTO_section_ipa_reference,
    265  1.1  mrg   LTO_section_symtab,
    266  1.1  mrg   LTO_section_wpa_fixup,
    267  1.1  mrg   LTO_section_opts,
    268  1.1  mrg   LTO_N_SECTION_TYPES		/* Must be last.  */
    269  1.1  mrg };
    270  1.1  mrg 
    271  1.1  mrg /* Indices to the various function, type and symbol streams. */
    272  1.1  mrg typedef enum
    273  1.1  mrg {
    274  1.1  mrg   LTO_DECL_STREAM_TYPE = 0,		/* Must be first. */
    275  1.1  mrg   LTO_DECL_STREAM_FIELD_DECL,
    276  1.1  mrg   LTO_DECL_STREAM_FN_DECL,
    277  1.1  mrg   LTO_DECL_STREAM_VAR_DECL,
    278  1.1  mrg   LTO_DECL_STREAM_TYPE_DECL,
    279  1.1  mrg   LTO_DECL_STREAM_NAMESPACE_DECL,
    280  1.1  mrg   LTO_DECL_STREAM_LABEL_DECL,
    281  1.1  mrg   LTO_N_DECL_STREAMS
    282  1.1  mrg } lto_decl_stream_e_t;
    283  1.1  mrg 
    284  1.1  mrg typedef enum ld_plugin_symbol_resolution ld_plugin_symbol_resolution_t;
    285  1.1  mrg DEF_VEC_I(ld_plugin_symbol_resolution_t);
    286  1.1  mrg DEF_VEC_ALLOC_I(ld_plugin_symbol_resolution_t, heap);
    287  1.1  mrg 
    288  1.1  mrg 
    289  1.1  mrg /* Macro to define convenience functions for type and decl streams
    290  1.1  mrg    in lto_file_decl_data.  */
    291  1.1  mrg #define DEFINE_DECL_STREAM_FUNCS(UPPER_NAME, name) \
    292  1.1  mrg static inline tree \
    293  1.1  mrg lto_file_decl_data_get_ ## name (struct lto_file_decl_data *data, \
    294  1.1  mrg 				 unsigned int idx) \
    295  1.1  mrg { \
    296  1.1  mrg   struct lto_in_decl_state *state = data->current_decl_state; \
    297  1.1  mrg   gcc_assert (idx < state->streams[LTO_DECL_STREAM_## UPPER_NAME].size); \
    298  1.1  mrg   return state->streams[LTO_DECL_STREAM_## UPPER_NAME].trees[idx]; \
    299  1.1  mrg } \
    300  1.1  mrg \
    301  1.1  mrg static inline unsigned int \
    302  1.1  mrg lto_file_decl_data_num_ ## name ## s (struct lto_file_decl_data *data) \
    303  1.1  mrg { \
    304  1.1  mrg   struct lto_in_decl_state *state = data->current_decl_state; \
    305  1.1  mrg   return state->streams[LTO_DECL_STREAM_## UPPER_NAME].size; \
    306  1.1  mrg }
    307  1.1  mrg 
    308  1.1  mrg 
    309  1.1  mrg /* Return a char pointer to the start of a data stream for an lto pass
    310  1.1  mrg    or function.  The first parameter is the file data that contains
    311  1.1  mrg    the information.  The second parameter is the type of information
    312  1.1  mrg    to be obtained.  The third parameter is the name of the function
    313  1.1  mrg    and is only used when finding a function body; otherwise it is
    314  1.1  mrg    NULL.  The fourth parameter is the length of the data returned.  */
    315  1.1  mrg typedef const char* (lto_get_section_data_f) (struct lto_file_decl_data *,
    316  1.1  mrg 					      enum lto_section_type,
    317  1.1  mrg 					      const char *,
    318  1.1  mrg 					      size_t *);
    319  1.1  mrg 
    320  1.1  mrg /* Return the data found from the above call.  The first three
    321  1.1  mrg    parameters are the same as above.  The fourth parameter is the data
    322  1.1  mrg    itself and the fifth is the lenght of the data. */
    323  1.1  mrg typedef void (lto_free_section_data_f) (struct lto_file_decl_data *,
    324  1.1  mrg 					enum lto_section_type,
    325  1.1  mrg 					const char *,
    326  1.1  mrg 					const char *,
    327  1.1  mrg 					size_t);
    328  1.1  mrg 
    329  1.1  mrg /* Cache of pickled nodes.  Used to avoid writing the same node more
    330  1.1  mrg    than once.  The first time a tree node is streamed out, it is
    331  1.1  mrg    entered in this cache.  Subsequent references to the same node are
    332  1.1  mrg    resolved by looking it up in this cache.
    333  1.1  mrg 
    334  1.1  mrg    This is used in two ways:
    335  1.1  mrg 
    336  1.1  mrg    - On the writing side, the first time T is added to STREAMER_CACHE,
    337  1.1  mrg      a new reference index is created for T and T is emitted on the
    338  1.1  mrg      stream.  If T needs to be emitted again to the stream, instead of
    339  1.1  mrg      pickling it again, the reference index is emitted.
    340  1.1  mrg 
    341  1.1  mrg    - On the reading side, the first time T is read from the stream, it
    342  1.1  mrg      is reconstructed in memory and a new reference index created for
    343  1.1  mrg      T.  The reconstructed T is inserted in some array so that when
    344  1.1  mrg      the reference index for T is found in the input stream, it can be
    345  1.1  mrg      used to look up into the array to get the reconstructed T.  */
    346  1.1  mrg struct lto_streamer_cache_d
    347  1.1  mrg {
    348  1.1  mrg   /* The mapping between tree nodes and slots into the nodes array.  */
    349  1.1  mrg   htab_t node_map;
    350  1.1  mrg 
    351  1.1  mrg   /* Next available slot in the nodes and offsets arrays.  */
    352  1.1  mrg   unsigned next_slot;
    353  1.1  mrg 
    354  1.1  mrg   /* The nodes pickled so far.  */
    355  1.1  mrg   VEC(tree,gc) *nodes;
    356  1.1  mrg 
    357  1.1  mrg   /* Offset into the stream where the nodes have been written.  */
    358  1.1  mrg   VEC(unsigned,heap) *offsets;
    359  1.1  mrg };
    360  1.1  mrg 
    361  1.1  mrg 
    362  1.1  mrg /* Structure used as buffer for reading an LTO file.  */
    363  1.1  mrg struct lto_input_block
    364  1.1  mrg {
    365  1.1  mrg   const char *data;
    366  1.1  mrg   unsigned int p;
    367  1.1  mrg   unsigned int len;
    368  1.1  mrg };
    369  1.1  mrg 
    370  1.1  mrg #define LTO_INIT_INPUT_BLOCK(BASE,D,P,L)   \
    371  1.1  mrg   do {                                     \
    372  1.1  mrg     BASE.data = D;                         \
    373  1.1  mrg     BASE.p = P;                            \
    374  1.1  mrg     BASE.len = L;                          \
    375  1.1  mrg   } while (0)
    376  1.1  mrg 
    377  1.1  mrg #define LTO_INIT_INPUT_BLOCK_PTR(BASE,D,P,L) \
    378  1.1  mrg   do {                                       \
    379  1.1  mrg     BASE->data = D;                          \
    380  1.1  mrg     BASE->p = P;                             \
    381  1.1  mrg     BASE->len = L;                           \
    382  1.1  mrg   } while (0)
    383  1.1  mrg 
    384  1.1  mrg 
    385  1.1  mrg /* The is the first part of the record for a function or constructor
    386  1.1  mrg    in the .o file.  */
    387  1.1  mrg struct lto_header
    388  1.1  mrg {
    389  1.1  mrg   int16_t major_version;
    390  1.1  mrg   int16_t minor_version;
    391  1.1  mrg   enum lto_section_type section_type;
    392  1.1  mrg };
    393  1.1  mrg 
    394  1.1  mrg /* The header for a function body.  */
    395  1.1  mrg struct lto_function_header
    396  1.1  mrg {
    397  1.1  mrg   /* The header for all types of sections. */
    398  1.1  mrg   struct lto_header lto_header;
    399  1.1  mrg 
    400  1.1  mrg   /* Number of labels with names.  */
    401  1.1  mrg   int32_t num_named_labels;
    402  1.1  mrg 
    403  1.1  mrg   /* Number of labels without names.  */
    404  1.1  mrg   int32_t num_unnamed_labels;
    405  1.1  mrg 
    406  1.1  mrg   /* Size compressed or 0 if not compressed.  */
    407  1.1  mrg   int32_t compressed_size;
    408  1.1  mrg 
    409  1.1  mrg   /* Size of names for named labels.  */
    410  1.1  mrg   int32_t named_label_size;
    411  1.1  mrg 
    412  1.1  mrg   /* Size of the cfg.  */
    413  1.1  mrg   int32_t cfg_size;
    414  1.1  mrg 
    415  1.1  mrg   /* Size of main gimple body of function.  */
    416  1.1  mrg   int32_t main_size;
    417  1.1  mrg 
    418  1.1  mrg   /* Size of the string table.  */
    419  1.1  mrg   int32_t string_size;
    420  1.1  mrg };
    421  1.1  mrg 
    422  1.1  mrg 
    423  1.1  mrg /* Structure describing a symbol section.  */
    424  1.1  mrg struct lto_decl_header
    425  1.1  mrg {
    426  1.1  mrg   /* The header for all types of sections. */
    427  1.1  mrg   struct lto_header lto_header;
    428  1.1  mrg 
    429  1.1  mrg   /* Size of region for decl state. */
    430  1.1  mrg   int32_t decl_state_size;
    431  1.1  mrg 
    432  1.1  mrg   /* Number of nodes in globals stream.  */
    433  1.1  mrg   int32_t num_nodes;
    434  1.1  mrg 
    435  1.1  mrg   /* Size of region for expressions, decls, types, etc. */
    436  1.1  mrg   int32_t main_size;
    437  1.1  mrg 
    438  1.1  mrg   /* Size of the string table.  */
    439  1.1  mrg   int32_t string_size;
    440  1.1  mrg };
    441  1.1  mrg 
    442  1.1  mrg 
    443  1.1  mrg /* Statistics gathered during LTO, WPA and LTRANS.  */
    444  1.1  mrg struct lto_stats_d
    445  1.1  mrg {
    446  1.1  mrg   unsigned HOST_WIDE_INT num_input_cgraph_nodes;
    447  1.1  mrg   unsigned HOST_WIDE_INT num_output_cgraph_nodes;
    448  1.1  mrg   unsigned HOST_WIDE_INT num_input_files;
    449  1.1  mrg   unsigned HOST_WIDE_INT num_output_files;
    450  1.1  mrg   unsigned HOST_WIDE_INT num_cgraph_partitions;
    451  1.1  mrg   unsigned HOST_WIDE_INT section_size[LTO_N_SECTION_TYPES];
    452  1.1  mrg   unsigned HOST_WIDE_INT num_function_bodies;
    453  1.1  mrg   unsigned HOST_WIDE_INT num_trees[NUM_TREE_CODES];
    454  1.1  mrg   unsigned HOST_WIDE_INT num_output_il_bytes;
    455  1.1  mrg   unsigned HOST_WIDE_INT num_compressed_il_bytes;
    456  1.1  mrg   unsigned HOST_WIDE_INT num_input_il_bytes;
    457  1.1  mrg   unsigned HOST_WIDE_INT num_uncompressed_il_bytes;
    458  1.1  mrg };
    459  1.1  mrg 
    460  1.1  mrg /* Encoder data structure used to stream callgraph nodes.  */
    461  1.1  mrg struct lto_cgraph_encoder_d
    462  1.1  mrg {
    463  1.1  mrg   /* Map nodes to reference number. */
    464  1.1  mrg   struct pointer_map_t *map;
    465  1.1  mrg 
    466  1.1  mrg   /* Map reference number to node. */
    467  1.1  mrg   VEC(cgraph_node_ptr,heap) *nodes;
    468  1.1  mrg };
    469  1.1  mrg 
    470  1.1  mrg typedef struct lto_cgraph_encoder_d *lto_cgraph_encoder_t;
    471  1.1  mrg 
    472  1.1  mrg /* Mapping from indices to trees.  */
    473  1.1  mrg struct lto_tree_ref_table
    474  1.1  mrg {
    475  1.1  mrg   /* Array of referenced trees . */
    476  1.1  mrg   tree *trees;
    477  1.1  mrg 
    478  1.1  mrg   /* Size of array. */
    479  1.1  mrg   unsigned int size;
    480  1.1  mrg };
    481  1.1  mrg 
    482  1.1  mrg 
    483  1.1  mrg /* Mapping between trees and slots in an array.  */
    484  1.1  mrg struct lto_decl_slot
    485  1.1  mrg {
    486  1.1  mrg   tree t;
    487  1.1  mrg   int slot_num;
    488  1.1  mrg };
    489  1.1  mrg 
    490  1.1  mrg 
    491  1.1  mrg /* The lto_tree_ref_encoder struct is used to encode trees into indices. */
    492  1.1  mrg 
    493  1.1  mrg struct lto_tree_ref_encoder
    494  1.1  mrg {
    495  1.1  mrg   htab_t tree_hash_table;	/* Maps pointers to indices. */
    496  1.1  mrg   unsigned int next_index;	/* Next available index. */
    497  1.1  mrg   VEC(tree,heap) *trees;	/* Maps indices to pointers. */
    498  1.1  mrg };
    499  1.1  mrg 
    500  1.1  mrg 
    501  1.1  mrg /* Structure to hold states of input scope.  */
    502  1.1  mrg struct lto_in_decl_state
    503  1.1  mrg {
    504  1.1  mrg   /* Array of lto_in_decl_buffers to store type and decls streams. */
    505  1.1  mrg   struct lto_tree_ref_table streams[LTO_N_DECL_STREAMS];
    506  1.1  mrg 
    507  1.1  mrg   /* If this in-decl state is associated with a function. FN_DECL
    508  1.1  mrg      point to the FUNCTION_DECL. */
    509  1.1  mrg   tree fn_decl;
    510  1.1  mrg };
    511  1.1  mrg 
    512  1.1  mrg typedef struct lto_in_decl_state *lto_in_decl_state_ptr;
    513  1.1  mrg 
    514  1.1  mrg 
    515  1.1  mrg /* The structure that holds all of the vectors of global types,
    516  1.1  mrg    decls and cgraph nodes used in the serialization of this file.  */
    517  1.1  mrg struct lto_out_decl_state
    518  1.1  mrg {
    519  1.1  mrg   /* The buffers contain the sets of decls of various kinds and types we have
    520  1.1  mrg      seen so far and the indexes assigned to them.  */
    521  1.1  mrg   struct lto_tree_ref_encoder streams[LTO_N_DECL_STREAMS];
    522  1.1  mrg 
    523  1.1  mrg   /* Encoder for cgraph nodes.  */
    524  1.1  mrg   lto_cgraph_encoder_t cgraph_node_encoder;
    525  1.1  mrg 
    526  1.1  mrg   /* If this out-decl state belongs to a function, fn_decl points to that
    527  1.1  mrg      function.  Otherwise, it is NULL. */
    528  1.1  mrg   tree fn_decl;
    529  1.1  mrg };
    530  1.1  mrg 
    531  1.1  mrg typedef struct lto_out_decl_state *lto_out_decl_state_ptr;
    532  1.1  mrg 
    533  1.1  mrg DEF_VEC_P(lto_out_decl_state_ptr);
    534  1.1  mrg DEF_VEC_ALLOC_P(lto_out_decl_state_ptr, heap);
    535  1.1  mrg 
    536  1.1  mrg /* One of these is allocated for each object file that being compiled
    537  1.1  mrg    by lto.  This structure contains the tables that are needed by the
    538  1.1  mrg    serialized functions and ipa passes to connect themselves to the
    539  1.1  mrg    global types and decls as they are reconstituted.  */
    540  1.1  mrg struct lto_file_decl_data
    541  1.1  mrg {
    542  1.1  mrg   /* Decl state currently used. */
    543  1.1  mrg   struct lto_in_decl_state *current_decl_state;
    544  1.1  mrg 
    545  1.1  mrg   /* Decl state corresponding to regions outside of any functions
    546  1.1  mrg      in the compilation unit. */
    547  1.1  mrg   struct lto_in_decl_state *global_decl_state;
    548  1.1  mrg 
    549  1.1  mrg   /* Table of cgraph nodes present in this file.  */
    550  1.1  mrg   lto_cgraph_encoder_t cgraph_node_encoder;
    551  1.1  mrg 
    552  1.1  mrg   /* Hash table maps lto-related section names to location in file.  */
    553  1.1  mrg   htab_t function_decl_states;
    554  1.1  mrg 
    555  1.1  mrg   /* The .o file that these offsets relate to.  */
    556  1.1  mrg   const char *file_name;
    557  1.1  mrg 
    558  1.1  mrg   /* Nonzero if this file should be recompiled with LTRANS.  */
    559  1.1  mrg   unsigned needs_ltrans_p : 1;
    560  1.1  mrg 
    561  1.1  mrg   /* Hash table maps lto-related section names to location in file.  */
    562  1.1  mrg   htab_t section_hash_table;
    563  1.1  mrg 
    564  1.1  mrg   /* Hash new name of renamed global declaration to its original name.  */
    565  1.1  mrg   htab_t renaming_hash_table;
    566  1.1  mrg };
    567  1.1  mrg 
    568  1.1  mrg struct lto_char_ptr_base
    569  1.1  mrg {
    570  1.1  mrg   char *ptr;
    571  1.1  mrg };
    572  1.1  mrg 
    573  1.1  mrg /* An incore byte stream to buffer the various parts of the function.
    574  1.1  mrg    The entire structure should be zeroed when created.  The record
    575  1.1  mrg    consists of a set of blocks.  The first sizeof (ptr) bytes are used
    576  1.1  mrg    as a chain, and the rest store the bytes to be written.  */
    577  1.1  mrg struct lto_output_stream
    578  1.1  mrg {
    579  1.1  mrg   /* The pointer to the first block in the stream.  */
    580  1.1  mrg   struct lto_char_ptr_base * first_block;
    581  1.1  mrg 
    582  1.1  mrg   /* The pointer to the last and current block in the stream.  */
    583  1.1  mrg   struct lto_char_ptr_base * current_block;
    584  1.1  mrg 
    585  1.1  mrg   /* The pointer to where the next char should be written.  */
    586  1.1  mrg   char * current_pointer;
    587  1.1  mrg 
    588  1.1  mrg   /* The number of characters left in the current block.  */
    589  1.1  mrg   unsigned int left_in_block;
    590  1.1  mrg 
    591  1.1  mrg   /* The block size of the last block allocated.  */
    592  1.1  mrg   unsigned int block_size;
    593  1.1  mrg 
    594  1.1  mrg   /* The total number of characters written.  */
    595  1.1  mrg   unsigned int total_size;
    596  1.1  mrg };
    597  1.1  mrg 
    598  1.1  mrg /* The is the first part of the record in an LTO file for many of the
    599  1.1  mrg    IPA passes.  */
    600  1.1  mrg struct lto_simple_header
    601  1.1  mrg {
    602  1.1  mrg   /* The header for all types of sections. */
    603  1.1  mrg   struct lto_header lto_header;
    604  1.1  mrg 
    605  1.1  mrg   /* Size of main gimple body of function.  */
    606  1.1  mrg   int32_t main_size;
    607  1.1  mrg 
    608  1.1  mrg   /* Size of main stream when compressed.  */
    609  1.1  mrg   int32_t compressed_size;
    610  1.1  mrg };
    611  1.1  mrg 
    612  1.1  mrg /* A simple output block.  This can be used for simple IPA passes that
    613  1.1  mrg    do not need more than one stream.  */
    614  1.1  mrg struct lto_simple_output_block
    615  1.1  mrg {
    616  1.1  mrg   enum lto_section_type section_type;
    617  1.1  mrg   struct lto_out_decl_state *decl_state;
    618  1.1  mrg 
    619  1.1  mrg   /* The stream that the main tree codes are written to.  */
    620  1.1  mrg   struct lto_output_stream *main_stream;
    621  1.1  mrg };
    622  1.1  mrg 
    623  1.1  mrg /* Data structure holding all the data and descriptors used when writing
    624  1.1  mrg    an LTO file.  */
    625  1.1  mrg struct output_block
    626  1.1  mrg {
    627  1.1  mrg   enum lto_section_type section_type;
    628  1.1  mrg   struct lto_out_decl_state *decl_state;
    629  1.1  mrg 
    630  1.1  mrg   /* The stream that the main tree codes are written to.  */
    631  1.1  mrg   struct lto_output_stream *main_stream;
    632  1.1  mrg 
    633  1.1  mrg   /* The stream that contains the string table.  */
    634  1.1  mrg   struct lto_output_stream *string_stream;
    635  1.1  mrg 
    636  1.1  mrg   /* The stream that contains the cfg.  */
    637  1.1  mrg   struct lto_output_stream *cfg_stream;
    638  1.1  mrg 
    639  1.1  mrg   /* The hash table that contains the set of strings we have seen so
    640  1.1  mrg      far and the indexes assigned to them.  */
    641  1.1  mrg   htab_t string_hash_table;
    642  1.1  mrg 
    643  1.1  mrg   /* The current cgraph_node that we are currently serializing.  Null
    644  1.1  mrg      if we are serializing something else.  */
    645  1.1  mrg   struct cgraph_node *cgraph_node;
    646  1.1  mrg 
    647  1.1  mrg   /* These are the last file and line that were seen in the stream.
    648  1.1  mrg      If the current node differs from these, it needs to insert
    649  1.1  mrg      something into the stream and fix these up.  */
    650  1.1  mrg   const char *current_file;
    651  1.1  mrg   int current_line;
    652  1.1  mrg   int current_col;
    653  1.1  mrg 
    654  1.1  mrg   /* True if writing globals and types.  */
    655  1.1  mrg   bool global;
    656  1.1  mrg 
    657  1.1  mrg   /* Cache of nodes written in this section.  */
    658  1.1  mrg   struct lto_streamer_cache_d *writer_cache;
    659  1.1  mrg };
    660  1.1  mrg 
    661  1.1  mrg 
    662  1.1  mrg /* Data and descriptors used when reading from an LTO file.  */
    663  1.1  mrg struct data_in
    664  1.1  mrg {
    665  1.1  mrg   /* The global decls and types.  */
    666  1.1  mrg   struct lto_file_decl_data *file_data;
    667  1.1  mrg 
    668  1.1  mrg   /* All of the labels.  */
    669  1.1  mrg   tree *labels;
    670  1.1  mrg 
    671  1.1  mrg   /* The string table.  */
    672  1.1  mrg   const char *strings;
    673  1.1  mrg 
    674  1.1  mrg   /* The length of the string table.  */
    675  1.1  mrg   unsigned int strings_len;
    676  1.1  mrg 
    677  1.1  mrg   /* Number of named labels.  Used to find the index of unnamed labels
    678  1.1  mrg      since they share space with the named labels.  */
    679  1.1  mrg   unsigned int num_named_labels;
    680  1.1  mrg 
    681  1.1  mrg   /* Number of unnamed labels.  */
    682  1.1  mrg   unsigned int num_unnamed_labels;
    683  1.1  mrg 
    684  1.1  mrg   const char *current_file;
    685  1.1  mrg   int current_line;
    686  1.1  mrg   int current_col;
    687  1.1  mrg 
    688  1.1  mrg   /* Maps each reference number to the resolution done by the linker. */
    689  1.1  mrg   VEC(ld_plugin_symbol_resolution_t,heap) *globals_resolution;
    690  1.1  mrg 
    691  1.1  mrg   /* Cache of pickled nodes.  */
    692  1.1  mrg   struct lto_streamer_cache_d *reader_cache;
    693  1.1  mrg };
    694  1.1  mrg 
    695  1.1  mrg 
    696  1.1  mrg /* In lto-section-in.c  */
    697  1.1  mrg extern struct lto_input_block * lto_create_simple_input_block (
    698  1.1  mrg 			       struct lto_file_decl_data *,
    699  1.1  mrg 			       enum lto_section_type, const char **, size_t *);
    700  1.1  mrg extern void
    701  1.1  mrg lto_destroy_simple_input_block (struct lto_file_decl_data *,
    702  1.1  mrg 				enum lto_section_type,
    703  1.1  mrg 				struct lto_input_block *, const char *, size_t);
    704  1.1  mrg extern void lto_set_in_hooks (struct lto_file_decl_data **,
    705  1.1  mrg 			      lto_get_section_data_f *,
    706  1.1  mrg 			      lto_free_section_data_f *);
    707  1.1  mrg extern struct lto_file_decl_data **lto_get_file_decl_data (void);
    708  1.1  mrg extern const char *lto_get_section_data (struct lto_file_decl_data *,
    709  1.1  mrg 					 enum lto_section_type,
    710  1.1  mrg 					 const char *, size_t *);
    711  1.1  mrg extern void lto_free_section_data (struct lto_file_decl_data *,
    712  1.1  mrg 				   enum lto_section_type,
    713  1.1  mrg 				   const char *, const char *, size_t);
    714  1.1  mrg extern unsigned char lto_input_1_unsigned (struct lto_input_block *);
    715  1.1  mrg extern unsigned HOST_WIDE_INT lto_input_uleb128 (struct lto_input_block *);
    716  1.1  mrg extern unsigned HOST_WIDEST_INT lto_input_widest_uint_uleb128 (
    717  1.1  mrg 						struct lto_input_block *);
    718  1.1  mrg extern HOST_WIDE_INT lto_input_sleb128 (struct lto_input_block *);
    719  1.1  mrg extern htab_t lto_create_renaming_table (void);
    720  1.1  mrg extern void lto_record_renamed_decl (struct lto_file_decl_data *,
    721  1.1  mrg 				     const char *, const char *);
    722  1.1  mrg extern const char *lto_get_decl_name_mapping (struct lto_file_decl_data *,
    723  1.1  mrg 					      const char *);
    724  1.1  mrg extern struct lto_in_decl_state *lto_new_in_decl_state (void);
    725  1.1  mrg extern void lto_delete_in_decl_state (struct lto_in_decl_state *);
    726  1.1  mrg extern hashval_t lto_hash_in_decl_state (const void *);
    727  1.1  mrg extern int lto_eq_in_decl_state (const void *, const void *);
    728  1.1  mrg extern struct lto_in_decl_state *lto_get_function_in_decl_state (
    729  1.1  mrg 				      struct lto_file_decl_data *, tree);
    730  1.1  mrg 
    731  1.1  mrg /* In lto-section-out.c  */
    732  1.1  mrg extern hashval_t lto_hash_decl_slot_node (const void *);
    733  1.1  mrg extern int lto_eq_decl_slot_node (const void *, const void *);
    734  1.1  mrg extern hashval_t lto_hash_type_slot_node (const void *);
    735  1.1  mrg extern int lto_eq_type_slot_node (const void *, const void *);
    736  1.1  mrg extern void lto_begin_section (const char *, bool);
    737  1.1  mrg extern void lto_end_section (void);
    738  1.1  mrg extern void lto_write_stream (struct lto_output_stream *);
    739  1.1  mrg extern void lto_output_1_stream (struct lto_output_stream *, char);
    740  1.1  mrg extern void lto_output_data_stream (struct lto_output_stream *, const void *,
    741  1.1  mrg 				    size_t);
    742  1.1  mrg extern void lto_output_uleb128_stream (struct lto_output_stream *,
    743  1.1  mrg        				       unsigned HOST_WIDE_INT);
    744  1.1  mrg extern void lto_output_widest_uint_uleb128_stream (struct lto_output_stream *,
    745  1.1  mrg        					           unsigned HOST_WIDEST_INT);
    746  1.1  mrg extern void lto_output_sleb128_stream (struct lto_output_stream *,
    747  1.1  mrg 				       HOST_WIDE_INT);
    748  1.1  mrg extern bool lto_output_decl_index (struct lto_output_stream *,
    749  1.1  mrg 			    struct lto_tree_ref_encoder *,
    750  1.1  mrg 			    tree, unsigned int *);
    751  1.1  mrg extern void lto_output_field_decl_index (struct lto_out_decl_state *,
    752  1.1  mrg 				  struct lto_output_stream *, tree);
    753  1.1  mrg extern void lto_output_fn_decl_index (struct lto_out_decl_state *,
    754  1.1  mrg 			       struct lto_output_stream *, tree);
    755  1.1  mrg extern void lto_output_namespace_decl_index (struct lto_out_decl_state *,
    756  1.1  mrg 				      struct lto_output_stream *, tree);
    757  1.1  mrg extern void lto_output_var_decl_index (struct lto_out_decl_state *,
    758  1.1  mrg 				struct lto_output_stream *, tree);
    759  1.1  mrg extern void lto_output_type_decl_index (struct lto_out_decl_state *,
    760  1.1  mrg 				 struct lto_output_stream *, tree);
    761  1.1  mrg extern void lto_output_type_ref_index (struct lto_out_decl_state *,
    762  1.1  mrg 				struct lto_output_stream *, tree);
    763  1.1  mrg extern struct lto_simple_output_block *lto_create_simple_output_block (
    764  1.1  mrg 				enum lto_section_type);
    765  1.1  mrg extern void lto_destroy_simple_output_block (struct lto_simple_output_block *);
    766  1.1  mrg extern struct lto_out_decl_state *lto_new_out_decl_state (void);
    767  1.1  mrg extern void lto_delete_out_decl_state (struct lto_out_decl_state *);
    768  1.1  mrg extern struct lto_out_decl_state *lto_get_out_decl_state (void);
    769  1.1  mrg extern void lto_push_out_decl_state (struct lto_out_decl_state *);
    770  1.1  mrg extern struct lto_out_decl_state *lto_pop_out_decl_state (void);
    771  1.1  mrg extern void lto_record_function_out_decl_state (tree,
    772  1.1  mrg 						struct lto_out_decl_state *);
    773  1.1  mrg extern void lto_new_extern_inline_states (void);
    774  1.1  mrg extern void lto_delete_extern_inline_states (void);
    775  1.1  mrg extern void lto_force_functions_extern_inline (bitmap decls);
    776  1.1  mrg extern bool lto_forced_extern_inline_p (tree fn_decl);
    777  1.1  mrg 
    778  1.1  mrg 
    779  1.1  mrg /* In lto-streamer.c.  */
    780  1.1  mrg extern const char *lto_tag_name (enum LTO_tags);
    781  1.1  mrg extern bitmap lto_bitmap_alloc (void);
    782  1.1  mrg extern void lto_bitmap_free (bitmap);
    783  1.1  mrg extern char *lto_get_section_name (int, const char *);
    784  1.1  mrg extern void print_lto_report (void);
    785  1.1  mrg extern struct bitpack_d *bitpack_create (void);
    786  1.1  mrg extern void bitpack_delete (struct bitpack_d *);
    787  1.1  mrg extern void bp_pack_value (struct bitpack_d *, bitpack_word_t, unsigned);
    788  1.1  mrg extern bitpack_word_t bp_unpack_value (struct bitpack_d *, unsigned);
    789  1.1  mrg extern bool lto_streamer_cache_insert (struct lto_streamer_cache_d *, tree,
    790  1.1  mrg 				       int *, unsigned *);
    791  1.1  mrg extern bool lto_streamer_cache_insert_at (struct lto_streamer_cache_d *, tree,
    792  1.1  mrg 					  int);
    793  1.1  mrg extern bool lto_streamer_cache_lookup (struct lto_streamer_cache_d *, tree,
    794  1.1  mrg 				       int *);
    795  1.1  mrg extern tree lto_streamer_cache_get (struct lto_streamer_cache_d *, int);
    796  1.1  mrg extern struct lto_streamer_cache_d *lto_streamer_cache_create (void);
    797  1.1  mrg extern void lto_streamer_cache_delete (struct lto_streamer_cache_d *);
    798  1.1  mrg extern void lto_streamer_init (void);
    799  1.1  mrg extern bool gate_lto_out (void);
    800  1.1  mrg #ifdef LTO_STREAMER_DEBUG
    801  1.1  mrg extern void lto_orig_address_map (tree, intptr_t);
    802  1.1  mrg extern intptr_t lto_orig_address_get (tree);
    803  1.1  mrg extern void lto_orig_address_remove (tree);
    804  1.1  mrg #endif
    805  1.1  mrg extern void lto_check_version (int, int);
    806  1.1  mrg 
    807  1.1  mrg 
    808  1.1  mrg /* In lto-streamer-in.c */
    809  1.1  mrg extern void lto_input_cgraph (struct lto_file_decl_data *, const char *);
    810  1.1  mrg extern void lto_init_reader (void);
    811  1.1  mrg extern tree lto_input_tree (struct lto_input_block *, struct data_in *);
    812  1.1  mrg extern void lto_input_function_body (struct lto_file_decl_data *, tree,
    813  1.1  mrg 				     const char *);
    814  1.1  mrg extern void lto_input_constructors_and_inits (struct lto_file_decl_data *,
    815  1.1  mrg 					      const char *);
    816  1.1  mrg extern struct bitpack_d *lto_input_bitpack (struct lto_input_block *);
    817  1.1  mrg extern void lto_init_reader (void);
    818  1.1  mrg extern struct data_in *lto_data_in_create (struct lto_file_decl_data *,
    819  1.1  mrg 				    const char *, unsigned,
    820  1.1  mrg 				    VEC(ld_plugin_symbol_resolution_t,heap) *);
    821  1.1  mrg extern void lto_data_in_delete (struct data_in *);
    822  1.1  mrg 
    823  1.1  mrg 
    824  1.1  mrg /* In lto-streamer-out.c  */
    825  1.1  mrg extern void lto_register_decl_definition (tree, struct lto_file_decl_data *);
    826  1.1  mrg extern struct output_block *create_output_block (enum lto_section_type);
    827  1.1  mrg extern void destroy_output_block (struct output_block *);
    828  1.1  mrg extern void lto_output_tree (struct output_block *, tree, bool);
    829  1.1  mrg extern void lto_output_bitpack (struct lto_output_stream *, struct bitpack_d *);
    830  1.1  mrg extern void produce_asm (struct output_block *ob, tree fn);
    831  1.1  mrg 
    832  1.1  mrg 
    833  1.1  mrg /* In lto-cgraph.c  */
    834  1.1  mrg struct cgraph_node *lto_cgraph_encoder_deref (lto_cgraph_encoder_t, int);
    835  1.1  mrg int lto_cgraph_encoder_lookup (lto_cgraph_encoder_t, struct cgraph_node *);
    836  1.1  mrg lto_cgraph_encoder_t lto_cgraph_encoder_new (void);
    837  1.1  mrg int lto_cgraph_encoder_encode (lto_cgraph_encoder_t, struct cgraph_node *);
    838  1.1  mrg void lto_cgraph_encoder_delete (lto_cgraph_encoder_t encoder);
    839  1.1  mrg void output_cgraph (cgraph_node_set);
    840  1.1  mrg void input_cgraph (void);
    841  1.1  mrg 
    842  1.1  mrg 
    843  1.1  mrg /* In lto-symtab.c.  */
    844  1.1  mrg extern void lto_symtab_register_decl (tree, ld_plugin_symbol_resolution_t,
    845  1.1  mrg 				      struct lto_file_decl_data *);
    846  1.1  mrg extern void lto_symtab_merge_decls (void);
    847  1.1  mrg extern void lto_symtab_merge_cgraph_nodes (void);
    848  1.1  mrg extern tree lto_symtab_prevailing_decl (tree decl);
    849  1.1  mrg extern enum ld_plugin_symbol_resolution lto_symtab_get_resolution (tree decl);
    850  1.1  mrg 
    851  1.1  mrg 
    852  1.1  mrg /* In lto-opts.c.  */
    853  1.1  mrg extern void lto_register_user_option (size_t, const char *, int, int);
    854  1.1  mrg extern void lto_read_file_options (struct lto_file_decl_data *);
    855  1.1  mrg extern void lto_write_options (void);
    856  1.1  mrg extern void lto_reissue_options (void);
    857  1.1  mrg void lto_clear_user_options (void);
    858  1.1  mrg void lto_clear_file_options (void);
    859  1.1  mrg 
    860  1.1  mrg 
    861  1.1  mrg /* In lto-wpa-fixup.c  */
    862  1.1  mrg void lto_mark_nothrow_fndecl (tree);
    863  1.1  mrg void lto_fixup_nothrow_decls (void);
    864  1.1  mrg 
    865  1.1  mrg 
    866  1.1  mrg /* Statistics gathered during LTO, WPA and LTRANS.  */
    867  1.1  mrg extern struct lto_stats_d lto_stats;
    868  1.1  mrg 
    869  1.1  mrg /* Section names corresponding to the values of enum lto_section_type.  */
    870  1.1  mrg extern const char *lto_section_name[];
    871  1.1  mrg 
    872  1.1  mrg /* Holds all the out decl states of functions output so far in the
    873  1.1  mrg    current output file.  */
    874  1.1  mrg extern VEC(lto_out_decl_state_ptr, heap) *lto_function_decl_states;
    875  1.1  mrg 
    876  1.1  mrg /* Return true if LTO tag TAG corresponds to a tree code.  */
    877  1.1  mrg static inline bool
    878  1.1  mrg lto_tag_is_tree_code_p (enum LTO_tags tag)
    879  1.1  mrg {
    880  1.1  mrg   return tag > LTO_null && (unsigned) tag <= NUM_TREE_CODES;
    881  1.1  mrg }
    882  1.1  mrg 
    883  1.1  mrg 
    884  1.1  mrg /* Return true if LTO tag TAG corresponds to a gimple code.  */
    885  1.1  mrg static inline bool
    886  1.1  mrg lto_tag_is_gimple_code_p (enum LTO_tags tag)
    887  1.1  mrg {
    888  1.1  mrg   return (unsigned) tag >= NUM_TREE_CODES + 1
    889  1.1  mrg 	 && (unsigned) tag < 1 + NUM_TREE_CODES + LAST_AND_UNUSED_GIMPLE_CODE;
    890  1.1  mrg }
    891  1.1  mrg 
    892  1.1  mrg 
    893  1.1  mrg /* Return the LTO tag corresponding to gimple code CODE.  See enum
    894  1.1  mrg    LTO_tags for details on the conversion.  */
    895  1.1  mrg static inline enum LTO_tags
    896  1.1  mrg lto_gimple_code_to_tag (enum gimple_code code)
    897  1.1  mrg {
    898  1.1  mrg   return (enum LTO_tags) ((unsigned) code + NUM_TREE_CODES + 1);
    899  1.1  mrg }
    900  1.1  mrg 
    901  1.1  mrg 
    902  1.1  mrg /* Return the GIMPLE code corresponding to TAG.  See enum LTO_tags for
    903  1.1  mrg    details on the conversion.  */
    904  1.1  mrg static inline enum gimple_code
    905  1.1  mrg lto_tag_to_gimple_code (enum LTO_tags tag)
    906  1.1  mrg {
    907  1.1  mrg   gcc_assert (lto_tag_is_gimple_code_p (tag));
    908  1.1  mrg   return (enum gimple_code) ((unsigned) tag - NUM_TREE_CODES - 1);
    909  1.1  mrg }
    910  1.1  mrg 
    911  1.1  mrg 
    912  1.1  mrg /* Return the LTO tag corresponding to tree code CODE.  See enum
    913  1.1  mrg    LTO_tags for details on the conversion.  */
    914  1.1  mrg static inline enum LTO_tags
    915  1.1  mrg lto_tree_code_to_tag (enum tree_code code)
    916  1.1  mrg {
    917  1.1  mrg   return (enum LTO_tags) ((unsigned) code + 1);
    918  1.1  mrg }
    919  1.1  mrg 
    920  1.1  mrg 
    921  1.1  mrg /* Return the tree code corresponding to TAG.  See enum LTO_tags for
    922  1.1  mrg    details on the conversion.  */
    923  1.1  mrg static inline enum tree_code
    924  1.1  mrg lto_tag_to_tree_code (enum LTO_tags tag)
    925  1.1  mrg {
    926  1.1  mrg   gcc_assert (lto_tag_is_tree_code_p (tag));
    927  1.1  mrg   return (enum tree_code) ((unsigned) tag - 1);
    928  1.1  mrg }
    929  1.1  mrg 
    930  1.1  mrg 
    931  1.1  mrg /* Return true if FILE needs to be compiled with LTRANS.  */
    932  1.1  mrg static inline bool
    933  1.1  mrg lto_file_needs_ltrans_p (struct lto_file_decl_data *file)
    934  1.1  mrg {
    935  1.1  mrg   return file->needs_ltrans_p != 0;
    936  1.1  mrg }
    937  1.1  mrg 
    938  1.1  mrg 
    939  1.1  mrg /* Mark FILE to be compiled with LTRANS.  */
    940  1.1  mrg static inline void
    941  1.1  mrg lto_mark_file_for_ltrans (struct lto_file_decl_data *file)
    942  1.1  mrg {
    943  1.1  mrg   file->needs_ltrans_p = 1;
    944  1.1  mrg }
    945  1.1  mrg 
    946  1.1  mrg 
    947  1.1  mrg /* Return true if any files in node set SET need to be compiled
    948  1.1  mrg    with LTRANS.  */
    949  1.1  mrg static inline bool
    950  1.1  mrg cgraph_node_set_needs_ltrans_p (cgraph_node_set set)
    951  1.1  mrg {
    952  1.1  mrg   cgraph_node_set_iterator csi;
    953  1.1  mrg 
    954  1.1  mrg   for (csi = csi_start (set); !csi_end_p (csi); csi_next (&csi))
    955  1.1  mrg     if (lto_file_needs_ltrans_p (csi_node (csi)->local.lto_file_data))
    956  1.1  mrg       return true;
    957  1.1  mrg 
    958  1.1  mrg   return false;
    959  1.1  mrg }
    960  1.1  mrg 
    961  1.1  mrg 
    962  1.1  mrg /* Initialize an lto_out_decl_buffer ENCODER.  */
    963  1.1  mrg static inline void
    964  1.1  mrg lto_init_tree_ref_encoder (struct lto_tree_ref_encoder *encoder,
    965  1.1  mrg 			   htab_hash hash_fn, htab_eq eq_fn)
    966  1.1  mrg {
    967  1.1  mrg   encoder->tree_hash_table = htab_create (37, hash_fn, eq_fn, free);
    968  1.1  mrg   encoder->next_index = 0;
    969  1.1  mrg   encoder->trees = NULL;
    970  1.1  mrg }
    971  1.1  mrg 
    972  1.1  mrg 
    973  1.1  mrg /* Destory an lto_tree_ref_encoder ENCODER by freeing its contents.  The
    974  1.1  mrg    memory used by ENCODER is not freed by this function.  */
    975  1.1  mrg static inline void
    976  1.1  mrg lto_destroy_tree_ref_encoder (struct lto_tree_ref_encoder *encoder)
    977  1.1  mrg {
    978  1.1  mrg   /* Hash table may be delete already.  */
    979  1.1  mrg   if (encoder->tree_hash_table)
    980  1.1  mrg     htab_delete (encoder->tree_hash_table);
    981  1.1  mrg   VEC_free (tree, heap, encoder->trees);
    982  1.1  mrg }
    983  1.1  mrg 
    984  1.1  mrg /* Return the number of trees encoded in ENCODER. */
    985  1.1  mrg static inline unsigned int
    986  1.1  mrg lto_tree_ref_encoder_size (struct lto_tree_ref_encoder *encoder)
    987  1.1  mrg {
    988  1.1  mrg   return VEC_length (tree, encoder->trees);
    989  1.1  mrg }
    990  1.1  mrg 
    991  1.1  mrg /* Return the IDX-th tree in ENCODER. */
    992  1.1  mrg static inline tree
    993  1.1  mrg lto_tree_ref_encoder_get_tree (struct lto_tree_ref_encoder *encoder,
    994  1.1  mrg 			       unsigned int idx)
    995  1.1  mrg {
    996  1.1  mrg   return VEC_index (tree, encoder->trees, idx);
    997  1.1  mrg }
    998  1.1  mrg 
    999  1.1  mrg 
   1000  1.1  mrg /* Return true if LABEL should be emitted in the global context.  */
   1001  1.1  mrg static inline bool
   1002  1.1  mrg emit_label_in_global_context_p (tree label)
   1003  1.1  mrg {
   1004  1.1  mrg   return DECL_NONLOCAL (label) || FORCED_LABEL (label);
   1005  1.1  mrg }
   1006  1.1  mrg 
   1007  1.1  mrg /* Return true if tree node EXPR should be streamed as a builtin.  For
   1008  1.1  mrg    these nodes, we just emit the class and function code.  */
   1009  1.1  mrg static inline bool
   1010  1.1  mrg lto_stream_as_builtin_p (tree expr)
   1011  1.1  mrg {
   1012  1.1  mrg   return (TREE_CODE (expr) == FUNCTION_DECL
   1013  1.1  mrg 	  && DECL_IS_BUILTIN (expr)
   1014  1.1  mrg 	  && (DECL_BUILT_IN_CLASS (expr) == BUILT_IN_NORMAL
   1015  1.1  mrg 	      || DECL_BUILT_IN_CLASS (expr) == BUILT_IN_MD));
   1016  1.1  mrg }
   1017  1.1  mrg 
   1018  1.1  mrg /* Return true if EXPR is a tree node that can be written to disk.  */
   1019  1.1  mrg static inline bool
   1020  1.1  mrg lto_is_streamable (tree expr)
   1021  1.1  mrg {
   1022  1.1  mrg   enum tree_code code = TREE_CODE (expr);
   1023  1.1  mrg 
   1024  1.1  mrg   /* Notice that we reject SSA_NAMEs as well.  We only emit the SSA
   1025  1.1  mrg      name version in lto_output_tree_ref (see output_ssa_names).  */
   1026  1.1  mrg   return !is_lang_specific (expr)
   1027  1.1  mrg 	 && code != SSA_NAME
   1028  1.1  mrg 	 && code != CALL_EXPR
   1029  1.1  mrg 	 && code != LANG_TYPE
   1030  1.1  mrg 	 && code != MODIFY_EXPR
   1031  1.1  mrg 	 && code != INIT_EXPR
   1032  1.1  mrg 	 && code != TARGET_EXPR
   1033  1.1  mrg 	 && code != BIND_EXPR
   1034  1.1  mrg 	 && code != WITH_CLEANUP_EXPR
   1035  1.1  mrg 	 && code != STATEMENT_LIST
   1036  1.1  mrg 	 && (code == CASE_LABEL_EXPR
   1037  1.1  mrg 	     || code == DECL_EXPR
   1038  1.1  mrg 	     || TREE_CODE_CLASS (code) != tcc_statement);
   1039  1.1  mrg }
   1040  1.1  mrg 
   1041  1.1  mrg DEFINE_DECL_STREAM_FUNCS (TYPE, type)
   1042  1.1  mrg DEFINE_DECL_STREAM_FUNCS (FIELD_DECL, field_decl)
   1043  1.1  mrg DEFINE_DECL_STREAM_FUNCS (FN_DECL, fn_decl)
   1044  1.1  mrg DEFINE_DECL_STREAM_FUNCS (VAR_DECL, var_decl)
   1045  1.1  mrg DEFINE_DECL_STREAM_FUNCS (TYPE_DECL, type_decl)
   1046  1.1  mrg DEFINE_DECL_STREAM_FUNCS (NAMESPACE_DECL, namespace_decl)
   1047  1.1  mrg DEFINE_DECL_STREAM_FUNCS (LABEL_DECL, label_decl)
   1048  1.1  mrg 
   1049  1.1  mrg #endif /* GCC_LTO_STREAMER_H  */
   1050