Backport from GCC mainline.
[platform/upstream/linaro-gcc.git] / gcc / lto-cgraph.c
1 /* Write and read the cgraph to the memory mapped representation of a
2    .o file.
3
4    Copyright (C) 2009-2016 Free Software Foundation, Inc.
5    Contributed by Kenneth Zadeck <zadeck@naturalbridge.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 "rtl.h"
28 #include "tree.h"
29 #include "gimple.h"
30 #include "predict.h"
31 #include "stringpool.h"
32 #include "tree-streamer.h"
33 #include "cgraph.h"
34 #include "tree-pass.h"
35 #include "profile.h"
36 #include "context.h"
37 #include "pass_manager.h"
38 #include "ipa-utils.h"
39 #include "omp-low.h"
40 #include "ipa-chkp.h"
41
42 /* True when asm nodes has been output.  */
43 bool asm_nodes_output = false;
44
45 static void output_cgraph_opt_summary (void);
46 static void input_cgraph_opt_summary (vec<symtab_node *>  nodes);
47
48 /* Number of LDPR values known to GCC.  */
49 #define LDPR_NUM_KNOWN (LDPR_PREVAILING_DEF_IRONLY_EXP + 1)
50
51 /* All node orders are ofsetted by ORDER_BASE.  */
52 static int order_base;
53
54 /* Cgraph streaming is organized as set of record whose type
55    is indicated by a tag.  */
56 enum LTO_symtab_tags
57 {
58   /* Must leave 0 for the stopper.  */
59
60   /* Cgraph node without body available.  */
61   LTO_symtab_unavail_node = 1,
62   /* Cgraph node with function body.  */
63   LTO_symtab_analyzed_node,
64   /* Cgraph edges.  */
65   LTO_symtab_edge,
66   LTO_symtab_indirect_edge,
67   LTO_symtab_variable,
68   LTO_symtab_last_tag
69 };
70
71 /* Create a new symtab encoder.
72    if FOR_INPUT, the encoder allocate only datastructures needed
73    to read the symtab.  */
74
75 lto_symtab_encoder_t
76 lto_symtab_encoder_new (bool for_input)
77 {
78   lto_symtab_encoder_t encoder = XCNEW (struct lto_symtab_encoder_d);
79
80   if (!for_input)
81     encoder->map = new hash_map<symtab_node *, size_t>;
82   encoder->nodes.create (0);
83   return encoder;
84 }
85
86
87 /* Delete ENCODER and its components.  */
88
89 void
90 lto_symtab_encoder_delete (lto_symtab_encoder_t encoder)
91 {
92    encoder->nodes.release ();
93    if (encoder->map)
94      delete encoder->map;
95    free (encoder);
96 }
97
98
99 /* Return the existing reference number of NODE in the symtab encoder in
100    output block OB.  Assign a new reference if this is the first time
101    NODE is encoded.  */
102
103 int
104 lto_symtab_encoder_encode (lto_symtab_encoder_t encoder,
105                            symtab_node *node)
106 {
107   int ref;
108
109   if (!encoder->map)
110     {
111       lto_encoder_entry entry = {node, false, false, false};
112
113       ref = encoder->nodes.length ();
114       encoder->nodes.safe_push (entry);
115       return ref;
116     }
117
118   size_t *slot = encoder->map->get (node);
119   if (!slot || !*slot)
120     {
121       lto_encoder_entry entry = {node, false, false, false};
122       ref = encoder->nodes.length ();
123       if (!slot)
124         encoder->map->put (node, ref + 1);
125       encoder->nodes.safe_push (entry);
126     }
127   else
128     ref = *slot - 1;
129
130   return ref;
131 }
132
133 /* Remove NODE from encoder.  */
134
135 bool
136 lto_symtab_encoder_delete_node (lto_symtab_encoder_t encoder,
137                                 symtab_node *node)
138 {
139   int index;
140   lto_encoder_entry last_node;
141
142   size_t *slot = encoder->map->get (node);
143   if (slot == NULL || !*slot)
144     return false;
145
146   index = *slot - 1;
147   gcc_checking_assert (encoder->nodes[index].node == node);
148
149   /* Remove from vector. We do this by swapping node with the last element
150      of the vector.  */
151   last_node = encoder->nodes.pop ();
152   if (last_node.node != node)
153     {
154       gcc_assert (encoder->map->put (last_node.node, index + 1));
155
156       /* Move the last element to the original spot of NODE.  */
157       encoder->nodes[index] = last_node;
158     }
159
160   /* Remove element from hash table.  */
161   encoder->map->remove (node);
162   return true;
163 }
164
165
166 /* Return TRUE if we should encode the body of NODE (if any).  */
167
168 bool
169 lto_symtab_encoder_encode_body_p (lto_symtab_encoder_t encoder,
170                                   struct cgraph_node *node)
171 {
172   int index = lto_symtab_encoder_lookup (encoder, node);
173   return encoder->nodes[index].body;
174 }
175
176 /* Specify that we encode the body of NODE in this partition.  */
177
178 static void
179 lto_set_symtab_encoder_encode_body (lto_symtab_encoder_t encoder,
180                                     struct cgraph_node *node)
181 {
182   int index = lto_symtab_encoder_encode (encoder, node);
183   gcc_checking_assert (encoder->nodes[index].node == node);
184   encoder->nodes[index].body = true;
185 }
186
187 /* Return TRUE if we should encode initializer of NODE (if any).  */
188
189 bool
190 lto_symtab_encoder_encode_initializer_p (lto_symtab_encoder_t encoder,
191                                          varpool_node *node)
192 {
193   int index = lto_symtab_encoder_lookup (encoder, node);
194   if (index == LCC_NOT_FOUND)
195     return false;
196   return encoder->nodes[index].initializer;
197 }
198
199 /* Specify that we should encode initializer of NODE (if any).  */
200
201 static void
202 lto_set_symtab_encoder_encode_initializer (lto_symtab_encoder_t encoder,
203                                            varpool_node *node)
204 {
205   int index = lto_symtab_encoder_lookup (encoder, node);
206   encoder->nodes[index].initializer = true;
207 }
208
209 /* Return TRUE if NODE is in this partition.  */
210
211 bool
212 lto_symtab_encoder_in_partition_p (lto_symtab_encoder_t encoder,
213                                    symtab_node *node)
214 {
215   int index = lto_symtab_encoder_lookup (encoder, node);
216   if (index == LCC_NOT_FOUND)
217     return false;
218   return encoder->nodes[index].in_partition;
219 }
220
221 /* Specify that NODE is in this partition.  */
222
223 void
224 lto_set_symtab_encoder_in_partition (lto_symtab_encoder_t encoder,
225                                      symtab_node *node)
226 {
227   int index = lto_symtab_encoder_encode (encoder, node);
228   encoder->nodes[index].in_partition = true;
229 }
230
231 /* Output the cgraph EDGE to OB using ENCODER.  */
232
233 static void
234 lto_output_edge (struct lto_simple_output_block *ob, struct cgraph_edge *edge,
235                  lto_symtab_encoder_t encoder)
236 {
237   unsigned int uid;
238   intptr_t ref;
239   struct bitpack_d bp;
240
241   if (edge->indirect_unknown_callee)
242     streamer_write_enum (ob->main_stream, LTO_symtab_tags, LTO_symtab_last_tag,
243                          LTO_symtab_indirect_edge);
244   else
245     streamer_write_enum (ob->main_stream, LTO_symtab_tags, LTO_symtab_last_tag,
246                          LTO_symtab_edge);
247
248   ref = lto_symtab_encoder_lookup (encoder, edge->caller);
249   gcc_assert (ref != LCC_NOT_FOUND);
250   streamer_write_hwi_stream (ob->main_stream, ref);
251
252   if (!edge->indirect_unknown_callee)
253     {
254       ref = lto_symtab_encoder_lookup (encoder, edge->callee);
255       gcc_assert (ref != LCC_NOT_FOUND);
256       streamer_write_hwi_stream (ob->main_stream, ref);
257     }
258
259   streamer_write_gcov_count_stream (ob->main_stream, edge->count);
260
261   bp = bitpack_create (ob->main_stream);
262   uid = (!gimple_has_body_p (edge->caller->decl)
263          ? edge->lto_stmt_uid : gimple_uid (edge->call_stmt) + 1);
264   bp_pack_enum (&bp, cgraph_inline_failed_t,
265                 CIF_N_REASONS, edge->inline_failed);
266   bp_pack_var_len_unsigned (&bp, uid);
267   bp_pack_var_len_unsigned (&bp, edge->frequency);
268   bp_pack_value (&bp, edge->indirect_inlining_edge, 1);
269   bp_pack_value (&bp, edge->speculative, 1);
270   bp_pack_value (&bp, edge->call_stmt_cannot_inline_p, 1);
271   bp_pack_value (&bp, edge->can_throw_external, 1);
272   bp_pack_value (&bp, edge->in_polymorphic_cdtor, 1);
273   if (edge->indirect_unknown_callee)
274     {
275       int flags = edge->indirect_info->ecf_flags;
276       bp_pack_value (&bp, (flags & ECF_CONST) != 0, 1);
277       bp_pack_value (&bp, (flags & ECF_PURE) != 0, 1);
278       bp_pack_value (&bp, (flags & ECF_NORETURN) != 0, 1);
279       bp_pack_value (&bp, (flags & ECF_MALLOC) != 0, 1);
280       bp_pack_value (&bp, (flags & ECF_NOTHROW) != 0, 1);
281       bp_pack_value (&bp, (flags & ECF_RETURNS_TWICE) != 0, 1);
282       /* Flags that should not appear on indirect calls.  */
283       gcc_assert (!(flags & (ECF_LOOPING_CONST_OR_PURE
284                              | ECF_MAY_BE_ALLOCA
285                              | ECF_SIBCALL
286                              | ECF_LEAF
287                              | ECF_NOVOPS)));
288     }
289   streamer_write_bitpack (&bp);
290   if (edge->indirect_unknown_callee)
291     {
292       streamer_write_hwi_stream (ob->main_stream,
293                                  edge->indirect_info->common_target_id);
294       if (edge->indirect_info->common_target_id)
295         streamer_write_hwi_stream
296            (ob->main_stream, edge->indirect_info->common_target_probability);
297     }
298 }
299
300 /* Return if NODE contain references from other partitions.  */
301
302 bool
303 referenced_from_other_partition_p (symtab_node *node, lto_symtab_encoder_t encoder)
304 {
305   int i;
306   struct ipa_ref *ref = NULL;
307
308   for (i = 0; node->iterate_referring (i, ref); i++)
309     {
310       /* Ignore references from non-offloadable nodes while streaming NODE into
311          offload LTO section.  */
312       if (!ref->referring->need_lto_streaming)
313         continue;
314
315       if (ref->referring->in_other_partition
316           || !lto_symtab_encoder_in_partition_p (encoder, ref->referring))
317         return true;
318     }
319   return false;
320 }
321
322 /* Return true when node is reachable from other partition.  */
323
324 bool
325 reachable_from_other_partition_p (struct cgraph_node *node, lto_symtab_encoder_t encoder)
326 {
327   struct cgraph_edge *e;
328   if (!node->definition)
329     return false;
330   if (node->global.inlined_to)
331     return false;
332   for (e = node->callers; e; e = e->next_caller)
333     {
334       /* Ignore references from non-offloadable nodes while streaming NODE into
335          offload LTO section.  */
336       if (!e->caller->need_lto_streaming)
337         continue;
338
339       if (e->caller->in_other_partition
340           || !lto_symtab_encoder_in_partition_p (encoder, e->caller))
341         return true;
342     }
343   return false;
344 }
345
346 /* Return if NODE contain references from other partitions.  */
347
348 bool
349 referenced_from_this_partition_p (symtab_node *node,
350                                   lto_symtab_encoder_t encoder)
351 {
352   int i;
353   struct ipa_ref *ref = NULL;
354
355   for (i = 0; node->iterate_referring (i, ref); i++)
356     if (lto_symtab_encoder_in_partition_p (encoder, ref->referring))
357       return true;
358   return false;
359 }
360
361 /* Return true when node is reachable from other partition.  */
362
363 bool
364 reachable_from_this_partition_p (struct cgraph_node *node, lto_symtab_encoder_t encoder)
365 {
366   struct cgraph_edge *e;
367   for (e = node->callers; e; e = e->next_caller)
368     if (lto_symtab_encoder_in_partition_p (encoder, e->caller))
369       return true;
370   return false;
371 }
372
373 /* Output the cgraph NODE to OB.  ENCODER is used to find the
374    reference number of NODE->inlined_to.  SET is the set of nodes we
375    are writing to the current file.  If NODE is not in SET, then NODE
376    is a boundary of a cgraph_node_set and we pretend NODE just has a
377    decl and no callees.  WRITTEN_DECLS is the set of FUNCTION_DECLs
378    that have had their callgraph node written so far.  This is used to
379    determine if NODE is a clone of a previously written node.  */
380
381 static void
382 lto_output_node (struct lto_simple_output_block *ob, struct cgraph_node *node,
383                  lto_symtab_encoder_t encoder)
384 {
385   unsigned int tag;
386   struct bitpack_d bp;
387   bool boundary_p;
388   intptr_t ref;
389   bool in_other_partition = false;
390   struct cgraph_node *clone_of, *ultimate_clone_of;
391   ipa_opt_pass_d *pass;
392   int i;
393   const char *comdat;
394   const char *section;
395   tree group;
396
397   boundary_p = !lto_symtab_encoder_in_partition_p (encoder, node);
398
399   if (node->analyzed && (!boundary_p || node->alias || node->thunk.thunk_p))
400     tag = LTO_symtab_analyzed_node;
401   else
402     tag = LTO_symtab_unavail_node;
403
404   streamer_write_enum (ob->main_stream, LTO_symtab_tags, LTO_symtab_last_tag,
405                        tag);
406   streamer_write_hwi_stream (ob->main_stream, node->order);
407
408   /* In WPA mode, we only output part of the call-graph.  Also, we
409      fake cgraph node attributes.  There are two cases that we care.
410
411      Boundary nodes: There are nodes that are not part of SET but are
412      called from within SET.  We artificially make them look like
413      externally visible nodes with no function body.
414
415      Cherry-picked nodes:  These are nodes we pulled from other
416      translation units into SET during IPA-inlining.  We make them as
417      local static nodes to prevent clashes with other local statics.  */
418   if (boundary_p && node->analyzed
419       && node->get_partitioning_class () == SYMBOL_PARTITION)
420     {
421       /* Inline clones can not be part of boundary.  
422          gcc_assert (!node->global.inlined_to);  
423
424          FIXME: At the moment they can be, when partition contains an inline
425          clone that is clone of inline clone from outside partition.  We can
426          reshape the clone tree and make other tree to be the root, but it
427          needs a bit extra work and will be promplty done by cgraph_remove_node
428          after reading back.  */
429       in_other_partition = 1;
430     }
431
432   clone_of = node->clone_of;
433   while (clone_of
434          && (ref = lto_symtab_encoder_lookup (encoder, clone_of)) == LCC_NOT_FOUND)
435     if (clone_of->prev_sibling_clone)
436       clone_of = clone_of->prev_sibling_clone;
437     else
438       clone_of = clone_of->clone_of;
439
440   /* See if body of the master function is output.  If not, we are seeing only
441      an declaration and we do not need to pass down clone tree. */
442   ultimate_clone_of = clone_of;
443   while (ultimate_clone_of && ultimate_clone_of->clone_of)
444     ultimate_clone_of = ultimate_clone_of->clone_of;
445
446   if (clone_of && !lto_symtab_encoder_encode_body_p (encoder, ultimate_clone_of))
447     clone_of = NULL;
448
449   if (tag == LTO_symtab_analyzed_node)
450     gcc_assert (clone_of || !node->clone_of);
451   if (!clone_of)
452     streamer_write_hwi_stream (ob->main_stream, LCC_NOT_FOUND);
453   else
454     streamer_write_hwi_stream (ob->main_stream, ref);
455
456
457   lto_output_fn_decl_index (ob->decl_state, ob->main_stream, node->decl);
458   streamer_write_gcov_count_stream (ob->main_stream, node->count);
459   streamer_write_hwi_stream (ob->main_stream, node->count_materialization_scale);
460
461   streamer_write_hwi_stream (ob->main_stream,
462                              node->ipa_transforms_to_apply.length ());
463   FOR_EACH_VEC_ELT (node->ipa_transforms_to_apply, i, pass)
464     streamer_write_hwi_stream (ob->main_stream, pass->static_pass_number);
465
466   if (tag == LTO_symtab_analyzed_node)
467     {
468       if (node->global.inlined_to)
469         {
470           ref = lto_symtab_encoder_lookup (encoder, node->global.inlined_to);
471           gcc_assert (ref != LCC_NOT_FOUND);
472         }
473       else
474         ref = LCC_NOT_FOUND;
475
476       streamer_write_hwi_stream (ob->main_stream, ref);
477     }
478
479   group = node->get_comdat_group ();
480   if (group)
481     comdat = IDENTIFIER_POINTER (group);
482   else
483     comdat = "";
484   streamer_write_data_stream (ob->main_stream, comdat, strlen (comdat) + 1);
485
486   if (group)
487     {
488       if (node->same_comdat_group)
489         {
490           ref = LCC_NOT_FOUND;
491           for (struct symtab_node *n = node->same_comdat_group; 
492                ref == LCC_NOT_FOUND && n != node; n = n->same_comdat_group)
493             ref = lto_symtab_encoder_lookup (encoder, n);
494         }
495       else
496         ref = LCC_NOT_FOUND;
497       streamer_write_hwi_stream (ob->main_stream, ref);
498     }
499
500   section = node->get_section ();
501   if (!section)
502     section = "";
503
504   streamer_write_hwi_stream (ob->main_stream, node->tp_first_run);
505
506   bp = bitpack_create (ob->main_stream);
507   bp_pack_value (&bp, node->local.local, 1);
508   bp_pack_value (&bp, node->externally_visible, 1);
509   bp_pack_value (&bp, node->no_reorder, 1);
510   bp_pack_value (&bp, node->definition, 1);
511   bp_pack_value (&bp, node->local.versionable, 1);
512   bp_pack_value (&bp, node->local.can_change_signature, 1);
513   bp_pack_value (&bp, node->local.redefined_extern_inline, 1);
514   bp_pack_value (&bp, node->force_output, 1);
515   bp_pack_value (&bp, node->forced_by_abi, 1);
516   bp_pack_value (&bp, node->unique_name, 1);
517   bp_pack_value (&bp, node->body_removed, 1);
518   bp_pack_value (&bp, node->implicit_section, 1);
519   bp_pack_value (&bp, node->address_taken, 1);
520   bp_pack_value (&bp, tag == LTO_symtab_analyzed_node
521                  && node->get_partitioning_class () == SYMBOL_PARTITION
522                  && (reachable_from_other_partition_p (node, encoder)
523                      || referenced_from_other_partition_p (node, encoder)), 1);
524   bp_pack_value (&bp, node->lowered, 1);
525   bp_pack_value (&bp, in_other_partition, 1);
526   bp_pack_value (&bp, node->alias, 1);
527   bp_pack_value (&bp, node->transparent_alias, 1);
528   bp_pack_value (&bp, node->weakref, 1);
529   bp_pack_value (&bp, node->frequency, 2);
530   bp_pack_value (&bp, node->only_called_at_startup, 1);
531   bp_pack_value (&bp, node->only_called_at_exit, 1);
532   bp_pack_value (&bp, node->tm_clone, 1);
533   bp_pack_value (&bp, node->calls_comdat_local, 1);
534   bp_pack_value (&bp, node->icf_merged, 1);
535   bp_pack_value (&bp, node->nonfreeing_fn, 1);
536   bp_pack_value (&bp, node->thunk.thunk_p, 1);
537   bp_pack_value (&bp, node->parallelized_function, 1);
538   bp_pack_enum (&bp, ld_plugin_symbol_resolution,
539                 LDPR_NUM_KNOWN, node->resolution);
540   bp_pack_value (&bp, node->instrumentation_clone, 1);
541   bp_pack_value (&bp, node->split_part, 1);
542   streamer_write_bitpack (&bp);
543   streamer_write_data_stream (ob->main_stream, section, strlen (section) + 1);
544
545   if (node->thunk.thunk_p)
546     {
547       streamer_write_uhwi_stream
548          (ob->main_stream,
549           1 + (node->thunk.this_adjusting != 0) * 2
550           + (node->thunk.virtual_offset_p != 0) * 4
551           + (node->thunk.add_pointer_bounds_args != 0) * 8);
552       streamer_write_uhwi_stream (ob->main_stream, node->thunk.fixed_offset);
553       streamer_write_uhwi_stream (ob->main_stream, node->thunk.virtual_value);
554     }
555   streamer_write_hwi_stream (ob->main_stream, node->profile_id);
556   if (DECL_STATIC_CONSTRUCTOR (node->decl))
557     streamer_write_hwi_stream (ob->main_stream, node->get_init_priority ());
558   if (DECL_STATIC_DESTRUCTOR (node->decl))
559     streamer_write_hwi_stream (ob->main_stream, node->get_fini_priority ());
560
561   if (node->instrumentation_clone)
562     lto_output_fn_decl_index (ob->decl_state, ob->main_stream, node->orig_decl);
563 }
564
565 /* Output the varpool NODE to OB. 
566    If NODE is not in SET, then NODE is a boundary.  */
567
568 static void
569 lto_output_varpool_node (struct lto_simple_output_block *ob, varpool_node *node,
570                          lto_symtab_encoder_t encoder)
571 {
572   bool boundary_p = !lto_symtab_encoder_in_partition_p (encoder, node);
573   bool encode_initializer_p
574          = (node->definition
575             && lto_symtab_encoder_encode_initializer_p (encoder, node));
576   struct bitpack_d bp;
577   int ref;
578   const char *comdat;
579   const char *section;
580   tree group;
581
582   gcc_assert (!encode_initializer_p || node->definition);
583   gcc_assert (boundary_p || encode_initializer_p);
584
585   streamer_write_enum (ob->main_stream, LTO_symtab_tags, LTO_symtab_last_tag,
586                        LTO_symtab_variable);
587   streamer_write_hwi_stream (ob->main_stream, node->order);
588   lto_output_var_decl_index (ob->decl_state, ob->main_stream, node->decl);
589   bp = bitpack_create (ob->main_stream);
590   bp_pack_value (&bp, node->externally_visible, 1);
591   bp_pack_value (&bp, node->no_reorder, 1);
592   bp_pack_value (&bp, node->force_output, 1);
593   bp_pack_value (&bp, node->forced_by_abi, 1);
594   bp_pack_value (&bp, node->unique_name, 1);
595   bp_pack_value (&bp,
596                  node->body_removed
597                  || (!encode_initializer_p && !node->alias && node->definition),
598                  1);
599   bp_pack_value (&bp, node->implicit_section, 1);
600   bp_pack_value (&bp, node->writeonly, 1);
601   bp_pack_value (&bp, node->definition && (encode_initializer_p || node->alias),
602                  1);
603   bp_pack_value (&bp, node->alias, 1);
604   bp_pack_value (&bp, node->transparent_alias, 1);
605   bp_pack_value (&bp, node->weakref, 1);
606   bp_pack_value (&bp, node->analyzed && (!boundary_p || node->alias), 1);
607   gcc_assert (node->definition || !node->analyzed);
608   /* Constant pool initializers can be de-unified into individual ltrans units.
609      FIXME: Alternatively at -Os we may want to avoid generating for them the local
610      labels and share them across LTRANS partitions.  */
611   if (node->get_partitioning_class () != SYMBOL_PARTITION)
612     {
613       bp_pack_value (&bp, 0, 1);  /* used_from_other_parition.  */
614       bp_pack_value (&bp, 0, 1);  /* in_other_partition.  */
615     }
616   else
617     {
618       bp_pack_value (&bp, node->definition
619                      && referenced_from_other_partition_p (node, encoder), 1);
620       bp_pack_value (&bp, node->analyzed
621                      && boundary_p && !DECL_EXTERNAL (node->decl), 1);
622           /* in_other_partition.  */
623     }
624   bp_pack_value (&bp, node->tls_model, 3);
625   bp_pack_value (&bp, node->used_by_single_function, 1);
626   bp_pack_value (&bp, node->dynamically_initialized, 1);
627   bp_pack_value (&bp, node->need_bounds_init, 1);
628   streamer_write_bitpack (&bp);
629
630   group = node->get_comdat_group ();
631   if (group)
632     comdat = IDENTIFIER_POINTER (group);
633   else
634     comdat = "";
635   streamer_write_data_stream (ob->main_stream, comdat, strlen (comdat) + 1);
636
637   if (group)
638     {
639       if (node->same_comdat_group)
640         {
641           ref = LCC_NOT_FOUND;
642           for (struct symtab_node *n = node->same_comdat_group; 
643                ref == LCC_NOT_FOUND && n != node; n = n->same_comdat_group)
644             ref = lto_symtab_encoder_lookup (encoder, n);
645         }
646       else
647         ref = LCC_NOT_FOUND;
648       streamer_write_hwi_stream (ob->main_stream, ref);
649     }
650
651   section = node->get_section ();
652   if (!section)
653     section = "";
654   streamer_write_data_stream (ob->main_stream, section, strlen (section) + 1);
655
656   streamer_write_enum (ob->main_stream, ld_plugin_symbol_resolution,
657                        LDPR_NUM_KNOWN, node->resolution);
658 }
659
660 /* Output the varpool NODE to OB. 
661    If NODE is not in SET, then NODE is a boundary.  */
662
663 static void
664 lto_output_ref (struct lto_simple_output_block *ob, struct ipa_ref *ref,
665                 lto_symtab_encoder_t encoder)
666 {
667   struct bitpack_d bp;
668   int nref;
669   int uid = ref->lto_stmt_uid;
670   struct cgraph_node *node;
671
672   bp = bitpack_create (ob->main_stream);
673   bp_pack_value (&bp, ref->use, 3);
674   bp_pack_value (&bp, ref->speculative, 1);
675   streamer_write_bitpack (&bp);
676   nref = lto_symtab_encoder_lookup (encoder, ref->referred);
677   gcc_assert (nref != LCC_NOT_FOUND);
678   streamer_write_hwi_stream (ob->main_stream, nref);
679   
680   node = dyn_cast <cgraph_node *> (ref->referring);
681   if (node)
682     {
683       if (ref->stmt)
684         uid = gimple_uid (ref->stmt) + 1;
685       streamer_write_hwi_stream (ob->main_stream, uid);
686     }
687 }
688
689 /* Stream out profile_summary to OB.  */
690
691 static void
692 output_profile_summary (struct lto_simple_output_block *ob)
693 {
694   unsigned h_ix;
695   struct bitpack_d bp;
696
697   if (profile_info)
698     {
699       /* We do not output num and run_max, they are not used by
700          GCC profile feedback and they are difficult to merge from multiple
701          units.  */
702       gcc_assert (profile_info->runs);
703       streamer_write_uhwi_stream (ob->main_stream, profile_info->runs);
704       streamer_write_gcov_count_stream (ob->main_stream, profile_info->sum_max);
705
706       /* sum_all is needed for computing the working set with the
707          histogram.  */
708       streamer_write_gcov_count_stream (ob->main_stream, profile_info->sum_all);
709
710       /* Create and output a bitpack of non-zero histogram entries indices.  */
711       bp = bitpack_create (ob->main_stream);
712       for (h_ix = 0; h_ix < GCOV_HISTOGRAM_SIZE; h_ix++)
713         bp_pack_value (&bp, profile_info->histogram[h_ix].num_counters > 0, 1);
714       streamer_write_bitpack (&bp);
715       /* Now stream out only those non-zero entries.  */
716       for (h_ix = 0; h_ix < GCOV_HISTOGRAM_SIZE; h_ix++)
717         {
718           if (!profile_info->histogram[h_ix].num_counters)
719             continue;
720           streamer_write_gcov_count_stream (ob->main_stream,
721                                       profile_info->histogram[h_ix].num_counters);
722           streamer_write_gcov_count_stream (ob->main_stream,
723                                       profile_info->histogram[h_ix].min_value);
724           streamer_write_gcov_count_stream (ob->main_stream,
725                                       profile_info->histogram[h_ix].cum_value);
726          }
727       /* IPA-profile computes hot bb threshold based on cumulated
728          whole program profile.  We need to stream it down to ltrans.  */
729        if (flag_wpa)
730          streamer_write_gcov_count_stream (ob->main_stream,
731                                            get_hot_bb_threshold ());
732     }
733   else
734     streamer_write_uhwi_stream (ob->main_stream, 0);
735 }
736
737 /* Output all callees or indirect outgoing edges.  EDGE must be the first such
738    edge.  */
739
740 static void
741 output_outgoing_cgraph_edges (struct cgraph_edge *edge,
742                               struct lto_simple_output_block *ob,
743                               lto_symtab_encoder_t encoder)
744 {
745   if (!edge)
746     return;
747
748   /* Output edges in backward direction, so the reconstructed callgraph match
749      and it is easy to associate call sites in the IPA pass summaries.  */
750   while (edge->next_callee)
751     edge = edge->next_callee;
752   for (; edge; edge = edge->prev_callee)
753     lto_output_edge (ob, edge, encoder);
754 }
755
756 /* Output the part of the cgraph in SET.  */
757
758 static void
759 output_refs (lto_symtab_encoder_t encoder)
760 {
761   struct lto_simple_output_block *ob;
762   int count;
763   struct ipa_ref *ref;
764
765   ob = lto_create_simple_output_block (LTO_section_refs);
766
767   for (int i = 0; i < lto_symtab_encoder_size (encoder); i++)
768     {
769       symtab_node *node = lto_symtab_encoder_deref (encoder, i);
770
771       /* IPA_REF_ALIAS and IPA_REF_CHKP references are always preserved
772          in the boundary.  Alias node can't have other references and
773          can be always handled as if it's not in the boundary.  */
774       if (!node->alias && !lto_symtab_encoder_in_partition_p (encoder, node))
775         {
776           cgraph_node *cnode = dyn_cast <cgraph_node *> (node);
777           /* Output IPA_REF_CHKP reference.  */
778           if (cnode
779               && cnode->instrumented_version
780               && !cnode->instrumentation_clone)
781             {
782               for (int i = 0; node->iterate_reference (i, ref); i++)
783                 if (ref->use == IPA_REF_CHKP)
784                   {
785                     if (lto_symtab_encoder_lookup (encoder, ref->referred)
786                         != LCC_NOT_FOUND)
787                       {
788                         int nref = lto_symtab_encoder_lookup (encoder, node);
789                         streamer_write_gcov_count_stream (ob->main_stream, 1);
790                         streamer_write_uhwi_stream (ob->main_stream, nref);
791                         lto_output_ref (ob, ref, encoder);
792                       }
793                     break;
794                   }
795             }
796           continue;
797         }
798
799       count = node->ref_list.nreferences ();
800       if (count)
801         {
802           streamer_write_gcov_count_stream (ob->main_stream, count);
803           streamer_write_uhwi_stream (ob->main_stream,
804                                      lto_symtab_encoder_lookup (encoder, node));
805           for (int i = 0; node->iterate_reference (i, ref); i++)
806             lto_output_ref (ob, ref, encoder);
807         }
808     }
809
810   streamer_write_uhwi_stream (ob->main_stream, 0);
811
812   lto_destroy_simple_output_block (ob);
813 }
814
815 /* Add NODE into encoder as well as nodes it is cloned from.
816    Do it in a way so clones appear first.  */
817
818 static void
819 add_node_to (lto_symtab_encoder_t encoder, struct cgraph_node *node,
820              bool include_body)
821 {
822   if (node->clone_of)
823     add_node_to (encoder, node->clone_of, include_body);
824   else if (include_body)
825     lto_set_symtab_encoder_encode_body (encoder, node);
826   lto_symtab_encoder_encode (encoder, node);
827 }
828
829 /* Add all references in NODE to encoders.  */
830
831 static void
832 create_references (lto_symtab_encoder_t encoder, symtab_node *node)
833 {
834   int i;
835   struct ipa_ref *ref = NULL;
836   for (i = 0; node->iterate_reference (i, ref); i++)
837     if (is_a <cgraph_node *> (ref->referred))
838       add_node_to (encoder, dyn_cast <cgraph_node *> (ref->referred), false);
839     else
840       lto_symtab_encoder_encode (encoder, ref->referred);
841 }
842
843 /* Select what needs to be streamed out.  In regular lto mode stream everything.
844    In offload lto mode stream only nodes marked as offloadable.  */
845 void
846 select_what_to_stream (void)
847 {
848   struct symtab_node *snode;
849   FOR_EACH_SYMBOL (snode)
850     snode->need_lto_streaming = !lto_stream_offload_p || snode->offloadable;
851 }
852
853 /* Find all symbols we want to stream into given partition and insert them
854    to encoders.
855
856    The function actually replaces IN_ENCODER by new one.  The reason is that
857    streaming code needs clone's origin to be streamed before clone.  This
858    means that we need to insert the nodes in specific order.  This order is
859    ignored by the partitioning logic earlier.  */
860
861 lto_symtab_encoder_t 
862 compute_ltrans_boundary (lto_symtab_encoder_t in_encoder)
863 {
864   struct cgraph_edge *edge;
865   int i;
866   lto_symtab_encoder_t encoder;
867   lto_symtab_encoder_iterator lsei;
868   hash_set<void *> reachable_call_targets;
869
870   encoder = lto_symtab_encoder_new (false);
871
872   /* Go over all entries in the IN_ENCODER and duplicate them to
873      ENCODER. At the same time insert masters of clones so
874      every master appears before clone.  */
875   for (lsei = lsei_start_function_in_partition (in_encoder);
876        !lsei_end_p (lsei); lsei_next_function_in_partition (&lsei))
877     {
878       struct cgraph_node *node = lsei_cgraph_node (lsei);
879       if (!node->need_lto_streaming)
880         continue;
881       add_node_to (encoder, node, true);
882       lto_set_symtab_encoder_in_partition (encoder, node);
883       create_references (encoder, node);
884     }
885   for (lsei = lsei_start_variable_in_partition (in_encoder);
886        !lsei_end_p (lsei); lsei_next_variable_in_partition (&lsei))
887     {
888       varpool_node *vnode = lsei_varpool_node (lsei);
889
890       if (!vnode->need_lto_streaming)
891         continue;
892       lto_set_symtab_encoder_in_partition (encoder, vnode);
893       lto_set_symtab_encoder_encode_initializer (encoder, vnode);
894       create_references (encoder, vnode);
895     }
896   /* Pickle in also the initializer of all referenced readonly variables
897      to help folding.  Constant pool variables are not shared, so we must
898      pickle those too.  */
899   for (i = 0; i < lto_symtab_encoder_size (encoder); i++)
900     {
901       symtab_node *node = lto_symtab_encoder_deref (encoder, i);
902       if (varpool_node *vnode = dyn_cast <varpool_node *> (node))
903         {
904           if (!lto_symtab_encoder_encode_initializer_p (encoder,
905                                                         vnode)
906               && (((vnode->ctor_useable_for_folding_p ()
907                    && (!DECL_VIRTUAL_P (vnode->decl)
908                        || !flag_wpa
909                        || flag_ltrans_devirtualize))
910                   || POINTER_BOUNDS_P (vnode->decl))))
911             {
912               lto_set_symtab_encoder_encode_initializer (encoder, vnode);
913               create_references (encoder, vnode);
914             }
915        }
916     }
917
918   /* Go over all the nodes again to include callees that are not in
919      SET.  */
920   for (lsei = lsei_start_function_in_partition (encoder);
921        !lsei_end_p (lsei); lsei_next_function_in_partition (&lsei))
922     {
923       struct cgraph_node *node = lsei_cgraph_node (lsei);
924       for (edge = node->callees; edge; edge = edge->next_callee)
925         {
926           struct cgraph_node *callee = edge->callee;
927           if (!lto_symtab_encoder_in_partition_p (encoder, callee))
928             {
929               /* We should have moved all the inlines.  */
930               gcc_assert (!callee->global.inlined_to);
931               add_node_to (encoder, callee, false);
932             }
933         }
934       /* Add all possible targets for late devirtualization.  */
935       if (flag_ltrans_devirtualize || !flag_wpa)
936         for (edge = node->indirect_calls; edge; edge = edge->next_callee)
937           if (edge->indirect_info->polymorphic)
938             {
939               unsigned int i;
940               void *cache_token;
941               bool final;
942               vec <cgraph_node *>targets
943                 = possible_polymorphic_call_targets
944                     (edge, &final, &cache_token);
945               if (!reachable_call_targets.add (cache_token))
946                 {
947                   for (i = 0; i < targets.length (); i++)
948                     {
949                       struct cgraph_node *callee = targets[i];
950
951                       /* Adding an external declarations into the unit serves
952                          no purpose and just increases its boundary.  */
953                       if (callee->definition
954                           && !lto_symtab_encoder_in_partition_p
955                                (encoder, callee))
956                         {
957                           gcc_assert (!callee->global.inlined_to);
958                           add_node_to (encoder, callee, false);
959                         }
960                     }
961                 }
962             }
963     }
964   /* Be sure to also insert alias targert and thunk callees.  These needs
965      to stay to aid local calling conventions.  */
966   for (i = 0; i < lto_symtab_encoder_size (encoder); i++)
967     {
968       symtab_node *node = lto_symtab_encoder_deref (encoder, i);
969       cgraph_node *cnode = dyn_cast <cgraph_node *> (node);
970
971       if (node->alias && node->analyzed)
972         create_references (encoder, node);
973       if (cnode
974           && cnode->thunk.thunk_p)
975         add_node_to (encoder, cnode->callees->callee, false);
976       while (node->transparent_alias && node->analyzed)
977         {
978           node = node->get_alias_target ();
979           if (is_a <cgraph_node *> (node))
980             add_node_to (encoder, dyn_cast <cgraph_node *> (node),
981                          false);
982           else
983             lto_symtab_encoder_encode (encoder, node);
984         }
985     }
986   lto_symtab_encoder_delete (in_encoder);
987   return encoder;
988 }
989
990 /* Output the part of the symtab in SET and VSET.  */
991
992 void
993 output_symtab (void)
994 {
995   struct cgraph_node *node;
996   struct lto_simple_output_block *ob;
997   int i, n_nodes;
998   lto_symtab_encoder_t encoder;
999
1000   if (flag_wpa)
1001     output_cgraph_opt_summary ();
1002
1003   ob = lto_create_simple_output_block (LTO_section_symtab_nodes);
1004
1005   output_profile_summary (ob);
1006
1007   /* An encoder for cgraph nodes should have been created by
1008      ipa_write_summaries_1.  */
1009   gcc_assert (ob->decl_state->symtab_node_encoder);
1010   encoder = ob->decl_state->symtab_node_encoder;
1011
1012   /* Write out the nodes.  We must first output a node and then its clones,
1013      otherwise at a time reading back the node there would be nothing to clone
1014      from.  */
1015   n_nodes = lto_symtab_encoder_size (encoder);
1016   for (i = 0; i < n_nodes; i++)
1017     {
1018       symtab_node *node = lto_symtab_encoder_deref (encoder, i);
1019       if (cgraph_node *cnode = dyn_cast <cgraph_node *> (node))
1020         lto_output_node (ob, cnode, encoder);
1021       else
1022         lto_output_varpool_node (ob, dyn_cast<varpool_node *> (node), encoder);
1023     }
1024
1025   /* Go over the nodes in SET again to write edges.  */
1026   for (int i = 0; i < lto_symtab_encoder_size (encoder); i++)
1027     {
1028       node = dyn_cast <cgraph_node *> (lto_symtab_encoder_deref (encoder, i));
1029       if (node
1030           && (node->thunk.thunk_p
1031               || lto_symtab_encoder_in_partition_p (encoder, node)))
1032         {
1033           output_outgoing_cgraph_edges (node->callees, ob, encoder);
1034           output_outgoing_cgraph_edges (node->indirect_calls, ob, encoder);
1035         }
1036     }
1037
1038   streamer_write_uhwi_stream (ob->main_stream, 0);
1039
1040   lto_destroy_simple_output_block (ob);
1041
1042   /* Emit toplevel asms.
1043      When doing WPA we must output every asm just once.  Since we do not partition asm
1044      nodes at all, output them to first output.  This is kind of hack, but should work
1045      well.  */
1046   if (!asm_nodes_output)
1047     {
1048       asm_nodes_output = true;
1049       lto_output_toplevel_asms ();
1050     }
1051
1052   output_refs (encoder);
1053 }
1054
1055 /* Return identifier encoded in IB as a plain string.  */
1056
1057 static tree
1058 read_identifier (struct lto_input_block *ib)
1059 {
1060   unsigned int len = strnlen (ib->data + ib->p, ib->len - ib->p - 1);
1061   tree id;
1062
1063   if (ib->data[ib->p + len])
1064     lto_section_overrun (ib);
1065   if (!len)
1066     {
1067       ib->p++;
1068       return NULL;
1069     }
1070   id = get_identifier (ib->data + ib->p);
1071   ib->p += len + 1;
1072   return id;
1073 }
1074
1075 /* Return string encoded in IB, NULL if string is empty.  */
1076
1077 static const char *
1078 read_string (struct lto_input_block *ib)
1079 {
1080   unsigned int len = strnlen (ib->data + ib->p, ib->len - ib->p - 1);
1081   const char *str;
1082
1083   if (ib->data[ib->p + len])
1084     lto_section_overrun (ib);
1085   if (!len)
1086     {
1087       ib->p++;
1088       return NULL;
1089     }
1090   str = ib->data + ib->p;
1091   ib->p += len + 1;
1092   return str;
1093 }
1094
1095 /* Output function/variable tables that will allow libgomp to look up offload
1096    target code.
1097    OFFLOAD_FUNCS is filled in expand_omp_target, OFFLOAD_VARS is filled in
1098    varpool_node::get_create.  In WHOPR (partitioned) mode during the WPA stage
1099    both OFFLOAD_FUNCS and OFFLOAD_VARS are filled by input_offload_tables.  */
1100
1101 void
1102 output_offload_tables (void)
1103 {
1104   if (vec_safe_is_empty (offload_funcs) && vec_safe_is_empty (offload_vars))
1105     return;
1106
1107   struct lto_simple_output_block *ob
1108     = lto_create_simple_output_block (LTO_section_offload_table);
1109
1110   for (unsigned i = 0; i < vec_safe_length (offload_funcs); i++)
1111     {
1112       streamer_write_enum (ob->main_stream, LTO_symtab_tags,
1113                            LTO_symtab_last_tag, LTO_symtab_unavail_node);
1114       lto_output_fn_decl_index (ob->decl_state, ob->main_stream,
1115                                 (*offload_funcs)[i]);
1116     }
1117
1118   for (unsigned i = 0; i < vec_safe_length (offload_vars); i++)
1119     {
1120       streamer_write_enum (ob->main_stream, LTO_symtab_tags,
1121                            LTO_symtab_last_tag, LTO_symtab_variable);
1122       lto_output_var_decl_index (ob->decl_state, ob->main_stream,
1123                                  (*offload_vars)[i]);
1124     }
1125
1126   streamer_write_uhwi_stream (ob->main_stream, 0);
1127   lto_destroy_simple_output_block (ob);
1128
1129   /* In WHOPR mode during the WPA stage the joint offload tables need to be
1130      streamed to one partition only.  That's why we free offload_funcs and
1131      offload_vars after the first call of output_offload_tables.  */
1132   if (flag_wpa)
1133     {
1134       vec_free (offload_funcs);
1135       vec_free (offload_vars);
1136     }
1137 }
1138
1139 /* Overwrite the information in NODE based on FILE_DATA, TAG, FLAGS,
1140    STACK_SIZE, SELF_TIME and SELF_SIZE.  This is called either to initialize
1141    NODE or to replace the values in it, for instance because the first
1142    time we saw it, the function body was not available but now it
1143    is.  BP is a bitpack with all the bitflags for NODE read from the
1144    stream.  */
1145
1146 static void
1147 input_overwrite_node (struct lto_file_decl_data *file_data,
1148                       struct cgraph_node *node,
1149                       enum LTO_symtab_tags tag,
1150                       struct bitpack_d *bp)
1151 {
1152   node->aux = (void *) tag;
1153   node->lto_file_data = file_data;
1154
1155   node->local.local = bp_unpack_value (bp, 1);
1156   node->externally_visible = bp_unpack_value (bp, 1);
1157   node->no_reorder = bp_unpack_value (bp, 1);
1158   node->definition = bp_unpack_value (bp, 1);
1159   node->local.versionable = bp_unpack_value (bp, 1);
1160   node->local.can_change_signature = bp_unpack_value (bp, 1);
1161   node->local.redefined_extern_inline = bp_unpack_value (bp, 1);
1162   node->force_output = bp_unpack_value (bp, 1);
1163   node->forced_by_abi = bp_unpack_value (bp, 1);
1164   node->unique_name = bp_unpack_value (bp, 1);
1165   node->body_removed = bp_unpack_value (bp, 1);
1166   node->implicit_section = bp_unpack_value (bp, 1);
1167   node->address_taken = bp_unpack_value (bp, 1);
1168   node->used_from_other_partition = bp_unpack_value (bp, 1);
1169   node->lowered = bp_unpack_value (bp, 1);
1170   node->analyzed = tag == LTO_symtab_analyzed_node;
1171   node->in_other_partition = bp_unpack_value (bp, 1);
1172   if (node->in_other_partition
1173       /* Avoid updating decl when we are seeing just inline clone.
1174          When inlining function that has functions already inlined into it,
1175          we produce clones of inline clones.
1176
1177          WPA partitioning might put each clone into different unit and
1178          we might end up streaming inline clone from other partition
1179          to support clone we are interested in. */
1180       && (!node->clone_of
1181           || node->clone_of->decl != node->decl))
1182     {
1183       DECL_EXTERNAL (node->decl) = 1;
1184       TREE_STATIC (node->decl) = 0;
1185     }
1186   node->alias = bp_unpack_value (bp, 1);
1187   node->transparent_alias = bp_unpack_value (bp, 1);
1188   node->weakref = bp_unpack_value (bp, 1);
1189   node->frequency = (enum node_frequency)bp_unpack_value (bp, 2);
1190   node->only_called_at_startup = bp_unpack_value (bp, 1);
1191   node->only_called_at_exit = bp_unpack_value (bp, 1);
1192   node->tm_clone = bp_unpack_value (bp, 1);
1193   node->calls_comdat_local = bp_unpack_value (bp, 1);
1194   node->icf_merged = bp_unpack_value (bp, 1);
1195   node->nonfreeing_fn = bp_unpack_value (bp, 1);
1196   node->thunk.thunk_p = bp_unpack_value (bp, 1);
1197   node->parallelized_function = bp_unpack_value (bp, 1);
1198   node->resolution = bp_unpack_enum (bp, ld_plugin_symbol_resolution,
1199                                      LDPR_NUM_KNOWN);
1200   node->instrumentation_clone = bp_unpack_value (bp, 1);
1201   node->split_part = bp_unpack_value (bp, 1);
1202   gcc_assert (flag_ltrans
1203               || (!node->in_other_partition
1204                   && !node->used_from_other_partition));
1205 }
1206
1207 /* Return string alias is alias of.  */
1208
1209 static tree
1210 get_alias_symbol (tree decl)
1211 {
1212   tree alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl));
1213   return get_identifier (TREE_STRING_POINTER
1214                           (TREE_VALUE (TREE_VALUE (alias))));
1215 }
1216
1217 /* Read a node from input_block IB.  TAG is the node's tag just read.
1218    Return the node read or overwriten.  */
1219
1220 static struct cgraph_node *
1221 input_node (struct lto_file_decl_data *file_data,
1222             struct lto_input_block *ib,
1223             enum LTO_symtab_tags tag,
1224             vec<symtab_node *> nodes)
1225 {
1226   gcc::pass_manager *passes = g->get_passes ();
1227   tree fn_decl;
1228   struct cgraph_node *node;
1229   struct bitpack_d bp;
1230   unsigned decl_index;
1231   int ref = LCC_NOT_FOUND, ref2 = LCC_NOT_FOUND;
1232   int clone_ref;
1233   int order;
1234   int i, count;
1235   tree group;
1236   const char *section;
1237   order = streamer_read_hwi (ib) + order_base;
1238   clone_ref = streamer_read_hwi (ib);
1239
1240   decl_index = streamer_read_uhwi (ib);
1241   fn_decl = lto_file_decl_data_get_fn_decl (file_data, decl_index);
1242
1243   if (clone_ref != LCC_NOT_FOUND)
1244     {
1245       node = dyn_cast<cgraph_node *> (nodes[clone_ref])->create_clone (fn_decl,
1246         0, CGRAPH_FREQ_BASE, false,
1247         vNULL, false, NULL, NULL);
1248     }
1249   else
1250     {
1251       /* Declaration of functions can be already merged with a declaration
1252          from other input file.  We keep cgraph unmerged until after streaming
1253          of ipa passes is done.  Alays forcingly create a fresh node.  */
1254       node = symtab->create_empty ();
1255       node->decl = fn_decl;
1256       node->register_symbol ();
1257     }
1258
1259   node->order = order;
1260   if (order >= symtab->order)
1261     symtab->order = order + 1;
1262
1263   node->count = streamer_read_gcov_count (ib);
1264   node->count_materialization_scale = streamer_read_hwi (ib);
1265
1266   count = streamer_read_hwi (ib);
1267   node->ipa_transforms_to_apply = vNULL;
1268   for (i = 0; i < count; i++)
1269     {
1270       opt_pass *pass;
1271       int pid = streamer_read_hwi (ib);
1272
1273       gcc_assert (pid < passes->passes_by_id_size);
1274       pass = passes->passes_by_id[pid];
1275       node->ipa_transforms_to_apply.safe_push ((ipa_opt_pass_d *) pass);
1276     }
1277
1278   if (tag == LTO_symtab_analyzed_node)
1279     ref = streamer_read_hwi (ib);
1280
1281   group = read_identifier (ib);
1282   if (group)
1283     ref2 = streamer_read_hwi (ib);
1284
1285   /* Make sure that we have not read this node before.  Nodes that
1286      have already been read will have their tag stored in the 'aux'
1287      field.  Since built-in functions can be referenced in multiple
1288      functions, they are expected to be read more than once.  */
1289   if (node->aux && !DECL_BUILT_IN (node->decl))
1290     internal_error ("bytecode stream: found multiple instances of cgraph "
1291                     "node with uid %d", node->uid);
1292
1293   node->tp_first_run = streamer_read_uhwi (ib);
1294
1295   bp = streamer_read_bitpack (ib);
1296
1297   input_overwrite_node (file_data, node, tag, &bp);
1298
1299   /* Store a reference for now, and fix up later to be a pointer.  */
1300   node->global.inlined_to = (cgraph_node *) (intptr_t) ref;
1301
1302   if (group)
1303     {
1304       node->set_comdat_group (group);
1305       /* Store a reference for now, and fix up later to be a pointer.  */
1306       node->same_comdat_group = (symtab_node *) (intptr_t) ref2;
1307     }
1308   else
1309     node->same_comdat_group = (symtab_node *) (intptr_t) LCC_NOT_FOUND;
1310   section = read_string (ib);
1311   if (section)
1312     node->set_section_for_node (section);
1313
1314   if (node->thunk.thunk_p)
1315     {
1316       int type = streamer_read_uhwi (ib);
1317       HOST_WIDE_INT fixed_offset = streamer_read_uhwi (ib);
1318       HOST_WIDE_INT virtual_value = streamer_read_uhwi (ib);
1319
1320       node->thunk.fixed_offset = fixed_offset;
1321       node->thunk.this_adjusting = (type & 2);
1322       node->thunk.virtual_value = virtual_value;
1323       node->thunk.virtual_offset_p = (type & 4);
1324       node->thunk.add_pointer_bounds_args = (type & 8);
1325     }
1326   if (node->alias && !node->analyzed && node->weakref)
1327     node->alias_target = get_alias_symbol (node->decl);
1328   node->profile_id = streamer_read_hwi (ib);
1329   if (DECL_STATIC_CONSTRUCTOR (node->decl))
1330     node->set_init_priority (streamer_read_hwi (ib));
1331   if (DECL_STATIC_DESTRUCTOR (node->decl))
1332     node->set_fini_priority (streamer_read_hwi (ib));
1333
1334   if (node->instrumentation_clone)
1335     {
1336       decl_index = streamer_read_uhwi (ib);
1337       fn_decl = lto_file_decl_data_get_fn_decl (file_data, decl_index);
1338       node->orig_decl = fn_decl;
1339     }
1340
1341   return node;
1342 }
1343
1344 /* Read a node from input_block IB.  TAG is the node's tag just read.
1345    Return the node read or overwriten.  */
1346
1347 static varpool_node *
1348 input_varpool_node (struct lto_file_decl_data *file_data,
1349                     struct lto_input_block *ib)
1350 {
1351   int decl_index;
1352   tree var_decl;
1353   varpool_node *node;
1354   struct bitpack_d bp;
1355   int ref = LCC_NOT_FOUND;
1356   int order;
1357   tree group;
1358   const char *section;
1359
1360   order = streamer_read_hwi (ib) + order_base;
1361   decl_index = streamer_read_uhwi (ib);
1362   var_decl = lto_file_decl_data_get_var_decl (file_data, decl_index);
1363
1364   /* Declaration of functions can be already merged with a declaration
1365      from other input file.  We keep cgraph unmerged until after streaming
1366      of ipa passes is done.  Alays forcingly create a fresh node.  */
1367   node = varpool_node::create_empty ();
1368   node->decl = var_decl;
1369   node->register_symbol ();
1370
1371   node->order = order;
1372   if (order >= symtab->order)
1373     symtab->order = order + 1;
1374   node->lto_file_data = file_data;
1375
1376   bp = streamer_read_bitpack (ib);
1377   node->externally_visible = bp_unpack_value (&bp, 1);
1378   node->no_reorder = bp_unpack_value (&bp, 1);
1379   node->force_output = bp_unpack_value (&bp, 1);
1380   node->forced_by_abi = bp_unpack_value (&bp, 1);
1381   node->unique_name = bp_unpack_value (&bp, 1);
1382   node->body_removed = bp_unpack_value (&bp, 1);
1383   node->implicit_section = bp_unpack_value (&bp, 1);
1384   node->writeonly = bp_unpack_value (&bp, 1);
1385   node->definition = bp_unpack_value (&bp, 1);
1386   node->alias = bp_unpack_value (&bp, 1);
1387   node->transparent_alias = bp_unpack_value (&bp, 1);
1388   node->weakref = bp_unpack_value (&bp, 1);
1389   node->analyzed = bp_unpack_value (&bp, 1);
1390   node->used_from_other_partition = bp_unpack_value (&bp, 1);
1391   node->in_other_partition = bp_unpack_value (&bp, 1);
1392   if (node->in_other_partition)
1393     {
1394       DECL_EXTERNAL (node->decl) = 1;
1395       TREE_STATIC (node->decl) = 0;
1396     }
1397   if (node->alias && !node->analyzed && node->weakref)
1398     node->alias_target = get_alias_symbol (node->decl);
1399   node->tls_model = (enum tls_model)bp_unpack_value (&bp, 3);
1400   node->used_by_single_function = (enum tls_model)bp_unpack_value (&bp, 1);
1401   node->dynamically_initialized = bp_unpack_value (&bp, 1);
1402   node->need_bounds_init = bp_unpack_value (&bp, 1);
1403   group = read_identifier (ib);
1404   if (group)
1405     {
1406       node->set_comdat_group (group);
1407       ref = streamer_read_hwi (ib);
1408       /* Store a reference for now, and fix up later to be a pointer.  */
1409       node->same_comdat_group = (symtab_node *) (intptr_t) ref;
1410     }
1411   else
1412     node->same_comdat_group = (symtab_node *) (intptr_t) LCC_NOT_FOUND;
1413   section = read_string (ib);
1414   if (section)
1415     node->set_section_for_node (section);
1416   node->resolution = streamer_read_enum (ib, ld_plugin_symbol_resolution,
1417                                                 LDPR_NUM_KNOWN);
1418   gcc_assert (flag_ltrans
1419               || (!node->in_other_partition
1420                   && !node->used_from_other_partition));
1421
1422   return node;
1423 }
1424
1425 /* Read a node from input_block IB.  TAG is the node's tag just read.
1426    Return the node read or overwriten.  */
1427
1428 static void
1429 input_ref (struct lto_input_block *ib,
1430            symtab_node *referring_node,
1431            vec<symtab_node *> nodes)
1432 {
1433   symtab_node *node = NULL;
1434   struct bitpack_d bp;
1435   enum ipa_ref_use use;
1436   bool speculative;
1437   struct ipa_ref *ref;
1438
1439   bp = streamer_read_bitpack (ib);
1440   use = (enum ipa_ref_use) bp_unpack_value (&bp, 3);
1441   speculative = (enum ipa_ref_use) bp_unpack_value (&bp, 1);
1442   node = nodes[streamer_read_hwi (ib)];
1443   ref = referring_node->create_reference (node, use);
1444   ref->speculative = speculative;
1445   if (is_a <cgraph_node *> (referring_node))
1446     ref->lto_stmt_uid = streamer_read_hwi (ib);
1447 }
1448
1449 /* Read an edge from IB.  NODES points to a vector of previously read nodes for
1450    decoding caller and callee of the edge to be read.  If INDIRECT is true, the
1451    edge being read is indirect (in the sense that it has
1452    indirect_unknown_callee set).  */
1453
1454 static void
1455 input_edge (struct lto_input_block *ib, vec<symtab_node *> nodes,
1456             bool indirect)
1457 {
1458   struct cgraph_node *caller, *callee;
1459   struct cgraph_edge *edge;
1460   unsigned int stmt_id;
1461   gcov_type count;
1462   int freq;
1463   cgraph_inline_failed_t inline_failed;
1464   struct bitpack_d bp;
1465   int ecf_flags = 0;
1466
1467   caller = dyn_cast<cgraph_node *> (nodes[streamer_read_hwi (ib)]);
1468   if (caller == NULL || caller->decl == NULL_TREE)
1469     internal_error ("bytecode stream: no caller found while reading edge");
1470
1471   if (!indirect)
1472     {
1473       callee = dyn_cast<cgraph_node *> (nodes[streamer_read_hwi (ib)]);
1474       if (callee == NULL || callee->decl == NULL_TREE)
1475         internal_error ("bytecode stream: no callee found while reading edge");
1476     }
1477   else
1478     callee = NULL;
1479
1480   count = streamer_read_gcov_count (ib);
1481
1482   bp = streamer_read_bitpack (ib);
1483   inline_failed = bp_unpack_enum (&bp, cgraph_inline_failed_t, CIF_N_REASONS);
1484   stmt_id = bp_unpack_var_len_unsigned (&bp);
1485   freq = (int) bp_unpack_var_len_unsigned (&bp);
1486
1487   if (indirect)
1488     edge = caller->create_indirect_edge (NULL, 0, count, freq);
1489   else
1490     edge = caller->create_edge (callee, NULL, count, freq);
1491
1492   edge->indirect_inlining_edge = bp_unpack_value (&bp, 1);
1493   edge->speculative = bp_unpack_value (&bp, 1);
1494   edge->lto_stmt_uid = stmt_id;
1495   edge->inline_failed = inline_failed;
1496   edge->call_stmt_cannot_inline_p = bp_unpack_value (&bp, 1);
1497   edge->can_throw_external = bp_unpack_value (&bp, 1);
1498   edge->in_polymorphic_cdtor = bp_unpack_value (&bp, 1);
1499   if (indirect)
1500     {
1501       if (bp_unpack_value (&bp, 1))
1502         ecf_flags |= ECF_CONST;
1503       if (bp_unpack_value (&bp, 1))
1504         ecf_flags |= ECF_PURE;
1505       if (bp_unpack_value (&bp, 1))
1506         ecf_flags |= ECF_NORETURN;
1507       if (bp_unpack_value (&bp, 1))
1508         ecf_flags |= ECF_MALLOC;
1509       if (bp_unpack_value (&bp, 1))
1510         ecf_flags |= ECF_NOTHROW;
1511       if (bp_unpack_value (&bp, 1))
1512         ecf_flags |= ECF_RETURNS_TWICE;
1513       edge->indirect_info->ecf_flags = ecf_flags;
1514       edge->indirect_info->common_target_id = streamer_read_hwi (ib);
1515       if (edge->indirect_info->common_target_id)
1516         edge->indirect_info->common_target_probability = streamer_read_hwi (ib);
1517     }
1518 }
1519
1520
1521 /* Read a cgraph from IB using the info in FILE_DATA.  */
1522
1523 static vec<symtab_node *> 
1524 input_cgraph_1 (struct lto_file_decl_data *file_data,
1525                 struct lto_input_block *ib)
1526 {
1527   enum LTO_symtab_tags tag;
1528   vec<symtab_node *> nodes = vNULL;
1529   symtab_node *node;
1530   unsigned i;
1531
1532   tag = streamer_read_enum (ib, LTO_symtab_tags, LTO_symtab_last_tag);
1533   order_base = symtab->order;
1534   while (tag)
1535     {
1536       if (tag == LTO_symtab_edge)
1537         input_edge (ib, nodes, false);
1538       else if (tag == LTO_symtab_indirect_edge)
1539         input_edge (ib, nodes, true);
1540       else if (tag == LTO_symtab_variable)
1541         {
1542           node = input_varpool_node (file_data, ib);
1543           nodes.safe_push (node);
1544           lto_symtab_encoder_encode (file_data->symtab_node_encoder, node);
1545         }
1546       else
1547         {
1548           node = input_node (file_data, ib, tag, nodes);
1549           if (node == NULL || node->decl == NULL_TREE)
1550             internal_error ("bytecode stream: found empty cgraph node");
1551           nodes.safe_push (node);
1552           lto_symtab_encoder_encode (file_data->symtab_node_encoder, node);
1553         }
1554
1555       tag = streamer_read_enum (ib, LTO_symtab_tags, LTO_symtab_last_tag);
1556     }
1557
1558   lto_input_toplevel_asms (file_data, order_base);
1559
1560   /* AUX pointers should be all non-zero for function nodes read from the stream.  */
1561   if (flag_checking)
1562     {
1563       FOR_EACH_VEC_ELT (nodes, i, node)
1564         gcc_assert (node->aux || !is_a <cgraph_node *> (node));
1565     }
1566   FOR_EACH_VEC_ELT (nodes, i, node)
1567     {
1568       int ref;
1569       if (cgraph_node *cnode = dyn_cast <cgraph_node *> (node))
1570         {
1571           ref = (int) (intptr_t) cnode->global.inlined_to;
1572
1573           /* We share declaration of builtins, so we may read same node twice.  */
1574           if (!node->aux)
1575             continue;
1576           node->aux = NULL;
1577
1578           /* Fixup inlined_to from reference to pointer.  */
1579           if (ref != LCC_NOT_FOUND)
1580             dyn_cast<cgraph_node *> (node)->global.inlined_to
1581               = dyn_cast<cgraph_node *> (nodes[ref]);
1582           else
1583             cnode->global.inlined_to = NULL;
1584
1585           /* Compute instrumented_version.  */
1586           if (cnode->instrumentation_clone)
1587             {
1588               gcc_assert (cnode->orig_decl);
1589
1590               cnode->instrumented_version = cgraph_node::get (cnode->orig_decl);
1591               if (cnode->instrumented_version)
1592                 {
1593                   /* We may have multiple nodes for a single function which
1594                      will be merged later.  To have a proper merge we need
1595                      to keep instrumentation_version reference between nodes
1596                      consistent: each instrumented_version reference should
1597                      have proper reverse reference.  Thus don't break existing
1598                      instrumented_version reference if it already exists.  */
1599                   if (cnode->instrumented_version->instrumented_version)
1600                     cnode->instrumented_version = NULL;
1601                   else
1602                     cnode->instrumented_version->instrumented_version = cnode;
1603                 }
1604
1605               /* Restore decl names reference except for wrapper functions.  */
1606               if (!chkp_wrap_function (cnode->orig_decl))
1607                 {
1608                   tree name = DECL_ASSEMBLER_NAME (cnode->decl);
1609                   IDENTIFIER_TRANSPARENT_ALIAS (name) = 1;
1610                   TREE_CHAIN (name) = DECL_ASSEMBLER_NAME (cnode->orig_decl);
1611                 }
1612             }
1613         }
1614
1615       ref = (int) (intptr_t) node->same_comdat_group;
1616
1617       /* Fixup same_comdat_group from reference to pointer.  */
1618       if (ref != LCC_NOT_FOUND)
1619         node->same_comdat_group = nodes[ref];
1620       else
1621         node->same_comdat_group = NULL;
1622     }
1623   FOR_EACH_VEC_ELT (nodes, i, node)
1624     node->aux = is_a <cgraph_node *> (node) ? (void *)1 : NULL;
1625   return nodes;
1626 }
1627
1628 /* Input ipa_refs.  */
1629
1630 static void
1631 input_refs (struct lto_input_block *ib,
1632             vec<symtab_node *> nodes)
1633 {
1634   int count;
1635   int idx;
1636   while (true)
1637     {
1638       symtab_node *node;
1639       count = streamer_read_uhwi (ib);
1640       if (!count)
1641         break;
1642       idx = streamer_read_uhwi (ib);
1643       node = nodes[idx];
1644       while (count)
1645         {
1646           input_ref (ib, node, nodes);
1647           count--;
1648         }
1649     }
1650 }
1651             
1652
1653 static struct gcov_ctr_summary lto_gcov_summary;
1654
1655 /* Input profile_info from IB.  */
1656 static void
1657 input_profile_summary (struct lto_input_block *ib,
1658                        struct lto_file_decl_data *file_data)
1659 {
1660   unsigned h_ix;
1661   struct bitpack_d bp;
1662   unsigned int runs = streamer_read_uhwi (ib);
1663   if (runs)
1664     {
1665       file_data->profile_info.runs = runs;
1666       file_data->profile_info.sum_max = streamer_read_gcov_count (ib);
1667       file_data->profile_info.sum_all = streamer_read_gcov_count (ib);
1668
1669       memset (file_data->profile_info.histogram, 0,
1670               sizeof (gcov_bucket_type) * GCOV_HISTOGRAM_SIZE);
1671       /* Input the bitpack of non-zero histogram indices.  */
1672       bp = streamer_read_bitpack (ib);
1673       /* Read in and unpack the full bitpack, flagging non-zero
1674          histogram entries by setting the num_counters non-zero.  */
1675       for (h_ix = 0; h_ix < GCOV_HISTOGRAM_SIZE; h_ix++)
1676         {
1677           file_data->profile_info.histogram[h_ix].num_counters
1678               = bp_unpack_value (&bp, 1);
1679         }
1680       for (h_ix = 0; h_ix < GCOV_HISTOGRAM_SIZE; h_ix++)
1681         {
1682           if (!file_data->profile_info.histogram[h_ix].num_counters)
1683             continue;
1684
1685           file_data->profile_info.histogram[h_ix].num_counters
1686               = streamer_read_gcov_count (ib);
1687           file_data->profile_info.histogram[h_ix].min_value
1688               = streamer_read_gcov_count (ib);
1689           file_data->profile_info.histogram[h_ix].cum_value
1690               = streamer_read_gcov_count (ib);
1691         }
1692       /* IPA-profile computes hot bb threshold based on cumulated
1693          whole program profile.  We need to stream it down to ltrans.  */
1694       if (flag_ltrans)
1695         set_hot_bb_threshold (streamer_read_gcov_count (ib));
1696     }
1697
1698 }
1699
1700 /* Rescale profile summaries to the same number of runs in the whole unit.  */
1701
1702 static void
1703 merge_profile_summaries (struct lto_file_decl_data **file_data_vec)
1704 {
1705   struct lto_file_decl_data *file_data;
1706   unsigned int j, h_ix;
1707   gcov_unsigned_t max_runs = 0;
1708   struct cgraph_node *node;
1709   struct cgraph_edge *edge;
1710   gcov_type saved_sum_all = 0;
1711   gcov_ctr_summary *saved_profile_info = 0;
1712   int saved_scale = 0;
1713
1714   /* Find unit with maximal number of runs.  If we ever get serious about
1715      roundoff errors, we might also consider computing smallest common
1716      multiply.  */
1717   for (j = 0; (file_data = file_data_vec[j]) != NULL; j++)
1718     if (max_runs < file_data->profile_info.runs)
1719       max_runs = file_data->profile_info.runs;
1720
1721   if (!max_runs)
1722     return;
1723
1724   /* Simple overflow check.  We probably don't need to support that many train
1725      runs. Such a large value probably imply data corruption anyway.  */
1726   if (max_runs > INT_MAX / REG_BR_PROB_BASE)
1727     {
1728       sorry ("At most %i profile runs is supported. Perhaps corrupted profile?",
1729              INT_MAX / REG_BR_PROB_BASE);
1730       return;
1731     }
1732
1733   profile_info = &lto_gcov_summary;
1734   lto_gcov_summary.runs = max_runs;
1735   lto_gcov_summary.sum_max = 0;
1736   memset (lto_gcov_summary.histogram, 0,
1737           sizeof (gcov_bucket_type) * GCOV_HISTOGRAM_SIZE);
1738
1739   /* Rescale all units to the maximal number of runs.
1740      sum_max can not be easily merged, as we have no idea what files come from
1741      the same run.  We do not use the info anyway, so leave it 0.  */
1742   for (j = 0; (file_data = file_data_vec[j]) != NULL; j++)
1743     if (file_data->profile_info.runs)
1744       {
1745         int scale = GCOV_COMPUTE_SCALE (max_runs,
1746                                         file_data->profile_info.runs);
1747         lto_gcov_summary.sum_max
1748             = MAX (lto_gcov_summary.sum_max,
1749                    apply_scale (file_data->profile_info.sum_max, scale));
1750         lto_gcov_summary.sum_all
1751             = MAX (lto_gcov_summary.sum_all,
1752                    apply_scale (file_data->profile_info.sum_all, scale));
1753         /* Save a pointer to the profile_info with the largest
1754            scaled sum_all and the scale for use in merging the
1755            histogram.  */
1756         if (!saved_profile_info
1757             || lto_gcov_summary.sum_all > saved_sum_all)
1758           {
1759             saved_profile_info = &file_data->profile_info;
1760             saved_sum_all = lto_gcov_summary.sum_all;
1761             saved_scale = scale;
1762           }
1763       }
1764
1765   gcc_assert (saved_profile_info);
1766
1767   /* Scale up the histogram from the profile that had the largest
1768      scaled sum_all above.  */
1769   for (h_ix = 0; h_ix < GCOV_HISTOGRAM_SIZE; h_ix++)
1770     {
1771       /* Scale up the min value as we did the corresponding sum_all
1772          above. Use that to find the new histogram index.  */
1773       gcov_type scaled_min
1774           = apply_scale (saved_profile_info->histogram[h_ix].min_value,
1775                          saved_scale);
1776       /* The new index may be shared with another scaled histogram entry,
1777          so we need to account for a non-zero histogram entry at new_ix.  */
1778       unsigned new_ix = gcov_histo_index (scaled_min);
1779       lto_gcov_summary.histogram[new_ix].min_value
1780           = (lto_gcov_summary.histogram[new_ix].num_counters
1781              ? MIN (lto_gcov_summary.histogram[new_ix].min_value, scaled_min)
1782              : scaled_min);
1783       /* Some of the scaled counter values would ostensibly need to be placed
1784          into different (larger) histogram buckets, but we keep things simple
1785          here and place the scaled cumulative counter value in the bucket
1786          corresponding to the scaled minimum counter value.  */
1787       lto_gcov_summary.histogram[new_ix].cum_value
1788           += apply_scale (saved_profile_info->histogram[h_ix].cum_value,
1789                           saved_scale);
1790       lto_gcov_summary.histogram[new_ix].num_counters
1791           += saved_profile_info->histogram[h_ix].num_counters;
1792     }
1793
1794   /* Watch roundoff errors.  */
1795   if (lto_gcov_summary.sum_max < max_runs)
1796     lto_gcov_summary.sum_max = max_runs;
1797
1798   /* If merging already happent at WPA time, we are done.  */
1799   if (flag_ltrans)
1800     return;
1801
1802   /* Now compute count_materialization_scale of each node.
1803      During LTRANS we already have values of count_materialization_scale
1804      computed, so just update them.  */
1805   FOR_EACH_FUNCTION (node)
1806     if (node->lto_file_data
1807         && node->lto_file_data->profile_info.runs)
1808       {
1809         int scale;
1810
1811         scale = RDIV (node->count_materialization_scale * max_runs,
1812                       node->lto_file_data->profile_info.runs);
1813         node->count_materialization_scale = scale;
1814         if (scale < 0)
1815           fatal_error (input_location, "Profile information in %s corrupted",
1816                        file_data->file_name);
1817
1818         if (scale == REG_BR_PROB_BASE)
1819           continue;
1820         for (edge = node->callees; edge; edge = edge->next_callee)
1821           edge->count = apply_scale (edge->count, scale);
1822         node->count = apply_scale (node->count, scale);
1823       }
1824 }
1825
1826 /* Input and merge the symtab from each of the .o files passed to
1827    lto1.  */
1828
1829 void
1830 input_symtab (void)
1831 {
1832   struct lto_file_decl_data **file_data_vec = lto_get_file_decl_data ();
1833   struct lto_file_decl_data *file_data;
1834   unsigned int j = 0;
1835   struct cgraph_node *node;
1836
1837   while ((file_data = file_data_vec[j++]))
1838     {
1839       const char *data;
1840       size_t len;
1841       struct lto_input_block *ib;
1842       vec<symtab_node *> nodes;
1843
1844       ib = lto_create_simple_input_block (file_data, LTO_section_symtab_nodes,
1845                                           &data, &len);
1846       if (!ib) 
1847         fatal_error (input_location,
1848                      "cannot find LTO cgraph in %s", file_data->file_name);
1849       input_profile_summary (ib, file_data);
1850       file_data->symtab_node_encoder = lto_symtab_encoder_new (true);
1851       nodes = input_cgraph_1 (file_data, ib);
1852       lto_destroy_simple_input_block (file_data, LTO_section_symtab_nodes,
1853                                       ib, data, len);
1854
1855       ib = lto_create_simple_input_block (file_data, LTO_section_refs,
1856                                           &data, &len);
1857       if (!ib)
1858         fatal_error (input_location, "cannot find LTO section refs in %s",
1859                      file_data->file_name);
1860       input_refs (ib, nodes);
1861       lto_destroy_simple_input_block (file_data, LTO_section_refs,
1862                                       ib, data, len);
1863       if (flag_ltrans)
1864         input_cgraph_opt_summary (nodes);
1865       nodes.release ();
1866     }
1867
1868   merge_profile_summaries (file_data_vec);
1869   get_working_sets ();
1870
1871
1872   /* Clear out the aux field that was used to store enough state to
1873      tell which nodes should be overwritten.  */
1874   FOR_EACH_FUNCTION (node)
1875     {
1876       /* Some nodes may have been created by cgraph_node.  This
1877          happens when the callgraph contains nested functions.  If the
1878          node for the parent function was never emitted to the gimple
1879          file, cgraph_node will create a node for it when setting the
1880          context of the nested function.  */
1881       if (node->lto_file_data)
1882         node->aux = NULL;
1883     }
1884 }
1885
1886 /* Input function/variable tables that will allow libgomp to look up offload
1887    target code, and store them into OFFLOAD_FUNCS and OFFLOAD_VARS.  */
1888
1889 void
1890 input_offload_tables (bool do_force_output)
1891 {
1892   struct lto_file_decl_data **file_data_vec = lto_get_file_decl_data ();
1893   struct lto_file_decl_data *file_data;
1894   unsigned int j = 0;
1895
1896   while ((file_data = file_data_vec[j++]))
1897     {
1898       const char *data;
1899       size_t len;
1900       struct lto_input_block *ib
1901         = lto_create_simple_input_block (file_data, LTO_section_offload_table,
1902                                          &data, &len);
1903       if (!ib)
1904         continue;
1905
1906       enum LTO_symtab_tags tag
1907         = streamer_read_enum (ib, LTO_symtab_tags, LTO_symtab_last_tag);
1908       while (tag)
1909         {
1910           if (tag == LTO_symtab_unavail_node)
1911             {
1912               int decl_index = streamer_read_uhwi (ib);
1913               tree fn_decl
1914                 = lto_file_decl_data_get_fn_decl (file_data, decl_index);
1915               vec_safe_push (offload_funcs, fn_decl);
1916
1917               /* Prevent IPA from removing fn_decl as unreachable, since there
1918                  may be no refs from the parent function to child_fn in offload
1919                  LTO mode.  */
1920               if (do_force_output)
1921                 cgraph_node::get (fn_decl)->mark_force_output ();
1922             }
1923           else if (tag == LTO_symtab_variable)
1924             {
1925               int decl_index = streamer_read_uhwi (ib);
1926               tree var_decl
1927                 = lto_file_decl_data_get_var_decl (file_data, decl_index);
1928               vec_safe_push (offload_vars, var_decl);
1929
1930               /* Prevent IPA from removing var_decl as unused, since there
1931                  may be no refs to var_decl in offload LTO mode.  */
1932               if (do_force_output)
1933                 varpool_node::get (var_decl)->force_output = 1;
1934             }
1935           else
1936             fatal_error (input_location,
1937                          "invalid offload table in %s", file_data->file_name);
1938
1939           tag = streamer_read_enum (ib, LTO_symtab_tags, LTO_symtab_last_tag);
1940         }
1941
1942       lto_destroy_simple_input_block (file_data, LTO_section_offload_table,
1943                                       ib, data, len);
1944     }
1945 }
1946
1947 /* True when we need optimization summary for NODE.  */
1948
1949 static int
1950 output_cgraph_opt_summary_p (struct cgraph_node *node)
1951 {
1952   return (node->clone_of
1953           && (node->clone.tree_map
1954               || node->clone.args_to_skip
1955               || node->clone.combined_args_to_skip));
1956 }
1957
1958 /* Output optimization summary for EDGE to OB.  */
1959 static void
1960 output_edge_opt_summary (struct output_block *ob ATTRIBUTE_UNUSED,
1961                          struct cgraph_edge *edge ATTRIBUTE_UNUSED)
1962 {
1963 }
1964
1965 /* Output optimization summary for NODE to OB.  */
1966
1967 static void
1968 output_node_opt_summary (struct output_block *ob,
1969                          struct cgraph_node *node,
1970                          lto_symtab_encoder_t encoder)
1971 {
1972   unsigned int index;
1973   bitmap_iterator bi;
1974   struct ipa_replace_map *map;
1975   struct bitpack_d bp;
1976   int i;
1977   struct cgraph_edge *e;
1978
1979   if (node->clone.args_to_skip)
1980     {
1981       streamer_write_uhwi (ob, bitmap_count_bits (node->clone.args_to_skip));
1982       EXECUTE_IF_SET_IN_BITMAP (node->clone.args_to_skip, 0, index, bi)
1983         streamer_write_uhwi (ob, index);
1984     }
1985   else
1986     streamer_write_uhwi (ob, 0);
1987   if (node->clone.combined_args_to_skip)
1988     {
1989       streamer_write_uhwi (ob, bitmap_count_bits (node->clone.combined_args_to_skip));
1990       EXECUTE_IF_SET_IN_BITMAP (node->clone.combined_args_to_skip, 0, index, bi)
1991         streamer_write_uhwi (ob, index);
1992     }
1993   else
1994     streamer_write_uhwi (ob, 0);
1995   streamer_write_uhwi (ob, vec_safe_length (node->clone.tree_map));
1996   FOR_EACH_VEC_SAFE_ELT (node->clone.tree_map, i, map)
1997     {
1998       /* At the moment we assume all old trees to be PARM_DECLs, because we have no
1999          mechanism to store function local declarations into summaries.  */
2000       gcc_assert (!map->old_tree);
2001       streamer_write_uhwi (ob, map->parm_num);
2002       gcc_assert (EXPR_LOCATION (map->new_tree) == UNKNOWN_LOCATION);
2003       stream_write_tree (ob, map->new_tree, true);
2004       bp = bitpack_create (ob->main_stream);
2005       bp_pack_value (&bp, map->replace_p, 1);
2006       bp_pack_value (&bp, map->ref_p, 1);
2007       streamer_write_bitpack (&bp);
2008     }
2009
2010   if (lto_symtab_encoder_in_partition_p (encoder, node))
2011     {
2012       for (e = node->callees; e; e = e->next_callee)
2013         output_edge_opt_summary (ob, e);
2014       for (e = node->indirect_calls; e; e = e->next_callee)
2015         output_edge_opt_summary (ob, e);
2016     }
2017 }
2018
2019 /* Output optimization summaries stored in callgraph.
2020    At the moment it is the clone info structure.  */
2021
2022 static void
2023 output_cgraph_opt_summary (void)
2024 {
2025   int i, n_nodes;
2026   lto_symtab_encoder_t encoder;
2027   struct output_block *ob = create_output_block (LTO_section_cgraph_opt_sum);
2028   unsigned count = 0;
2029
2030   ob->symbol = NULL;
2031   encoder = ob->decl_state->symtab_node_encoder;
2032   n_nodes = lto_symtab_encoder_size (encoder);
2033   for (i = 0; i < n_nodes; i++)
2034     {
2035       symtab_node *node = lto_symtab_encoder_deref (encoder, i);
2036       cgraph_node *cnode = dyn_cast <cgraph_node *> (node);
2037       if (cnode && output_cgraph_opt_summary_p (cnode))
2038         count++;
2039     }
2040   streamer_write_uhwi (ob, count);
2041   for (i = 0; i < n_nodes; i++)
2042     {
2043       symtab_node *node = lto_symtab_encoder_deref (encoder, i);
2044       cgraph_node *cnode = dyn_cast <cgraph_node *> (node);
2045       if (cnode && output_cgraph_opt_summary_p (cnode))
2046         {
2047           streamer_write_uhwi (ob, i);
2048           output_node_opt_summary (ob, cnode, encoder);
2049         }
2050     }
2051   produce_asm (ob, NULL);
2052   destroy_output_block (ob);
2053 }
2054
2055 /* Input optimisation summary of EDGE.  */
2056
2057 static void
2058 input_edge_opt_summary (struct cgraph_edge *edge ATTRIBUTE_UNUSED,
2059                         struct lto_input_block *ib_main ATTRIBUTE_UNUSED)
2060 {
2061 }
2062
2063 /* Input optimisation summary of NODE.  */
2064
2065 static void
2066 input_node_opt_summary (struct cgraph_node *node,
2067                         struct lto_input_block *ib_main,
2068                         struct data_in *data_in)
2069 {
2070   int i;
2071   int count;
2072   int bit;
2073   struct bitpack_d bp;
2074   struct cgraph_edge *e;
2075
2076   count = streamer_read_uhwi (ib_main);
2077   if (count)
2078     node->clone.args_to_skip = BITMAP_GGC_ALLOC ();
2079   for (i = 0; i < count; i++)
2080     {
2081       bit = streamer_read_uhwi (ib_main);
2082       bitmap_set_bit (node->clone.args_to_skip, bit);
2083     }
2084   count = streamer_read_uhwi (ib_main);
2085   if (count)
2086     node->clone.combined_args_to_skip = BITMAP_GGC_ALLOC ();
2087   for (i = 0; i < count; i++)
2088     {
2089       bit = streamer_read_uhwi (ib_main);
2090       bitmap_set_bit (node->clone.combined_args_to_skip, bit);
2091     }
2092   count = streamer_read_uhwi (ib_main);
2093   for (i = 0; i < count; i++)
2094     {
2095       struct ipa_replace_map *map = ggc_alloc<ipa_replace_map> ();
2096
2097       vec_safe_push (node->clone.tree_map, map);
2098       map->parm_num = streamer_read_uhwi (ib_main);
2099       map->old_tree = NULL;
2100       map->new_tree = stream_read_tree (ib_main, data_in);
2101       bp = streamer_read_bitpack (ib_main);
2102       map->replace_p = bp_unpack_value (&bp, 1);
2103       map->ref_p = bp_unpack_value (&bp, 1);
2104     }
2105   for (e = node->callees; e; e = e->next_callee)
2106     input_edge_opt_summary (e, ib_main);
2107   for (e = node->indirect_calls; e; e = e->next_callee)
2108     input_edge_opt_summary (e, ib_main);
2109 }
2110
2111 /* Read section in file FILE_DATA of length LEN with data DATA.  */
2112
2113 static void
2114 input_cgraph_opt_section (struct lto_file_decl_data *file_data,
2115                           const char *data, size_t len,
2116                           vec<symtab_node *> nodes)
2117 {
2118   const struct lto_function_header *header =
2119     (const struct lto_function_header *) data;
2120   const int cfg_offset = sizeof (struct lto_function_header);
2121   const int main_offset = cfg_offset + header->cfg_size;
2122   const int string_offset = main_offset + header->main_size;
2123   struct data_in *data_in;
2124   unsigned int i;
2125   unsigned int count;
2126
2127   lto_input_block ib_main ((const char *) data + main_offset,
2128                            header->main_size, file_data->mode_table);
2129
2130   data_in =
2131     lto_data_in_create (file_data, (const char *) data + string_offset,
2132                         header->string_size, vNULL);
2133   count = streamer_read_uhwi (&ib_main);
2134
2135   for (i = 0; i < count; i++)
2136     {
2137       int ref = streamer_read_uhwi (&ib_main);
2138       input_node_opt_summary (dyn_cast<cgraph_node *> (nodes[ref]),
2139                               &ib_main, data_in);
2140     }
2141   lto_free_section_data (file_data, LTO_section_cgraph_opt_sum, NULL, data,
2142                          len);
2143   lto_data_in_delete (data_in);
2144 }
2145
2146 /* Input optimization summary of cgraph.  */
2147
2148 static void
2149 input_cgraph_opt_summary (vec<symtab_node *> nodes)
2150 {
2151   struct lto_file_decl_data **file_data_vec = lto_get_file_decl_data ();
2152   struct lto_file_decl_data *file_data;
2153   unsigned int j = 0;
2154
2155   while ((file_data = file_data_vec[j++]))
2156     {
2157       size_t len;
2158       const char *data =
2159         lto_get_section_data (file_data, LTO_section_cgraph_opt_sum, NULL,
2160                               &len);
2161
2162       if (data)
2163         input_cgraph_opt_section (file_data, data, len, nodes);
2164     }
2165 }