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