Add -march=interaptiv.
[platform/upstream/gcc.git] / gcc / lto-streamer-in.c
1 /* Read the GIMPLE representation from a file stream.
2
3    Copyright (C) 2009-2015 Free Software Foundation, Inc.
4    Contributed by Kenneth Zadeck <zadeck@naturalbridge.com>
5    Re-implemented by Diego Novillo <dnovillo@google.com>
6
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify it under
10 the terms of the GNU General Public License as published by the Free
11 Software Foundation; either version 3, or (at your option) any later
12 version.
13
14 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15 WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
17 for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.  */
22
23 #include "config.h"
24 #include "system.h"
25 #include "coretypes.h"
26 #include "backend.h"
27 #include "cfghooks.h"
28 #include "tree.h"
29 #include "gimple.h"
30 #include "rtl.h"
31 #include "ssa.h"
32 #include "toplev.h"
33 #include "alias.h"
34 #include "fold-const.h"
35 #include "flags.h"
36 #include "insn-config.h"
37 #include "expmed.h"
38 #include "dojump.h"
39 #include "explow.h"
40 #include "calls.h"
41 #include "emit-rtl.h"
42 #include "varasm.h"
43 #include "stmt.h"
44 #include "expr.h"
45 #include "params.h"
46 #include "internal-fn.h"
47 #include "gimple-iterator.h"
48 #include "tree-cfg.h"
49 #include "tree-into-ssa.h"
50 #include "tree-dfa.h"
51 #include "tree-ssa.h"
52 #include "tree-pass.h"
53 #include "diagnostic.h"
54 #include "except.h"
55 #include "debug.h"
56 #include "cgraph.h"
57 #include "ipa-utils.h"
58 #include "target.h"
59 #include "gimple-streamer.h"
60 #include "cfgloop.h"
61
62
63 struct freeing_string_slot_hasher : string_slot_hasher
64 {
65   static inline void remove (value_type *);
66 };
67
68 inline void
69 freeing_string_slot_hasher::remove (value_type *v)
70 {
71   free (v);
72 }
73
74 /* The table to hold the file names.  */
75 static hash_table<freeing_string_slot_hasher> *file_name_hash_table;
76
77
78 /* Check that tag ACTUAL has one of the given values.  NUM_TAGS is the
79    number of valid tag values to check.  */
80
81 void
82 lto_tag_check_set (enum LTO_tags actual, int ntags, ...)
83 {
84   va_list ap;
85   int i;
86
87   va_start (ap, ntags);
88   for (i = 0; i < ntags; i++)
89     if ((unsigned) actual == va_arg (ap, unsigned))
90       {
91         va_end (ap);
92         return;
93       }
94
95   va_end (ap);
96   internal_error ("bytecode stream: unexpected tag %s", lto_tag_name (actual));
97 }
98
99
100 /* Read LENGTH bytes from STREAM to ADDR.  */
101
102 void
103 lto_input_data_block (struct lto_input_block *ib, void *addr, size_t length)
104 {
105   size_t i;
106   unsigned char *const buffer = (unsigned char *const) addr;
107
108   for (i = 0; i < length; i++)
109     buffer[i] = streamer_read_uchar (ib);
110 }
111
112
113 /* Lookup STRING in file_name_hash_table.  If found, return the existing
114    string, otherwise insert STRING as the canonical version.  */
115
116 static const char *
117 canon_file_name (const char *string)
118 {
119   string_slot **slot;
120   struct string_slot s_slot;
121   size_t len = strlen (string);
122
123   s_slot.s = string;
124   s_slot.len = len;
125
126   slot = file_name_hash_table->find_slot (&s_slot, INSERT);
127   if (*slot == NULL)
128     {
129       char *saved_string;
130       struct string_slot *new_slot;
131
132       saved_string = (char *) xmalloc (len + 1);
133       new_slot = XCNEW (struct string_slot);
134       memcpy (saved_string, string, len + 1);
135       new_slot->s = saved_string;
136       new_slot->len = len;
137       *slot = new_slot;
138       return saved_string;
139     }
140   else
141     {
142       struct string_slot *old_slot = *slot;
143       return old_slot->s;
144     }
145 }
146
147 /* Pointer to currently alive instance of lto_location_cache.  */
148
149 lto_location_cache *lto_location_cache::current_cache;
150
151 /* Sort locations in source order. Start with file from last application.  */
152
153 int
154 lto_location_cache::cmp_loc (const void *pa, const void *pb)
155 {
156   const cached_location *a = ((const cached_location *)pa);
157   const cached_location *b = ((const cached_location *)pb);
158   const char *current_file = current_cache->current_file;
159   int current_line = current_cache->current_line;
160
161   if (a->file == current_file && b->file != current_file)
162     return -1;
163   if (a->file != current_file && b->file == current_file)
164     return 1;
165   if (a->file == current_file && b->file == current_file)
166     {
167       if (a->line == current_line && b->line != current_line)
168         return -1;
169       if (a->line != current_line && b->line == current_line)
170         return 1;
171     }
172   if (a->file != b->file)
173     return strcmp (a->file, b->file);
174   if (a->line != b->line)
175     return a->line - b->line;
176   return a->col - b->col;
177 }
178
179 /* Apply all changes in location cache.  Add locations into linemap and patch
180    trees.  */
181
182 bool
183 lto_location_cache::apply_location_cache ()
184 {
185   static const char *prev_file;
186   if (!loc_cache.length ())
187     return false;
188   if (loc_cache.length () > 1)
189     loc_cache.qsort (cmp_loc);
190
191   for (unsigned int i = 0; i < loc_cache.length (); i++)
192     {
193       struct cached_location loc = loc_cache[i];
194
195       if (current_file != loc.file)
196         linemap_add (line_table, prev_file ? LC_RENAME : LC_ENTER,
197                      false, loc.file, loc.line);
198       else if (current_line != loc.line)
199         {
200           int max = loc.col;
201
202           for (unsigned int j = i + 1; j < loc_cache.length (); j++)
203             if (loc.file != loc_cache[j].file
204                 || loc.line != loc_cache[j].line)
205               break;
206             else if (max < loc_cache[j].col)
207               max = loc_cache[j].col;
208           linemap_line_start (line_table, loc.line, max + 1);
209         }
210       gcc_assert (*loc.loc == BUILTINS_LOCATION + 1);
211       if (current_file == loc.file && current_line == loc.line
212           && current_col == loc.col)
213         *loc.loc = current_loc;
214       else
215         current_loc = *loc.loc = linemap_position_for_column (line_table,
216                                                               loc.col);
217       current_line = loc.line;
218       prev_file = current_file = loc.file;
219       current_col = loc.col;
220     }
221   loc_cache.truncate (0);
222   accepted_length = 0;
223   return true;
224 }
225
226 /* Tree merging did not suceed; mark all changes in the cache as accepted.  */
227
228 void
229 lto_location_cache::accept_location_cache ()
230 {
231   gcc_assert (current_cache == this);
232   accepted_length = loc_cache.length ();
233 }
234
235 /* Tree merging did suceed; throw away recent changes.  */
236
237 void
238 lto_location_cache::revert_location_cache ()
239 {
240   loc_cache.truncate (accepted_length);
241 }
242
243 /* Read a location bitpack from input block IB and either update *LOC directly
244    or add it to the location cache.
245    It is neccesary to call apply_location_cache to get *LOC updated.  */
246
247 void
248 lto_location_cache::input_location (location_t *loc, struct bitpack_d *bp,
249                                     struct data_in *data_in)
250 {
251   static const char *stream_file;
252   static int stream_line;
253   static int stream_col;
254   bool file_change, line_change, column_change;
255
256   gcc_assert (current_cache == this);
257
258   *loc = bp_unpack_int_in_range (bp, "location", 0, RESERVED_LOCATION_COUNT);
259
260   if (*loc < RESERVED_LOCATION_COUNT)
261     return;
262
263   /* Keep value RESERVED_LOCATION_COUNT in *loc as linemap lookups will
264      ICE on it.  */
265
266   file_change = bp_unpack_value (bp, 1);
267   line_change = bp_unpack_value (bp, 1);
268   column_change = bp_unpack_value (bp, 1);
269
270   if (file_change)
271     stream_file = canon_file_name (bp_unpack_string (data_in, bp));
272
273   if (line_change)
274     stream_line = bp_unpack_var_len_unsigned (bp);
275
276   if (column_change)
277     stream_col = bp_unpack_var_len_unsigned (bp);
278
279   /* This optimization saves location cache operations druing gimple
280      streaming.  */
281      
282   if (current_file == stream_file && current_line == stream_line
283       && current_col == stream_col)
284     {
285       *loc = current_loc;
286       return;
287     }
288
289   struct cached_location entry = {stream_file, loc, stream_line, stream_col};
290   loc_cache.safe_push (entry);
291 }
292
293 /* Read a location bitpack from input block IB and either update *LOC directly
294    or add it to the location cache.
295    It is neccesary to call apply_location_cache to get *LOC updated.  */
296
297 void
298 lto_input_location (location_t *loc, struct bitpack_d *bp,
299                     struct data_in *data_in)
300 {
301   data_in->location_cache.input_location (loc, bp, data_in);
302 }
303
304 /* Read location and return it instead of going through location caching.
305    This should be used only when the resulting location is not going to be
306    discarded.  */
307
308 location_t
309 stream_input_location_now (struct bitpack_d *bp, struct data_in *data_in)
310 {
311   location_t loc;
312   stream_input_location (&loc, bp, data_in);
313   data_in->location_cache.apply_location_cache ();
314   return loc;
315 }
316
317 /* Read a reference to a tree node from DATA_IN using input block IB.
318    TAG is the expected node that should be found in IB, if TAG belongs
319    to one of the indexable trees, expect to read a reference index to
320    be looked up in one of the symbol tables, otherwise read the pysical
321    representation of the tree using stream_read_tree.  FN is the
322    function scope for the read tree.  */
323
324 tree
325 lto_input_tree_ref (struct lto_input_block *ib, struct data_in *data_in,
326                     struct function *fn, enum LTO_tags tag)
327 {
328   unsigned HOST_WIDE_INT ix_u;
329   tree result = NULL_TREE;
330
331   lto_tag_check_range (tag, LTO_field_decl_ref, LTO_namelist_decl_ref);
332
333   switch (tag)
334     {
335     case LTO_type_ref:
336       ix_u = streamer_read_uhwi (ib);
337       result = lto_file_decl_data_get_type (data_in->file_data, ix_u);
338       break;
339
340     case LTO_ssa_name_ref:
341       ix_u = streamer_read_uhwi (ib);
342       result = (*SSANAMES (fn))[ix_u];
343       break;
344
345     case LTO_field_decl_ref:
346       ix_u = streamer_read_uhwi (ib);
347       result = lto_file_decl_data_get_field_decl (data_in->file_data, ix_u);
348       break;
349
350     case LTO_function_decl_ref:
351       ix_u = streamer_read_uhwi (ib);
352       result = lto_file_decl_data_get_fn_decl (data_in->file_data, ix_u);
353       break;
354
355     case LTO_type_decl_ref:
356       ix_u = streamer_read_uhwi (ib);
357       result = lto_file_decl_data_get_type_decl (data_in->file_data, ix_u);
358       break;
359
360     case LTO_namespace_decl_ref:
361       ix_u = streamer_read_uhwi (ib);
362       result = lto_file_decl_data_get_namespace_decl (data_in->file_data, ix_u);
363       break;
364
365     case LTO_global_decl_ref:
366     case LTO_result_decl_ref:
367     case LTO_const_decl_ref:
368     case LTO_imported_decl_ref:
369     case LTO_label_decl_ref:
370     case LTO_translation_unit_decl_ref:
371     case LTO_namelist_decl_ref:
372       ix_u = streamer_read_uhwi (ib);
373       result = lto_file_decl_data_get_var_decl (data_in->file_data, ix_u);
374       break;
375
376     default:
377       gcc_unreachable ();
378     }
379
380   gcc_assert (result);
381
382   return result;
383 }
384
385
386 /* Read and return a double-linked list of catch handlers from input
387    block IB, using descriptors in DATA_IN.  */
388
389 static struct eh_catch_d *
390 lto_input_eh_catch_list (struct lto_input_block *ib, struct data_in *data_in,
391                          eh_catch *last_p)
392 {
393   eh_catch first;
394   enum LTO_tags tag;
395
396   *last_p = first = NULL;
397   tag = streamer_read_record_start (ib);
398   while (tag)
399     {
400       tree list;
401       eh_catch n;
402
403       lto_tag_check_range (tag, LTO_eh_catch, LTO_eh_catch);
404
405       /* Read the catch node.  */
406       n = ggc_cleared_alloc<eh_catch_d> ();
407       n->type_list = stream_read_tree (ib, data_in);
408       n->filter_list = stream_read_tree (ib, data_in);
409       n->label = stream_read_tree (ib, data_in);
410
411       /* Register all the types in N->FILTER_LIST.  */
412       for (list = n->filter_list; list; list = TREE_CHAIN (list))
413         add_type_for_runtime (TREE_VALUE (list));
414
415       /* Chain N to the end of the list.  */
416       if (*last_p)
417         (*last_p)->next_catch = n;
418       n->prev_catch = *last_p;
419       *last_p = n;
420
421       /* Set the head of the list the first time through the loop.  */
422       if (first == NULL)
423         first = n;
424
425       tag = streamer_read_record_start (ib);
426     }
427
428   return first;
429 }
430
431
432 /* Read and return EH region IX from input block IB, using descriptors
433    in DATA_IN.  */
434
435 static eh_region
436 input_eh_region (struct lto_input_block *ib, struct data_in *data_in, int ix)
437 {
438   enum LTO_tags tag;
439   eh_region r;
440
441   /* Read the region header.  */
442   tag = streamer_read_record_start (ib);
443   if (tag == LTO_null)
444     return NULL;
445
446   r = ggc_cleared_alloc<eh_region_d> ();
447   r->index = streamer_read_hwi (ib);
448
449   gcc_assert (r->index == ix);
450
451   /* Read all the region pointers as region numbers.  We'll fix up
452      the pointers once the whole array has been read.  */
453   r->outer = (eh_region) (intptr_t) streamer_read_hwi (ib);
454   r->inner = (eh_region) (intptr_t) streamer_read_hwi (ib);
455   r->next_peer = (eh_region) (intptr_t) streamer_read_hwi (ib);
456
457   switch (tag)
458     {
459       case LTO_ert_cleanup:
460         r->type = ERT_CLEANUP;
461         break;
462
463       case LTO_ert_try:
464         {
465           struct eh_catch_d *last_catch;
466           r->type = ERT_TRY;
467           r->u.eh_try.first_catch = lto_input_eh_catch_list (ib, data_in,
468                                                              &last_catch);
469           r->u.eh_try.last_catch = last_catch;
470           break;
471         }
472
473       case LTO_ert_allowed_exceptions:
474         {
475           tree l;
476
477           r->type = ERT_ALLOWED_EXCEPTIONS;
478           r->u.allowed.type_list = stream_read_tree (ib, data_in);
479           r->u.allowed.label = stream_read_tree (ib, data_in);
480           r->u.allowed.filter = streamer_read_uhwi (ib);
481
482           for (l = r->u.allowed.type_list; l ; l = TREE_CHAIN (l))
483             add_type_for_runtime (TREE_VALUE (l));
484         }
485         break;
486
487       case LTO_ert_must_not_throw:
488         {
489           r->type = ERT_MUST_NOT_THROW;
490           r->u.must_not_throw.failure_decl = stream_read_tree (ib, data_in);
491           bitpack_d bp = streamer_read_bitpack (ib);
492           r->u.must_not_throw.failure_loc
493            = stream_input_location_now (&bp, data_in);
494         }
495         break;
496
497       default:
498         gcc_unreachable ();
499     }
500
501   r->landing_pads = (eh_landing_pad) (intptr_t) streamer_read_hwi (ib);
502
503   return r;
504 }
505
506
507 /* Read and return EH landing pad IX from input block IB, using descriptors
508    in DATA_IN.  */
509
510 static eh_landing_pad
511 input_eh_lp (struct lto_input_block *ib, struct data_in *data_in, int ix)
512 {
513   enum LTO_tags tag;
514   eh_landing_pad lp;
515
516   /* Read the landing pad header.  */
517   tag = streamer_read_record_start (ib);
518   if (tag == LTO_null)
519     return NULL;
520
521   lto_tag_check_range (tag, LTO_eh_landing_pad, LTO_eh_landing_pad);
522
523   lp = ggc_cleared_alloc<eh_landing_pad_d> ();
524   lp->index = streamer_read_hwi (ib);
525   gcc_assert (lp->index == ix);
526   lp->next_lp = (eh_landing_pad) (intptr_t) streamer_read_hwi (ib);
527   lp->region = (eh_region) (intptr_t) streamer_read_hwi (ib);
528   lp->post_landing_pad = stream_read_tree (ib, data_in);
529
530   return lp;
531 }
532
533
534 /* After reading the EH regions, pointers to peer and children regions
535    are region numbers.  This converts all these region numbers into
536    real pointers into the rematerialized regions for FN.  ROOT_REGION
537    is the region number for the root EH region in FN.  */
538
539 static void
540 fixup_eh_region_pointers (struct function *fn, HOST_WIDE_INT root_region)
541 {
542   unsigned i;
543   vec<eh_region, va_gc> *eh_array = fn->eh->region_array;
544   vec<eh_landing_pad, va_gc> *lp_array = fn->eh->lp_array;
545   eh_region r;
546   eh_landing_pad lp;
547
548   gcc_assert (eh_array && lp_array);
549
550   gcc_assert (root_region >= 0);
551   fn->eh->region_tree = (*eh_array)[root_region];
552
553 #define FIXUP_EH_REGION(r) (r) = (*eh_array)[(HOST_WIDE_INT) (intptr_t) (r)]
554 #define FIXUP_EH_LP(p) (p) = (*lp_array)[(HOST_WIDE_INT) (intptr_t) (p)]
555
556   /* Convert all the index numbers stored in pointer fields into
557      pointers to the corresponding slots in the EH region array.  */
558   FOR_EACH_VEC_ELT (*eh_array, i, r)
559     {
560       /* The array may contain NULL regions.  */
561       if (r == NULL)
562         continue;
563
564       gcc_assert (i == (unsigned) r->index);
565       FIXUP_EH_REGION (r->outer);
566       FIXUP_EH_REGION (r->inner);
567       FIXUP_EH_REGION (r->next_peer);
568       FIXUP_EH_LP (r->landing_pads);
569     }
570
571   /* Convert all the index numbers stored in pointer fields into
572      pointers to the corresponding slots in the EH landing pad array.  */
573   FOR_EACH_VEC_ELT (*lp_array, i, lp)
574     {
575       /* The array may contain NULL landing pads.  */
576       if (lp == NULL)
577         continue;
578
579       gcc_assert (i == (unsigned) lp->index);
580       FIXUP_EH_LP (lp->next_lp);
581       FIXUP_EH_REGION (lp->region);
582     }
583
584 #undef FIXUP_EH_REGION
585 #undef FIXUP_EH_LP
586 }
587
588
589 /* Initialize EH support.  */
590
591 void
592 lto_init_eh (void)
593 {
594   static bool eh_initialized_p = false;
595
596   if (eh_initialized_p)
597     return;
598
599   /* Contrary to most other FEs, we only initialize EH support when at
600      least one of the files in the set contains exception regions in
601      it.  Since this happens much later than the call to init_eh in
602      lang_dependent_init, we have to set flag_exceptions and call
603      init_eh again to initialize the EH tables.  */
604   flag_exceptions = 1;
605   init_eh ();
606
607   eh_initialized_p = true;
608 }
609
610
611 /* Read the exception table for FN from IB using the data descriptors
612    in DATA_IN.  */
613
614 static void
615 input_eh_regions (struct lto_input_block *ib, struct data_in *data_in,
616                   struct function *fn)
617 {
618   HOST_WIDE_INT i, root_region, len;
619   enum LTO_tags tag;
620
621   tag = streamer_read_record_start (ib);
622   if (tag == LTO_null)
623     return;
624
625   lto_tag_check_range (tag, LTO_eh_table, LTO_eh_table);
626
627   /* If the file contains EH regions, then it was compiled with
628      -fexceptions.  In that case, initialize the backend EH
629      machinery.  */
630   lto_init_eh ();
631
632   gcc_assert (fn->eh);
633
634   root_region = streamer_read_hwi (ib);
635   gcc_assert (root_region == (int) root_region);
636
637   /* Read the EH region array.  */
638   len = streamer_read_hwi (ib);
639   gcc_assert (len == (int) len);
640   if (len > 0)
641     {
642       vec_safe_grow_cleared (fn->eh->region_array, len);
643       for (i = 0; i < len; i++)
644         {
645           eh_region r = input_eh_region (ib, data_in, i);
646           (*fn->eh->region_array)[i] = r;
647         }
648     }
649
650   /* Read the landing pads.  */
651   len = streamer_read_hwi (ib);
652   gcc_assert (len == (int) len);
653   if (len > 0)
654     {
655       vec_safe_grow_cleared (fn->eh->lp_array, len);
656       for (i = 0; i < len; i++)
657         {
658           eh_landing_pad lp = input_eh_lp (ib, data_in, i);
659           (*fn->eh->lp_array)[i] = lp;
660         }
661     }
662
663   /* Read the runtime type data.  */
664   len = streamer_read_hwi (ib);
665   gcc_assert (len == (int) len);
666   if (len > 0)
667     {
668       vec_safe_grow_cleared (fn->eh->ttype_data, len);
669       for (i = 0; i < len; i++)
670         {
671           tree ttype = stream_read_tree (ib, data_in);
672           (*fn->eh->ttype_data)[i] = ttype;
673         }
674     }
675
676   /* Read the table of action chains.  */
677   len = streamer_read_hwi (ib);
678   gcc_assert (len == (int) len);
679   if (len > 0)
680     {
681       if (targetm.arm_eabi_unwinder)
682         {
683           vec_safe_grow_cleared (fn->eh->ehspec_data.arm_eabi, len);
684           for (i = 0; i < len; i++)
685             {
686               tree t = stream_read_tree (ib, data_in);
687               (*fn->eh->ehspec_data.arm_eabi)[i] = t;
688             }
689         }
690       else
691         {
692           vec_safe_grow_cleared (fn->eh->ehspec_data.other, len);
693           for (i = 0; i < len; i++)
694             {
695               uchar c = streamer_read_uchar (ib);
696               (*fn->eh->ehspec_data.other)[i] = c;
697             }
698         }
699     }
700
701   /* Reconstruct the EH region tree by fixing up the peer/children
702      pointers.  */
703   fixup_eh_region_pointers (fn, root_region);
704
705   tag = streamer_read_record_start (ib);
706   lto_tag_check_range (tag, LTO_null, LTO_null);
707 }
708
709
710 /* Make a new basic block with index INDEX in function FN.  */
711
712 static basic_block
713 make_new_block (struct function *fn, unsigned int index)
714 {
715   basic_block bb = alloc_block ();
716   bb->index = index;
717   SET_BASIC_BLOCK_FOR_FN (fn, index, bb);
718   n_basic_blocks_for_fn (fn)++;
719   return bb;
720 }
721
722
723 /* Read a wide-int.  */
724
725 static widest_int
726 streamer_read_wi (struct lto_input_block *ib)
727 {
728   HOST_WIDE_INT a[WIDE_INT_MAX_ELTS];
729   int i;
730   int prec ATTRIBUTE_UNUSED = streamer_read_uhwi (ib);
731   int len = streamer_read_uhwi (ib);
732   for (i = 0; i < len; i++)
733     a[i] = streamer_read_hwi (ib);
734   return widest_int::from_array (a, len);
735 }
736
737
738 /* Read the CFG for function FN from input block IB.  */
739
740 static void
741 input_cfg (struct lto_input_block *ib, struct data_in *data_in,
742            struct function *fn,
743            int count_materialization_scale)
744 {
745   unsigned int bb_count;
746   basic_block p_bb;
747   unsigned int i;
748   int index;
749
750   init_empty_tree_cfg_for_function (fn);
751   init_ssa_operands (fn);
752
753   profile_status_for_fn (fn) = streamer_read_enum (ib, profile_status_d,
754                                                    PROFILE_LAST);
755
756   bb_count = streamer_read_uhwi (ib);
757
758   last_basic_block_for_fn (fn) = bb_count;
759   if (bb_count > basic_block_info_for_fn (fn)->length ())
760     vec_safe_grow_cleared (basic_block_info_for_fn (fn), bb_count);
761
762   if (bb_count > label_to_block_map_for_fn (fn)->length ())
763     vec_safe_grow_cleared (label_to_block_map_for_fn (fn), bb_count);
764
765   index = streamer_read_hwi (ib);
766   while (index != -1)
767     {
768       basic_block bb = BASIC_BLOCK_FOR_FN (fn, index);
769       unsigned int edge_count;
770
771       if (bb == NULL)
772         bb = make_new_block (fn, index);
773
774       edge_count = streamer_read_uhwi (ib);
775
776       /* Connect up the CFG.  */
777       for (i = 0; i < edge_count; i++)
778         {
779           unsigned int dest_index;
780           unsigned int edge_flags;
781           basic_block dest;
782           int probability;
783           gcov_type count;
784           edge e;
785
786           dest_index = streamer_read_uhwi (ib);
787           probability = (int) streamer_read_hwi (ib);
788           count = apply_scale ((gcov_type) streamer_read_gcov_count (ib),
789                                count_materialization_scale);
790           edge_flags = streamer_read_uhwi (ib);
791
792           dest = BASIC_BLOCK_FOR_FN (fn, dest_index);
793
794           if (dest == NULL)
795             dest = make_new_block (fn, dest_index);
796
797           e = make_edge (bb, dest, edge_flags);
798           e->probability = probability;
799           e->count = count;
800         }
801
802       index = streamer_read_hwi (ib);
803     }
804
805   p_bb = ENTRY_BLOCK_PTR_FOR_FN (fn);
806   index = streamer_read_hwi (ib);
807   while (index != -1)
808     {
809       basic_block bb = BASIC_BLOCK_FOR_FN (fn, index);
810       bb->prev_bb = p_bb;
811       p_bb->next_bb = bb;
812       p_bb = bb;
813       index = streamer_read_hwi (ib);
814     }
815
816   /* ???  The cfgloop interface is tied to cfun.  */
817   gcc_assert (cfun == fn);
818
819   /* Input the loop tree.  */
820   unsigned n_loops = streamer_read_uhwi (ib);
821   if (n_loops == 0)
822     return;
823
824   struct loops *loops = ggc_cleared_alloc<struct loops> ();
825   init_loops_structure (fn, loops, n_loops);
826   set_loops_for_fn (fn, loops);
827
828   /* Input each loop and associate it with its loop header so
829      flow_loops_find can rebuild the loop tree.  */
830   for (unsigned i = 1; i < n_loops; ++i)
831     {
832       int header_index = streamer_read_hwi (ib);
833       if (header_index == -1)
834         {
835           loops->larray->quick_push (NULL);
836           continue;
837         }
838
839       struct loop *loop = alloc_loop ();
840       loop->header = BASIC_BLOCK_FOR_FN (fn, header_index);
841       loop->header->loop_father = loop;
842
843       /* Read everything copy_loop_info copies.  */
844       loop->estimate_state = streamer_read_enum (ib, loop_estimation, EST_LAST);
845       loop->any_upper_bound = streamer_read_hwi (ib);
846       if (loop->any_upper_bound)
847         loop->nb_iterations_upper_bound = streamer_read_wi (ib);
848       loop->any_estimate = streamer_read_hwi (ib);
849       if (loop->any_estimate)
850         loop->nb_iterations_estimate = streamer_read_wi (ib);
851
852       /* Read OMP SIMD related info.  */
853       loop->safelen = streamer_read_hwi (ib);
854       loop->dont_vectorize = streamer_read_hwi (ib);
855       loop->force_vectorize = streamer_read_hwi (ib);
856       loop->simduid = stream_read_tree (ib, data_in);
857
858       place_new_loop (fn, loop);
859
860       /* flow_loops_find doesn't like loops not in the tree, hook them
861          all as siblings of the tree root temporarily.  */
862       flow_loop_tree_node_add (loops->tree_root, loop);
863     }
864
865   /* Rebuild the loop tree.  */
866   flow_loops_find (loops);
867 }
868
869
870 /* Read the SSA names array for function FN from DATA_IN using input
871    block IB.  */
872
873 static void
874 input_ssa_names (struct lto_input_block *ib, struct data_in *data_in,
875                  struct function *fn)
876 {
877   unsigned int i, size;
878
879   size = streamer_read_uhwi (ib);
880   init_ssanames (fn, size);
881
882   i = streamer_read_uhwi (ib);
883   while (i)
884     {
885       tree ssa_name, name;
886       bool is_default_def;
887
888       /* Skip over the elements that had been freed.  */
889       while (SSANAMES (fn)->length () < i)
890         SSANAMES (fn)->quick_push (NULL_TREE);
891
892       is_default_def = (streamer_read_uchar (ib) != 0);
893       name = stream_read_tree (ib, data_in);
894       ssa_name = make_ssa_name_fn (fn, name, gimple_build_nop ());
895
896       if (is_default_def)
897         set_ssa_default_def (cfun, SSA_NAME_VAR (ssa_name), ssa_name);
898
899       i = streamer_read_uhwi (ib);
900     }
901 }
902
903
904 /* Go through all NODE edges and fixup call_stmt pointers
905    so they point to STMTS.  */
906
907 static void
908 fixup_call_stmt_edges_1 (struct cgraph_node *node, gimple *stmts,
909                          struct function *fn)
910 {
911   struct cgraph_edge *cedge;
912   struct ipa_ref *ref = NULL;
913   unsigned int i;
914
915   for (cedge = node->callees; cedge; cedge = cedge->next_callee)
916     {
917       if (gimple_stmt_max_uid (fn) < cedge->lto_stmt_uid)
918         fatal_error (input_location,
919                      "Cgraph edge statement index out of range");
920       cedge->call_stmt = as_a <gcall *> (stmts[cedge->lto_stmt_uid - 1]);
921       if (!cedge->call_stmt)
922         fatal_error (input_location,
923                      "Cgraph edge statement index not found");
924     }
925   for (cedge = node->indirect_calls; cedge; cedge = cedge->next_callee)
926     {
927       if (gimple_stmt_max_uid (fn) < cedge->lto_stmt_uid)
928         fatal_error (input_location,
929                      "Cgraph edge statement index out of range");
930       cedge->call_stmt = as_a <gcall *> (stmts[cedge->lto_stmt_uid - 1]);
931       if (!cedge->call_stmt)
932         fatal_error (input_location, "Cgraph edge statement index not found");
933     }
934   for (i = 0; node->iterate_reference (i, ref); i++)
935     if (ref->lto_stmt_uid)
936       {
937         if (gimple_stmt_max_uid (fn) < ref->lto_stmt_uid)
938           fatal_error (input_location,
939                        "Reference statement index out of range");
940         ref->stmt = stmts[ref->lto_stmt_uid - 1];
941         if (!ref->stmt)
942           fatal_error (input_location, "Reference statement index not found");
943       }
944 }
945
946
947 /* Fixup call_stmt pointers in NODE and all clones.  */
948
949 static void
950 fixup_call_stmt_edges (struct cgraph_node *orig, gimple *stmts)
951 {
952   struct cgraph_node *node;
953   struct function *fn;
954
955   while (orig->clone_of)
956     orig = orig->clone_of;
957   fn = DECL_STRUCT_FUNCTION (orig->decl);
958
959   fixup_call_stmt_edges_1 (orig, stmts, fn);
960   if (orig->clones)
961     for (node = orig->clones; node != orig;)
962       {
963         fixup_call_stmt_edges_1 (node, stmts, fn);
964         if (node->clones)
965           node = node->clones;
966         else if (node->next_sibling_clone)
967           node = node->next_sibling_clone;
968         else
969           {
970             while (node != orig && !node->next_sibling_clone)
971               node = node->clone_of;
972             if (node != orig)
973               node = node->next_sibling_clone;
974           }
975       }
976 }
977
978
979 /* Input the base body of struct function FN from DATA_IN
980    using input block IB.  */
981
982 static void
983 input_struct_function_base (struct function *fn, struct data_in *data_in,
984                             struct lto_input_block *ib)
985 {
986   struct bitpack_d bp;
987   int len;
988
989   /* Read the static chain and non-local goto save area.  */
990   fn->static_chain_decl = stream_read_tree (ib, data_in);
991   fn->nonlocal_goto_save_area = stream_read_tree (ib, data_in);
992
993   /* Read all the local symbols.  */
994   len = streamer_read_hwi (ib);
995   if (len > 0)
996     {
997       int i;
998       vec_safe_grow_cleared (fn->local_decls, len);
999       for (i = 0; i < len; i++)
1000         {
1001           tree t = stream_read_tree (ib, data_in);
1002           (*fn->local_decls)[i] = t;
1003         }
1004     }
1005
1006   /* Input the current IL state of the function.  */
1007   fn->curr_properties = streamer_read_uhwi (ib);
1008
1009   /* Read all the attributes for FN.  */
1010   bp = streamer_read_bitpack (ib);
1011   fn->is_thunk = bp_unpack_value (&bp, 1);
1012   fn->has_local_explicit_reg_vars = bp_unpack_value (&bp, 1);
1013   fn->returns_pcc_struct = bp_unpack_value (&bp, 1);
1014   fn->returns_struct = bp_unpack_value (&bp, 1);
1015   fn->can_throw_non_call_exceptions = bp_unpack_value (&bp, 1);
1016   fn->can_delete_dead_exceptions = bp_unpack_value (&bp, 1);
1017   fn->always_inline_functions_inlined = bp_unpack_value (&bp, 1);
1018   fn->after_inlining = bp_unpack_value (&bp, 1);
1019   fn->stdarg = bp_unpack_value (&bp, 1);
1020   fn->has_nonlocal_label = bp_unpack_value (&bp, 1);
1021   fn->calls_alloca = bp_unpack_value (&bp, 1);
1022   fn->calls_setjmp = bp_unpack_value (&bp, 1);
1023   fn->has_force_vectorize_loops = bp_unpack_value (&bp, 1);
1024   fn->has_simduid_loops = bp_unpack_value (&bp, 1);
1025   fn->va_list_fpr_size = bp_unpack_value (&bp, 8);
1026   fn->va_list_gpr_size = bp_unpack_value (&bp, 8);
1027   fn->last_clique = bp_unpack_value (&bp, sizeof (short) * 8);
1028
1029   /* Input the function start and end loci.  */
1030   fn->function_start_locus = stream_input_location_now (&bp, data_in);
1031   fn->function_end_locus = stream_input_location_now (&bp, data_in);
1032 }
1033
1034
1035 /* Read the body of function FN_DECL from DATA_IN using input block IB.  */
1036
1037 static void
1038 input_function (tree fn_decl, struct data_in *data_in,
1039                 struct lto_input_block *ib, struct lto_input_block *ib_cfg)
1040 {
1041   struct function *fn;
1042   enum LTO_tags tag;
1043   gimple *stmts;
1044   basic_block bb;
1045   struct cgraph_node *node;
1046
1047   tag = streamer_read_record_start (ib);
1048   lto_tag_check (tag, LTO_function);
1049
1050   /* Read decls for parameters and args.  */
1051   DECL_RESULT (fn_decl) = stream_read_tree (ib, data_in);
1052   DECL_ARGUMENTS (fn_decl) = streamer_read_chain (ib, data_in);
1053
1054   /* Read the tree of lexical scopes for the function.  */
1055   DECL_INITIAL (fn_decl) = stream_read_tree (ib, data_in);
1056
1057   if (!streamer_read_uhwi (ib))
1058     return;
1059
1060   push_struct_function (fn_decl);
1061   fn = DECL_STRUCT_FUNCTION (fn_decl);
1062   init_tree_ssa (fn);
1063   /* We input IL in SSA form.  */
1064   cfun->gimple_df->in_ssa_p = true;
1065
1066   gimple_register_cfg_hooks ();
1067
1068   node = cgraph_node::get (fn_decl);
1069   if (!node)
1070     node = cgraph_node::create (fn_decl);
1071   input_struct_function_base (fn, data_in, ib);
1072   input_cfg (ib_cfg, data_in, fn, node->count_materialization_scale);
1073
1074   /* Read all the SSA names.  */
1075   input_ssa_names (ib, data_in, fn);
1076
1077   /* Read the exception handling regions in the function.  */
1078   input_eh_regions (ib, data_in, fn);
1079
1080   gcc_assert (DECL_INITIAL (fn_decl));
1081   DECL_SAVED_TREE (fn_decl) = NULL_TREE;
1082
1083   /* Read all the basic blocks.  */
1084   tag = streamer_read_record_start (ib);
1085   while (tag)
1086     {
1087       input_bb (ib, tag, data_in, fn,
1088                 node->count_materialization_scale);
1089       tag = streamer_read_record_start (ib);
1090     }
1091
1092   /* Fix up the call statements that are mentioned in the callgraph
1093      edges.  */
1094   set_gimple_stmt_max_uid (cfun, 0);
1095   FOR_ALL_BB_FN (bb, cfun)
1096     {
1097       gimple_stmt_iterator gsi;
1098       for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
1099         {
1100           gimple stmt = gsi_stmt (gsi);
1101           gimple_set_uid (stmt, inc_gimple_stmt_max_uid (cfun));
1102         }
1103       for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
1104         {
1105           gimple stmt = gsi_stmt (gsi);
1106           gimple_set_uid (stmt, inc_gimple_stmt_max_uid (cfun));
1107         }
1108     }
1109   stmts = (gimple *) xcalloc (gimple_stmt_max_uid (fn), sizeof (gimple));
1110   FOR_ALL_BB_FN (bb, cfun)
1111     {
1112       gimple_stmt_iterator bsi = gsi_start_phis (bb);
1113       while (!gsi_end_p (bsi))
1114         {
1115           gimple stmt = gsi_stmt (bsi);
1116           gsi_next (&bsi);
1117           stmts[gimple_uid (stmt)] = stmt;
1118         }
1119       bsi = gsi_start_bb (bb);
1120       while (!gsi_end_p (bsi))
1121         {
1122           gimple stmt = gsi_stmt (bsi);
1123           /* If we're recompiling LTO objects with debug stmts but
1124              we're not supposed to have debug stmts, remove them now.
1125              We can't remove them earlier because this would cause uid
1126              mismatches in fixups, but we can do it at this point, as
1127              long as debug stmts don't require fixups.  */
1128           if (!MAY_HAVE_DEBUG_STMTS && !flag_wpa && is_gimple_debug (stmt))
1129             {
1130               gimple_stmt_iterator gsi = bsi;
1131               gsi_next (&bsi);
1132               gsi_remove (&gsi, true);
1133             }
1134           else
1135             {
1136               gsi_next (&bsi);
1137               stmts[gimple_uid (stmt)] = stmt;
1138             }
1139         }
1140     }
1141
1142   /* Set the gimple body to the statement sequence in the entry
1143      basic block.  FIXME lto, this is fairly hacky.  The existence
1144      of a gimple body is used by the cgraph routines, but we should
1145      really use the presence of the CFG.  */
1146   {
1147     edge_iterator ei = ei_start (ENTRY_BLOCK_PTR_FOR_FN (cfun)->succs);
1148     gimple_set_body (fn_decl, bb_seq (ei_edge (ei)->dest));
1149   }
1150
1151   fixup_call_stmt_edges (node, stmts);
1152   execute_all_ipa_stmt_fixups (node, stmts);
1153
1154   update_ssa (TODO_update_ssa_only_virtuals);
1155   free_dominance_info (CDI_DOMINATORS);
1156   free_dominance_info (CDI_POST_DOMINATORS);
1157   free (stmts);
1158   pop_cfun ();
1159 }
1160
1161 /* Read the body of function FN_DECL from DATA_IN using input block IB.  */
1162
1163 static void
1164 input_constructor (tree var, struct data_in *data_in,
1165                    struct lto_input_block *ib)
1166 {
1167   DECL_INITIAL (var) = stream_read_tree (ib, data_in);
1168 }
1169
1170
1171 /* Read the body from DATA for function NODE and fill it in.
1172    FILE_DATA are the global decls and types.  SECTION_TYPE is either
1173    LTO_section_function_body or LTO_section_static_initializer.  If
1174    section type is LTO_section_function_body, FN must be the decl for
1175    that function.  */
1176
1177 static void
1178 lto_read_body_or_constructor (struct lto_file_decl_data *file_data, struct symtab_node *node,
1179                               const char *data, enum lto_section_type section_type)
1180 {
1181   const struct lto_function_header *header;
1182   struct data_in *data_in;
1183   int cfg_offset;
1184   int main_offset;
1185   int string_offset;
1186   tree fn_decl = node->decl;
1187
1188   header = (const struct lto_function_header *) data;
1189   if (TREE_CODE (node->decl) == FUNCTION_DECL)
1190     {
1191       cfg_offset = sizeof (struct lto_function_header);
1192       main_offset = cfg_offset + header->cfg_size;
1193       string_offset = main_offset + header->main_size;
1194     }
1195   else
1196     {
1197       main_offset = sizeof (struct lto_function_header);
1198       string_offset = main_offset + header->main_size;
1199     }
1200
1201   data_in = lto_data_in_create (file_data, data + string_offset,
1202                               header->string_size, vNULL);
1203
1204   if (section_type == LTO_section_function_body)
1205     {
1206       struct lto_in_decl_state *decl_state;
1207       unsigned from;
1208
1209       gcc_checking_assert (node);
1210
1211       /* Use the function's decl state. */
1212       decl_state = lto_get_function_in_decl_state (file_data, fn_decl);
1213       gcc_assert (decl_state);
1214       file_data->current_decl_state = decl_state;
1215
1216
1217       /* Set up the struct function.  */
1218       from = data_in->reader_cache->nodes.length ();
1219       lto_input_block ib_main (data + main_offset, header->main_size,
1220                                file_data->mode_table);
1221       if (TREE_CODE (node->decl) == FUNCTION_DECL)
1222         {
1223           lto_input_block ib_cfg (data + cfg_offset, header->cfg_size,
1224                                   file_data->mode_table);
1225           input_function (fn_decl, data_in, &ib_main, &ib_cfg);
1226         }
1227       else
1228         input_constructor (fn_decl, data_in, &ib_main);
1229       data_in->location_cache.apply_location_cache ();
1230       /* And fixup types we streamed locally.  */
1231         {
1232           struct streamer_tree_cache_d *cache = data_in->reader_cache;
1233           unsigned len = cache->nodes.length ();
1234           unsigned i;
1235           for (i = len; i-- > from;)
1236             {
1237               tree t = streamer_tree_cache_get_tree (cache, i);
1238               if (t == NULL_TREE)
1239                 continue;
1240
1241               if (TYPE_P (t))
1242                 {
1243                   gcc_assert (TYPE_CANONICAL (t) == NULL_TREE);
1244                   TYPE_CANONICAL (t) = TYPE_MAIN_VARIANT (t);
1245                   if (TYPE_MAIN_VARIANT (t) != t)
1246                     {
1247                       gcc_assert (TYPE_NEXT_VARIANT (t) == NULL_TREE);
1248                       TYPE_NEXT_VARIANT (t)
1249                         = TYPE_NEXT_VARIANT (TYPE_MAIN_VARIANT (t));
1250                       TYPE_NEXT_VARIANT (TYPE_MAIN_VARIANT (t)) = t;
1251                     }
1252                 }
1253             }
1254         }
1255
1256       /* Restore decl state */
1257       file_data->current_decl_state = file_data->global_decl_state;
1258     }
1259
1260   lto_data_in_delete (data_in);
1261 }
1262
1263
1264 /* Read the body of NODE using DATA.  FILE_DATA holds the global
1265    decls and types.  */
1266
1267 void
1268 lto_input_function_body (struct lto_file_decl_data *file_data,
1269                          struct cgraph_node *node, const char *data)
1270 {
1271   lto_read_body_or_constructor (file_data, node, data, LTO_section_function_body);
1272 }
1273
1274 /* Read the body of NODE using DATA.  FILE_DATA holds the global
1275    decls and types.  */
1276
1277 void
1278 lto_input_variable_constructor (struct lto_file_decl_data *file_data,
1279                                 struct varpool_node *node, const char *data)
1280 {
1281   lto_read_body_or_constructor (file_data, node, data, LTO_section_function_body);
1282 }
1283
1284
1285 /* Read the physical representation of a tree node EXPR from
1286    input block IB using the per-file context in DATA_IN.  */
1287
1288 static void
1289 lto_read_tree_1 (struct lto_input_block *ib, struct data_in *data_in, tree expr)
1290 {
1291   /* Read all the bitfield values in EXPR.  Note that for LTO, we
1292      only write language-independent bitfields, so no more unpacking is
1293      needed.  */
1294   streamer_read_tree_bitfields (ib, data_in, expr);
1295
1296   /* Read all the pointer fields in EXPR.  */
1297   streamer_read_tree_body (ib, data_in, expr);
1298
1299   /* Read any LTO-specific data not read by the tree streamer.  */
1300   if (DECL_P (expr)
1301       && TREE_CODE (expr) != FUNCTION_DECL
1302       && TREE_CODE (expr) != TRANSLATION_UNIT_DECL)
1303     DECL_INITIAL (expr) = stream_read_tree (ib, data_in);
1304
1305   /* We should never try to instantiate an MD or NORMAL builtin here.  */
1306   if (TREE_CODE (expr) == FUNCTION_DECL)
1307     gcc_assert (!streamer_handle_as_builtin_p (expr));
1308
1309 #ifdef LTO_STREAMER_DEBUG
1310   /* Remove the mapping to RESULT's original address set by
1311      streamer_alloc_tree.  */
1312   lto_orig_address_remove (expr);
1313 #endif
1314 }
1315
1316 /* Read the physical representation of a tree node with tag TAG from
1317    input block IB using the per-file context in DATA_IN.  */
1318
1319 static tree
1320 lto_read_tree (struct lto_input_block *ib, struct data_in *data_in,
1321                enum LTO_tags tag, hashval_t hash)
1322 {
1323   /* Instantiate a new tree node.  */
1324   tree result = streamer_alloc_tree (ib, data_in, tag);
1325
1326   /* Enter RESULT in the reader cache.  This will make RESULT
1327      available so that circular references in the rest of the tree
1328      structure can be resolved in subsequent calls to stream_read_tree.  */
1329   streamer_tree_cache_append (data_in->reader_cache, result, hash);
1330
1331   lto_read_tree_1 (ib, data_in, result);
1332
1333   /* end_marker = */ streamer_read_uchar (ib);
1334
1335   return result;
1336 }
1337
1338
1339 /* Populate the reader cache with trees materialized from the SCC
1340    following in the IB, DATA_IN stream.  */
1341
1342 hashval_t
1343 lto_input_scc (struct lto_input_block *ib, struct data_in *data_in,
1344                unsigned *len, unsigned *entry_len)
1345 {
1346   /* A blob of unnamed tree nodes, fill the cache from it and
1347      recurse.  */
1348   unsigned size = streamer_read_uhwi (ib);
1349   hashval_t scc_hash = streamer_read_uhwi (ib);
1350   unsigned scc_entry_len = 1;
1351
1352   if (size == 1)
1353     {
1354       enum LTO_tags tag = streamer_read_record_start (ib);
1355       lto_input_tree_1 (ib, data_in, tag, scc_hash);
1356     }
1357   else
1358     {
1359       unsigned int first = data_in->reader_cache->nodes.length ();
1360       tree result;
1361
1362       scc_entry_len = streamer_read_uhwi (ib);
1363
1364       /* Materialize size trees by reading their headers.  */
1365       for (unsigned i = 0; i < size; ++i)
1366         {
1367           enum LTO_tags tag = streamer_read_record_start (ib);
1368           if (tag == LTO_null
1369               || (tag >= LTO_field_decl_ref && tag <= LTO_global_decl_ref)
1370               || tag == LTO_tree_pickle_reference
1371               || tag == LTO_builtin_decl
1372               || tag == LTO_integer_cst
1373               || tag == LTO_tree_scc)
1374             gcc_unreachable ();
1375
1376           result = streamer_alloc_tree (ib, data_in, tag);
1377           streamer_tree_cache_append (data_in->reader_cache, result, 0);
1378         }
1379
1380       /* Read the tree bitpacks and references.  */
1381       for (unsigned i = 0; i < size; ++i)
1382         {
1383           result = streamer_tree_cache_get_tree (data_in->reader_cache,
1384                                                  first + i);
1385           lto_read_tree_1 (ib, data_in, result);
1386           /* end_marker = */ streamer_read_uchar (ib);
1387         }
1388     }
1389
1390   *len = size;
1391   *entry_len = scc_entry_len;
1392   return scc_hash;
1393 }
1394
1395
1396 /* Read a tree from input block IB using the per-file context in
1397    DATA_IN.  This context is used, for example, to resolve references
1398    to previously read nodes.  */
1399
1400 tree
1401 lto_input_tree_1 (struct lto_input_block *ib, struct data_in *data_in,
1402                   enum LTO_tags tag, hashval_t hash)
1403 {
1404   tree result;
1405
1406   gcc_assert ((unsigned) tag < (unsigned) LTO_NUM_TAGS);
1407
1408   if (tag == LTO_null)
1409     result = NULL_TREE;
1410   else if (tag >= LTO_field_decl_ref && tag <= LTO_namelist_decl_ref)
1411     {
1412       /* If TAG is a reference to an indexable tree, the next value
1413          in IB is the index into the table where we expect to find
1414          that tree.  */
1415       result = lto_input_tree_ref (ib, data_in, cfun, tag);
1416     }
1417   else if (tag == LTO_tree_pickle_reference)
1418     {
1419       /* If TAG is a reference to a previously read tree, look it up in
1420          the reader cache.  */
1421       result = streamer_get_pickled_tree (ib, data_in);
1422     }
1423   else if (tag == LTO_builtin_decl)
1424     {
1425       /* If we are going to read a built-in function, all we need is
1426          the code and class.  */
1427       result = streamer_get_builtin_tree (ib, data_in);
1428     }
1429   else if (tag == LTO_integer_cst)
1430     {
1431       /* For shared integer constants in singletons we can use the
1432          existing tree integer constant merging code.  */
1433       tree type = stream_read_tree (ib, data_in);
1434       unsigned HOST_WIDE_INT len = streamer_read_uhwi (ib);
1435       unsigned HOST_WIDE_INT i;
1436       HOST_WIDE_INT a[WIDE_INT_MAX_ELTS];
1437
1438       for (i = 0; i < len; i++)
1439         a[i] = streamer_read_hwi (ib);
1440       gcc_assert (TYPE_PRECISION (type) <= MAX_BITSIZE_MODE_ANY_INT);
1441       result = wide_int_to_tree (type, wide_int::from_array
1442                                  (a, len, TYPE_PRECISION (type)));
1443       streamer_tree_cache_append (data_in->reader_cache, result, hash);
1444     }
1445   else if (tag == LTO_tree_scc)
1446     gcc_unreachable ();
1447   else
1448     {
1449       /* Otherwise, materialize a new node from IB.  */
1450       result = lto_read_tree (ib, data_in, tag, hash);
1451     }
1452
1453   return result;
1454 }
1455
1456 tree
1457 lto_input_tree (struct lto_input_block *ib, struct data_in *data_in)
1458 {
1459   enum LTO_tags tag;
1460
1461   /* Input and skip SCCs.  */
1462   while ((tag = streamer_read_record_start (ib)) == LTO_tree_scc)
1463     {
1464       unsigned len, entry_len;
1465       lto_input_scc (ib, data_in, &len, &entry_len);
1466     }
1467   return lto_input_tree_1 (ib, data_in, tag, 0);
1468 }
1469
1470
1471 /* Input toplevel asms.  */
1472
1473 void
1474 lto_input_toplevel_asms (struct lto_file_decl_data *file_data, int order_base)
1475 {
1476   size_t len;
1477   const char *data = lto_get_section_data (file_data, LTO_section_asm,
1478                                            NULL, &len);
1479   const struct lto_simple_header_with_strings *header
1480     = (const struct lto_simple_header_with_strings *) data;
1481   int string_offset;
1482   struct data_in *data_in;
1483   tree str;
1484
1485   if (! data)
1486     return;
1487
1488   string_offset = sizeof (*header) + header->main_size;
1489
1490   lto_input_block ib (data + sizeof (*header), header->main_size,
1491                       file_data->mode_table);
1492
1493   data_in = lto_data_in_create (file_data, data + string_offset,
1494                               header->string_size, vNULL);
1495
1496   while ((str = streamer_read_string_cst (data_in, &ib)))
1497     {
1498       asm_node *node = symtab->finalize_toplevel_asm (str);
1499       node->order = streamer_read_hwi (&ib) + order_base;
1500       if (node->order >= symtab->order)
1501         symtab->order = node->order + 1;
1502     }
1503
1504   lto_data_in_delete (data_in);
1505
1506   lto_free_section_data (file_data, LTO_section_asm, NULL, data, len);
1507 }
1508
1509
1510 /* Input mode table.  */
1511
1512 void
1513 lto_input_mode_table (struct lto_file_decl_data *file_data)
1514 {
1515   size_t len;
1516   const char *data = lto_get_section_data (file_data, LTO_section_mode_table,
1517                                            NULL, &len);
1518   if (! data)
1519     {
1520       internal_error ("cannot read LTO mode table from %s",
1521                       file_data->file_name);
1522       return;
1523     }
1524
1525   unsigned char *table = ggc_cleared_vec_alloc<unsigned char> (1 << 8);
1526   file_data->mode_table = table;
1527   const struct lto_simple_header_with_strings *header
1528     = (const struct lto_simple_header_with_strings *) data;
1529   int string_offset;
1530   struct data_in *data_in;
1531   string_offset = sizeof (*header) + header->main_size;
1532
1533   lto_input_block ib (data + sizeof (*header), header->main_size, NULL);
1534   data_in = lto_data_in_create (file_data, data + string_offset,
1535                                 header->string_size, vNULL);
1536   bitpack_d bp = streamer_read_bitpack (&ib);
1537
1538   table[VOIDmode] = VOIDmode;
1539   table[BLKmode] = BLKmode;
1540   unsigned int m;
1541   while ((m = bp_unpack_value (&bp, 8)) != VOIDmode)
1542     {
1543       enum mode_class mclass
1544         = bp_unpack_enum (&bp, mode_class, MAX_MODE_CLASS);
1545       unsigned int size = bp_unpack_value (&bp, 8);
1546       unsigned int prec = bp_unpack_value (&bp, 16);
1547       machine_mode inner = (machine_mode) table[bp_unpack_value (&bp, 8)];
1548       unsigned int nunits = bp_unpack_value (&bp, 8);
1549       unsigned int ibit = 0, fbit = 0;
1550       unsigned int real_fmt_len = 0;
1551       const char *real_fmt_name = NULL;
1552       switch (mclass)
1553         {
1554         case MODE_FRACT:
1555         case MODE_UFRACT:
1556         case MODE_ACCUM:
1557         case MODE_UACCUM:
1558           ibit = bp_unpack_value (&bp, 8);
1559           fbit = bp_unpack_value (&bp, 8);
1560           break;
1561         case MODE_FLOAT:
1562         case MODE_DECIMAL_FLOAT:
1563           real_fmt_name = bp_unpack_indexed_string (data_in, &bp,
1564                                                     &real_fmt_len);
1565           break;
1566         default:
1567           break;
1568         }
1569       /* First search just the GET_CLASS_NARROWEST_MODE to wider modes,
1570          if not found, fallback to all modes.  */
1571       int pass;
1572       for (pass = 0; pass < 2; pass++)
1573         for (machine_mode mr = pass ? VOIDmode
1574                                     : GET_CLASS_NARROWEST_MODE (mclass);
1575              pass ? mr < MAX_MACHINE_MODE : mr != VOIDmode;
1576              pass ? mr = (machine_mode) (m + 1)
1577                   : mr = GET_MODE_WIDER_MODE (mr))
1578           if (GET_MODE_CLASS (mr) != mclass
1579               || GET_MODE_SIZE (mr) != size
1580               || GET_MODE_PRECISION (mr) != prec
1581               || GET_MODE_INNER (mr) != inner
1582               || GET_MODE_IBIT (mr) != ibit
1583               || GET_MODE_FBIT (mr) != fbit
1584               || GET_MODE_NUNITS (mr) != nunits)
1585             continue;
1586           else if ((mclass == MODE_FLOAT || mclass == MODE_DECIMAL_FLOAT)
1587                    && strcmp (REAL_MODE_FORMAT (mr)->name, real_fmt_name) != 0)
1588             continue;
1589           else
1590             {
1591               table[m] = mr;
1592               pass = 2;
1593               break;
1594             }
1595       unsigned int mname_len;
1596       const char *mname = bp_unpack_indexed_string (data_in, &bp, &mname_len);
1597       if (pass == 2)
1598         {
1599           switch (mclass)
1600             {
1601             case MODE_VECTOR_INT:
1602             case MODE_VECTOR_FLOAT:
1603             case MODE_VECTOR_FRACT:
1604             case MODE_VECTOR_UFRACT:
1605             case MODE_VECTOR_ACCUM:
1606             case MODE_VECTOR_UACCUM:
1607               /* For unsupported vector modes just use BLKmode,
1608                  if the scalar mode is supported.  */
1609               if (inner != VOIDmode)
1610                 {
1611                   table[m] = BLKmode;
1612                   break;
1613                 }
1614               /* FALLTHRU */
1615             default:
1616               fatal_error (UNKNOWN_LOCATION, "unsupported mode %s\n", mname);
1617               break;
1618             }
1619         }
1620     }
1621   lto_data_in_delete (data_in);
1622
1623   lto_free_section_data (file_data, LTO_section_mode_table, NULL, data, len);
1624 }
1625
1626
1627 /* Initialization for the LTO reader.  */
1628
1629 void
1630 lto_reader_init (void)
1631 {
1632   lto_streamer_init ();
1633   file_name_hash_table
1634     = new hash_table<freeing_string_slot_hasher> (37);
1635 }
1636
1637
1638 /* Create a new data_in object for FILE_DATA. STRINGS is the string
1639    table to use with LEN strings.  RESOLUTIONS is the vector of linker
1640    resolutions (NULL if not using a linker plugin).  */
1641
1642 struct data_in *
1643 lto_data_in_create (struct lto_file_decl_data *file_data, const char *strings,
1644                     unsigned len,
1645                     vec<ld_plugin_symbol_resolution_t> resolutions)
1646 {
1647   struct data_in *data_in = new (struct data_in);
1648   data_in->file_data = file_data;
1649   data_in->strings = strings;
1650   data_in->strings_len = len;
1651   data_in->globals_resolution = resolutions;
1652   data_in->reader_cache = streamer_tree_cache_create (false, false, true);
1653   return data_in;
1654 }
1655
1656
1657 /* Remove DATA_IN.  */
1658
1659 void
1660 lto_data_in_delete (struct data_in *data_in)
1661 {
1662   data_in->globals_resolution.release ();
1663   streamer_tree_cache_delete (data_in->reader_cache);
1664   delete data_in;
1665 }