LCOV - code coverage report
Current view: top level - gcc - tree-streamer-in.cc (source / functions) Coverage Total Hit
Test: gcc.info Lines: 87.7 % 506 444
Test Date: 2024-04-13 14:00:49 Functions: 89.5 % 38 34
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: - 0 0

             Branch data     Line data    Source code
       1                 :             : /* Routines for reading trees from a file stream.
       2                 :             : 
       3                 :             :    Copyright (C) 2011-2024 Free Software Foundation, Inc.
       4                 :             :    Contributed by Diego Novillo <dnovillo@google.com>
       5                 :             : 
       6                 :             : This file is part of GCC.
       7                 :             : 
       8                 :             : GCC is free software; you can redistribute it and/or modify it under
       9                 :             : the terms of the GNU General Public License as published by the Free
      10                 :             : Software Foundation; either version 3, or (at your option) any later
      11                 :             : version.
      12                 :             : 
      13                 :             : GCC is distributed in the hope that it will be useful, but WITHOUT ANY
      14                 :             : WARRANTY; without even the implied warranty of MERCHANTABILITY or
      15                 :             : FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
      16                 :             : for more details.
      17                 :             : 
      18                 :             : You should have received a copy of the GNU General Public License
      19                 :             : along with GCC; see the file COPYING3.  If not see
      20                 :             : <http://www.gnu.org/licenses/>.  */
      21                 :             : 
      22                 :             : #include "config.h"
      23                 :             : #include "system.h"
      24                 :             : #include "coretypes.h"
      25                 :             : #include "backend.h"
      26                 :             : #include "target.h"
      27                 :             : #include "tree.h"
      28                 :             : #include "gimple.h"
      29                 :             : #include "stringpool.h"
      30                 :             : #include "tree-streamer.h"
      31                 :             : #include "cgraph.h"
      32                 :             : #include "builtins.h"
      33                 :             : #include "gomp-constants.h"
      34                 :             : #include "stringpool.h"
      35                 :             : #include "attribs.h"
      36                 :             : #include "asan.h"
      37                 :             : #include "opts.h"
      38                 :             : 
      39                 :             : 
      40                 :             : /* Read a STRING_CST from the string table in DATA_IN using input
      41                 :             :    block IB.  */
      42                 :             : 
      43                 :             : tree
      44                 :      174469 : streamer_read_string_cst (class data_in *data_in, class lto_input_block *ib)
      45                 :             : {
      46                 :      174469 :   unsigned int len;
      47                 :      174469 :   const char * ptr;
      48                 :             : 
      49                 :      174469 :   ptr = streamer_read_indexed_string (data_in, ib, &len);
      50                 :      174469 :   if (!ptr)
      51                 :             :     return NULL;
      52                 :      174405 :   return build_string (len, ptr);
      53                 :             : }
      54                 :             : 
      55                 :             : 
      56                 :             : /* Read an IDENTIFIER from the string table in DATA_IN using input
      57                 :             :    block IB.  */
      58                 :             : 
      59                 :             : static tree
      60                 :      664921 : input_identifier (class data_in *data_in, class lto_input_block *ib)
      61                 :             : {
      62                 :      664921 :   unsigned int len;
      63                 :      664921 :   const char *ptr;
      64                 :             : 
      65                 :      664921 :   ptr = streamer_read_indexed_string (data_in, ib, &len);
      66                 :      664921 :   if (!ptr)
      67                 :             :     return NULL;
      68                 :      664921 :   return get_identifier_with_length (ptr, len);
      69                 :             : }
      70                 :             : 
      71                 :             : 
      72                 :             : /* Read a chain of tree nodes from input block IB.  DATA_IN contains
      73                 :             :    tables and descriptors for the file being read.  */
      74                 :             : 
      75                 :             : static tree
      76                 :      315856 : streamer_read_chain (class lto_input_block *ib, class data_in *data_in)
      77                 :             : {
      78                 :      315856 :   tree first, prev, curr;
      79                 :             : 
      80                 :             :   /* The chain is written as NULL terminated list of trees.  */
      81                 :      315856 :   first = prev = NULL_TREE;
      82                 :      521491 :   do
      83                 :             :     {
      84                 :      521491 :       curr = stream_read_tree_ref (ib, data_in);
      85                 :      521491 :       if (prev)
      86                 :      205635 :         TREE_CHAIN (prev) = curr;
      87                 :             :       else
      88                 :             :         first = curr;
      89                 :             : 
      90                 :      521491 :       prev = curr;
      91                 :             :     }
      92                 :      521491 :   while (curr);
      93                 :             : 
      94                 :      315856 :   return first;
      95                 :             : }
      96                 :             : 
      97                 :             : 
      98                 :             : /* Unpack all the non-pointer fields of the TS_BASE structure of
      99                 :             :    expression EXPR from bitpack BP.  */
     100                 :             : 
     101                 :             : static inline void
     102                 :     4165543 : unpack_ts_base_value_fields (struct bitpack_d *bp, tree expr)
     103                 :             : {
     104                 :             :   /* Note that the code for EXPR has already been unpacked to create EXPR in
     105                 :             :      streamer_alloc_tree.  */
     106                 :     4165543 :   if (!TYPE_P (expr))
     107                 :             :     {
     108                 :     3705091 :       TREE_SIDE_EFFECTS (expr) = (unsigned) bp_unpack_value (bp, 1);
     109                 :     3705091 :       TREE_CONSTANT (expr) = (unsigned) bp_unpack_value (bp, 1);
     110                 :     3705091 :       TREE_READONLY (expr) = (unsigned) bp_unpack_value (bp, 1);
     111                 :             : 
     112                 :             :       /* TREE_PUBLIC is used on types to indicate that the type
     113                 :             :          has a TYPE_CACHED_VALUES vector.  This is not streamed out,
     114                 :             :          so we skip it here.  */
     115                 :     3705091 :       TREE_PUBLIC (expr) = (unsigned) bp_unpack_value (bp, 1);
     116                 :             :     }
     117                 :             :   else
     118                 :      460452 :     bp_unpack_value (bp, 4);
     119                 :     4165543 :   TREE_ADDRESSABLE (expr) = (unsigned) bp_unpack_value (bp, 1);
     120                 :     4165543 :   TREE_THIS_VOLATILE (expr) = (unsigned) bp_unpack_value (bp, 1);
     121                 :     4165543 :   if (DECL_P (expr))
     122                 :             :     {
     123                 :      719844 :       DECL_UNSIGNED (expr) = (unsigned) bp_unpack_value (bp, 1);
     124                 :      719844 :       DECL_NAMELESS (expr) = (unsigned) bp_unpack_value (bp, 1);
     125                 :             :     }
     126                 :     3445699 :   else if (TYPE_P (expr))
     127                 :      460452 :     TYPE_UNSIGNED (expr) = (unsigned) bp_unpack_value (bp, 1);
     128                 :             :   else
     129                 :     2985247 :     bp_unpack_value (bp, 1);
     130                 :     4165543 :   TREE_ASM_WRITTEN (expr) = (unsigned) bp_unpack_value (bp, 1);
     131                 :     4165543 :   if (TYPE_P (expr))
     132                 :      460452 :     TYPE_ARTIFICIAL (expr) = (unsigned) bp_unpack_value (bp, 1);
     133                 :             :   else
     134                 :     3705091 :     TREE_NO_WARNING (expr) = (unsigned) bp_unpack_value (bp, 1);
     135                 :     4165543 :   TREE_NOTHROW (expr) = (unsigned) bp_unpack_value (bp, 1);
     136                 :     4165543 :   TREE_STATIC (expr) = (unsigned) bp_unpack_value (bp, 1);
     137                 :     4165543 :   if (TREE_CODE (expr) != TREE_BINFO)
     138                 :     4159692 :     TREE_PRIVATE (expr) = (unsigned) bp_unpack_value (bp, 1);
     139                 :             :   else
     140                 :        5851 :     bp_unpack_value (bp, 1);
     141                 :     4165543 :   TREE_PROTECTED (expr) = (unsigned) bp_unpack_value (bp, 1);
     142                 :     4165543 :   TREE_DEPRECATED (expr) = (unsigned) bp_unpack_value (bp, 1);
     143                 :     4165543 :   if (TYPE_P (expr))
     144                 :             :     {
     145                 :      460452 :       if (AGGREGATE_TYPE_P (expr))
     146                 :       85944 :         TYPE_REVERSE_STORAGE_ORDER (expr) = (unsigned) bp_unpack_value (bp, 1);
     147                 :             :       else
     148                 :      374508 :         TYPE_SATURATING (expr) = (unsigned) bp_unpack_value (bp, 1);
     149                 :             : #ifndef ACCEL_COMPILER
     150                 :      460452 :       TYPE_ADDR_SPACE (expr) = (unsigned) bp_unpack_value (bp, 8);
     151                 :             : #endif
     152                 :             :     }
     153                 :     3705091 :   else if (TREE_CODE (expr) == BIT_FIELD_REF || TREE_CODE (expr) == MEM_REF)
     154                 :             :     {
     155                 :      301357 :       REF_REVERSE_STORAGE_ORDER (expr) = (unsigned) bp_unpack_value (bp, 1);
     156                 :      301357 :       bp_unpack_value (bp, 8);
     157                 :             :     }
     158                 :     3403734 :   else if (TREE_CODE (expr) == SSA_NAME)
     159                 :             :     {
     160                 :           0 :       SSA_NAME_IS_DEFAULT_DEF (expr) = (unsigned) bp_unpack_value (bp, 1);
     161                 :           0 :       bp_unpack_value (bp, 8);
     162                 :             :     }
     163                 :     3403734 :   else if (TREE_CODE (expr) == CALL_EXPR)
     164                 :             :     {
     165                 :           0 :       CALL_EXPR_BY_DESCRIPTOR (expr) = (unsigned) bp_unpack_value (bp, 1);
     166                 :           0 :       bp_unpack_value (bp, 8);
     167                 :             :     }
     168                 :             :   else
     169                 :     3403734 :     bp_unpack_value (bp, 9);
     170                 :     4165543 : }
     171                 :             : 
     172                 :             : 
     173                 :             : /* Unpack all the non-pointer fields of the TS_INT_CST structure of
     174                 :             :    expression EXPR from bitpack BP.  */
     175                 :             : 
     176                 :             : static void
     177                 :       30126 : unpack_ts_int_cst_value_fields (struct bitpack_d *bp, tree expr)
     178                 :             : {
     179                 :       30126 :   int i;
     180                 :       61277 :   for (i = 0; i < TREE_INT_CST_EXT_NUNITS (expr); i++)
     181                 :       31151 :     TREE_INT_CST_ELT (expr, i) = bp_unpack_var_len_int (bp);
     182                 :       30126 : }
     183                 :             : 
     184                 :             : 
     185                 :             : /* Unpack all the non-pointer fields of the TS_REAL_CST structure of
     186                 :             :    expression EXPR from bitpack BP.  */
     187                 :             : 
     188                 :             : static void
     189                 :      105995 : unpack_ts_real_cst_value_fields (struct bitpack_d *bp, tree expr)
     190                 :             : {
     191                 :      105995 :   REAL_VALUE_TYPE r;
     192                 :             : 
     193                 :      105995 :   bp_unpack_real_value (bp, &r);
     194                 :      105995 :   memcpy (TREE_REAL_CST_PTR (expr), &r, sizeof (REAL_VALUE_TYPE));
     195                 :      105995 : }
     196                 :             : 
     197                 :             : 
     198                 :             : /* Unpack all the non-pointer fields of the TS_FIXED_CST structure of
     199                 :             :    expression EXPR from bitpack BP.  */
     200                 :             : 
     201                 :             : static void
     202                 :           0 : unpack_ts_fixed_cst_value_fields (struct bitpack_d *bp, tree expr)
     203                 :             : {
     204                 :           0 :   FIXED_VALUE_TYPE *fp = ggc_alloc<fixed_value> ();
     205                 :           0 :   fp->mode = as_a <scalar_mode> (bp_unpack_machine_mode (bp));
     206                 :           0 :   fp->data.low = bp_unpack_var_len_int (bp);
     207                 :           0 :   fp->data.high = bp_unpack_var_len_int (bp);
     208                 :           0 :   TREE_FIXED_CST_PTR (expr) = fp;
     209                 :           0 : }
     210                 :             : 
     211                 :             : /* Unpack all the non-pointer fields of the TS_DECL_COMMON structure
     212                 :             :    of expression EXPR from bitpack BP.  */
     213                 :             : 
     214                 :             : static void
     215                 :      719844 : unpack_ts_decl_common_value_fields (struct bitpack_d *bp, tree expr)
     216                 :             : {
     217                 :      719844 :   SET_DECL_MODE (expr, bp_unpack_machine_mode (bp));
     218                 :      719844 :   DECL_NONLOCAL (expr) = (unsigned) bp_unpack_value (bp, 1);
     219                 :      719844 :   DECL_VIRTUAL_P (expr) = (unsigned) bp_unpack_value (bp, 1);
     220                 :      719844 :   DECL_IGNORED_P (expr) = (unsigned) bp_unpack_value (bp, 1);
     221                 :      719844 :   DECL_ABSTRACT_P (expr) = (unsigned) bp_unpack_value (bp, 1);
     222                 :      719844 :   DECL_ARTIFICIAL (expr) = (unsigned) bp_unpack_value (bp, 1);
     223                 :      719844 :   DECL_USER_ALIGN (expr) = (unsigned) bp_unpack_value (bp, 1);
     224                 :      719844 :   DECL_PRESERVE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
     225                 :      719844 :   DECL_EXTERNAL (expr) = (unsigned) bp_unpack_value (bp, 1);
     226                 :      719844 :   DECL_NOT_GIMPLE_REG_P (expr) = (unsigned) bp_unpack_value (bp, 1);
     227                 :      719844 :   SET_DECL_ALIGN (expr, (unsigned) bp_unpack_var_len_unsigned (bp));
     228                 :             : #ifdef ACCEL_COMPILER
     229                 :             :   if (DECL_ALIGN (expr) > targetm.absolute_biggest_alignment)
     230                 :             :     SET_DECL_ALIGN (expr, targetm.absolute_biggest_alignment);
     231                 :             : #endif
     232                 :      719844 :   if (TREE_CODE (expr) == LABEL_DECL)
     233                 :             :     {
     234                 :       18341 :       EH_LANDING_PAD_NR (expr) = (int) bp_unpack_var_len_unsigned (bp);
     235                 :             : 
     236                 :             :       /* Always assume an initial value of -1 for LABEL_DECL_UID to
     237                 :             :          force gimple_set_bb to recreate label_to_block_map.  */
     238                 :       18341 :       LABEL_DECL_UID (expr) = -1;
     239                 :             :     }
     240                 :             : 
     241                 :      701503 :   else if (TREE_CODE (expr) == FIELD_DECL)
     242                 :             :     {
     243                 :       69731 :       DECL_PACKED (expr) = (unsigned) bp_unpack_value (bp, 1);
     244                 :       69731 :       DECL_NONADDRESSABLE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
     245                 :       69731 :       DECL_PADDING_P (expr) = (unsigned) bp_unpack_value (bp, 1);
     246                 :       69731 :       unsigned val = (unsigned) bp_unpack_value (bp, 1);
     247                 :       69731 :       if (DECL_BIT_FIELD (expr))
     248                 :        2618 :         SET_DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD (expr, val);
     249                 :             :       else
     250                 :       67113 :         SET_DECL_FIELD_ABI_IGNORED (expr, val);
     251                 :       69731 :       expr->decl_common.off_align = bp_unpack_value (bp, 8);
     252                 :       69731 :       DECL_NOT_FLEXARRAY (expr) = (unsigned) bp_unpack_value (bp, 1);
     253                 :             :     }
     254                 :             : 
     255                 :      631772 :   else if (VAR_P (expr))
     256                 :             :     {
     257                 :      219498 :       DECL_HAS_DEBUG_EXPR_P (expr) = (unsigned) bp_unpack_value (bp, 1);
     258                 :      219498 :       DECL_NONLOCAL_FRAME (expr) = (unsigned) bp_unpack_value (bp, 1);
     259                 :             :     }
     260                 :             : 
     261                 :      412274 :   else if (TREE_CODE (expr) == PARM_DECL)
     262                 :       93764 :     DECL_HIDDEN_STRING_LENGTH (expr) = (unsigned) bp_unpack_value (bp, 1);
     263                 :             : 
     264                 :      719844 :   if (TREE_CODE (expr) == RESULT_DECL
     265                 :             :       || TREE_CODE (expr) == PARM_DECL
     266                 :             :       || VAR_P (expr))
     267                 :             :     {
     268                 :      397749 :       DECL_BY_REFERENCE (expr) = (unsigned) bp_unpack_value (bp, 1);
     269                 :      397749 :       if (VAR_P (expr) || TREE_CODE (expr) == PARM_DECL)
     270                 :      313262 :         DECL_HAS_VALUE_EXPR_P (expr) = (unsigned) bp_unpack_value (bp, 1);
     271                 :             :     }
     272                 :      719844 : }
     273                 :             : 
     274                 :             : 
     275                 :             : /* Unpack all the non-pointer fields of the TS_DECL_WRTL structure
     276                 :             :    of expression EXPR from bitpack BP.  */
     277                 :             : 
     278                 :             : static void
     279                 :      626657 : unpack_ts_decl_wrtl_value_fields (struct bitpack_d *bp, tree expr)
     280                 :             : {
     281                 :      626657 :   DECL_REGISTER (expr) = (unsigned) bp_unpack_value (bp, 1);
     282                 :      626657 : }
     283                 :             : 
     284                 :             : 
     285                 :             : /* Unpack all the non-pointer fields of the TS_DECL_WITH_VIS structure
     286                 :             :    of expression EXPR from bitpack BP.  */
     287                 :             : 
     288                 :             : static void
     289                 :      429739 : unpack_ts_decl_with_vis_value_fields (struct bitpack_d *bp, tree expr)
     290                 :             : {
     291                 :      429739 :   DECL_COMMON (expr) = (unsigned) bp_unpack_value (bp, 1);
     292                 :      429739 :   DECL_DLLIMPORT_P (expr) = (unsigned) bp_unpack_value (bp, 1);
     293                 :      429739 :   DECL_WEAK (expr) = (unsigned) bp_unpack_value (bp, 1);
     294                 :      429739 :   DECL_SEEN_IN_BIND_EXPR_P (expr) = (unsigned) bp_unpack_value (bp,  1);
     295                 :      429739 :   DECL_COMDAT (expr) = (unsigned) bp_unpack_value (bp,  1);
     296                 :      429739 :   DECL_VISIBILITY (expr) = (enum symbol_visibility) bp_unpack_value (bp,  2);
     297                 :      429739 :   DECL_VISIBILITY_SPECIFIED (expr) = (unsigned) bp_unpack_value (bp,  1);
     298                 :             : 
     299                 :      429739 :   if (VAR_P (expr))
     300                 :             :     {
     301                 :      219498 :       DECL_HARD_REGISTER (expr) = (unsigned) bp_unpack_value (bp, 1);
     302                 :      219498 :       DECL_IN_CONSTANT_POOL (expr) = (unsigned) bp_unpack_value (bp, 1);
     303                 :             :     }
     304                 :             : 
     305                 :      429739 :   if (TREE_CODE (expr) == FUNCTION_DECL)
     306                 :             :     {
     307                 :      191148 :       DECL_FINAL_P (expr) = (unsigned) bp_unpack_value (bp, 1);
     308                 :      191148 :       DECL_CXX_CONSTRUCTOR_P (expr) = (unsigned) bp_unpack_value (bp, 1);
     309                 :      191148 :       DECL_CXX_DESTRUCTOR_P (expr) = (unsigned) bp_unpack_value (bp, 1);
     310                 :             :     }
     311                 :      429739 : }
     312                 :             : 
     313                 :             : 
     314                 :             : /* Unpack all the non-pointer fields of the TS_FUNCTION_DECL structure
     315                 :             :    of expression EXPR from bitpack BP.  */
     316                 :             : 
     317                 :             : static void
     318                 :      191148 : unpack_ts_function_decl_value_fields (struct bitpack_d *bp, tree expr)
     319                 :             : {
     320                 :      191148 :   built_in_class cl = bp_unpack_enum (bp, built_in_class, BUILT_IN_LAST);
     321                 :      191148 :   DECL_STATIC_CONSTRUCTOR (expr) = (unsigned) bp_unpack_value (bp, 1);
     322                 :      191148 :   DECL_STATIC_DESTRUCTOR (expr) = (unsigned) bp_unpack_value (bp, 1);
     323                 :      191148 :   DECL_UNINLINABLE (expr) = (unsigned) bp_unpack_value (bp, 1);
     324                 :      191148 :   DECL_POSSIBLY_INLINED (expr) = (unsigned) bp_unpack_value (bp, 1);
     325                 :      191148 :   DECL_IS_NOVOPS (expr) = (unsigned) bp_unpack_value (bp, 1);
     326                 :      191148 :   DECL_IS_RETURNS_TWICE (expr) = (unsigned) bp_unpack_value (bp, 1);
     327                 :      191148 :   DECL_IS_MALLOC (expr) = (unsigned) bp_unpack_value (bp, 1);
     328                 :      191148 :   FUNCTION_DECL_DECL_TYPE (expr) = (function_decl_type) bp_unpack_value (bp, 2);
     329                 :      191148 :   DECL_SET_IS_OPERATOR_DELETE (expr, (unsigned) bp_unpack_value (bp, 1));
     330                 :      191148 :   DECL_DECLARED_INLINE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
     331                 :      191148 :   DECL_STATIC_CHAIN (expr) = (unsigned) bp_unpack_value (bp, 1);
     332                 :      191148 :   DECL_NO_INLINE_WARNING_P (expr) = (unsigned) bp_unpack_value (bp, 1);
     333                 :      382296 :   DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (expr)
     334                 :      191148 :                         = (unsigned) bp_unpack_value (bp, 1);
     335                 :      191148 :   DECL_NO_LIMIT_STACK (expr) = (unsigned) bp_unpack_value (bp, 1);
     336                 :      191148 :   DECL_DISREGARD_INLINE_LIMITS (expr) = (unsigned) bp_unpack_value (bp, 1);
     337                 :      191148 :   DECL_PURE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
     338                 :      191148 :   DECL_LOOPING_CONST_OR_PURE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
     339                 :      191148 :   DECL_IS_REPLACEABLE_OPERATOR (expr) = (unsigned) bp_unpack_value (bp, 1);
     340                 :      191148 :   unsigned int fcode = 0;
     341                 :      191148 :   if (cl != NOT_BUILT_IN)
     342                 :             :     {
     343                 :       27484 :       fcode = bp_unpack_value (bp, 32);
     344                 :       27484 :       if (cl == BUILT_IN_NORMAL && fcode >= END_BUILTINS)
     345                 :           0 :         fatal_error (input_location,
     346                 :             :                      "machine independent builtin code out of range");
     347                 :       27484 :       else if (cl == BUILT_IN_MD)
     348                 :             :         {
     349                 :         130 :           tree result = targetm.builtin_decl (fcode, true);
     350                 :         130 :           if (!result || result == error_mark_node)
     351                 :           0 :             fatal_error (input_location,
     352                 :             :                          "target specific builtin not available");
     353                 :             :         }
     354                 :             :     }
     355                 :      191148 :   set_decl_built_in_function (expr, cl, fcode);
     356                 :      191148 : }
     357                 :             : 
     358                 :             : 
     359                 :             : /* Unpack all the non-pointer fields of the TS_TYPE_COMMON structure
     360                 :             :    of expression EXPR from bitpack BP.  */
     361                 :             : 
     362                 :             : static void
     363                 :      460452 : unpack_ts_type_common_value_fields (struct bitpack_d *bp, tree expr)
     364                 :             : {
     365                 :      460452 :   machine_mode mode;
     366                 :             : 
     367                 :      460452 :   mode = bp_unpack_machine_mode (bp);
     368                 :      460452 :   SET_TYPE_MODE (expr, mode);
     369                 :             :   /* TYPE_NO_FORCE_BLK is private to stor-layout and need
     370                 :             :      no streaming.  */
     371                 :      460452 :   TYPE_PACKED (expr) = (unsigned) bp_unpack_value (bp, 1);
     372                 :      460452 :   TYPE_RESTRICT (expr) = (unsigned) bp_unpack_value (bp, 1);
     373                 :      460452 :   TYPE_USER_ALIGN (expr) = (unsigned) bp_unpack_value (bp, 1);
     374                 :      460452 :   TYPE_READONLY (expr) = (unsigned) bp_unpack_value (bp, 1);
     375                 :      460452 :   TYPE_LANG_FLAG_0 (expr) = (unsigned) bp_unpack_value (bp, 1);
     376                 :      460452 :   if (RECORD_OR_UNION_TYPE_P (expr))
     377                 :             :     {
     378                 :       51861 :       TYPE_TRANSPARENT_AGGR (expr) = (unsigned) bp_unpack_value (bp, 1);
     379                 :       51861 :       TYPE_FINAL_P (expr) = (unsigned) bp_unpack_value (bp, 1);
     380                 :       51861 :       TYPE_CXX_ODR_P (expr) = (unsigned) bp_unpack_value (bp, 1);
     381                 :             :     }
     382                 :      408591 :   else if (TREE_CODE (expr) == ARRAY_TYPE)
     383                 :       34083 :     TYPE_NONALIASED_COMPONENT (expr) = (unsigned) bp_unpack_value (bp, 1);
     384                 :      460452 :   if (TREE_CODE (expr) == ARRAY_TYPE || TREE_CODE (expr) == INTEGER_TYPE)
     385                 :       82921 :     TYPE_STRING_FLAG (expr) = (unsigned) bp_unpack_value (bp, 1);
     386                 :      460452 :   if (AGGREGATE_TYPE_P (expr))
     387                 :       85944 :     TYPE_TYPELESS_STORAGE (expr) = (unsigned) bp_unpack_value (bp, 1);
     388                 :      460452 :   TYPE_EMPTY_P (expr) = (unsigned) bp_unpack_value (bp, 1);
     389                 :      460452 :   if (FUNC_OR_METHOD_TYPE_P (expr))
     390                 :      150675 :     TYPE_NO_NAMED_ARGS_STDARG_P (expr) = (unsigned) bp_unpack_value (bp, 1);
     391                 :      460452 :   if (RECORD_OR_UNION_TYPE_P (expr))
     392                 :       51861 :     TYPE_INCLUDES_FLEXARRAY (expr) = (unsigned) bp_unpack_value (bp, 1);
     393                 :      460452 :   TYPE_PRECISION_RAW (expr) = bp_unpack_var_len_unsigned (bp);
     394                 :      460452 :   SET_TYPE_ALIGN (expr, bp_unpack_var_len_unsigned (bp));
     395                 :             : #ifdef ACCEL_COMPILER
     396                 :             :   if (TYPE_ALIGN (expr) > targetm.absolute_biggest_alignment)
     397                 :             :     SET_TYPE_ALIGN (expr, targetm.absolute_biggest_alignment);
     398                 :             : #endif
     399                 :      460452 : }
     400                 :             : 
     401                 :             : 
     402                 :             : /* Unpack all the non-pointer fields of the TS_BLOCK structure
     403                 :             :    of expression EXPR from bitpack BP.  */
     404                 :             : 
     405                 :             : static void
     406                 :      263995 : unpack_ts_block_value_fields (class data_in *data_in,
     407                 :             :                               struct bitpack_d *bp, tree expr)
     408                 :             : {
     409                 :             :   /* BLOCK_NUMBER is recomputed.  */
     410                 :      263995 :   stream_input_location (&BLOCK_SOURCE_LOCATION (expr), bp, data_in);
     411                 :      263995 : }
     412                 :             : 
     413                 :             : /* Unpack all the non-pointer fields of the TS_TRANSLATION_UNIT_DECL
     414                 :             :    structure of expression EXPR from bitpack BP.  */
     415                 :             : 
     416                 :             : static void
     417                 :       23331 : unpack_ts_translation_unit_decl_value_fields (class data_in *data_in,
     418                 :             :                                               struct bitpack_d *bp, tree expr)
     419                 :             : {
     420                 :       23331 :   TRANSLATION_UNIT_LANGUAGE (expr) = xstrdup (bp_unpack_string (data_in, bp));
     421                 :       23331 :   vec_safe_push (all_translation_units, expr);
     422                 :       23331 : }
     423                 :             : 
     424                 :             : 
     425                 :             : /* Unpack all the non-pointer fields of the TS_OMP_CLAUSE
     426                 :             :    structure of expression EXPR from bitpack BP.  */
     427                 :             : 
     428                 :             : static void
     429                 :         202 : unpack_ts_omp_clause_value_fields (class data_in *data_in,
     430                 :             :                                    struct bitpack_d *bp, tree expr)
     431                 :             : {
     432                 :         202 :   stream_input_location (&OMP_CLAUSE_LOCATION (expr), bp, data_in);
     433                 :         202 :   switch (OMP_CLAUSE_CODE (expr))
     434                 :             :     {
     435                 :           0 :     case OMP_CLAUSE_DEFAULT:
     436                 :           0 :       OMP_CLAUSE_DEFAULT_KIND (expr)
     437                 :           0 :         = bp_unpack_enum (bp, omp_clause_default_kind,
     438                 :             :                           OMP_CLAUSE_DEFAULT_LAST);
     439                 :           0 :       break;
     440                 :           0 :     case OMP_CLAUSE_SCHEDULE:
     441                 :           0 :       OMP_CLAUSE_SCHEDULE_KIND (expr)
     442                 :           0 :         = bp_unpack_enum (bp, omp_clause_schedule_kind,
     443                 :             :                           OMP_CLAUSE_SCHEDULE_LAST);
     444                 :           0 :       break;
     445                 :           0 :     case OMP_CLAUSE_DEPEND:
     446                 :           0 :       OMP_CLAUSE_DEPEND_KIND (expr)
     447                 :           0 :         = bp_unpack_enum (bp, omp_clause_depend_kind, OMP_CLAUSE_DEPEND_LAST);
     448                 :           0 :       break;
     449                 :           0 :     case OMP_CLAUSE_DOACROSS:
     450                 :           0 :       OMP_CLAUSE_DOACROSS_KIND (expr)
     451                 :           0 :         = bp_unpack_enum (bp, omp_clause_doacross_kind,
     452                 :             :                           OMP_CLAUSE_DOACROSS_LAST);
     453                 :           0 :       break;
     454                 :           0 :     case OMP_CLAUSE_MAP:
     455                 :           0 :       OMP_CLAUSE_SET_MAP_KIND (expr, bp_unpack_enum (bp, gomp_map_kind,
     456                 :             :                                                      GOMP_MAP_LAST));
     457                 :           0 :       break;
     458                 :           0 :     case OMP_CLAUSE_PROC_BIND:
     459                 :           0 :       OMP_CLAUSE_PROC_BIND_KIND (expr)
     460                 :           0 :         = bp_unpack_enum (bp, omp_clause_proc_bind_kind,
     461                 :             :                           OMP_CLAUSE_PROC_BIND_LAST);
     462                 :           0 :       break;
     463                 :           0 :     case OMP_CLAUSE_REDUCTION:
     464                 :           0 :     case OMP_CLAUSE_TASK_REDUCTION:
     465                 :           0 :     case OMP_CLAUSE_IN_REDUCTION:
     466                 :           0 :       OMP_CLAUSE_REDUCTION_CODE (expr)
     467                 :           0 :         = bp_unpack_enum (bp, tree_code, MAX_TREE_CODES);
     468                 :           0 :       break;
     469                 :             :     default:
     470                 :             :       break;
     471                 :             :     }
     472                 :         202 : }
     473                 :             : 
     474                 :             : 
     475                 :             : /* Read all the language-independent bitfield values for EXPR from IB.
     476                 :             :    Return the partially unpacked bitpack so the caller can unpack any other
     477                 :             :    bitfield values that the writer may have written.  */
     478                 :             : 
     479                 :             : void
     480                 :     4165543 : streamer_read_tree_bitfields (class lto_input_block *ib,
     481                 :             :                               class data_in *data_in, tree expr)
     482                 :             : {
     483                 :     4165543 :   enum tree_code code;
     484                 :     4165543 :   struct bitpack_d bp;
     485                 :             : 
     486                 :             :   /* Read the bitpack of non-pointer values from IB.  */
     487                 :     4165543 :   bp = streamer_read_bitpack (ib);
     488                 :             : 
     489                 :             :   /* The first word in BP contains the code of the tree that we
     490                 :             :      are about to read.  */
     491                 :     4165543 :   if (streamer_debugging)
     492                 :             :     {
     493                 :             :       code = (enum tree_code) bp_unpack_value (&bp, 16);
     494                 :             :       lto_tag_check (lto_tree_code_to_tag (code),
     495                 :             :                      lto_tree_code_to_tag (TREE_CODE (expr)));
     496                 :             :     }
     497                 :     4165543 :   code = TREE_CODE (expr);
     498                 :             : 
     499                 :             :   /* Note that all these functions are highly sensitive to changes in
     500                 :             :      the types and sizes of each of the fields being packed.  */
     501                 :     4165543 :   unpack_ts_base_value_fields (&bp, expr);
     502                 :             : 
     503                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_INT_CST))
     504                 :       30126 :     unpack_ts_int_cst_value_fields (&bp, expr);
     505                 :             : 
     506                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_REAL_CST))
     507                 :      105995 :     unpack_ts_real_cst_value_fields (&bp, expr);
     508                 :             : 
     509                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_FIXED_CST))
     510                 :           0 :     unpack_ts_fixed_cst_value_fields (&bp, expr);
     511                 :             : 
     512                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_DECL_MINIMAL))
     513                 :      719844 :     stream_input_location (&DECL_SOURCE_LOCATION (expr), &bp, data_in);
     514                 :             : 
     515                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
     516                 :      719844 :     unpack_ts_decl_common_value_fields (&bp, expr);
     517                 :             : 
     518                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_DECL_WRTL))
     519                 :      626657 :     unpack_ts_decl_wrtl_value_fields (&bp, expr);
     520                 :             : 
     521                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
     522                 :      429739 :     unpack_ts_decl_with_vis_value_fields (&bp, expr);
     523                 :             : 
     524                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_FUNCTION_DECL))
     525                 :      191148 :     unpack_ts_function_decl_value_fields (&bp, expr);
     526                 :             : 
     527                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_TYPE_COMMON))
     528                 :      460452 :     unpack_ts_type_common_value_fields (&bp, expr);
     529                 :             : 
     530                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_EXP))
     531                 :             :     {
     532                 :     1274270 :       stream_input_location (&EXPR_CHECK (expr)->exp.locus, &bp, data_in);
     533                 :     1274270 :       if (code == MEM_REF
     534                 :     1274270 :           || code == TARGET_MEM_REF)
     535                 :             :         {
     536                 :      596650 :           MR_DEPENDENCE_CLIQUE (expr)
     537                 :      298325 :             = (unsigned)bp_unpack_value (&bp, sizeof (short) * 8);
     538                 :      298325 :           if (MR_DEPENDENCE_CLIQUE (expr) != 0)
     539                 :       19304 :             MR_DEPENDENCE_BASE (expr)
     540                 :        9652 :               = (unsigned)bp_unpack_value (&bp, sizeof (short) * 8);
     541                 :             :         }
     542                 :      975945 :       else if (code == CALL_EXPR)
     543                 :           0 :         CALL_EXPR_IFN (expr) = bp_unpack_enum (&bp, internal_fn, IFN_LAST);
     544                 :             :     }
     545                 :             : 
     546                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_BLOCK))
     547                 :      263995 :     unpack_ts_block_value_fields (data_in, &bp, expr);
     548                 :             : 
     549                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_TRANSLATION_UNIT_DECL))
     550                 :       23331 :     unpack_ts_translation_unit_decl_value_fields (data_in, &bp, expr);
     551                 :             : 
     552                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_OPTIMIZATION))
     553                 :       22977 :     cl_optimization_stream_in (data_in, &bp, TREE_OPTIMIZATION (expr));
     554                 :             : 
     555                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
     556                 :             :     {
     557                 :       52038 :       CLOBBER_KIND (expr)
     558                 :       26019 :         = bp_unpack_enum (&bp, clobber_kind, CLOBBER_LAST);
     559                 :       26019 :       unsigned HOST_WIDE_INT length = bp_unpack_var_len_unsigned (&bp);
     560                 :       26019 :       if (length > 0)
     561                 :       11404 :         vec_safe_grow (CONSTRUCTOR_ELTS (expr), length, true);
     562                 :             :     }
     563                 :             : 
     564                 :             : #ifndef ACCEL_COMPILER
     565                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_TARGET_OPTION))
     566                 :             :     {
     567                 :       22617 :       cl_target_option_stream_in (data_in, &bp, TREE_TARGET_OPTION (expr));
     568                 :       22617 :       if (targetm.target_option.post_stream_in)
     569                 :       22617 :         targetm.target_option.post_stream_in (TREE_TARGET_OPTION (expr));
     570                 :             :     }
     571                 :             : #endif
     572                 :             : 
     573                 :     4165543 :   if (code == OMP_CLAUSE)
     574                 :         202 :     unpack_ts_omp_clause_value_fields (data_in, &bp, expr);
     575                 :     4165543 : }
     576                 :             : 
     577                 :             : 
     578                 :             : /* Materialize a new tree from input block IB using descriptors in
     579                 :             :    DATA_IN.  The code for the new tree should match TAG.  Store in
     580                 :             :    *IX_P the index into the reader cache where the new tree is stored.  */
     581                 :             : 
     582                 :             : tree
     583                 :     4165543 : streamer_alloc_tree (class lto_input_block *ib, class data_in *data_in,
     584                 :             :                      enum LTO_tags tag)
     585                 :             : {
     586                 :     4165543 :   enum tree_code code;
     587                 :     4165543 :   tree result;
     588                 :             : 
     589                 :     4165543 :   result = NULL_TREE;
     590                 :             : 
     591                 :     4165543 :   code = lto_tag_to_tree_code (tag);
     592                 :             : 
     593                 :             :   /* We should never see an SSA_NAME tree.  Only the version numbers of
     594                 :             :      SSA names are ever written out.  See input_ssa_names.  */
     595                 :     4165543 :   gcc_assert (code != SSA_NAME);
     596                 :             : 
     597                 :             :   /* Instantiate a new tree using the header data.  */
     598                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_STRING))
     599                 :      169091 :     result = streamer_read_string_cst (data_in, ib);
     600                 :     3996452 :   else if (CODE_CONTAINS_STRUCT (code, TS_IDENTIFIER))
     601                 :      664921 :     result = input_identifier (data_in, ib);
     602                 :     3331531 :   else if (CODE_CONTAINS_STRUCT (code, TS_VEC))
     603                 :             :     {
     604                 :           0 :       HOST_WIDE_INT len = streamer_read_hwi (ib);
     605                 :           0 :       result = make_tree_vec (len);
     606                 :             :     }
     607                 :     3331531 :   else if (CODE_CONTAINS_STRUCT (code, TS_VECTOR))
     608                 :             :     {
     609                 :        2618 :       bitpack_d bp = streamer_read_bitpack (ib);
     610                 :        2618 :       unsigned int log2_npatterns = bp_unpack_value (&bp, 8);
     611                 :        2618 :       unsigned int nelts_per_pattern = bp_unpack_value (&bp, 8);
     612                 :        2618 :       result = make_vector (log2_npatterns, nelts_per_pattern);
     613                 :             :     }
     614                 :     3328913 :   else if (CODE_CONTAINS_STRUCT (code, TS_BINFO))
     615                 :             :     {
     616                 :        5851 :       unsigned HOST_WIDE_INT len = streamer_read_uhwi (ib);
     617                 :        5851 :       result = make_tree_binfo (len);
     618                 :             :     }
     619                 :     3323062 :   else if (CODE_CONTAINS_STRUCT (code, TS_INT_CST))
     620                 :             :     {
     621                 :       30126 :       unsigned HOST_WIDE_INT len = streamer_read_uhwi (ib);
     622                 :       30126 :       unsigned HOST_WIDE_INT ext_len = streamer_read_uhwi (ib);
     623                 :       30126 :       result = make_int_cst (len, ext_len);
     624                 :             :     }
     625                 :     3292936 :   else if (code == CALL_EXPR)
     626                 :             :     {
     627                 :           0 :       unsigned HOST_WIDE_INT nargs = streamer_read_uhwi (ib);
     628                 :           0 :       return build_vl_exp (CALL_EXPR, nargs + 3);
     629                 :             :     }
     630                 :     3292936 :   else if (code == OMP_CLAUSE)
     631                 :             :     {
     632                 :         202 :       enum omp_clause_code subcode
     633                 :         202 :         = (enum omp_clause_code) streamer_read_uhwi (ib);
     634                 :         202 :       return build_omp_clause (UNKNOWN_LOCATION, subcode);
     635                 :             :     }
     636                 :             :   else
     637                 :             :     {
     638                 :             :       /* For all other nodes, materialize the tree with a raw
     639                 :             :          make_node call.  */
     640                 :     3292734 :       result = make_node (code);
     641                 :             :     }
     642                 :             : 
     643                 :             :   return result;
     644                 :             : }
     645                 :             : 
     646                 :             : 
     647                 :             : /* Read all pointer fields in the TS_COMMON structure of EXPR from input
     648                 :             :    block IB.  DATA_IN contains tables and descriptors for the
     649                 :             :    file being read.  */
     650                 :             : 
     651                 :             : 
     652                 :             : static void
     653                 :     3855954 : lto_input_ts_common_tree_pointers (class lto_input_block *ib,
     654                 :             :                                    class data_in *data_in, tree expr)
     655                 :             : {
     656                 :     3855954 :   if (TREE_CODE (expr) != IDENTIFIER_NODE)
     657                 :     3191033 :     TREE_TYPE (expr) = stream_read_tree_ref (ib, data_in);
     658                 :     3855954 : }
     659                 :             : 
     660                 :             : 
     661                 :             : /* Read all pointer fields in the TS_VECTOR structure of EXPR from input
     662                 :             :    block IB.  DATA_IN contains tables and descriptors for the
     663                 :             :    file being read.  */
     664                 :             : 
     665                 :             : static void
     666                 :        2618 : lto_input_ts_vector_tree_pointers (class lto_input_block *ib,
     667                 :             :                                    class data_in *data_in, tree expr)
     668                 :             : {
     669                 :        2618 :   unsigned int count = vector_cst_encoded_nelts (expr);
     670                 :       11564 :   for (unsigned int i = 0; i < count; ++i)
     671                 :        8946 :     VECTOR_CST_ENCODED_ELT (expr, i) = stream_read_tree_ref (ib, data_in);
     672                 :        2618 : }
     673                 :             : 
     674                 :             : 
     675                 :             : /* Read all pointer fields in the TS_POLY_INT_CST structure of EXPR from
     676                 :             :    input block IB.  DATA_IN contains tables and descriptors for the
     677                 :             :    file being read.  */
     678                 :             : 
     679                 :             : static void
     680                 :           0 : lto_input_ts_poly_tree_pointers (class lto_input_block *ib,
     681                 :             :                                  class data_in *data_in, tree expr)
     682                 :             : {
     683                 :           0 :   for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
     684                 :           0 :     POLY_INT_CST_COEFF (expr, i) = stream_read_tree_ref (ib, data_in);
     685                 :           0 : }
     686                 :             : 
     687                 :             : 
     688                 :             : /* Read all pointer fields in the TS_COMPLEX structure of EXPR from input
     689                 :             :    block IB.  DATA_IN contains tables and descriptors for the
     690                 :             :    file being read.  */
     691                 :             : 
     692                 :             : static void
     693                 :        6854 : lto_input_ts_complex_tree_pointers (class lto_input_block *ib,
     694                 :             :                                     class data_in *data_in, tree expr)
     695                 :             : {
     696                 :        6854 :   TREE_REALPART (expr) = stream_read_tree_ref (ib, data_in);
     697                 :        6854 :   TREE_IMAGPART (expr) = stream_read_tree_ref (ib, data_in);
     698                 :        6854 : }
     699                 :             : 
     700                 :             : 
     701                 :             : /* Read all pointer fields in the TS_DECL_MINIMAL structure of EXPR
     702                 :             :    from input block IB.  DATA_IN contains tables and descriptors for the
     703                 :             :    file being read.  */
     704                 :             : 
     705                 :             : static void
     706                 :      719844 : lto_input_ts_decl_minimal_tree_pointers (class lto_input_block *ib,
     707                 :             :                                          class data_in *data_in, tree expr)
     708                 :             : {
     709                 :      719844 :   DECL_NAME (expr) = stream_read_tree_ref (ib, data_in);
     710                 :      719844 :   DECL_CONTEXT (expr) = stream_read_tree_ref (ib, data_in);
     711                 :      719844 : }
     712                 :             : 
     713                 :             : 
     714                 :             : /* Read all pointer fields in the TS_DECL_COMMON structure of EXPR from
     715                 :             :    input block IB.  DATA_IN contains tables and descriptors for the
     716                 :             :    file being read.  */
     717                 :             : 
     718                 :             : static void
     719                 :      719844 : lto_input_ts_decl_common_tree_pointers (class lto_input_block *ib,
     720                 :             :                                         class data_in *data_in, tree expr)
     721                 :             : {
     722                 :      719844 :   DECL_SIZE (expr) = stream_read_tree_ref (ib, data_in);
     723                 :      719844 :   DECL_SIZE_UNIT (expr) = stream_read_tree_ref (ib, data_in);
     724                 :      719844 :   DECL_ATTRIBUTES (expr) = stream_read_tree_ref (ib, data_in);
     725                 :      719844 :   DECL_ABSTRACT_ORIGIN (expr) = stream_read_tree_ref (ib, data_in);
     726                 :             : 
     727                 :      500346 :   if ((VAR_P (expr) || TREE_CODE (expr) == PARM_DECL)
     728                 :      813608 :       && DECL_HAS_VALUE_EXPR_P (expr))
     729                 :        3607 :     SET_DECL_VALUE_EXPR (expr, stream_read_tree_ref (ib, data_in));
     730                 :             : 
     731                 :      719844 :   if (VAR_P (expr)
     732                 :      719844 :       && DECL_HAS_DEBUG_EXPR_P (expr))
     733                 :             :     {
     734                 :        1048 :       tree dexpr = stream_read_tree_ref (ib, data_in);
     735                 :        1048 :       if (dexpr)
     736                 :        1048 :         SET_DECL_DEBUG_EXPR (expr, dexpr);
     737                 :             :     }
     738                 :      719844 : }
     739                 :             : 
     740                 :             : 
     741                 :             : /* Read all pointer fields in the TS_DECL_NON_COMMON structure of
     742                 :             :    EXPR from input block IB.  DATA_IN contains tables and descriptors for the
     743                 :             :    file being read.  */
     744                 :             : 
     745                 :             : static void
     746                 :           0 : lto_input_ts_decl_non_common_tree_pointers (class lto_input_block *,
     747                 :             :                                             class data_in *, tree)
     748                 :             : {
     749                 :           0 : }
     750                 :             : 
     751                 :             : 
     752                 :             : /* Read all pointer fields in the TS_DECL_WITH_VIS structure of EXPR
     753                 :             :    from input block IB.  DATA_IN contains tables and descriptors for the
     754                 :             :    file being read.  */
     755                 :             : 
     756                 :             : static void
     757                 :      429739 : lto_input_ts_decl_with_vis_tree_pointers (class lto_input_block *ib,
     758                 :             :                                           class data_in *data_in, tree expr)
     759                 :             : {
     760                 :      429739 :   tree id;
     761                 :             : 
     762                 :      429739 :   id = stream_read_tree_ref (ib, data_in);
     763                 :      429739 :   if (id)
     764                 :             :     {
     765                 :      276778 :       gcc_assert (TREE_CODE (id) == IDENTIFIER_NODE);
     766                 :      276778 :       SET_DECL_ASSEMBLER_NAME (expr, id);
     767                 :             :     }
     768                 :      429739 : }
     769                 :             : 
     770                 :             : 
     771                 :             : /* Read all pointer fields in the TS_FIELD_DECL structure of EXPR from
     772                 :             :    input block IB.  DATA_IN contains tables and descriptors for the
     773                 :             :    file being read.  */
     774                 :             : 
     775                 :             : static void
     776                 :       69731 : lto_input_ts_field_decl_tree_pointers (class lto_input_block *ib,
     777                 :             :                                        class data_in *data_in, tree expr)
     778                 :             : {
     779                 :       69731 :   DECL_FIELD_OFFSET (expr) = stream_read_tree_ref (ib, data_in);
     780                 :       69731 :   DECL_BIT_FIELD_TYPE (expr) = stream_read_tree_ref (ib, data_in);
     781                 :       69731 :   DECL_BIT_FIELD_REPRESENTATIVE (expr) = stream_read_tree_ref (ib, data_in);
     782                 :       69731 :   DECL_FIELD_BIT_OFFSET (expr) = stream_read_tree_ref (ib, data_in);
     783                 :       69731 : }
     784                 :             : 
     785                 :             : 
     786                 :             : /* Read all pointer fields in the TS_FUNCTION_DECL structure of EXPR
     787                 :             :    from input block IB.  DATA_IN contains tables and descriptors for the
     788                 :             :    file being read.  */
     789                 :             : 
     790                 :             : static void
     791                 :      191148 : lto_input_ts_function_decl_tree_pointers (class lto_input_block *ib,
     792                 :             :                                           class data_in *data_in, tree expr)
     793                 :             : {
     794                 :             :   /* DECL_STRUCT_FUNCTION is loaded on demand by cgraph_get_body.  */
     795                 :      191148 :   DECL_FUNCTION_PERSONALITY (expr) = stream_read_tree_ref (ib, data_in);
     796                 :             : #ifndef ACCEL_COMPILER
     797                 :      191148 :   DECL_FUNCTION_SPECIFIC_TARGET (expr) = stream_read_tree_ref (ib, data_in);
     798                 :             : #endif
     799                 :      382296 :   DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr)
     800                 :      191148 :     = stream_read_tree_ref (ib, data_in);
     801                 :             : #ifdef ACCEL_COMPILER
     802                 :             :   {
     803                 :             :     tree opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr);
     804                 :             :     if (opts)
     805                 :             :       {
     806                 :             :         struct gcc_options tmp, tmp_set;
     807                 :             :         init_options_struct (&tmp, NULL);
     808                 :             :         memset (&tmp_set, 0, sizeof (tmp_set));
     809                 :             :         cl_optimization_restore (&tmp, &tmp_set, TREE_OPTIMIZATION (opts));
     810                 :             :         finish_options (&tmp, &tmp_set, UNKNOWN_LOCATION);
     811                 :             :         opts = build_optimization_node (&tmp, &tmp_set);
     812                 :             :         DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr) = opts;
     813                 :             :       }
     814                 :             :   }
     815                 :             : #endif
     816                 :      191148 : }
     817                 :             : 
     818                 :             : 
     819                 :             : /* Read all pointer fields in the TS_TYPE_COMMON structure of EXPR from
     820                 :             :    input block IB.  DATA_IN contains tables and descriptors for the file
     821                 :             :    being read.  */
     822                 :             : 
     823                 :             : static void
     824                 :      460452 : lto_input_ts_type_common_tree_pointers (class lto_input_block *ib,
     825                 :             :                                         class data_in *data_in, tree expr)
     826                 :             : {
     827                 :      460452 :   TYPE_SIZE (expr) = stream_read_tree_ref (ib, data_in);
     828                 :      460452 :   TYPE_SIZE_UNIT (expr) = stream_read_tree_ref (ib, data_in);
     829                 :      460452 :   TYPE_ATTRIBUTES (expr) = stream_read_tree_ref (ib, data_in);
     830                 :      460452 :   TYPE_NAME (expr) = stream_read_tree_ref (ib, data_in);
     831                 :             :   /* Do not stream TYPE_POINTER_TO or TYPE_REFERENCE_TO.  They will be
     832                 :             :      reconstructed during fixup.  */
     833                 :             :   /* Do not stream TYPE_NEXT_VARIANT, we reconstruct the variant lists
     834                 :             :      during fixup.  */
     835                 :      460452 :   TYPE_MAIN_VARIANT (expr) = stream_read_tree_ref (ib, data_in);
     836                 :      460452 :   TYPE_CONTEXT (expr) = stream_read_tree_ref (ib, data_in);
     837                 :             :   /* TYPE_CANONICAL gets re-computed during type merging.  */
     838                 :      460452 :   TYPE_CANONICAL (expr) = NULL_TREE;
     839                 :      460452 : }
     840                 :             : 
     841                 :             : /* Read all pointer fields in the TS_TYPE_NON_COMMON structure of EXPR
     842                 :             :    from input block IB.  DATA_IN contains tables and descriptors for the
     843                 :             :    file being read.  */
     844                 :             : 
     845                 :             : static void
     846                 :      460452 : lto_input_ts_type_non_common_tree_pointers (class lto_input_block *ib,
     847                 :             :                                             class data_in *data_in,
     848                 :             :                                             tree expr)
     849                 :             : {
     850                 :      460452 :   if (TREE_CODE (expr) == ARRAY_TYPE)
     851                 :       34083 :     TYPE_DOMAIN (expr) = stream_read_tree_ref (ib, data_in);
     852                 :      426369 :   else if (RECORD_OR_UNION_TYPE_P (expr))
     853                 :       51861 :     TYPE_FIELDS (expr) = streamer_read_chain (ib, data_in);
     854                 :      374508 :   else if (FUNC_OR_METHOD_TYPE_P (expr))
     855                 :      150675 :     TYPE_ARG_TYPES (expr) = stream_read_tree_ref (ib, data_in);
     856                 :             : 
     857                 :      460452 :   if (!POINTER_TYPE_P (expr))
     858                 :      295366 :     TYPE_MIN_VALUE_RAW (expr) = stream_read_tree_ref (ib, data_in);
     859                 :      460452 :   TYPE_MAX_VALUE_RAW (expr) = stream_read_tree_ref (ib, data_in);
     860                 :      460452 : }
     861                 :             : 
     862                 :             : 
     863                 :             : /* Read all pointer fields in the TS_LIST structure of EXPR from input
     864                 :             :    block IB.  DATA_IN contains tables and descriptors for the
     865                 :             :    file being read.  */
     866                 :             : 
     867                 :             : static void
     868                 :      389711 : lto_input_ts_list_tree_pointers (class lto_input_block *ib,
     869                 :             :                                  class data_in *data_in, tree expr)
     870                 :             : {
     871                 :      389711 :   TREE_PURPOSE (expr) = stream_read_tree_ref (ib, data_in);
     872                 :      389711 :   TREE_VALUE (expr) = stream_read_tree_ref (ib, data_in);
     873                 :      389711 :   TREE_CHAIN (expr) = stream_read_tree_ref (ib, data_in);
     874                 :      389711 : }
     875                 :             : 
     876                 :             : 
     877                 :             : /* Read all pointer fields in the TS_VEC structure of EXPR from input
     878                 :             :    block IB.  DATA_IN contains tables and descriptors for the
     879                 :             :    file being read.  */
     880                 :             : 
     881                 :             : static void
     882                 :           0 : lto_input_ts_vec_tree_pointers (class lto_input_block *ib,
     883                 :             :                                 class data_in *data_in, tree expr)
     884                 :             : {
     885                 :           0 :   int i;
     886                 :             : 
     887                 :             :   /* Note that TREE_VEC_LENGTH was read by streamer_alloc_tree to
     888                 :             :      instantiate EXPR.  */
     889                 :           0 :   for (i = 0; i < TREE_VEC_LENGTH (expr); i++)
     890                 :           0 :     TREE_VEC_ELT (expr, i) = stream_read_tree_ref (ib, data_in);
     891                 :           0 : }
     892                 :             : 
     893                 :             : 
     894                 :             : /* Read all pointer fields in the TS_EXP structure of EXPR from input
     895                 :             :    block IB.  DATA_IN contains tables and descriptors for the
     896                 :             :    file being read.  */
     897                 :             : 
     898                 :             : 
     899                 :             : static void
     900                 :     1274270 : lto_input_ts_exp_tree_pointers (class lto_input_block *ib,
     901                 :             :                                 class data_in *data_in, tree expr)
     902                 :             : {
     903                 :     1274270 :   int i;
     904                 :     1274270 :   tree block;
     905                 :             : 
     906                 :     3092463 :   for (i = 0; i < TREE_OPERAND_LENGTH (expr); i++)
     907                 :     1818193 :     TREE_OPERAND (expr, i) = stream_read_tree_ref (ib, data_in);
     908                 :             : 
     909                 :     1274270 :   block = stream_read_tree_ref (ib, data_in);
     910                 :             : 
     911                 :             :   /* TODO: Block is stored in the locus information.  It may make more sense to
     912                 :             :      to make it go via the location cache.  */
     913                 :     1274270 :   if (block)
     914                 :             :     {
     915                 :      215469 :       data_in->location_cache.apply_location_cache ();
     916                 :      215469 :       TREE_SET_BLOCK (expr, block);
     917                 :             :     }
     918                 :     1274270 : }
     919                 :             : 
     920                 :             : 
     921                 :             : /* Read all pointer fields in the TS_BLOCK structure of EXPR from input
     922                 :             :    block IB.  DATA_IN contains tables and descriptors for the
     923                 :             :    file being read.  */
     924                 :             : 
     925                 :             : static void
     926                 :      263995 : lto_input_ts_block_tree_pointers (class lto_input_block *ib,
     927                 :             :                                   class data_in *data_in, tree expr)
     928                 :             : {
     929                 :      263995 :   BLOCK_VARS (expr) = streamer_read_chain (ib, data_in);
     930                 :             : 
     931                 :      263995 :   BLOCK_SUPERCONTEXT (expr) = stream_read_tree_ref (ib, data_in);
     932                 :      263995 :   BLOCK_ABSTRACT_ORIGIN (expr) = stream_read_tree_ref (ib, data_in);
     933                 :             :   /* We may end up prevailing a decl with DECL_ORIGIN (t) != t here
     934                 :             :      which breaks the invariant that BLOCK_ABSTRACT_ORIGIN is the
     935                 :             :      ultimate origin.  Fixup here.
     936                 :             :      ???  This should get fixed with moving to DIE references.  */
     937                 :      263995 :   if (DECL_P (BLOCK_ORIGIN (expr)))
     938                 :       59189 :     BLOCK_ABSTRACT_ORIGIN (expr) = DECL_ORIGIN (BLOCK_ABSTRACT_ORIGIN (expr));
     939                 :             :   /* Do not stream BLOCK_NONLOCALIZED_VARS.  We cannot handle debug information
     940                 :             :      for early inlined BLOCKs so drop it on the floor instead of ICEing in
     941                 :             :      dwarf2out.cc.  */
     942                 :             : 
     943                 :             :   /* BLOCK_FRAGMENT_ORIGIN and BLOCK_FRAGMENT_CHAIN is not live at LTO
     944                 :             :      streaming time.  */
     945                 :             : 
     946                 :             :   /* We re-compute BLOCK_SUBBLOCKS of our parent here instead
     947                 :             :      of streaming it.  For non-BLOCK BLOCK_SUPERCONTEXTs we still
     948                 :             :      stream the child relationship explicitly.  */
     949                 :      263995 :   if (BLOCK_SUPERCONTEXT (expr)
     950                 :      263995 :       && TREE_CODE (BLOCK_SUPERCONTEXT (expr)) == BLOCK)
     951                 :             :     {
     952                 :      167103 :       BLOCK_CHAIN (expr) = BLOCK_SUBBLOCKS (BLOCK_SUPERCONTEXT (expr));
     953                 :      167103 :       BLOCK_SUBBLOCKS (BLOCK_SUPERCONTEXT (expr)) = expr;
     954                 :             :     }
     955                 :             : 
     956                 :             :   /* The global block is rooted at the TU decl.  Hook it here to
     957                 :             :      avoid the need to stream in this block during WPA time.  */
     958                 :       96892 :   else if (BLOCK_SUPERCONTEXT (expr)
     959                 :       96892 :            && TREE_CODE (BLOCK_SUPERCONTEXT (expr)) == TRANSLATION_UNIT_DECL)
     960                 :           0 :     DECL_INITIAL (BLOCK_SUPERCONTEXT (expr)) = expr;
     961                 :             : 
     962                 :             :   /* The function-level block is connected at the time we read in
     963                 :             :      function bodies for the same reason.  */
     964                 :      263995 : }
     965                 :             : 
     966                 :             : 
     967                 :             : /* Read all pointer fields in the TS_BINFO structure of EXPR from input
     968                 :             :    block IB.  DATA_IN contains tables and descriptors for the
     969                 :             :    file being read.  */
     970                 :             : 
     971                 :             : static void
     972                 :        5851 : lto_input_ts_binfo_tree_pointers (class lto_input_block *ib,
     973                 :             :                                   class data_in *data_in, tree expr)
     974                 :             : {
     975                 :       11938 :   tree t;
     976                 :             : 
     977                 :             :   /* Note that the number of slots in EXPR was read in
     978                 :             :      streamer_alloc_tree when instantiating EXPR.  However, the
     979                 :             :      vector is empty so we cannot rely on vec::length to know how many
     980                 :             :      elements to read.  So, this list is emitted as a 0-terminated
     981                 :             :      list on the writer side.  */
     982                 :       11938 :   do
     983                 :             :     {
     984                 :       11938 :       t = stream_read_tree_ref (ib, data_in);
     985                 :       11938 :       if (t)
     986                 :        6087 :         BINFO_BASE_BINFOS (expr)->quick_push (t);
     987                 :             :     }
     988                 :       11938 :   while (t);
     989                 :             : 
     990                 :        5851 :   BINFO_OFFSET (expr) = stream_read_tree_ref (ib, data_in);
     991                 :        5851 :   BINFO_VTABLE (expr) = stream_read_tree_ref (ib, data_in);
     992                 :             : 
     993                 :             :   /* Do not walk BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX,
     994                 :             :      BINFO_BASE_ACCESSES and BINFO_VPTR_INDEX; these are used by C++ FE
     995                 :             :      only.  */
     996                 :        5851 : }
     997                 :             : 
     998                 :             : 
     999                 :             : /* Read all pointer fields in the TS_CONSTRUCTOR structure of EXPR from
    1000                 :             :    input block IB.  DATA_IN contains tables and descriptors for the
    1001                 :             :    file being read.  */
    1002                 :             : 
    1003                 :             : static void
    1004                 :       26019 : lto_input_ts_constructor_tree_pointers (class lto_input_block *ib,
    1005                 :             :                                         class data_in *data_in, tree expr)
    1006                 :             : {
    1007                 :       26019 :   unsigned i;
    1008                 :             : 
    1009                 :      199585 :   for (i = 0; i < CONSTRUCTOR_NELTS (expr); i++)
    1010                 :             :     {
    1011                 :       81081 :       constructor_elt e;
    1012                 :       81081 :       e.index = stream_read_tree_ref (ib, data_in);
    1013                 :       81081 :       e.value = stream_read_tree_ref (ib, data_in);
    1014                 :       81081 :       (*CONSTRUCTOR_ELTS (expr))[i] = e;
    1015                 :             :     }
    1016                 :       26019 : }
    1017                 :             : 
    1018                 :             : 
    1019                 :             : /* Read all pointer fields in the TS_OMP_CLAUSE structure of EXPR from
    1020                 :             :    input block IB.  DATA_IN contains tables and descriptors for the
    1021                 :             :    file being read.  */
    1022                 :             : 
    1023                 :             : static void
    1024                 :         202 : lto_input_ts_omp_clause_tree_pointers (class lto_input_block *ib,
    1025                 :             :                                        class data_in *data_in, tree expr)
    1026                 :             : {
    1027                 :         202 :   int i;
    1028                 :             : 
    1029                 :         477 :   for (i = 0; i < omp_clause_num_ops[OMP_CLAUSE_CODE (expr)]; i++)
    1030                 :         275 :     OMP_CLAUSE_OPERAND (expr, i) = stream_read_tree_ref (ib, data_in);
    1031                 :         202 :   OMP_CLAUSE_CHAIN (expr) = stream_read_tree_ref (ib, data_in);
    1032                 :         202 : }
    1033                 :             : 
    1034                 :             : 
    1035                 :             : /* Read all pointer fields in EXPR from input block IB.  DATA_IN
    1036                 :             :    contains tables and descriptors for the file being read.  */
    1037                 :             : 
    1038                 :             : void
    1039                 :     4165543 : streamer_read_tree_body (class lto_input_block *ib, class data_in *data_in,
    1040                 :             :                          tree expr)
    1041                 :             : {
    1042                 :     4165543 :   enum tree_code code;
    1043                 :             : 
    1044                 :     4165543 :   code = TREE_CODE (expr);
    1045                 :             : 
    1046                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_TYPED))
    1047                 :     3855954 :     lto_input_ts_common_tree_pointers (ib, data_in, expr);
    1048                 :             : 
    1049                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_VECTOR))
    1050                 :        2618 :     lto_input_ts_vector_tree_pointers (ib, data_in, expr);
    1051                 :             : 
    1052                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_POLY_INT_CST))
    1053                 :           0 :     lto_input_ts_poly_tree_pointers (ib, data_in, expr);
    1054                 :             : 
    1055                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_COMPLEX))
    1056                 :        6854 :     lto_input_ts_complex_tree_pointers (ib, data_in, expr);
    1057                 :             : 
    1058                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_DECL_MINIMAL))
    1059                 :      719844 :     lto_input_ts_decl_minimal_tree_pointers (ib, data_in, expr);
    1060                 :             : 
    1061                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
    1062                 :      719844 :     lto_input_ts_decl_common_tree_pointers (ib, data_in, expr);
    1063                 :             : 
    1064                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_DECL_NON_COMMON))
    1065                 :     4165543 :     lto_input_ts_decl_non_common_tree_pointers (ib, data_in, expr);
    1066                 :             : 
    1067                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
    1068                 :      429739 :     lto_input_ts_decl_with_vis_tree_pointers (ib, data_in, expr);
    1069                 :             : 
    1070                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_FIELD_DECL))
    1071                 :       69731 :     lto_input_ts_field_decl_tree_pointers (ib, data_in, expr);
    1072                 :             : 
    1073                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_FUNCTION_DECL))
    1074                 :      191148 :     lto_input_ts_function_decl_tree_pointers (ib, data_in, expr);
    1075                 :             : 
    1076                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_TYPE_COMMON))
    1077                 :      460452 :     lto_input_ts_type_common_tree_pointers (ib, data_in, expr);
    1078                 :             : 
    1079                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_TYPE_NON_COMMON))
    1080                 :      460452 :     lto_input_ts_type_non_common_tree_pointers (ib, data_in, expr);
    1081                 :             : 
    1082                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_LIST))
    1083                 :      389711 :     lto_input_ts_list_tree_pointers (ib, data_in, expr);
    1084                 :             : 
    1085                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_VEC))
    1086                 :           0 :     lto_input_ts_vec_tree_pointers (ib, data_in, expr);
    1087                 :             : 
    1088                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_EXP))
    1089                 :     1274270 :     lto_input_ts_exp_tree_pointers (ib, data_in, expr);
    1090                 :             : 
    1091                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_BLOCK))
    1092                 :      263995 :     lto_input_ts_block_tree_pointers (ib, data_in, expr);
    1093                 :             : 
    1094                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_BINFO))
    1095                 :        5851 :     lto_input_ts_binfo_tree_pointers (ib, data_in, expr);
    1096                 :             : 
    1097                 :     4165543 :   if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
    1098                 :       26019 :     lto_input_ts_constructor_tree_pointers (ib, data_in, expr);
    1099                 :             : 
    1100                 :     4165543 :   if (code == OMP_CLAUSE)
    1101                 :         202 :     lto_input_ts_omp_clause_tree_pointers (ib, data_in, expr);
    1102                 :     4165543 : }
    1103                 :             : 
    1104                 :             : 
    1105                 :             : /* Read an index IX from input block IB and return the tree node at
    1106                 :             :    DATA_IN->FILE_DATA->GLOBALS_INDEX[IX].  */
    1107                 :             : 
    1108                 :             : tree
    1109                 :     1575470 : streamer_get_pickled_tree (class lto_input_block *ib, class data_in *data_in)
    1110                 :             : {
    1111                 :     1575470 :   unsigned HOST_WIDE_INT ix;
    1112                 :     1575470 :   tree result;
    1113                 :     1575470 :   enum LTO_tags expected_tag;
    1114                 :             : 
    1115                 :     1575470 :   ix = streamer_read_uhwi (ib);
    1116                 :     1575470 :   result = streamer_tree_cache_get_tree (data_in->reader_cache, ix);
    1117                 :             : 
    1118                 :     1575470 :   if (streamer_debugging)
    1119                 :             :     {
    1120                 :             :       expected_tag = streamer_read_enum (ib, LTO_tags, LTO_NUM_TAGS);
    1121                 :             :       gcc_assert (result
    1122                 :             :                   && TREE_CODE (result) == lto_tag_to_tree_code (expected_tag));
    1123                 :             :     }
    1124                 :             : 
    1125                 :     1575470 :   return result;
    1126                 :             : }
        

Generated by: LCOV version 2.1-beta

LCOV profile is generated on x86_64 machine using following configure options: configure --disable-bootstrap --enable-coverage=opt --enable-languages=c,c++,fortran,go,jit,lto,rust,m2 --enable-host-shared. GCC test suite is run with the built compiler.