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