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