rebase
[gcc.git] / gcc / tree-streamer-in.c
1 /* Routines for reading trees from a file stream.
2
3 Copyright 2011 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 "diagnostic.h"
26 #include "tree.h"
27 #include "tree-flow.h"
28 #include "tree-streamer.h"
29 #include "data-streamer.h"
30 #include "streamer-hooks.h"
31 #include "lto-streamer.h"
32
33 /* Read a STRING_CST from the string table in DATA_IN using input
34 block IB. */
35
36 tree
37 input_string_cst (struct data_in *data_in, struct lto_input_block *ib)
38 {
39 unsigned int len;
40 const char * ptr;
41
42 ptr = input_string_internal (data_in, ib, &len);
43 if (!ptr)
44 return NULL;
45 return build_string (len, ptr);
46 }
47
48
49 /* Read an IDENTIFIER from the string table in DATA_IN using input
50 block IB. */
51
52 static tree
53 input_identifier (struct data_in *data_in, struct lto_input_block *ib)
54 {
55 unsigned int len;
56 const char *ptr;
57
58 ptr = input_string_internal (data_in, ib, &len);
59 if (!ptr)
60 return NULL;
61 return get_identifier_with_length (ptr, len);
62 }
63
64
65 /* Read a chain of tree nodes from input block IB. DATA_IN contains
66 tables and descriptors for the file being read. */
67
68 static tree
69 lto_input_chain (struct lto_input_block *ib, struct data_in *data_in)
70 {
71 int i, count;
72 tree first, prev, curr;
73
74 first = prev = NULL_TREE;
75 count = lto_input_sleb128 (ib);
76 for (i = 0; i < count; i++)
77 {
78 curr = lto_input_tree (ib, data_in);
79 if (prev)
80 TREE_CHAIN (prev) = curr;
81 else
82 first = curr;
83
84 TREE_CHAIN (curr) = NULL_TREE;
85 prev = curr;
86 }
87
88 return first;
89 }
90
91
92 /* Unpack all the non-pointer fields of the TS_BASE structure of
93 expression EXPR from bitpack BP. */
94
95 static void
96 unpack_ts_base_value_fields (struct bitpack_d *bp, tree expr)
97 {
98 /* Note that the code for EXPR has already been unpacked to create EXPR in
99 lto_materialize_tree. */
100 if (!TYPE_P (expr))
101 {
102 TREE_SIDE_EFFECTS (expr) = (unsigned) bp_unpack_value (bp, 1);
103 TREE_CONSTANT (expr) = (unsigned) bp_unpack_value (bp, 1);
104 TREE_READONLY (expr) = (unsigned) bp_unpack_value (bp, 1);
105
106 /* TREE_PUBLIC is used on types to indicate that the type
107 has a TYPE_CACHED_VALUES vector. This is not streamed out,
108 so we skip it here. */
109 TREE_PUBLIC (expr) = (unsigned) bp_unpack_value (bp, 1);
110 }
111 else
112 bp_unpack_value (bp, 4);
113 TREE_ADDRESSABLE (expr) = (unsigned) bp_unpack_value (bp, 1);
114 TREE_THIS_VOLATILE (expr) = (unsigned) bp_unpack_value (bp, 1);
115 if (DECL_P (expr))
116 DECL_UNSIGNED (expr) = (unsigned) bp_unpack_value (bp, 1);
117 else if (TYPE_P (expr))
118 TYPE_UNSIGNED (expr) = (unsigned) bp_unpack_value (bp, 1);
119 else
120 bp_unpack_value (bp, 1);
121 TREE_ASM_WRITTEN (expr) = (unsigned) bp_unpack_value (bp, 1);
122 if (TYPE_P (expr))
123 TYPE_ARTIFICIAL (expr) = (unsigned) bp_unpack_value (bp, 1);
124 else
125 TREE_NO_WARNING (expr) = (unsigned) bp_unpack_value (bp, 1);
126 TREE_USED (expr) = (unsigned) bp_unpack_value (bp, 1);
127 TREE_NOTHROW (expr) = (unsigned) bp_unpack_value (bp, 1);
128 TREE_STATIC (expr) = (unsigned) bp_unpack_value (bp, 1);
129 TREE_PRIVATE (expr) = (unsigned) bp_unpack_value (bp, 1);
130 TREE_PROTECTED (expr) = (unsigned) bp_unpack_value (bp, 1);
131 TREE_DEPRECATED (expr) = (unsigned) bp_unpack_value (bp, 1);
132 if (TYPE_P (expr))
133 TYPE_SATURATING (expr) = (unsigned) bp_unpack_value (bp, 1);
134 else if (TREE_CODE (expr) == SSA_NAME)
135 SSA_NAME_IS_DEFAULT_DEF (expr) = (unsigned) bp_unpack_value (bp, 1);
136 else
137 bp_unpack_value (bp, 1);
138 }
139
140
141 /* Unpack all the non-pointer fields of the TS_REAL_CST structure of
142 expression EXPR from bitpack BP. */
143
144 static void
145 unpack_ts_real_cst_value_fields (struct bitpack_d *bp, tree expr)
146 {
147 unsigned i;
148 REAL_VALUE_TYPE r;
149 REAL_VALUE_TYPE *rp;
150
151 r.cl = (unsigned) bp_unpack_value (bp, 2);
152 r.decimal = (unsigned) bp_unpack_value (bp, 1);
153 r.sign = (unsigned) bp_unpack_value (bp, 1);
154 r.signalling = (unsigned) bp_unpack_value (bp, 1);
155 r.canonical = (unsigned) bp_unpack_value (bp, 1);
156 r.uexp = (unsigned) bp_unpack_value (bp, EXP_BITS);
157 for (i = 0; i < SIGSZ; i++)
158 r.sig[i] = (unsigned long) bp_unpack_value (bp, HOST_BITS_PER_LONG);
159
160 rp = ggc_alloc_real_value ();
161 memcpy (rp, &r, sizeof (REAL_VALUE_TYPE));
162 TREE_REAL_CST_PTR (expr) = rp;
163 }
164
165
166 /* Unpack all the non-pointer fields of the TS_FIXED_CST structure of
167 expression EXPR from bitpack BP. */
168
169 static void
170 unpack_ts_fixed_cst_value_fields (struct bitpack_d *bp, tree expr)
171 {
172 struct fixed_value fv;
173
174 fv.mode = bp_unpack_enum (bp, machine_mode, MAX_MACHINE_MODE);
175 fv.data.low = bp_unpack_var_len_int (bp);
176 fv.data.high = bp_unpack_var_len_int (bp);
177 TREE_FIXED_CST (expr) = fv;
178 }
179
180
181 /* Unpack all the non-pointer fields of the TS_DECL_COMMON structure
182 of expression EXPR from bitpack BP. */
183
184 static void
185 unpack_ts_decl_common_value_fields (struct bitpack_d *bp, tree expr)
186 {
187 DECL_MODE (expr) = bp_unpack_enum (bp, machine_mode, MAX_MACHINE_MODE);
188 DECL_NONLOCAL (expr) = (unsigned) bp_unpack_value (bp, 1);
189 DECL_VIRTUAL_P (expr) = (unsigned) bp_unpack_value (bp, 1);
190 DECL_IGNORED_P (expr) = (unsigned) bp_unpack_value (bp, 1);
191 DECL_ABSTRACT (expr) = (unsigned) bp_unpack_value (bp, 1);
192 DECL_ARTIFICIAL (expr) = (unsigned) bp_unpack_value (bp, 1);
193 DECL_USER_ALIGN (expr) = (unsigned) bp_unpack_value (bp, 1);
194 DECL_PRESERVE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
195 DECL_DEBUG_EXPR_IS_FROM (expr) = (unsigned) bp_unpack_value (bp, 1);
196 DECL_EXTERNAL (expr) = (unsigned) bp_unpack_value (bp, 1);
197 DECL_GIMPLE_REG_P (expr) = (unsigned) bp_unpack_value (bp, 1);
198 DECL_ALIGN (expr) = (unsigned) bp_unpack_var_len_unsigned (bp);
199
200 if (TREE_CODE (expr) == LABEL_DECL)
201 {
202 DECL_ERROR_ISSUED (expr) = (unsigned) bp_unpack_value (bp, 1);
203 EH_LANDING_PAD_NR (expr) = (int) bp_unpack_var_len_unsigned (bp);
204
205 /* Always assume an initial value of -1 for LABEL_DECL_UID to
206 force gimple_set_bb to recreate label_to_block_map. */
207 LABEL_DECL_UID (expr) = -1;
208 }
209
210 if (TREE_CODE (expr) == FIELD_DECL)
211 {
212 DECL_PACKED (expr) = (unsigned) bp_unpack_value (bp, 1);
213 DECL_NONADDRESSABLE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
214 expr->decl_common.off_align = bp_unpack_value (bp, 8);
215 }
216
217 if (TREE_CODE (expr) == RESULT_DECL
218 || TREE_CODE (expr) == PARM_DECL
219 || TREE_CODE (expr) == VAR_DECL)
220 {
221 DECL_BY_REFERENCE (expr) = (unsigned) bp_unpack_value (bp, 1);
222 if (TREE_CODE (expr) == VAR_DECL
223 || TREE_CODE (expr) == PARM_DECL)
224 DECL_HAS_VALUE_EXPR_P (expr) = (unsigned) bp_unpack_value (bp, 1);
225 DECL_RESTRICTED_P (expr) = (unsigned) bp_unpack_value (bp, 1);
226 }
227 }
228
229
230 /* Unpack all the non-pointer fields of the TS_DECL_WRTL structure
231 of expression EXPR from bitpack BP. */
232
233 static void
234 unpack_ts_decl_wrtl_value_fields (struct bitpack_d *bp, tree expr)
235 {
236 DECL_REGISTER (expr) = (unsigned) bp_unpack_value (bp, 1);
237 }
238
239
240 /* Unpack all the non-pointer fields of the TS_DECL_WITH_VIS structure
241 of expression EXPR from bitpack BP. */
242
243 static void
244 unpack_ts_decl_with_vis_value_fields (struct bitpack_d *bp, tree expr)
245 {
246 DECL_DEFER_OUTPUT (expr) = (unsigned) bp_unpack_value (bp, 1);
247 DECL_COMMON (expr) = (unsigned) bp_unpack_value (bp, 1);
248 DECL_DLLIMPORT_P (expr) = (unsigned) bp_unpack_value (bp, 1);
249 DECL_WEAK (expr) = (unsigned) bp_unpack_value (bp, 1);
250 DECL_SEEN_IN_BIND_EXPR_P (expr) = (unsigned) bp_unpack_value (bp, 1);
251 DECL_COMDAT (expr) = (unsigned) bp_unpack_value (bp, 1);
252 DECL_VISIBILITY (expr) = (enum symbol_visibility) bp_unpack_value (bp, 2);
253 DECL_VISIBILITY_SPECIFIED (expr) = (unsigned) bp_unpack_value (bp, 1);
254
255 if (TREE_CODE (expr) == VAR_DECL)
256 {
257 DECL_HARD_REGISTER (expr) = (unsigned) bp_unpack_value (bp, 1);
258 DECL_IN_TEXT_SECTION (expr) = (unsigned) bp_unpack_value (bp, 1);
259 DECL_IN_CONSTANT_POOL (expr) = (unsigned) bp_unpack_value (bp, 1);
260 DECL_TLS_MODEL (expr) = (enum tls_model) bp_unpack_value (bp, 3);
261 }
262
263 if (VAR_OR_FUNCTION_DECL_P (expr))
264 {
265 priority_type p;
266 p = (priority_type) bp_unpack_var_len_unsigned (bp);
267 SET_DECL_INIT_PRIORITY (expr, p);
268 }
269 }
270
271
272 /* Unpack all the non-pointer fields of the TS_FUNCTION_DECL structure
273 of expression EXPR from bitpack BP. */
274
275 static void
276 unpack_ts_function_decl_value_fields (struct bitpack_d *bp, tree expr)
277 {
278 DECL_BUILT_IN_CLASS (expr) = bp_unpack_enum (bp, built_in_class,
279 BUILT_IN_LAST);
280 DECL_STATIC_CONSTRUCTOR (expr) = (unsigned) bp_unpack_value (bp, 1);
281 DECL_STATIC_DESTRUCTOR (expr) = (unsigned) bp_unpack_value (bp, 1);
282 DECL_UNINLINABLE (expr) = (unsigned) bp_unpack_value (bp, 1);
283 DECL_POSSIBLY_INLINED (expr) = (unsigned) bp_unpack_value (bp, 1);
284 DECL_IS_NOVOPS (expr) = (unsigned) bp_unpack_value (bp, 1);
285 DECL_IS_RETURNS_TWICE (expr) = (unsigned) bp_unpack_value (bp, 1);
286 DECL_IS_MALLOC (expr) = (unsigned) bp_unpack_value (bp, 1);
287 DECL_IS_OPERATOR_NEW (expr) = (unsigned) bp_unpack_value (bp, 1);
288 DECL_DECLARED_INLINE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
289 DECL_STATIC_CHAIN (expr) = (unsigned) bp_unpack_value (bp, 1);
290 DECL_NO_INLINE_WARNING_P (expr) = (unsigned) bp_unpack_value (bp, 1);
291 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (expr)
292 = (unsigned) bp_unpack_value (bp, 1);
293 DECL_NO_LIMIT_STACK (expr) = (unsigned) bp_unpack_value (bp, 1);
294 DECL_DISREGARD_INLINE_LIMITS (expr) = (unsigned) bp_unpack_value (bp, 1);
295 DECL_PURE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
296 DECL_LOOPING_CONST_OR_PURE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
297 if (DECL_BUILT_IN_CLASS (expr) != NOT_BUILT_IN)
298 {
299 DECL_FUNCTION_CODE (expr) = (enum built_in_function) bp_unpack_value (bp,
300 11);
301 if (DECL_BUILT_IN_CLASS (expr) == BUILT_IN_NORMAL
302 && DECL_FUNCTION_CODE (expr) >= END_BUILTINS)
303 fatal_error ("machine independent builtin code out of range");
304 else if (DECL_BUILT_IN_CLASS (expr) == BUILT_IN_MD)
305 {
306 tree result = targetm.builtin_decl (DECL_FUNCTION_CODE (expr), true);
307 if (!result || result == error_mark_node)
308 fatal_error ("target specific builtin not available");
309 }
310 }
311 if (DECL_STATIC_DESTRUCTOR (expr))
312 {
313 priority_type p;
314 p = (priority_type) bp_unpack_var_len_unsigned (bp);
315 SET_DECL_FINI_PRIORITY (expr, p);
316 }
317 }
318
319
320 /* Unpack all the non-pointer fields of the TS_TYPE_COMMON structure
321 of expression EXPR from bitpack BP. */
322
323 static void
324 unpack_ts_type_common_value_fields (struct bitpack_d *bp, tree expr)
325 {
326 enum machine_mode mode;
327
328 mode = bp_unpack_enum (bp, machine_mode, MAX_MACHINE_MODE);
329 SET_TYPE_MODE (expr, mode);
330 TYPE_STRING_FLAG (expr) = (unsigned) bp_unpack_value (bp, 1);
331 TYPE_NO_FORCE_BLK (expr) = (unsigned) bp_unpack_value (bp, 1);
332 TYPE_NEEDS_CONSTRUCTING (expr) = (unsigned) bp_unpack_value (bp, 1);
333 if (RECORD_OR_UNION_TYPE_P (expr))
334 TYPE_TRANSPARENT_AGGR (expr) = (unsigned) bp_unpack_value (bp, 1);
335 TYPE_PACKED (expr) = (unsigned) bp_unpack_value (bp, 1);
336 TYPE_RESTRICT (expr) = (unsigned) bp_unpack_value (bp, 1);
337 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (expr)
338 = (unsigned) bp_unpack_value (bp, 2);
339 TYPE_USER_ALIGN (expr) = (unsigned) bp_unpack_value (bp, 1);
340 TYPE_READONLY (expr) = (unsigned) bp_unpack_value (bp, 1);
341 TYPE_PRECISION (expr) = bp_unpack_var_len_unsigned (bp);
342 TYPE_ALIGN (expr) = bp_unpack_var_len_unsigned (bp);
343 TYPE_ALIAS_SET (expr) = bp_unpack_var_len_int (bp);
344 }
345
346
347 /* Unpack all the non-pointer fields of the TS_BLOCK structure
348 of expression EXPR from bitpack BP. */
349
350 static void
351 unpack_ts_block_value_fields (struct bitpack_d *bp, tree expr)
352 {
353 BLOCK_ABSTRACT (expr) = (unsigned) bp_unpack_value (bp, 1);
354 /* BLOCK_NUMBER is recomputed. */
355 }
356
357 /* Unpack all the non-pointer fields of the TS_TRANSLATION_UNIT_DECL
358 structure of expression EXPR from bitpack BP. */
359
360 static void
361 unpack_ts_translation_unit_decl_value_fields (struct bitpack_d *bp ATTRIBUTE_UNUSED, tree expr ATTRIBUTE_UNUSED)
362 {
363 }
364
365 /* Unpack all the non-pointer fields in EXPR into a bit pack. */
366
367 static void
368 unpack_value_fields (struct bitpack_d *bp, tree expr)
369 {
370 enum tree_code code;
371
372 code = TREE_CODE (expr);
373
374 /* Note that all these functions are highly sensitive to changes in
375 the types and sizes of each of the fields being packed. */
376 unpack_ts_base_value_fields (bp, expr);
377
378 if (CODE_CONTAINS_STRUCT (code, TS_REAL_CST))
379 unpack_ts_real_cst_value_fields (bp, expr);
380
381 if (CODE_CONTAINS_STRUCT (code, TS_FIXED_CST))
382 unpack_ts_fixed_cst_value_fields (bp, expr);
383
384 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
385 unpack_ts_decl_common_value_fields (bp, expr);
386
387 if (CODE_CONTAINS_STRUCT (code, TS_DECL_WRTL))
388 unpack_ts_decl_wrtl_value_fields (bp, expr);
389
390 if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
391 unpack_ts_decl_with_vis_value_fields (bp, expr);
392
393 if (CODE_CONTAINS_STRUCT (code, TS_FUNCTION_DECL))
394 unpack_ts_function_decl_value_fields (bp, expr);
395
396 if (CODE_CONTAINS_STRUCT (code, TS_TYPE_COMMON))
397 unpack_ts_type_common_value_fields (bp, expr);
398
399 if (CODE_CONTAINS_STRUCT (code, TS_BLOCK))
400 unpack_ts_block_value_fields (bp, expr);
401
402 if (CODE_CONTAINS_STRUCT (code, TS_TRANSLATION_UNIT_DECL))
403 unpack_ts_translation_unit_decl_value_fields (bp, expr);
404
405 if (streamer_hooks.unpack_value_fields)
406 streamer_hooks.unpack_value_fields (bp, expr);
407 }
408
409
410 /* Materialize a new tree from input block IB using descriptors in
411 DATA_IN. The code for the new tree should match TAG. Store in
412 *IX_P the index into the reader cache where the new tree is stored. */
413
414 static tree
415 lto_materialize_tree (struct lto_input_block *ib, struct data_in *data_in,
416 enum LTO_tags tag)
417 {
418 struct bitpack_d bp;
419 enum tree_code code;
420 tree result;
421 #ifdef LTO_STREAMER_DEBUG
422 HOST_WIDEST_INT orig_address_in_writer;
423 #endif
424
425 result = NULL_TREE;
426
427 #ifdef LTO_STREAMER_DEBUG
428 /* Read the word representing the memory address for the tree
429 as it was written by the writer. This is useful when
430 debugging differences between the writer and reader. */
431 orig_address_in_writer = lto_input_sleb128 (ib);
432 gcc_assert ((intptr_t) orig_address_in_writer == orig_address_in_writer);
433 #endif
434
435 code = lto_tag_to_tree_code (tag);
436
437 /* We should never see an SSA_NAME tree. Only the version numbers of
438 SSA names are ever written out. See input_ssa_names. */
439 gcc_assert (code != SSA_NAME);
440
441 /* Instantiate a new tree using the header data. */
442 if (CODE_CONTAINS_STRUCT (code, TS_STRING))
443 result = input_string_cst (data_in, ib);
444 else if (CODE_CONTAINS_STRUCT (code, TS_IDENTIFIER))
445 result = input_identifier (data_in, ib);
446 else if (CODE_CONTAINS_STRUCT (code, TS_VEC))
447 {
448 HOST_WIDE_INT len = lto_input_sleb128 (ib);
449 result = make_tree_vec (len);
450 }
451 else if (CODE_CONTAINS_STRUCT (code, TS_BINFO))
452 {
453 unsigned HOST_WIDE_INT len = lto_input_uleb128 (ib);
454 result = make_tree_binfo (len);
455 }
456 else
457 {
458 /* For all other nodes, see if the streamer knows how to allocate
459 it. */
460 if (streamer_hooks.alloc_tree)
461 result = streamer_hooks.alloc_tree (code, ib, data_in);
462
463 /* If the hook did not handle it, materialize the tree with a raw
464 make_node call. */
465 if (result == NULL_TREE)
466 result = make_node (code);
467 }
468
469 #ifdef LTO_STREAMER_DEBUG
470 /* Store the original address of the tree as seen by the writer
471 in RESULT's aux field. This is useful when debugging streaming
472 problems. This way, a debugging session can be started on
473 both writer and reader with a breakpoint using this address
474 value in both. */
475 lto_orig_address_map (result, (intptr_t) orig_address_in_writer);
476 #endif
477
478 /* Read the bitpack of non-pointer values from IB. */
479 bp = lto_input_bitpack (ib);
480
481 /* The first word in BP contains the code of the tree that we
482 are about to read. */
483 code = (enum tree_code) bp_unpack_value (&bp, 16);
484 lto_tag_check (lto_tree_code_to_tag (code), tag);
485
486 /* Unpack all the value fields from BP. */
487 unpack_value_fields (&bp, result);
488
489 /* Enter RESULT in the reader cache. This will make RESULT
490 available so that circular references in the rest of the tree
491 structure can be resolved in subsequent calls to lto_input_tree. */
492 lto_streamer_cache_append (data_in->reader_cache, result);
493
494 return result;
495 }
496
497
498 /* Read all pointer fields in the TS_COMMON structure of EXPR from input
499 block IB. DATA_IN contains tables and descriptors for the
500 file being read. */
501
502
503 static void
504 lto_input_ts_common_tree_pointers (struct lto_input_block *ib,
505 struct data_in *data_in, tree expr)
506 {
507 if (TREE_CODE (expr) != IDENTIFIER_NODE)
508 TREE_TYPE (expr) = lto_input_tree (ib, data_in);
509 }
510
511
512 /* Read all pointer fields in the TS_VECTOR structure of EXPR from input
513 block IB. DATA_IN contains tables and descriptors for the
514 file being read. */
515
516 static void
517 lto_input_ts_vector_tree_pointers (struct lto_input_block *ib,
518 struct data_in *data_in, tree expr)
519 {
520 TREE_VECTOR_CST_ELTS (expr) = lto_input_chain (ib, data_in);
521 }
522
523
524 /* Read all pointer fields in the TS_COMPLEX structure of EXPR from input
525 block IB. DATA_IN contains tables and descriptors for the
526 file being read. */
527
528 static void
529 lto_input_ts_complex_tree_pointers (struct lto_input_block *ib,
530 struct data_in *data_in, tree expr)
531 {
532 TREE_REALPART (expr) = lto_input_tree (ib, data_in);
533 TREE_IMAGPART (expr) = lto_input_tree (ib, data_in);
534 }
535
536
537 /* Read all pointer fields in the TS_DECL_MINIMAL structure of EXPR
538 from input block IB. DATA_IN contains tables and descriptors for the
539 file being read. */
540
541 static void
542 lto_input_ts_decl_minimal_tree_pointers (struct lto_input_block *ib,
543 struct data_in *data_in, tree expr)
544 {
545 DECL_NAME (expr) = lto_input_tree (ib, data_in);
546 DECL_CONTEXT (expr) = lto_input_tree (ib, data_in);
547 DECL_SOURCE_LOCATION (expr) = lto_input_location (ib, data_in);
548 }
549
550
551 /* Read all pointer fields in the TS_DECL_COMMON structure of EXPR from
552 input block IB. DATA_IN contains tables and descriptors for the
553 file being read. */
554
555 static void
556 lto_input_ts_decl_common_tree_pointers (struct lto_input_block *ib,
557 struct data_in *data_in, tree expr)
558 {
559 DECL_SIZE (expr) = lto_input_tree (ib, data_in);
560 DECL_SIZE_UNIT (expr) = lto_input_tree (ib, data_in);
561 DECL_ATTRIBUTES (expr) = lto_input_tree (ib, data_in);
562
563 /* Do not stream DECL_ABSTRACT_ORIGIN. We cannot handle debug information
564 for early inlining so drop it on the floor instead of ICEing in
565 dwarf2out.c. */
566
567 if (TREE_CODE (expr) == PARM_DECL)
568 TREE_CHAIN (expr) = lto_input_chain (ib, data_in);
569
570 if ((TREE_CODE (expr) == VAR_DECL
571 || TREE_CODE (expr) == PARM_DECL)
572 && DECL_HAS_VALUE_EXPR_P (expr))
573 SET_DECL_VALUE_EXPR (expr, lto_input_tree (ib, data_in));
574
575 if (TREE_CODE (expr) == VAR_DECL)
576 {
577 tree dexpr = lto_input_tree (ib, data_in);
578 if (dexpr)
579 SET_DECL_DEBUG_EXPR (expr, dexpr);
580 }
581 }
582
583
584 /* Read all pointer fields in the TS_DECL_NON_COMMON structure of
585 EXPR from input block IB. DATA_IN contains tables and descriptors for the
586 file being read. */
587
588 static void
589 lto_input_ts_decl_non_common_tree_pointers (struct lto_input_block *ib,
590 struct data_in *data_in, tree expr)
591 {
592 if (TREE_CODE (expr) == FUNCTION_DECL)
593 {
594 DECL_ARGUMENTS (expr) = lto_input_tree (ib, data_in);
595 DECL_RESULT (expr) = lto_input_tree (ib, data_in);
596 }
597 DECL_VINDEX (expr) = lto_input_tree (ib, data_in);
598 }
599
600
601 /* Read all pointer fields in the TS_DECL_WITH_VIS structure of EXPR
602 from input block IB. DATA_IN contains tables and descriptors for the
603 file being read. */
604
605 static void
606 lto_input_ts_decl_with_vis_tree_pointers (struct lto_input_block *ib,
607 struct data_in *data_in, tree expr)
608 {
609 tree id;
610
611 id = lto_input_tree (ib, data_in);
612 if (id)
613 {
614 gcc_assert (TREE_CODE (id) == IDENTIFIER_NODE);
615 SET_DECL_ASSEMBLER_NAME (expr, id);
616 }
617
618 DECL_SECTION_NAME (expr) = lto_input_tree (ib, data_in);
619 DECL_COMDAT_GROUP (expr) = lto_input_tree (ib, data_in);
620 }
621
622
623 /* Read all pointer fields in the TS_FIELD_DECL structure of EXPR from
624 input block IB. DATA_IN contains tables and descriptors for the
625 file being read. */
626
627 static void
628 lto_input_ts_field_decl_tree_pointers (struct lto_input_block *ib,
629 struct data_in *data_in, tree expr)
630 {
631 DECL_FIELD_OFFSET (expr) = lto_input_tree (ib, data_in);
632 DECL_BIT_FIELD_TYPE (expr) = lto_input_tree (ib, data_in);
633 DECL_QUALIFIER (expr) = lto_input_tree (ib, data_in);
634 DECL_FIELD_BIT_OFFSET (expr) = lto_input_tree (ib, data_in);
635 DECL_FCONTEXT (expr) = lto_input_tree (ib, data_in);
636 TREE_CHAIN (expr) = lto_input_chain (ib, data_in);
637 }
638
639
640 /* Read all pointer fields in the TS_FUNCTION_DECL structure of EXPR
641 from input block IB. DATA_IN contains tables and descriptors for the
642 file being read. */
643
644 static void
645 lto_input_ts_function_decl_tree_pointers (struct lto_input_block *ib,
646 struct data_in *data_in, tree expr)
647 {
648 /* DECL_STRUCT_FUNCTION is handled by lto_input_function. FIXME lto,
649 maybe it should be handled here? */
650 DECL_FUNCTION_PERSONALITY (expr) = lto_input_tree (ib, data_in);
651 DECL_FUNCTION_SPECIFIC_TARGET (expr) = lto_input_tree (ib, data_in);
652 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr) = lto_input_tree (ib, data_in);
653
654 /* If the file contains a function with an EH personality set,
655 then it was compiled with -fexceptions. In that case, initialize
656 the backend EH machinery. */
657 if (DECL_FUNCTION_PERSONALITY (expr))
658 lto_init_eh ();
659 }
660
661
662 /* Read all pointer fields in the TS_TYPE_COMMON structure of EXPR from
663 input block IB. DATA_IN contains tables and descriptors for the file
664 being read. */
665
666 static void
667 lto_input_ts_type_common_tree_pointers (struct lto_input_block *ib,
668 struct data_in *data_in, tree expr)
669 {
670 TYPE_SIZE (expr) = lto_input_tree (ib, data_in);
671 TYPE_SIZE_UNIT (expr) = lto_input_tree (ib, data_in);
672 TYPE_ATTRIBUTES (expr) = lto_input_tree (ib, data_in);
673 TYPE_NAME (expr) = lto_input_tree (ib, data_in);
674 /* Do not stream TYPE_POINTER_TO or TYPE_REFERENCE_TO. They will be
675 reconstructed during fixup. */
676 /* Do not stream TYPE_NEXT_VARIANT, we reconstruct the variant lists
677 during fixup. */
678 TYPE_MAIN_VARIANT (expr) = lto_input_tree (ib, data_in);
679 TYPE_CONTEXT (expr) = lto_input_tree (ib, data_in);
680 /* TYPE_CANONICAL gets re-computed during type merging. */
681 TYPE_CANONICAL (expr) = NULL_TREE;
682 TYPE_STUB_DECL (expr) = lto_input_tree (ib, data_in);
683 }
684
685 /* Read all pointer fields in the TS_TYPE_NON_COMMON structure of EXPR
686 from input block IB. DATA_IN contains tables and descriptors for the
687 file being read. */
688
689 static void
690 lto_input_ts_type_non_common_tree_pointers (struct lto_input_block *ib,
691 struct data_in *data_in,
692 tree expr)
693 {
694 if (TREE_CODE (expr) == ENUMERAL_TYPE)
695 TYPE_VALUES (expr) = lto_input_tree (ib, data_in);
696 else if (TREE_CODE (expr) == ARRAY_TYPE)
697 TYPE_DOMAIN (expr) = lto_input_tree (ib, data_in);
698 else if (RECORD_OR_UNION_TYPE_P (expr))
699 TYPE_FIELDS (expr) = lto_input_tree (ib, data_in);
700 else if (TREE_CODE (expr) == FUNCTION_TYPE
701 || TREE_CODE (expr) == METHOD_TYPE)
702 TYPE_ARG_TYPES (expr) = lto_input_tree (ib, data_in);
703
704 if (!POINTER_TYPE_P (expr))
705 TYPE_MINVAL (expr) = lto_input_tree (ib, data_in);
706 TYPE_MAXVAL (expr) = lto_input_tree (ib, data_in);
707 if (RECORD_OR_UNION_TYPE_P (expr))
708 TYPE_BINFO (expr) = lto_input_tree (ib, data_in);
709 }
710
711
712 /* Read all pointer fields in the TS_LIST structure of EXPR from input
713 block IB. DATA_IN contains tables and descriptors for the
714 file being read. */
715
716 static void
717 lto_input_ts_list_tree_pointers (struct lto_input_block *ib,
718 struct data_in *data_in, tree expr)
719 {
720 TREE_PURPOSE (expr) = lto_input_tree (ib, data_in);
721 TREE_VALUE (expr) = lto_input_tree (ib, data_in);
722 TREE_CHAIN (expr) = lto_input_chain (ib, data_in);
723 }
724
725
726 /* Read all pointer fields in the TS_VEC structure of EXPR from input
727 block IB. DATA_IN contains tables and descriptors for the
728 file being read. */
729
730 static void
731 lto_input_ts_vec_tree_pointers (struct lto_input_block *ib,
732 struct data_in *data_in, tree expr)
733 {
734 int i;
735
736 /* Note that TREE_VEC_LENGTH was read by lto_materialize_tree to
737 instantiate EXPR. */
738 for (i = 0; i < TREE_VEC_LENGTH (expr); i++)
739 TREE_VEC_ELT (expr, i) = lto_input_tree (ib, data_in);
740 }
741
742
743 /* Read all pointer fields in the TS_EXP structure of EXPR from input
744 block IB. DATA_IN contains tables and descriptors for the
745 file being read. */
746
747
748 static void
749 lto_input_ts_exp_tree_pointers (struct lto_input_block *ib,
750 struct data_in *data_in, tree expr)
751 {
752 int i, length;
753 location_t loc;
754
755 length = lto_input_sleb128 (ib);
756 gcc_assert (length == TREE_OPERAND_LENGTH (expr));
757
758 for (i = 0; i < length; i++)
759 TREE_OPERAND (expr, i) = lto_input_tree (ib, data_in);
760
761 loc = lto_input_location (ib, data_in);
762 SET_EXPR_LOCATION (expr, loc);
763 TREE_BLOCK (expr) = lto_input_tree (ib, data_in);
764 }
765
766
767 /* Read all pointer fields in the TS_BLOCK structure of EXPR from input
768 block IB. DATA_IN contains tables and descriptors for the
769 file being read. */
770
771 static void
772 lto_input_ts_block_tree_pointers (struct lto_input_block *ib,
773 struct data_in *data_in, tree expr)
774 {
775 /* Do not stream BLOCK_SOURCE_LOCATION. We cannot handle debug information
776 for early inlining so drop it on the floor instead of ICEing in
777 dwarf2out.c. */
778 BLOCK_VARS (expr) = lto_input_chain (ib, data_in);
779
780 /* Do not stream BLOCK_NONLOCALIZED_VARS. We cannot handle debug information
781 for early inlining so drop it on the floor instead of ICEing in
782 dwarf2out.c. */
783
784 BLOCK_SUPERCONTEXT (expr) = lto_input_tree (ib, data_in);
785
786 /* Do not stream BLOCK_ABSTRACT_ORIGIN. We cannot handle debug information
787 for early inlining so drop it on the floor instead of ICEing in
788 dwarf2out.c. */
789 BLOCK_FRAGMENT_ORIGIN (expr) = lto_input_tree (ib, data_in);
790 BLOCK_FRAGMENT_CHAIN (expr) = lto_input_tree (ib, data_in);
791
792 /* We re-compute BLOCK_SUBBLOCKS of our parent here instead
793 of streaming it. For non-BLOCK BLOCK_SUPERCONTEXTs we still
794 stream the child relationship explicitly. */
795 if (BLOCK_SUPERCONTEXT (expr)
796 && TREE_CODE (BLOCK_SUPERCONTEXT (expr)) == BLOCK)
797 {
798 BLOCK_CHAIN (expr) = BLOCK_SUBBLOCKS (BLOCK_SUPERCONTEXT (expr));
799 BLOCK_SUBBLOCKS (BLOCK_SUPERCONTEXT (expr)) = expr;
800 }
801
802 /* The global block is rooted at the TU decl. Hook it here to
803 avoid the need to stream in this block during WPA time. */
804 else if (BLOCK_SUPERCONTEXT (expr)
805 && TREE_CODE (BLOCK_SUPERCONTEXT (expr)) == TRANSLATION_UNIT_DECL)
806 DECL_INITIAL (BLOCK_SUPERCONTEXT (expr)) = expr;
807
808 /* The function-level block is connected at the time we read in
809 function bodies for the same reason. */
810 }
811
812
813 /* Read all pointer fields in the TS_BINFO structure of EXPR from input
814 block IB. DATA_IN contains tables and descriptors for the
815 file being read. */
816
817 static void
818 lto_input_ts_binfo_tree_pointers (struct lto_input_block *ib,
819 struct data_in *data_in, tree expr)
820 {
821 unsigned i, len;
822 tree t;
823
824 /* Note that the number of slots in EXPR was read in
825 lto_materialize_tree when instantiating EXPR. However, the
826 vector is empty so we cannot rely on VEC_length to know how many
827 elements to read. So, this list is emitted as a 0-terminated
828 list on the writer side. */
829 do
830 {
831 t = lto_input_tree (ib, data_in);
832 if (t)
833 VEC_quick_push (tree, BINFO_BASE_BINFOS (expr), t);
834 }
835 while (t);
836
837 BINFO_OFFSET (expr) = lto_input_tree (ib, data_in);
838 BINFO_VTABLE (expr) = lto_input_tree (ib, data_in);
839 BINFO_VIRTUALS (expr) = lto_input_tree (ib, data_in);
840 BINFO_VPTR_FIELD (expr) = lto_input_tree (ib, data_in);
841
842 len = lto_input_uleb128 (ib);
843 if (len > 0)
844 {
845 VEC_reserve_exact (tree, gc, BINFO_BASE_ACCESSES (expr), len);
846 for (i = 0; i < len; i++)
847 {
848 tree a = lto_input_tree (ib, data_in);
849 VEC_quick_push (tree, BINFO_BASE_ACCESSES (expr), a);
850 }
851 }
852
853 BINFO_INHERITANCE_CHAIN (expr) = lto_input_tree (ib, data_in);
854 BINFO_SUBVTT_INDEX (expr) = lto_input_tree (ib, data_in);
855 BINFO_VPTR_INDEX (expr) = lto_input_tree (ib, data_in);
856 }
857
858
859 /* Read all pointer fields in the TS_CONSTRUCTOR structure of EXPR from
860 input block IB. DATA_IN contains tables and descriptors for the
861 file being read. */
862
863 static void
864 lto_input_ts_constructor_tree_pointers (struct lto_input_block *ib,
865 struct data_in *data_in, tree expr)
866 {
867 unsigned i, len;
868
869 len = lto_input_uleb128 (ib);
870 for (i = 0; i < len; i++)
871 {
872 tree index, value;
873
874 index = lto_input_tree (ib, data_in);
875 value = lto_input_tree (ib, data_in);
876 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (expr), index, value);
877 }
878 }
879
880
881 /* Input a TS_TARGET_OPTION tree from IB into EXPR. */
882
883 static void
884 lto_input_ts_target_option (struct lto_input_block *ib, tree expr)
885 {
886 unsigned i, len;
887 struct bitpack_d bp;
888 struct cl_target_option *t = TREE_TARGET_OPTION (expr);
889
890 bp = lto_input_bitpack (ib);
891 len = sizeof (struct cl_target_option);
892 for (i = 0; i < len; i++)
893 ((unsigned char *)t)[i] = bp_unpack_value (&bp, 8);
894 if (bp_unpack_value (&bp, 32) != 0x12345678)
895 fatal_error ("cl_target_option size mismatch in LTO reader and writer");
896 }
897
898 /* Input a TS_TRANSLATION_UNIT_DECL tree from IB and DATA_IN into EXPR. */
899
900 static void
901 lto_input_ts_translation_unit_decl_tree_pointers (struct lto_input_block *ib,
902 struct data_in *data_in,
903 tree expr)
904 {
905 TRANSLATION_UNIT_LANGUAGE (expr) = xstrdup (lto_input_string (data_in, ib));
906 VEC_safe_push (tree, gc, all_translation_units, expr);
907 }
908
909 /* Helper for lto_input_tree. Read all pointer fields in EXPR from
910 input block IB. DATA_IN contains tables and descriptors for the
911 file being read. */
912
913 static void
914 lto_input_tree_pointers (struct lto_input_block *ib, struct data_in *data_in,
915 tree expr)
916 {
917 enum tree_code code;
918
919 code = TREE_CODE (expr);
920
921 if (CODE_CONTAINS_STRUCT (code, TS_TYPED))
922 lto_input_ts_common_tree_pointers (ib, data_in, expr);
923
924 if (CODE_CONTAINS_STRUCT (code, TS_VECTOR))
925 lto_input_ts_vector_tree_pointers (ib, data_in, expr);
926
927 if (CODE_CONTAINS_STRUCT (code, TS_COMPLEX))
928 lto_input_ts_complex_tree_pointers (ib, data_in, expr);
929
930 if (CODE_CONTAINS_STRUCT (code, TS_DECL_MINIMAL))
931 lto_input_ts_decl_minimal_tree_pointers (ib, data_in, expr);
932
933 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
934 lto_input_ts_decl_common_tree_pointers (ib, data_in, expr);
935
936 if (CODE_CONTAINS_STRUCT (code, TS_DECL_NON_COMMON))
937 lto_input_ts_decl_non_common_tree_pointers (ib, data_in, expr);
938
939 if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
940 lto_input_ts_decl_with_vis_tree_pointers (ib, data_in, expr);
941
942 if (CODE_CONTAINS_STRUCT (code, TS_FIELD_DECL))
943 lto_input_ts_field_decl_tree_pointers (ib, data_in, expr);
944
945 if (CODE_CONTAINS_STRUCT (code, TS_FUNCTION_DECL))
946 lto_input_ts_function_decl_tree_pointers (ib, data_in, expr);
947
948 if (CODE_CONTAINS_STRUCT (code, TS_TYPE_COMMON))
949 lto_input_ts_type_common_tree_pointers (ib, data_in, expr);
950
951 if (CODE_CONTAINS_STRUCT (code, TS_TYPE_NON_COMMON))
952 lto_input_ts_type_non_common_tree_pointers (ib, data_in, expr);
953
954 if (CODE_CONTAINS_STRUCT (code, TS_LIST))
955 lto_input_ts_list_tree_pointers (ib, data_in, expr);
956
957 if (CODE_CONTAINS_STRUCT (code, TS_VEC))
958 lto_input_ts_vec_tree_pointers (ib, data_in, expr);
959
960 if (CODE_CONTAINS_STRUCT (code, TS_EXP))
961 lto_input_ts_exp_tree_pointers (ib, data_in, expr);
962
963 if (CODE_CONTAINS_STRUCT (code, TS_BLOCK))
964 lto_input_ts_block_tree_pointers (ib, data_in, expr);
965
966 if (CODE_CONTAINS_STRUCT (code, TS_BINFO))
967 lto_input_ts_binfo_tree_pointers (ib, data_in, expr);
968
969 if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
970 lto_input_ts_constructor_tree_pointers (ib, data_in, expr);
971
972 if (CODE_CONTAINS_STRUCT (code, TS_TARGET_OPTION))
973 lto_input_ts_target_option (ib, expr);
974
975 if (CODE_CONTAINS_STRUCT (code, TS_TRANSLATION_UNIT_DECL))
976 lto_input_ts_translation_unit_decl_tree_pointers (ib, data_in, expr);
977 }
978
979
980 /* Read the physical representation of a tree node with tag TAG from
981 input block IB using the per-file context in DATA_IN. */
982
983 static tree
984 lto_read_tree (struct lto_input_block *ib, struct data_in *data_in,
985 enum LTO_tags tag)
986 {
987 tree result;
988
989 result = lto_materialize_tree (ib, data_in, tag);
990
991 /* Read all the pointer fields in RESULT. */
992 lto_input_tree_pointers (ib, data_in, result);
993
994 /* Call back into the streaming module to read anything else it
995 may need. */
996 if (streamer_hooks.read_tree)
997 streamer_hooks.read_tree (ib, data_in, result);
998
999 /* We should never try to instantiate an MD or NORMAL builtin here. */
1000 if (TREE_CODE (result) == FUNCTION_DECL)
1001 gcc_assert (!lto_stream_as_builtin_p (result));
1002
1003 /* end_marker = */ lto_input_1_unsigned (ib);
1004
1005 #ifdef LTO_STREAMER_DEBUG
1006 /* Remove the mapping to RESULT's original address set by
1007 lto_materialize_tree. */
1008 lto_orig_address_remove (result);
1009 #endif
1010
1011 return result;
1012 }
1013
1014
1015 /* Read and INTEGER_CST node from input block IB using the per-file
1016 context in DATA_IN. */
1017
1018 static tree
1019 lto_input_integer_cst (struct lto_input_block *ib, struct data_in *data_in)
1020 {
1021 tree result, type;
1022 HOST_WIDE_INT low, high;
1023 bool overflow_p;
1024
1025 type = lto_input_tree (ib, data_in);
1026 overflow_p = (lto_input_1_unsigned (ib) != 0);
1027 low = lto_input_uleb128 (ib);
1028 high = lto_input_uleb128 (ib);
1029 result = build_int_cst_wide (type, low, high);
1030
1031 /* If the original constant had overflown, build a replica of RESULT to
1032 avoid modifying the shared constant returned by build_int_cst_wide. */
1033 if (overflow_p)
1034 {
1035 result = copy_node (result);
1036 TREE_OVERFLOW (result) = 1;
1037 }
1038
1039 return result;
1040 }
1041
1042
1043 /* Read an index IX from input block IB and return the tree node at
1044 DATA_IN->FILE_DATA->GLOBALS_INDEX[IX]. */
1045
1046 static tree
1047 lto_get_pickled_tree (struct lto_input_block *ib, struct data_in *data_in)
1048 {
1049 unsigned HOST_WIDE_INT ix;
1050 tree result;
1051 enum LTO_tags expected_tag;
1052
1053 ix = lto_input_uleb128 (ib);
1054 expected_tag = lto_input_enum (ib, LTO_tags, LTO_NUM_TAGS);
1055
1056 result = lto_streamer_cache_get (data_in->reader_cache, ix);
1057 gcc_assert (result
1058 && TREE_CODE (result) == lto_tag_to_tree_code (expected_tag));
1059
1060 return result;
1061 }
1062
1063
1064 /* Read a code and class from input block IB and return the
1065 corresponding builtin. DATA_IN is as in lto_input_tree. */
1066
1067 static tree
1068 lto_get_builtin_tree (struct lto_input_block *ib, struct data_in *data_in)
1069 {
1070 enum built_in_class fclass;
1071 enum built_in_function fcode;
1072 const char *asmname;
1073 tree result;
1074
1075 fclass = lto_input_enum (ib, built_in_class, BUILT_IN_LAST);
1076 gcc_assert (fclass == BUILT_IN_NORMAL || fclass == BUILT_IN_MD);
1077
1078 fcode = (enum built_in_function) lto_input_uleb128 (ib);
1079
1080 if (fclass == BUILT_IN_NORMAL)
1081 {
1082 if (fcode >= END_BUILTINS)
1083 fatal_error ("machine independent builtin code out of range");
1084 result = built_in_decls[fcode];
1085 gcc_assert (result);
1086 }
1087 else if (fclass == BUILT_IN_MD)
1088 {
1089 result = targetm.builtin_decl (fcode, true);
1090 if (!result || result == error_mark_node)
1091 fatal_error ("target specific builtin not available");
1092 }
1093 else
1094 gcc_unreachable ();
1095
1096 asmname = lto_input_string (data_in, ib);
1097 if (asmname)
1098 set_builtin_user_assembler_name (result, asmname);
1099
1100 lto_streamer_cache_append (data_in->reader_cache, result);
1101
1102 return result;
1103 }
1104
1105
1106 /* Read a tree from input block IB using the per-file context in
1107 DATA_IN. This context is used, for example, to resolve references
1108 to previously read nodes. */
1109
1110 tree
1111 lto_input_tree (struct lto_input_block *ib, struct data_in *data_in)
1112 {
1113 enum LTO_tags tag;
1114 tree result;
1115
1116 tag = input_record_start (ib);
1117 gcc_assert ((unsigned) tag < (unsigned) LTO_NUM_TAGS);
1118
1119 if (tag == LTO_null)
1120 result = NULL_TREE;
1121 else if (tag >= LTO_field_decl_ref && tag <= LTO_global_decl_ref)
1122 {
1123 /* If TAG is a reference to an indexable tree, the next value
1124 in IB is the index into the table where we expect to find
1125 that tree. */
1126 result = lto_input_tree_ref (ib, data_in, cfun, tag);
1127 }
1128 else if (tag == LTO_tree_pickle_reference)
1129 {
1130 /* If TAG is a reference to a previously read tree, look it up in
1131 the reader cache. */
1132 result = lto_get_pickled_tree (ib, data_in);
1133 }
1134 else if (tag == LTO_builtin_decl)
1135 {
1136 /* If we are going to read a built-in function, all we need is
1137 the code and class. */
1138 result = lto_get_builtin_tree (ib, data_in);
1139 }
1140 else if (tag == lto_tree_code_to_tag (INTEGER_CST))
1141 {
1142 /* For integer constants we only need the type and its hi/low
1143 words. */
1144 result = lto_input_integer_cst (ib, data_in);
1145 }
1146 else
1147 {
1148 /* Otherwise, materialize a new node from IB. */
1149 result = lto_read_tree (ib, data_in, tag);
1150 }
1151
1152 return result;
1153 }