OSDN Git Service

* tree-streamer-out.c (lto_output_ts_decl_with_vis_tree_pointers):
[pf3gnuchains/gcc-fork.git] / gcc / lto / lto.c
1 /* Top-level LTO routines.
2    Copyright 2009, 2010, 2011 Free Software Foundation, Inc.
3    Contributed by CodeSourcery, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3.  If not see
19 <http://www.gnu.org/licenses/>.  */
20
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "opts.h"
25 #include "toplev.h"
26 #include "tree.h"
27 #include "tree-flow.h"
28 #include "diagnostic-core.h"
29 #include "tm.h"
30 #include "cgraph.h"
31 #include "ggc.h"
32 #include "tree-ssa-operands.h"
33 #include "tree-pass.h"
34 #include "langhooks.h"
35 #include "vec.h"
36 #include "bitmap.h"
37 #include "pointer-set.h"
38 #include "ipa-prop.h"
39 #include "common.h"
40 #include "debug.h"
41 #include "timevar.h"
42 #include "gimple.h"
43 #include "lto.h"
44 #include "lto-tree.h"
45 #include "lto-streamer.h"
46 #include "tree-streamer.h"
47 #include "splay-tree.h"
48 #include "params.h"
49 #include "ipa-inline.h"
50 #include "ipa-utils.h"
51
52 static GTY(()) tree first_personality_decl;
53
54 /* Returns a hash code for P.  */
55
56 static hashval_t
57 hash_name (const void *p)
58 {
59   const struct lto_section_slot *ds = (const struct lto_section_slot *) p;
60   return (hashval_t) htab_hash_string (ds->name);
61 }
62
63
64 /* Returns nonzero if P1 and P2 are equal.  */
65
66 static int
67 eq_name (const void *p1, const void *p2)
68 {
69   const struct lto_section_slot *s1 =
70     (const struct lto_section_slot *) p1;
71   const struct lto_section_slot *s2 =
72     (const struct lto_section_slot *) p2;
73
74   return strcmp (s1->name, s2->name) == 0;
75 }
76
77 /* Free lto_section_slot */
78
79 static void
80 free_with_string (void *arg)
81 {
82   struct lto_section_slot *s = (struct lto_section_slot *)arg;
83
84   free (CONST_CAST (char *, s->name));
85   free (arg);
86 }
87
88 /* Create section hash table */
89
90 htab_t 
91 lto_obj_create_section_hash_table (void)
92 {
93   return htab_create (37, hash_name, eq_name, free_with_string);
94 }
95
96 /* Read the constructors and inits.  */
97
98 static void
99 lto_materialize_constructors_and_inits (struct lto_file_decl_data * file_data)
100 {
101   size_t len;
102   const char *data = lto_get_section_data (file_data, 
103                                            LTO_section_static_initializer,
104                                            NULL, &len);
105   lto_input_constructors_and_inits (file_data, data);
106   lto_free_section_data (file_data, LTO_section_static_initializer, NULL,
107                          data, len);
108 }
109
110 /* Return true when NODE has a clone that is analyzed (i.e. we need
111    to load its body even if the node itself is not needed).  */
112
113 static bool
114 has_analyzed_clone_p (struct cgraph_node *node)
115 {
116   struct cgraph_node *orig = node;
117   node = node->clones;
118   if (node)
119     while (node != orig)
120       {
121         if (node->analyzed)
122           return true;
123         if (node->clones)
124           node = node->clones;
125         else if (node->next_sibling_clone)
126           node = node->next_sibling_clone;
127         else
128           {
129             while (node != orig && !node->next_sibling_clone)
130               node = node->clone_of;
131             if (node != orig)
132               node = node->next_sibling_clone;
133           }
134       }
135   return false;
136 }
137
138 /* Read the function body for the function associated with NODE.  */
139
140 static void
141 lto_materialize_function (struct cgraph_node *node)
142 {
143   tree decl;
144   struct lto_file_decl_data *file_data;
145   const char *data, *name;
146   size_t len;
147
148   decl = node->decl;
149   /* Read in functions with body (analyzed nodes)
150      and also functions that are needed to produce virtual clones.  */
151   if (cgraph_function_with_gimple_body_p (node) || has_analyzed_clone_p (node))
152     {
153       /* Clones and thunks don't need to be read.  */
154       if (node->clone_of)
155         return;
156
157       /* Load the function body only if not operating in WPA mode.  In
158          WPA mode, the body of the function is not needed.  */
159       if (!flag_wpa)
160         {
161           file_data = node->local.lto_file_data;
162           name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
163
164           /* We may have renamed the declaration, e.g., a static function.  */
165           name = lto_get_decl_name_mapping (file_data, name);
166
167           data = lto_get_section_data (file_data, LTO_section_function_body,
168                                        name, &len);
169           if (!data)
170             fatal_error ("%s: section %s is missing",
171                          file_data->file_name,
172                          name);
173
174           gcc_assert (DECL_STRUCT_FUNCTION (decl) == NULL);
175
176           allocate_struct_function (decl, false);
177           announce_function (decl);
178           lto_input_function_body (file_data, decl, data);
179           if (DECL_FUNCTION_PERSONALITY (decl) && !first_personality_decl)
180             first_personality_decl = DECL_FUNCTION_PERSONALITY (decl);
181           lto_stats.num_function_bodies++;
182           lto_free_section_data (file_data, LTO_section_function_body, name,
183                                  data, len);
184           ggc_collect ();
185         }
186     }
187
188   /* Let the middle end know about the function.  */
189   rest_of_decl_compilation (decl, 1, 0);
190 }
191
192
193 /* Decode the content of memory pointed to by DATA in the in decl
194    state object STATE. DATA_IN points to a data_in structure for
195    decoding. Return the address after the decoded object in the
196    input.  */
197
198 static const uint32_t *
199 lto_read_in_decl_state (struct data_in *data_in, const uint32_t *data,
200                         struct lto_in_decl_state *state)
201 {
202   uint32_t ix;
203   tree decl;
204   uint32_t i, j;
205   
206   ix = *data++;
207   decl = lto_streamer_cache_get (data_in->reader_cache, ix);
208   if (TREE_CODE (decl) != FUNCTION_DECL)
209     {
210       gcc_assert (decl == void_type_node);
211       decl = NULL_TREE;
212     }
213   state->fn_decl = decl;
214
215   for (i = 0; i < LTO_N_DECL_STREAMS; i++)
216     {
217       uint32_t size = *data++;
218       tree *decls = ggc_alloc_vec_tree (size);
219
220       for (j = 0; j < size; j++)
221         decls[j] = lto_streamer_cache_get (data_in->reader_cache, data[j]);
222
223       state->streams[i].size = size;
224       state->streams[i].trees = decls;
225       data += size;
226     }
227
228   return data;
229 }
230
231 /* A hashtable of trees that potentially refer to variables or functions
232    that must be replaced with their prevailing variant.  */
233 static GTY((if_marked ("ggc_marked_p"), param_is (union tree_node))) htab_t
234   tree_with_vars;
235
236 /* Remember that T is a tree that (potentially) refers to a variable
237    or function decl that may be replaced with its prevailing variant.  */
238 static void
239 remember_with_vars (tree t)
240 {
241   *(tree *) htab_find_slot (tree_with_vars, t, INSERT) = t;
242 }
243
244 #define LTO_FIXUP_TREE(tt) \
245   do \
246     { \
247       if (tt) \
248         { \
249           if (TYPE_P (tt)) \
250             (tt) = gimple_register_type (tt); \
251           if (VAR_OR_FUNCTION_DECL_P (tt) && TREE_PUBLIC (tt)) \
252             remember_with_vars (t); \
253         } \
254     } while (0)
255
256 static void lto_fixup_types (tree);
257
258 /* Fix up fields of a tree_typed T.  */
259
260 static void
261 lto_ft_typed (tree t)
262 {
263   LTO_FIXUP_TREE (TREE_TYPE (t));
264 }
265
266 /* Fix up fields of a tree_common T.  */
267
268 static void
269 lto_ft_common (tree t)
270 {
271   lto_ft_typed (t);
272   LTO_FIXUP_TREE (TREE_CHAIN (t));
273 }
274
275 /* Fix up fields of a decl_minimal T.  */
276
277 static void
278 lto_ft_decl_minimal (tree t)
279 {
280   lto_ft_common (t);
281   LTO_FIXUP_TREE (DECL_NAME (t));
282   LTO_FIXUP_TREE (DECL_CONTEXT (t));
283 }
284
285 /* Fix up fields of a decl_common T.  */
286
287 static void
288 lto_ft_decl_common (tree t)
289 {
290   lto_ft_decl_minimal (t);
291   LTO_FIXUP_TREE (DECL_SIZE (t));
292   LTO_FIXUP_TREE (DECL_SIZE_UNIT (t));
293   LTO_FIXUP_TREE (DECL_INITIAL (t));
294   LTO_FIXUP_TREE (DECL_ATTRIBUTES (t));
295   LTO_FIXUP_TREE (DECL_ABSTRACT_ORIGIN (t));
296 }
297
298 /* Fix up fields of a decl_with_vis T.  */
299
300 static void
301 lto_ft_decl_with_vis (tree t)
302 {
303   lto_ft_decl_common (t);
304
305   /* Accessor macro has side-effects, use field-name here. */
306   LTO_FIXUP_TREE (t->decl_with_vis.assembler_name);
307   LTO_FIXUP_TREE (DECL_SECTION_NAME (t));
308 }
309
310 /* Fix up fields of a decl_non_common T.  */
311
312 static void
313 lto_ft_decl_non_common (tree t)
314 {
315   lto_ft_decl_with_vis (t);
316   LTO_FIXUP_TREE (DECL_ARGUMENT_FLD (t));
317   LTO_FIXUP_TREE (DECL_RESULT_FLD (t));
318   LTO_FIXUP_TREE (DECL_VINDEX (t));
319 }
320
321 /* Fix up fields of a decl_non_common T.  */
322
323 static void
324 lto_ft_function (tree t)
325 {
326   lto_ft_decl_non_common (t);
327   LTO_FIXUP_TREE (DECL_FUNCTION_PERSONALITY (t));
328 }
329
330 /* Fix up fields of a field_decl T.  */
331
332 static void
333 lto_ft_field_decl (tree t)
334 {
335   lto_ft_decl_common (t);
336   LTO_FIXUP_TREE (DECL_FIELD_OFFSET (t));
337   LTO_FIXUP_TREE (DECL_BIT_FIELD_TYPE (t));
338   LTO_FIXUP_TREE (DECL_QUALIFIER (t));
339   LTO_FIXUP_TREE (DECL_FIELD_BIT_OFFSET (t));
340   LTO_FIXUP_TREE (DECL_FCONTEXT (t));
341 }
342
343 /* Fix up fields of a type T.  */
344
345 static void
346 lto_ft_type (tree t)
347 {
348   lto_ft_common (t);
349   LTO_FIXUP_TREE (TYPE_CACHED_VALUES (t));
350   LTO_FIXUP_TREE (TYPE_SIZE (t));
351   LTO_FIXUP_TREE (TYPE_SIZE_UNIT (t));
352   LTO_FIXUP_TREE (TYPE_ATTRIBUTES (t));
353   LTO_FIXUP_TREE (TYPE_NAME (t));
354
355   /* Accessors are for derived node types only. */
356   if (!POINTER_TYPE_P (t))
357     LTO_FIXUP_TREE (TYPE_MINVAL (t));
358   LTO_FIXUP_TREE (TYPE_MAXVAL (t));
359
360   /* Accessor is for derived node types only. */
361   LTO_FIXUP_TREE (t->type_non_common.binfo);
362
363   LTO_FIXUP_TREE (TYPE_CONTEXT (t));
364 }
365
366 /* Fix up fields of a BINFO T.  */
367
368 static void
369 lto_ft_binfo (tree t)
370 {
371   unsigned HOST_WIDE_INT i, n;
372   tree base, saved_base;
373
374   lto_ft_common (t);
375   LTO_FIXUP_TREE (BINFO_VTABLE (t));
376   LTO_FIXUP_TREE (BINFO_OFFSET (t));
377   LTO_FIXUP_TREE (BINFO_VIRTUALS (t));
378   LTO_FIXUP_TREE (BINFO_VPTR_FIELD (t));
379   n = VEC_length (tree, BINFO_BASE_ACCESSES (t));
380   for (i = 0; i < n; i++)
381     {
382       saved_base = base = BINFO_BASE_ACCESS (t, i);
383       LTO_FIXUP_TREE (base);
384       if (base != saved_base)
385         VEC_replace (tree, BINFO_BASE_ACCESSES (t), i, base);
386     }
387   LTO_FIXUP_TREE (BINFO_INHERITANCE_CHAIN (t));
388   LTO_FIXUP_TREE (BINFO_SUBVTT_INDEX (t));
389   LTO_FIXUP_TREE (BINFO_VPTR_INDEX (t));
390   n = BINFO_N_BASE_BINFOS (t);
391   for (i = 0; i < n; i++)
392     {
393       saved_base = base = BINFO_BASE_BINFO (t, i);
394       LTO_FIXUP_TREE (base);
395       if (base != saved_base)
396         VEC_replace (tree, BINFO_BASE_BINFOS (t), i, base);
397     }
398 }
399
400 /* Fix up fields of a CONSTRUCTOR T.  */
401
402 static void
403 lto_ft_constructor (tree t)
404 {
405   unsigned HOST_WIDE_INT idx;
406   constructor_elt *ce;
407
408   lto_ft_typed (t);
409
410   for (idx = 0;
411        VEC_iterate(constructor_elt, CONSTRUCTOR_ELTS (t), idx, ce);
412        idx++)
413     {
414       LTO_FIXUP_TREE (ce->index);
415       LTO_FIXUP_TREE (ce->value);
416     }
417 }
418
419 /* Fix up fields of an expression tree T.  */
420
421 static void
422 lto_ft_expr (tree t)
423 {
424   int i;
425   lto_ft_typed (t);
426   for (i = TREE_OPERAND_LENGTH (t) - 1; i >= 0; --i)
427     LTO_FIXUP_TREE (TREE_OPERAND (t, i));
428 }
429
430 /* Given a tree T fixup fields of T by replacing types with their merged
431    variant and other entities by an equal entity from an earlier compilation
432    unit, or an entity being canonical in a different way.  This includes
433    for instance integer or string constants.  */
434
435 static void
436 lto_fixup_types (tree t)
437 {
438   switch (TREE_CODE (t))
439     {
440     case IDENTIFIER_NODE:
441       break;
442
443     case TREE_LIST:
444       LTO_FIXUP_TREE (TREE_VALUE (t));
445       LTO_FIXUP_TREE (TREE_PURPOSE (t));
446       LTO_FIXUP_TREE (TREE_CHAIN (t));
447       break;
448
449     case FIELD_DECL:
450       lto_ft_field_decl (t);
451       break;
452
453     case LABEL_DECL:
454     case CONST_DECL:
455     case PARM_DECL:
456     case RESULT_DECL:
457     case IMPORTED_DECL:
458       lto_ft_decl_common (t);
459       break;
460
461     case VAR_DECL:
462       lto_ft_decl_with_vis (t);
463       break;
464
465     case TYPE_DECL:
466       lto_ft_decl_non_common (t);
467       break;
468
469     case FUNCTION_DECL:
470       lto_ft_function (t);
471       break;
472
473     case TREE_BINFO:
474       lto_ft_binfo (t);
475       break;
476
477     case PLACEHOLDER_EXPR:
478       lto_ft_common (t);
479       break;
480
481     case BLOCK:
482     case TRANSLATION_UNIT_DECL:
483     case OPTIMIZATION_NODE:
484     case TARGET_OPTION_NODE:
485       break;
486
487     default:
488       if (TYPE_P (t))
489         lto_ft_type (t);
490       else if (TREE_CODE (t) == CONSTRUCTOR)
491         lto_ft_constructor (t);
492       else if (CONSTANT_CLASS_P (t))
493         LTO_FIXUP_TREE (TREE_TYPE (t));
494       else if (EXPR_P (t))
495         {
496           lto_ft_expr (t);
497         }
498       else
499         {
500           remember_with_vars (t);
501         }
502     }
503 }
504
505
506 /* Return the resolution for the decl with index INDEX from DATA_IN. */
507
508 static enum ld_plugin_symbol_resolution
509 get_resolution (struct data_in *data_in, unsigned index)
510 {
511   if (data_in->globals_resolution)
512     {
513       ld_plugin_symbol_resolution_t ret;
514       /* We can have references to not emitted functions in
515          DECL_FUNCTION_PERSONALITY at least.  So we can and have
516          to indeed return LDPR_UNKNOWN in some cases.   */
517       if (VEC_length (ld_plugin_symbol_resolution_t,
518                       data_in->globals_resolution) <= index)
519         return LDPR_UNKNOWN;
520       ret = VEC_index (ld_plugin_symbol_resolution_t,
521                        data_in->globals_resolution,
522                        index);
523       return ret;
524     }
525   else
526     /* Delay resolution finding until decl merging.  */
527     return LDPR_UNKNOWN;
528 }
529
530
531 /* Register DECL with the global symbol table and change its
532    name if necessary to avoid name clashes for static globals across
533    different files.  */
534
535 static void
536 lto_register_var_decl_in_symtab (struct data_in *data_in, tree decl)
537 {
538   tree context;
539
540   /* Variable has file scope, not local. Need to ensure static variables
541      between different files don't clash unexpectedly.  */
542   if (!TREE_PUBLIC (decl)
543       && !((context = decl_function_context (decl))
544            && auto_var_in_fn_p (decl, context)))
545     {
546       /* ??? We normally pre-mangle names before we serialize them
547          out.  Here, in lto1, we do not know the language, and
548          thus cannot do the mangling again. Instead, we just
549          append a suffix to the mangled name.  The resulting name,
550          however, is not a properly-formed mangled name, and will
551          confuse any attempt to unmangle it.  */
552       const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
553       char *label;
554
555       ASM_FORMAT_PRIVATE_NAME (label, name, DECL_UID (decl));
556       SET_DECL_ASSEMBLER_NAME (decl, get_identifier (label));
557       rest_of_decl_compilation (decl, 1, 0);
558       VEC_safe_push (tree, gc, lto_global_var_decls, decl);
559     }
560
561   /* If this variable has already been declared, queue the
562      declaration for merging.  */
563   if (TREE_PUBLIC (decl))
564     {
565       unsigned ix;
566       if (!lto_streamer_cache_lookup (data_in->reader_cache, decl, &ix))
567         gcc_unreachable ();
568       lto_symtab_register_decl (decl, get_resolution (data_in, ix),
569                                 data_in->file_data);
570     }
571 }
572
573
574 /* Register DECL with the global symbol table and change its
575    name if necessary to avoid name clashes for static globals across
576    different files.  DATA_IN contains descriptors and tables for the
577    file being read.  */
578
579 static void
580 lto_register_function_decl_in_symtab (struct data_in *data_in, tree decl)
581 {
582   /* Need to ensure static entities between different files
583      don't clash unexpectedly.  */
584   if (!TREE_PUBLIC (decl))
585     {
586       /* We must not use the DECL_ASSEMBLER_NAME macro here, as it
587          may set the assembler name where it was previously empty.  */
588       tree old_assembler_name = decl->decl_with_vis.assembler_name;
589
590       /* FIXME lto: We normally pre-mangle names before we serialize
591          them out.  Here, in lto1, we do not know the language, and
592          thus cannot do the mangling again. Instead, we just append a
593          suffix to the mangled name.  The resulting name, however, is
594          not a properly-formed mangled name, and will confuse any
595          attempt to unmangle it.  */
596       const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
597       char *label;
598
599       ASM_FORMAT_PRIVATE_NAME (label, name, DECL_UID (decl));
600       SET_DECL_ASSEMBLER_NAME (decl, get_identifier (label));
601
602       /* We may arrive here with the old assembler name not set
603          if the function body is not needed, e.g., it has been
604          inlined away and does not appear in the cgraph.  */
605       if (old_assembler_name)
606         {
607           tree new_assembler_name = DECL_ASSEMBLER_NAME (decl);
608
609           /* Make the original assembler name available for later use.
610              We may have used it to indicate the section within its
611              object file where the function body may be found.
612              FIXME lto: Find a better way to maintain the function decl
613              to body section mapping so we don't need this hack.  */
614           lto_record_renamed_decl (data_in->file_data,
615                                    IDENTIFIER_POINTER (old_assembler_name),
616                                    IDENTIFIER_POINTER (new_assembler_name));
617
618           /* Also register the reverse mapping so that we can find the
619              new name given to an existing assembler name (used when
620              restoring alias pairs in input_constructors_or_inits.  */
621           lto_record_renamed_decl (data_in->file_data,
622                                    IDENTIFIER_POINTER (new_assembler_name),
623                                    IDENTIFIER_POINTER (old_assembler_name));
624         }
625     }
626
627   /* If this variable has already been declared, queue the
628      declaration for merging.  */
629   if (TREE_PUBLIC (decl) && !DECL_ABSTRACT (decl))
630     {
631       unsigned ix;
632       if (!lto_streamer_cache_lookup (data_in->reader_cache, decl, &ix))
633         gcc_unreachable ();
634       lto_symtab_register_decl (decl, get_resolution (data_in, ix),
635                                 data_in->file_data);
636     }
637 }
638
639
640 /* Given a streamer cache structure DATA_IN (holding a sequence of trees
641    for one compilation unit) go over all trees starting at index FROM until the
642    end of the sequence and replace fields of those trees, and the trees
643    themself with their canonical variants as per gimple_register_type.  */
644
645 static void
646 uniquify_nodes (struct data_in *data_in, unsigned from)
647 {
648   struct lto_streamer_cache_d *cache = data_in->reader_cache;
649   unsigned len = VEC_length (tree, cache->nodes);
650   unsigned i;
651
652   /* Go backwards because children streamed for the first time come
653      as part of their parents, and hence are created after them.  */
654
655   /* First register all the types in the cache.  This makes sure to
656      have the original structure in the type cycles when registering
657      them and computing hashes.  */
658   for (i = len; i-- > from;)
659     {
660       tree t = VEC_index (tree, cache->nodes, i);
661       if (t && TYPE_P (t))
662         gimple_register_type (t);
663     }
664
665   /* Second fixup all trees in the new cache entries.  */
666   for (i = len; i-- > from;)
667     {
668       tree t = VEC_index (tree, cache->nodes, i);
669       tree oldt = t;
670       if (!t)
671         continue;
672
673       /* First fixup the fields of T.  */
674       lto_fixup_types (t);
675
676       if (!TYPE_P (t))
677         continue;
678
679       /* Now try to find a canonical variant of T itself.  */
680       t = gimple_register_type (t);
681
682       if (t == oldt)
683         {
684           /* The following re-creates proper variant lists while fixing up
685              the variant leaders.  We do not stream TYPE_NEXT_VARIANT so the
686              variant list state before fixup is broken.  */
687           tree tem, mv;
688
689           /* Remove us from our main variant list if we are not the
690              variant leader.  */
691           if (TYPE_MAIN_VARIANT (t) != t)
692             {
693               tem = TYPE_MAIN_VARIANT (t);
694               while (tem && TYPE_NEXT_VARIANT (tem) != t)
695                 tem = TYPE_NEXT_VARIANT (tem);
696               if (tem)
697                 TYPE_NEXT_VARIANT (tem) = TYPE_NEXT_VARIANT (t);
698               TYPE_NEXT_VARIANT (t) = NULL_TREE;
699             }
700
701           /* Query our new main variant.  */
702           mv = gimple_register_type (TYPE_MAIN_VARIANT (t));
703
704           /* If we were the variant leader and we get replaced ourselves drop
705              all variants from our list.  */
706           if (TYPE_MAIN_VARIANT (t) == t
707               && mv != t)
708             {
709               tem = t;
710               while (tem)
711                 {
712                   tree tem2 = TYPE_NEXT_VARIANT (tem);
713                   TYPE_NEXT_VARIANT (tem) = NULL_TREE;
714                   tem = tem2;
715                 }
716             }
717
718           /* If we are not our own variant leader link us into our new leaders
719              variant list.  */
720           if (mv != t)
721             {
722               TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (mv);
723               TYPE_NEXT_VARIANT (mv) = t;
724               if (RECORD_OR_UNION_TYPE_P (t))
725                 TYPE_BINFO (t) = TYPE_BINFO (mv);
726             }
727
728           /* Finally adjust our main variant and fix it up.  */
729           TYPE_MAIN_VARIANT (t) = mv;
730
731           /* The following reconstructs the pointer chains
732              of the new pointed-to type if we are a main variant.  We do
733              not stream those so they are broken before fixup.  */
734           if (TREE_CODE (t) == POINTER_TYPE
735               && TYPE_MAIN_VARIANT (t) == t)
736             {
737               TYPE_NEXT_PTR_TO (t) = TYPE_POINTER_TO (TREE_TYPE (t));
738               TYPE_POINTER_TO (TREE_TYPE (t)) = t;
739             }
740           else if (TREE_CODE (t) == REFERENCE_TYPE
741                    && TYPE_MAIN_VARIANT (t) == t)
742             {
743               TYPE_NEXT_REF_TO (t) = TYPE_REFERENCE_TO (TREE_TYPE (t));
744               TYPE_REFERENCE_TO (TREE_TYPE (t)) = t;
745             }
746         }
747
748       else
749         {
750           if (RECORD_OR_UNION_TYPE_P (t))
751             {
752               tree f1, f2;
753               if (TYPE_FIELDS (t) != TYPE_FIELDS (oldt))
754                 for (f1 = TYPE_FIELDS (t), f2 = TYPE_FIELDS (oldt);
755                      f1 && f2; f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2))
756                   {
757                     unsigned ix;
758                     gcc_assert (f1 != f2 && DECL_NAME (f1) == DECL_NAME (f2));
759                     if (!lto_streamer_cache_lookup (cache, f2, &ix))
760                       gcc_unreachable ();
761                     /* If we're going to replace an element which we'd
762                        still visit in the next iterations, we wouldn't
763                        handle it, so do it here.  We do have to handle it
764                        even though the field_decl itself will be removed,
765                        as it could refer to e.g. integer_cst which we
766                        wouldn't reach via any other way, hence they
767                        (and their type) would stay uncollected.  */
768                     /* ???  We should rather make sure to replace all
769                        references to f2 with f1.  That means handling
770                        COMPONENT_REFs and CONSTRUCTOR elements in
771                        lto_fixup_types and special-case the field-decl
772                        operand handling.  */
773                     if (ix < i)
774                       lto_fixup_types (f2);
775                     lto_streamer_cache_insert_at (cache, f1, ix);
776                   }
777             }
778
779           /* If we found a tree that is equal to oldt replace it in the
780              cache, so that further users (in the various LTO sections)
781              make use of it.  */
782           lto_streamer_cache_insert_at (cache, t, i);
783         }
784     }
785
786   /* Finally compute the canonical type of all TREE_TYPEs and register
787      VAR_DECL and FUNCTION_DECL nodes in the symbol table.
788      From this point there are no longer any types with
789      TYPE_STRUCTURAL_EQUALITY_P and its type-based alias problems.
790      This step requires the TYPE_POINTER_TO lists being present, so
791      make sure it is done last.  */
792   for (i = len; i-- > from;)
793     {
794       tree t = VEC_index (tree, cache->nodes, i);
795       if (t == NULL_TREE)
796         continue;
797
798       if (TREE_CODE (t) == VAR_DECL)
799         lto_register_var_decl_in_symtab (data_in, t);
800       else if (TREE_CODE (t) == FUNCTION_DECL && !DECL_BUILT_IN (t))
801         lto_register_function_decl_in_symtab (data_in, t);
802       else if (TYPE_P (t) && !TYPE_CANONICAL (t))
803         TYPE_CANONICAL (t) = gimple_register_canonical_type (t);
804     }
805 }
806
807
808 /* Read all the symbols from buffer DATA, using descriptors in DECL_DATA.
809    RESOLUTIONS is the set of symbols picked by the linker (read from the
810    resolution file when the linker plugin is being used).  */
811
812 static void
813 lto_read_decls (struct lto_file_decl_data *decl_data, const void *data,
814                 VEC(ld_plugin_symbol_resolution_t,heap) *resolutions)
815 {
816   const struct lto_decl_header *header = (const struct lto_decl_header *) data;
817   const int32_t decl_offset = sizeof (struct lto_decl_header);
818   const int32_t main_offset = decl_offset + header->decl_state_size;
819   const int32_t string_offset = main_offset + header->main_size;
820   struct lto_input_block ib_main;
821   struct data_in *data_in;
822   unsigned int i;
823   const uint32_t *data_ptr, *data_end;
824   uint32_t num_decl_states;
825
826   LTO_INIT_INPUT_BLOCK (ib_main, (const char *) data + main_offset, 0,
827                         header->main_size);
828
829   data_in = lto_data_in_create (decl_data, (const char *) data + string_offset,
830                                 header->string_size, resolutions);
831
832   /* Read the global declarations and types.  */
833   while (ib_main.p < ib_main.len)
834     {
835       tree t;
836       unsigned from = VEC_length (tree, data_in->reader_cache->nodes);
837       t = stream_read_tree (&ib_main, data_in);
838       gcc_assert (t && ib_main.p <= ib_main.len);
839       uniquify_nodes (data_in, from);
840     }
841
842   /* Read in lto_in_decl_state objects.  */
843   data_ptr = (const uint32_t *) ((const char*) data + decl_offset); 
844   data_end =
845      (const uint32_t *) ((const char*) data_ptr + header->decl_state_size);
846   num_decl_states = *data_ptr++;
847   
848   gcc_assert (num_decl_states > 0);
849   decl_data->global_decl_state = lto_new_in_decl_state ();
850   data_ptr = lto_read_in_decl_state (data_in, data_ptr,
851                                      decl_data->global_decl_state);
852
853   /* Read in per-function decl states and enter them in hash table.  */
854   decl_data->function_decl_states =
855     htab_create_ggc (37, lto_hash_in_decl_state, lto_eq_in_decl_state, NULL);
856
857   for (i = 1; i < num_decl_states; i++)
858     {
859       struct lto_in_decl_state *state = lto_new_in_decl_state ();
860       void **slot;
861
862       data_ptr = lto_read_in_decl_state (data_in, data_ptr, state);
863       slot = htab_find_slot (decl_data->function_decl_states, state, INSERT);
864       gcc_assert (*slot == NULL);
865       *slot = state;
866     }
867
868   if (data_ptr != data_end)
869     internal_error ("bytecode stream: garbage at the end of symbols section");
870   
871   /* Set the current decl state to be the global state. */
872   decl_data->current_decl_state = decl_data->global_decl_state;
873
874   lto_data_in_delete (data_in);
875 }
876
877 /* strtoll is not portable. */
878 int64_t
879 lto_parse_hex (const char *p) {
880   uint64_t ret = 0;
881   for (; *p != '\0'; ++p)
882     {
883       char c = *p;
884       unsigned char part;
885       ret <<= 4;
886       if (c >= '0' && c <= '9')
887         part = c - '0';
888       else if (c >= 'a' && c <= 'f')
889         part = c - 'a' + 10;
890       else if (c >= 'A' && c <= 'F')
891         part = c - 'A' + 10;
892       else
893         internal_error ("could not parse hex number");
894       ret |= part;
895     }
896   return ret;
897 }
898
899 /* Read resolution for file named FILE_NAME. The resolution is read from
900    RESOLUTION. */
901
902 static void
903 lto_resolution_read (splay_tree file_ids, FILE *resolution, lto_file *file)
904 {
905   /* We require that objects in the resolution file are in the same
906      order as the lto1 command line. */
907   unsigned int name_len;
908   char *obj_name;
909   unsigned int num_symbols;
910   unsigned int i;
911   struct lto_file_decl_data *file_data;
912   unsigned max_index = 0;
913   splay_tree_node nd = NULL; 
914
915   if (!resolution)
916     return;
917
918   name_len = strlen (file->filename);
919   obj_name = XNEWVEC (char, name_len + 1);
920   fscanf (resolution, " ");   /* Read white space. */
921
922   fread (obj_name, sizeof (char), name_len, resolution);
923   obj_name[name_len] = '\0';
924   if (filename_cmp (obj_name, file->filename) != 0)
925     internal_error ("unexpected file name %s in linker resolution file. "
926                     "Expected %s", obj_name, file->filename);
927   if (file->offset != 0)
928     {
929       int t;
930       char offset_p[17];
931       int64_t offset;
932       t = fscanf (resolution, "@0x%16s", offset_p);
933       if (t != 1)
934         internal_error ("could not parse file offset");
935       offset = lto_parse_hex (offset_p);
936       if (offset != file->offset)
937         internal_error ("unexpected offset");
938     }
939
940   free (obj_name);
941
942   fscanf (resolution, "%u", &num_symbols);
943
944   for (i = 0; i < num_symbols; i++)
945     {
946       int t;
947       unsigned index, id;
948       char r_str[27];
949       enum ld_plugin_symbol_resolution r = (enum ld_plugin_symbol_resolution) 0;
950       unsigned int j;
951       unsigned int lto_resolution_str_len =
952         sizeof (lto_resolution_str) / sizeof (char *);
953
954       t = fscanf (resolution, "%u %x %26s %*[^\n]\n", &index, &id, r_str);
955       if (t != 3)
956         internal_error ("invalid line in the resolution file");
957       if (index > max_index)
958         max_index = index;
959
960       for (j = 0; j < lto_resolution_str_len; j++)
961         {
962           if (strcmp (lto_resolution_str[j], r_str) == 0)
963             {
964               r = (enum ld_plugin_symbol_resolution) j;
965               break;
966             }
967         }
968       if (j == lto_resolution_str_len)
969         internal_error ("invalid resolution in the resolution file");
970
971       if (!(nd && nd->key == id))
972         {
973           nd = splay_tree_lookup (file_ids, id);
974           if (nd == NULL)
975             internal_error ("resolution sub id %x not in object file", id);
976         }
977
978       file_data = (struct lto_file_decl_data *)nd->value;
979       if (cgraph_dump_file)
980         fprintf (cgraph_dump_file, "Adding resolution %u %u to id %x\n",
981                  index, r, file_data->id);
982       VEC_safe_grow_cleared (ld_plugin_symbol_resolution_t, heap, 
983                              file_data->resolutions,
984                              max_index + 1);
985       VEC_replace (ld_plugin_symbol_resolution_t, 
986                    file_data->resolutions, index, r);
987     }
988 }
989
990 /* Is the name for a id'ed LTO section? */
991
992 static int 
993 lto_section_with_id (const char *name, unsigned *id)
994 {
995   const char *s;
996
997   if (strncmp (name, LTO_SECTION_NAME_PREFIX, strlen (LTO_SECTION_NAME_PREFIX)))
998     return 0;
999   s = strrchr (name, '.');
1000   return s && sscanf (s, ".%x", id) == 1;
1001 }
1002
1003 /* Create file_data of each sub file id */
1004
1005 static int 
1006 create_subid_section_table (void **slot, void *data)
1007 {
1008   struct lto_section_slot s_slot, *new_slot;
1009   struct lto_section_slot *ls = *(struct lto_section_slot **)slot;
1010   splay_tree file_ids = (splay_tree)data;
1011   unsigned id;
1012   splay_tree_node nd;
1013   void **hash_slot;
1014   char *new_name;
1015   struct lto_file_decl_data *file_data;
1016
1017   if (!lto_section_with_id (ls->name, &id))
1018     return 1;
1019   
1020   /* Find hash table of sub module id */
1021   nd = splay_tree_lookup (file_ids, id);
1022   if (nd != NULL)
1023     {
1024       file_data = (struct lto_file_decl_data *)nd->value;
1025     }
1026   else
1027     {
1028       file_data = ggc_alloc_lto_file_decl_data ();
1029       memset(file_data, 0, sizeof (struct lto_file_decl_data));
1030       file_data->id = id;
1031       file_data->section_hash_table = lto_obj_create_section_hash_table ();;
1032       splay_tree_insert (file_ids, id, (splay_tree_value)file_data);
1033     }
1034
1035   /* Copy section into sub module hash table */
1036   new_name = XDUPVEC (char, ls->name, strlen (ls->name) + 1);
1037   s_slot.name = new_name;
1038   hash_slot = htab_find_slot (file_data->section_hash_table, &s_slot, INSERT);
1039   gcc_assert (*hash_slot == NULL);
1040
1041   new_slot = XDUP (struct lto_section_slot, ls);
1042   new_slot->name = new_name;
1043   *hash_slot = new_slot;
1044   return 1;
1045 }
1046
1047 /* Read declarations and other initializations for a FILE_DATA. */
1048
1049 static void
1050 lto_file_finalize (struct lto_file_decl_data *file_data, lto_file *file)
1051 {
1052   const char *data;
1053   size_t len;
1054
1055   file_data->renaming_hash_table = lto_create_renaming_table ();
1056   file_data->file_name = file->filename;
1057   data = lto_get_section_data (file_data, LTO_section_decls, NULL, &len);
1058   if (data == NULL)
1059     {
1060       internal_error ("cannot read LTO decls from %s", file_data->file_name);
1061       return;
1062     }
1063   lto_read_decls (file_data, data, file_data->resolutions);
1064   lto_free_section_data (file_data, LTO_section_decls, NULL, data, len);
1065 }
1066
1067 struct lwstate
1068 {
1069   lto_file *file;
1070   struct lto_file_decl_data **file_data;
1071   int *count;
1072 };
1073
1074 /* Traverse ids and create a list of file_datas out of it. */      
1075
1076 static int lto_create_files_from_ids (splay_tree_node node, void *data)
1077 {
1078   struct lwstate *lw = (struct lwstate *)data;
1079   struct lto_file_decl_data *file_data = (struct lto_file_decl_data *)node->value;
1080
1081   lto_file_finalize (file_data, lw->file);
1082   if (cgraph_dump_file)
1083     fprintf (cgraph_dump_file, "Creating file %s with sub id %x\n", 
1084              file_data->file_name, file_data->id);
1085   file_data->next = *lw->file_data;
1086   *lw->file_data = file_data;
1087   (*lw->count)++;
1088   return 0;
1089 }
1090
1091 /* Generate a TREE representation for all types and external decls
1092    entities in FILE.  
1093
1094    Read all of the globals out of the file.  Then read the cgraph
1095    and process the .o index into the cgraph nodes so that it can open
1096    the .o file to load the functions and ipa information.   */
1097
1098 static struct lto_file_decl_data *
1099 lto_file_read (lto_file *file, FILE *resolution_file, int *count)
1100 {
1101   struct lto_file_decl_data *file_data = NULL;
1102   splay_tree file_ids;
1103   htab_t section_hash_table;
1104   struct lwstate state;
1105   
1106   section_hash_table = lto_obj_build_section_table (file);
1107
1108   /* Find all sub modules in the object and put their sections into new hash
1109      tables in a splay tree. */
1110   file_ids = splay_tree_new (splay_tree_compare_ints, NULL, NULL);
1111   htab_traverse (section_hash_table, create_subid_section_table, file_ids);
1112   
1113   /* Add resolutions to file ids */
1114   lto_resolution_read (file_ids, resolution_file, file);
1115
1116   /* Finalize each lto file for each submodule in the merged object
1117      and create list for returning. */
1118   state.file = file;
1119   state.file_data = &file_data;
1120   state.count = count;
1121   splay_tree_foreach (file_ids, lto_create_files_from_ids, &state);
1122     
1123   splay_tree_delete (file_ids);
1124   htab_delete (section_hash_table);
1125
1126   return file_data;
1127 }
1128
1129 #if HAVE_MMAP_FILE && HAVE_SYSCONF && defined _SC_PAGE_SIZE
1130 #define LTO_MMAP_IO 1
1131 #endif
1132
1133 #if LTO_MMAP_IO
1134 /* Page size of machine is used for mmap and munmap calls.  */
1135 static size_t page_mask;
1136 #endif
1137
1138 /* Get the section data of length LEN from FILENAME starting at
1139    OFFSET.  The data segment must be freed by the caller when the
1140    caller is finished.  Returns NULL if all was not well.  */
1141
1142 static char *
1143 lto_read_section_data (struct lto_file_decl_data *file_data,
1144                        intptr_t offset, size_t len)
1145 {
1146   char *result;
1147   static int fd = -1;
1148   static char *fd_name;
1149 #if LTO_MMAP_IO
1150   intptr_t computed_len;
1151   intptr_t computed_offset;
1152   intptr_t diff;
1153 #endif
1154
1155   /* Keep a single-entry file-descriptor cache.  The last file we
1156      touched will get closed at exit.
1157      ???  Eventually we want to add a more sophisticated larger cache
1158      or rather fix function body streaming to not stream them in
1159      practically random order.  */
1160   if (fd != -1
1161       && filename_cmp (fd_name, file_data->file_name) != 0)
1162     {
1163       free (fd_name);
1164       close (fd);
1165       fd = -1;
1166     }
1167   if (fd == -1)
1168     {
1169       fd = open (file_data->file_name, O_RDONLY|O_BINARY);
1170       if (fd == -1)
1171         return NULL;
1172       fd_name = xstrdup (file_data->file_name);
1173     }
1174
1175 #if LTO_MMAP_IO
1176   if (!page_mask)
1177     {
1178       size_t page_size = sysconf (_SC_PAGE_SIZE);
1179       page_mask = ~(page_size - 1);
1180     }
1181
1182   computed_offset = offset & page_mask;
1183   diff = offset - computed_offset;
1184   computed_len = len + diff;
1185
1186   result = (char *) mmap (NULL, computed_len, PROT_READ, MAP_PRIVATE,
1187                           fd, computed_offset);
1188   if (result == MAP_FAILED)
1189     return NULL;
1190
1191   return result + diff;
1192 #else
1193   result = (char *) xmalloc (len);
1194   if (lseek (fd, offset, SEEK_SET) != offset
1195       || read (fd, result, len) != (ssize_t) len)
1196     {
1197       free (result);
1198       result = NULL;
1199     }
1200 #ifdef __MINGW32__
1201   /* Native windows doesn't supports delayed unlink on opened file. So
1202      we close file here again. This produces higher I/O load, but at least
1203      it prevents to have dangling file handles preventing unlink.  */
1204   free (fd_name);
1205   fd_name = NULL;
1206   close (fd);
1207   fd = -1;
1208 #endif
1209   return result;
1210 #endif
1211 }    
1212
1213
1214 /* Get the section data from FILE_DATA of SECTION_TYPE with NAME.
1215    NAME will be NULL unless the section type is for a function
1216    body.  */
1217
1218 static const char *
1219 get_section_data (struct lto_file_decl_data *file_data,
1220                       enum lto_section_type section_type,
1221                       const char *name,
1222                       size_t *len)
1223 {
1224   htab_t section_hash_table = file_data->section_hash_table;
1225   struct lto_section_slot *f_slot;
1226   struct lto_section_slot s_slot;
1227   const char *section_name = lto_get_section_name (section_type, name, file_data);
1228   char *data = NULL;
1229
1230   *len = 0;
1231   s_slot.name = section_name;
1232   f_slot = (struct lto_section_slot *) htab_find (section_hash_table, &s_slot);
1233   if (f_slot)
1234     {
1235       data = lto_read_section_data (file_data, f_slot->start, f_slot->len);
1236       *len = f_slot->len;
1237     }
1238
1239   free (CONST_CAST (char *, section_name));
1240   return data;
1241 }
1242
1243
1244 /* Free the section data from FILE_DATA of SECTION_TYPE with NAME that
1245    starts at OFFSET and has LEN bytes.  */
1246
1247 static void
1248 free_section_data (struct lto_file_decl_data *file_data ATTRIBUTE_UNUSED,
1249                    enum lto_section_type section_type ATTRIBUTE_UNUSED,
1250                    const char *name ATTRIBUTE_UNUSED,
1251                    const char *offset, size_t len ATTRIBUTE_UNUSED)
1252 {
1253 #if LTO_MMAP_IO
1254   intptr_t computed_len;
1255   intptr_t computed_offset;
1256   intptr_t diff;
1257 #endif
1258
1259 #if LTO_MMAP_IO
1260   computed_offset = ((intptr_t) offset) & page_mask;
1261   diff = (intptr_t) offset - computed_offset;
1262   computed_len = len + diff;
1263
1264   munmap ((caddr_t) computed_offset, computed_len);
1265 #else
1266   free (CONST_CAST(char *, offset));
1267 #endif
1268 }
1269
1270 /* Structure describing ltrans partitions.  */
1271
1272 struct ltrans_partition_def
1273 {
1274   cgraph_node_set cgraph_set;
1275   varpool_node_set varpool_set;
1276   const char * name;
1277   int insns;
1278 };
1279
1280 typedef struct ltrans_partition_def *ltrans_partition;
1281 DEF_VEC_P(ltrans_partition);
1282 DEF_VEC_ALLOC_P(ltrans_partition,heap);
1283
1284 static VEC(ltrans_partition, heap) *ltrans_partitions;
1285
1286 static void add_cgraph_node_to_partition (ltrans_partition part, struct cgraph_node *node);
1287 static void add_varpool_node_to_partition (ltrans_partition part, struct varpool_node *vnode);
1288
1289 /* Create new partition with name NAME.  */
1290 static ltrans_partition
1291 new_partition (const char *name)
1292 {
1293   ltrans_partition part = XCNEW (struct ltrans_partition_def);
1294   part->cgraph_set = cgraph_node_set_new ();
1295   part->varpool_set = varpool_node_set_new ();
1296   part->name = name;
1297   part->insns = 0;
1298   VEC_safe_push (ltrans_partition, heap, ltrans_partitions, part);
1299   return part;
1300 }
1301
1302 /* Free memory used by ltrans datastructures.  */
1303 static void
1304 free_ltrans_partitions (void)
1305 {
1306   unsigned int idx;
1307   ltrans_partition part;
1308   for (idx = 0; VEC_iterate (ltrans_partition, ltrans_partitions, idx, part); idx++)
1309     {
1310       free_cgraph_node_set (part->cgraph_set);
1311       free (part);
1312     }
1313   VEC_free (ltrans_partition, heap, ltrans_partitions);
1314 }
1315
1316 /* See all references that go to comdat objects and bring them into partition too.  */
1317 static void
1318 add_references_to_partition (ltrans_partition part, struct ipa_ref_list *refs)
1319 {
1320   int i;
1321   struct ipa_ref *ref;
1322   for (i = 0; ipa_ref_list_reference_iterate (refs, i, ref); i++)
1323     {
1324       if (ref->refered_type == IPA_REF_CGRAPH
1325           && DECL_COMDAT (cgraph_function_node (ipa_ref_node (ref), NULL)->decl)
1326           && !cgraph_node_in_set_p (ipa_ref_node (ref), part->cgraph_set))
1327         add_cgraph_node_to_partition (part, ipa_ref_node (ref));
1328       else
1329         if (ref->refered_type == IPA_REF_VARPOOL
1330             && DECL_COMDAT (ipa_ref_varpool_node (ref)->decl)
1331             && !varpool_node_in_set_p (ipa_ref_varpool_node (ref), part->varpool_set))
1332           add_varpool_node_to_partition (part, ipa_ref_varpool_node (ref));
1333     }
1334 }
1335
1336 /* Worker for add_cgraph_node_to_partition.  */
1337
1338 static bool
1339 add_cgraph_node_to_partition_1 (struct cgraph_node *node, void *data)
1340 {
1341   ltrans_partition part = (ltrans_partition) data;
1342
1343   /* non-COMDAT aliases of COMDAT functions needs to be output just once.  */
1344   if (!DECL_COMDAT (node->decl)
1345       && !node->global.inlined_to
1346       && node->aux)
1347     {
1348       gcc_assert (node->thunk.thunk_p || node->alias);
1349       return false;
1350     }
1351
1352   if (node->aux)
1353     {
1354       node->in_other_partition = 1;
1355       if (cgraph_dump_file)
1356         fprintf (cgraph_dump_file, "Node %s/%i now used in multiple partitions\n",
1357                  cgraph_node_name (node), node->uid);
1358     }
1359   node->aux = (void *)((size_t)node->aux + 1);
1360   cgraph_node_set_add (part->cgraph_set, node);
1361   return false;
1362 }
1363
1364 /* Add NODE to partition as well as the inline callees and referred comdats into partition PART. */
1365
1366 static void
1367 add_cgraph_node_to_partition (ltrans_partition part, struct cgraph_node *node)
1368 {
1369   struct cgraph_edge *e;
1370   cgraph_node_set_iterator csi;
1371   struct cgraph_node *n;
1372
1373   /* We always decide on functions, not associated thunks and aliases.  */
1374   node = cgraph_function_node (node, NULL);
1375
1376   /* If NODE is already there, we have nothing to do.  */
1377   csi = cgraph_node_set_find (part->cgraph_set, node);
1378   if (!csi_end_p (csi))
1379     return;
1380
1381   cgraph_for_node_thunks_and_aliases (node, add_cgraph_node_to_partition_1, part, true);
1382
1383   part->insns += inline_summary (node)->self_size;
1384
1385
1386   cgraph_node_set_add (part->cgraph_set, node);
1387
1388   for (e = node->callees; e; e = e->next_callee)
1389     if ((!e->inline_failed
1390          || DECL_COMDAT (cgraph_function_node (e->callee, NULL)->decl))
1391         && !cgraph_node_in_set_p (e->callee, part->cgraph_set))
1392       add_cgraph_node_to_partition (part, e->callee);
1393
1394   add_references_to_partition (part, &node->ref_list);
1395
1396   if (node->same_comdat_group)
1397     for (n = node->same_comdat_group; n != node; n = n->same_comdat_group)
1398       add_cgraph_node_to_partition (part, n);
1399 }
1400
1401 /* Add VNODE to partition as well as comdat references partition PART. */
1402
1403 static void
1404 add_varpool_node_to_partition (ltrans_partition part, struct varpool_node *vnode)
1405 {
1406   varpool_node_set_iterator vsi;
1407
1408   /* If NODE is already there, we have nothing to do.  */
1409   vsi = varpool_node_set_find (part->varpool_set, vnode);
1410   if (!vsi_end_p (vsi))
1411     return;
1412
1413   varpool_node_set_add (part->varpool_set, vnode);
1414
1415   if (vnode->aux)
1416     {
1417       vnode->in_other_partition = 1;
1418       if (cgraph_dump_file)
1419         fprintf (cgraph_dump_file, "Varpool node %s now used in multiple partitions\n",
1420                  varpool_node_name (vnode));
1421     }
1422   vnode->aux = (void *)((size_t)vnode->aux + 1);
1423
1424   add_references_to_partition (part, &vnode->ref_list);
1425
1426   if (vnode->same_comdat_group
1427       && !varpool_node_in_set_p (vnode->same_comdat_group, part->varpool_set))
1428     add_varpool_node_to_partition (part, vnode->same_comdat_group);
1429 }
1430
1431 /* Undo all additions until number of cgraph nodes in PARITION is N_CGRAPH_NODES
1432    and number of varpool nodes is N_VARPOOL_NODES.  */
1433
1434 static void
1435 undo_partition (ltrans_partition partition, unsigned int n_cgraph_nodes,
1436                 unsigned int n_varpool_nodes)
1437 {
1438   while (VEC_length (cgraph_node_ptr, partition->cgraph_set->nodes) >
1439          n_cgraph_nodes)
1440     {
1441       struct cgraph_node *node = VEC_index (cgraph_node_ptr,
1442                                             partition->cgraph_set->nodes,
1443                                             n_cgraph_nodes);
1444       partition->insns -= inline_summary (node)->self_size;
1445       cgraph_node_set_remove (partition->cgraph_set, node);
1446       node->aux = (void *)((size_t)node->aux - 1);
1447     }
1448   while (VEC_length (varpool_node_ptr, partition->varpool_set->nodes) >
1449          n_varpool_nodes)
1450     {
1451       struct varpool_node *node = VEC_index (varpool_node_ptr,
1452                                              partition->varpool_set->nodes,
1453                                              n_varpool_nodes);
1454       varpool_node_set_remove (partition->varpool_set, node);
1455       node->aux = (void *)((size_t)node->aux - 1);
1456     }
1457 }
1458
1459 /* Return true if NODE should be partitioned.
1460    This means that partitioning algorithm should put NODE into one of partitions.
1461    This apply to most functions with bodies.  Functions that are not partitions
1462    are put into every unit needing them.  This is the case of i.e. COMDATs.  */
1463
1464 static bool
1465 partition_cgraph_node_p (struct cgraph_node *node)
1466 {
1467   /* We will get proper partition based on function they are inlined to.  */
1468   if (node->global.inlined_to)
1469     return false;
1470   /* Nodes without a body do not need partitioning.  */
1471   if (!node->analyzed)
1472     return false;
1473   /* Extern inlines and comdat are always only in partitions they are needed.  */
1474   if (DECL_EXTERNAL (node->decl)
1475       || (DECL_COMDAT (node->decl)
1476           && !cgraph_used_from_object_file_p (node)))
1477     return false;
1478   if (lookup_attribute ("weakref", DECL_ATTRIBUTES (node->decl)))
1479     return false;
1480   return true;
1481 }
1482
1483 /* Return true if VNODE should be partitioned. 
1484    This means that partitioning algorithm should put VNODE into one of partitions. */
1485
1486 static bool
1487 partition_varpool_node_p (struct varpool_node *vnode)
1488 {
1489   if (vnode->alias || !vnode->needed)
1490     return false;
1491   /* Constant pool and comdat are always only in partitions they are needed.  */
1492   if (DECL_IN_CONSTANT_POOL (vnode->decl)
1493       || (DECL_COMDAT (vnode->decl)
1494           && !vnode->force_output
1495           && !varpool_used_from_object_file_p (vnode)))
1496     return false;
1497   if (lookup_attribute ("weakref", DECL_ATTRIBUTES (vnode->decl)))
1498     return false;
1499   return true;
1500 }
1501
1502 /* Group cgrah nodes by input files.  This is used mainly for testing
1503    right now.  */
1504
1505 static void
1506 lto_1_to_1_map (void)
1507 {
1508   struct cgraph_node *node;
1509   struct varpool_node *vnode;
1510   struct lto_file_decl_data *file_data;
1511   struct pointer_map_t *pmap;
1512   ltrans_partition partition;
1513   void **slot;
1514   int npartitions = 0;
1515
1516   timevar_push (TV_WHOPR_WPA);
1517
1518   pmap = pointer_map_create ();
1519
1520   for (node = cgraph_nodes; node; node = node->next)
1521     {
1522       if (!partition_cgraph_node_p (node)
1523           || node->aux)
1524         continue;
1525
1526       file_data = node->local.lto_file_data;
1527
1528       if (file_data)
1529         {
1530           slot = pointer_map_contains (pmap, file_data);
1531           if (slot)
1532             partition = (ltrans_partition) *slot;
1533           else
1534             {
1535               partition = new_partition (file_data->file_name);
1536               slot = pointer_map_insert (pmap, file_data);
1537               *slot = partition;
1538               npartitions++;
1539             }
1540         }
1541       else if (!file_data
1542                && VEC_length (ltrans_partition, ltrans_partitions))
1543         partition = VEC_index (ltrans_partition, ltrans_partitions, 0);
1544       else
1545         {
1546           partition = new_partition ("");
1547           slot = pointer_map_insert (pmap, NULL);
1548           *slot = partition;
1549           npartitions++;
1550         }
1551
1552       add_cgraph_node_to_partition (partition, node);
1553     }
1554
1555   for (vnode = varpool_nodes; vnode; vnode = vnode->next)
1556     {
1557       if (!partition_varpool_node_p (vnode)
1558           || vnode->aux)
1559         continue;
1560       file_data = vnode->lto_file_data;
1561       slot = pointer_map_contains (pmap, file_data);
1562       if (slot)
1563         partition = (ltrans_partition) *slot;
1564       else
1565         {
1566           partition = new_partition (file_data->file_name);
1567           slot = pointer_map_insert (pmap, file_data);
1568           *slot = partition;
1569           npartitions++;
1570         }
1571
1572       add_varpool_node_to_partition (partition, vnode);
1573     }
1574   for (node = cgraph_nodes; node; node = node->next)
1575     node->aux = NULL;
1576   for (vnode = varpool_nodes; vnode; vnode = vnode->next)
1577     vnode->aux = NULL;
1578
1579   /* If the cgraph is empty, create one cgraph node set so that there is still
1580      an output file for any variables that need to be exported in a DSO.  */
1581   if (!npartitions)
1582     new_partition ("empty");
1583
1584   pointer_map_destroy (pmap);
1585
1586   timevar_pop (TV_WHOPR_WPA);
1587
1588   lto_stats.num_cgraph_partitions += VEC_length (ltrans_partition, 
1589                                                  ltrans_partitions);
1590 }
1591
1592
1593 /* Group cgraph nodes into equally-sized partitions.
1594
1595    The partitioning algorithm is simple: nodes are taken in predefined order.
1596    The order corresponds to the order we want functions to have in the final
1597    output.  In the future this will be given by function reordering pass, but
1598    at the moment we use the topological order, which is a good approximation.
1599
1600    The goal is to partition this linear order into intervals (partitions) so
1601    that all the partitions have approximately the same size and the number of
1602    callgraph or IPA reference edges crossing boundaries is minimal.
1603
1604    This is a lot faster (O(n) in size of callgraph) than algorithms doing
1605    priority-based graph clustering that are generally O(n^2) and, since
1606    WHOPR is designed to make things go well across partitions, it leads
1607    to good results.
1608
1609    We compute the expected size of a partition as:
1610
1611      max (total_size / lto_partitions, min_partition_size)
1612
1613    We use dynamic expected size of partition so small programs are partitioned
1614    into enough partitions to allow use of multiple CPUs, while large programs
1615    are not partitioned too much.  Creating too many partitions significantly
1616    increases the streaming overhead.
1617
1618    In the future, we would like to bound the maximal size of partitions so as
1619    to prevent the LTRANS stage from consuming too much memory.  At the moment,
1620    however, the WPA stage is the most memory intensive for large benchmarks,
1621    since too many types and declarations are read into memory.
1622
1623    The function implements a simple greedy algorithm.  Nodes are being added
1624    to the current partition until after 3/4 of the expected partition size is
1625    reached.  Past this threshold, we keep track of boundary size (number of
1626    edges going to other partitions) and continue adding functions until after
1627    the current partition has grown to twice the expected partition size.  Then
1628    the process is undone to the point where the minimal ratio of boundary size
1629    and in-partition calls was reached.  */
1630
1631 static void
1632 lto_balanced_map (void)
1633 {
1634   int n_nodes = 0;
1635   struct cgraph_node **postorder =
1636     XCNEWVEC (struct cgraph_node *, cgraph_n_nodes);
1637   struct cgraph_node **order = XNEWVEC (struct cgraph_node *, cgraph_max_uid);
1638   int i, postorder_len;
1639   struct cgraph_node *node;
1640   int total_size = 0, best_total_size = 0;
1641   int partition_size;
1642   ltrans_partition partition;
1643   unsigned int last_visited_cgraph_node = 0, last_visited_varpool_node = 0;
1644   struct varpool_node *vnode;
1645   int cost = 0, internal = 0;
1646   int best_n_nodes = 0, best_n_varpool_nodes = 0, best_i = 0, best_cost =
1647     INT_MAX, best_internal = 0;
1648   int npartitions;
1649
1650   for (vnode = varpool_nodes; vnode; vnode = vnode->next)
1651     gcc_assert (!vnode->aux);
1652   /* Until we have better ordering facility, use toplogical order.
1653      Include only nodes we will partition and compute estimate of program
1654      size.  Note that since nodes that are not partitioned might be put into
1655      multiple partitions, this is just an estimate of real size.  This is why
1656      we keep partition_size updated after every partition is finalized.  */
1657   postorder_len = ipa_reverse_postorder (postorder);
1658   for (i = 0; i < postorder_len; i++)
1659     {
1660       node = postorder[i];
1661       if (partition_cgraph_node_p (node))
1662         {
1663           order[n_nodes++] = node;
1664           total_size += inline_summary (node)->size;
1665         }
1666     }
1667   free (postorder);
1668
1669   /* Compute partition size and create the first partition.  */
1670   partition_size = total_size / PARAM_VALUE (PARAM_LTO_PARTITIONS);
1671   if (partition_size < PARAM_VALUE (MIN_PARTITION_SIZE))
1672     partition_size = PARAM_VALUE (MIN_PARTITION_SIZE);
1673   npartitions = 1;
1674   partition = new_partition ("");
1675   if (cgraph_dump_file)
1676     fprintf (cgraph_dump_file, "Total unit size: %i, partition size: %i\n",
1677              total_size, partition_size);
1678
1679   for (i = 0; i < n_nodes; i++)
1680     {
1681       if (order[i]->aux)
1682         continue;
1683       add_cgraph_node_to_partition (partition, order[i]);
1684       total_size -= inline_summary (order[i])->size;
1685
1686       /* Once we added a new node to the partition, we also want to add
1687          all referenced variables unless they was already added into some
1688          earlier partition.
1689          add_cgraph_node_to_partition adds possibly multiple nodes and
1690          variables that are needed to satisfy needs of ORDER[i].
1691          We remember last visited cgraph and varpool node from last iteration
1692          of outer loop that allows us to process every new addition. 
1693
1694          At the same time we compute size of the boundary into COST.  Every
1695          callgraph or IPA reference edge leaving the partition contributes into
1696          COST.  Every edge inside partition was earlier computed as one leaving
1697          it and thus we need to subtract it from COST.  */
1698       while (last_visited_cgraph_node <
1699              VEC_length (cgraph_node_ptr, partition->cgraph_set->nodes)
1700              || last_visited_varpool_node < VEC_length (varpool_node_ptr,
1701                                                         partition->varpool_set->
1702                                                         nodes))
1703         {
1704           struct ipa_ref_list *refs;
1705           int j;
1706           struct ipa_ref *ref;
1707           bool cgraph_p = false;
1708
1709           if (last_visited_cgraph_node <
1710               VEC_length (cgraph_node_ptr, partition->cgraph_set->nodes))
1711             {
1712               struct cgraph_edge *edge;
1713
1714               cgraph_p = true;
1715               node = VEC_index (cgraph_node_ptr, partition->cgraph_set->nodes,
1716                                 last_visited_cgraph_node);
1717               refs = &node->ref_list;
1718
1719               last_visited_cgraph_node++;
1720
1721               gcc_assert (node->analyzed);
1722
1723               /* Compute boundary cost of callgrpah edges.  */
1724               for (edge = node->callees; edge; edge = edge->next_callee)
1725                 if (edge->callee->analyzed)
1726                   {
1727                     int edge_cost = edge->frequency;
1728                     cgraph_node_set_iterator csi;
1729
1730                     if (!edge_cost)
1731                       edge_cost = 1;
1732                     gcc_assert (edge_cost > 0);
1733                     csi = cgraph_node_set_find (partition->cgraph_set, edge->callee);
1734                     if (!csi_end_p (csi)
1735                         && csi.index < last_visited_cgraph_node - 1)
1736                       cost -= edge_cost, internal+= edge_cost;
1737                     else
1738                       cost += edge_cost;
1739                   }
1740               for (edge = node->callers; edge; edge = edge->next_caller)
1741                 {
1742                   int edge_cost = edge->frequency;
1743                   cgraph_node_set_iterator csi;
1744
1745                   gcc_assert (edge->caller->analyzed);
1746                   if (!edge_cost)
1747                     edge_cost = 1;
1748                   gcc_assert (edge_cost > 0);
1749                   csi = cgraph_node_set_find (partition->cgraph_set, edge->caller);
1750                   if (!csi_end_p (csi)
1751                       && csi.index < last_visited_cgraph_node)
1752                     cost -= edge_cost;
1753                   else
1754                     cost += edge_cost;
1755                 }
1756             }
1757           else
1758             {
1759               refs =
1760                 &VEC_index (varpool_node_ptr, partition->varpool_set->nodes,
1761                             last_visited_varpool_node)->ref_list;
1762               last_visited_varpool_node++;
1763             }
1764
1765           /* Compute boundary cost of IPA REF edges and at the same time look into
1766              variables referenced from current partition and try to add them.  */
1767           for (j = 0; ipa_ref_list_reference_iterate (refs, j, ref); j++)
1768             if (ref->refered_type == IPA_REF_VARPOOL)
1769               {
1770                 varpool_node_set_iterator vsi;
1771
1772                 vnode = ipa_ref_varpool_node (ref);
1773                 if (!vnode->finalized)
1774                   continue;
1775                 if (!vnode->aux && partition_varpool_node_p (vnode))
1776                   add_varpool_node_to_partition (partition, vnode);
1777                 vsi = varpool_node_set_find (partition->varpool_set, vnode);
1778                 if (!vsi_end_p (vsi)
1779                     && vsi.index < last_visited_varpool_node - !cgraph_p)
1780                   cost--, internal++;
1781                 else
1782                   cost++;
1783               }
1784             else
1785               {
1786                 cgraph_node_set_iterator csi;
1787
1788                 node = ipa_ref_node (ref);
1789                 if (!node->analyzed)
1790                   continue;
1791                 csi = cgraph_node_set_find (partition->cgraph_set, node);
1792                 if (!csi_end_p (csi)
1793                     && csi.index < last_visited_cgraph_node - cgraph_p)
1794                   cost--, internal++;
1795                 else
1796                   cost++;
1797               }
1798           for (j = 0; ipa_ref_list_refering_iterate (refs, j, ref); j++)
1799             if (ref->refering_type == IPA_REF_VARPOOL)
1800               {
1801                 varpool_node_set_iterator vsi;
1802
1803                 vnode = ipa_ref_refering_varpool_node (ref);
1804                 gcc_assert (vnode->finalized);
1805                 if (!vnode->aux && partition_varpool_node_p (vnode))
1806                   add_varpool_node_to_partition (partition, vnode);
1807                 vsi = varpool_node_set_find (partition->varpool_set, vnode);
1808                 if (!vsi_end_p (vsi)
1809                     && vsi.index < last_visited_varpool_node)
1810                   cost--;
1811                 else
1812                   cost++;
1813               }
1814             else
1815               {
1816                 cgraph_node_set_iterator csi;
1817
1818                 node = ipa_ref_refering_node (ref);
1819                 gcc_assert (node->analyzed);
1820                 csi = cgraph_node_set_find (partition->cgraph_set, node);
1821                 if (!csi_end_p (csi)
1822                     && csi.index < last_visited_cgraph_node)
1823                   cost--;
1824                 else
1825                   cost++;
1826               }
1827         }
1828
1829       /* If the partition is large enough, start looking for smallest boundary cost.  */
1830       if (partition->insns < partition_size * 3 / 4
1831           || best_cost == INT_MAX
1832           || ((!cost 
1833                || (best_internal * (HOST_WIDE_INT) cost
1834                    > (internal * (HOST_WIDE_INT)best_cost)))
1835               && partition->insns < partition_size * 5 / 4))
1836         {
1837           best_cost = cost;
1838           best_internal = internal;
1839           best_i = i;
1840           best_n_nodes = VEC_length (cgraph_node_ptr,
1841                                      partition->cgraph_set->nodes);
1842           best_n_varpool_nodes = VEC_length (varpool_node_ptr,
1843                                              partition->varpool_set->nodes);
1844           best_total_size = total_size;
1845         }
1846       if (cgraph_dump_file)
1847         fprintf (cgraph_dump_file, "Step %i: added %s/%i, size %i, cost %i/%i best %i/%i, step %i\n", i,
1848                  cgraph_node_name (order[i]), order[i]->uid, partition->insns, cost, internal,
1849                  best_cost, best_internal, best_i);
1850       /* Partition is too large, unwind into step when best cost was reached and
1851          start new partition.  */
1852       if (partition->insns > 2 * partition_size)
1853         {
1854           if (best_i != i)
1855             {
1856               if (cgraph_dump_file)
1857                 fprintf (cgraph_dump_file, "Unwinding %i insertions to step %i\n",
1858                          i - best_i, best_i);
1859               undo_partition (partition, best_n_nodes, best_n_varpool_nodes);
1860             }
1861           i = best_i;
1862           /* When we are finished, avoid creating empty partition.  */
1863           while (i < n_nodes - 1 && order[i + 1]->aux)
1864             i++;
1865           if (i == n_nodes - 1)
1866             break;
1867           partition = new_partition ("");
1868           last_visited_cgraph_node = 0;
1869           last_visited_varpool_node = 0;
1870           total_size = best_total_size;
1871           cost = 0;
1872
1873           if (cgraph_dump_file)
1874             fprintf (cgraph_dump_file, "New partition\n");
1875           best_n_nodes = 0;
1876           best_n_varpool_nodes = 0;
1877           best_cost = INT_MAX;
1878
1879           /* Since the size of partitions is just approximate, update the size after
1880              we finished current one.  */
1881           if (npartitions < PARAM_VALUE (PARAM_LTO_PARTITIONS))
1882             partition_size = total_size
1883               / (PARAM_VALUE (PARAM_LTO_PARTITIONS) - npartitions);
1884           else
1885             partition_size = INT_MAX;
1886
1887           if (partition_size < PARAM_VALUE (MIN_PARTITION_SIZE))
1888             partition_size = PARAM_VALUE (MIN_PARTITION_SIZE);
1889           npartitions ++;
1890         }
1891     }
1892
1893   /* Varables that are not reachable from the code go into last partition.  */
1894   for (vnode = varpool_nodes; vnode; vnode = vnode->next)
1895     if (partition_varpool_node_p (vnode) && !vnode->aux)
1896       add_varpool_node_to_partition (partition, vnode);
1897   free (order);
1898 }
1899
1900 /* Promote variable VNODE to be static.  */
1901
1902 static bool
1903 promote_var (struct varpool_node *vnode)
1904 {
1905   if (TREE_PUBLIC (vnode->decl) || DECL_EXTERNAL (vnode->decl))
1906     return false;
1907   gcc_assert (flag_wpa);
1908   TREE_PUBLIC (vnode->decl) = 1;
1909   DECL_VISIBILITY (vnode->decl) = VISIBILITY_HIDDEN;
1910   DECL_VISIBILITY_SPECIFIED (vnode->decl) = true;
1911   if (cgraph_dump_file)
1912     fprintf (cgraph_dump_file,
1913             "Promoting var as hidden: %s\n", varpool_node_name (vnode));
1914   return true;
1915 }
1916
1917 /* Promote function NODE to be static.  */
1918
1919 static bool
1920 promote_fn (struct cgraph_node *node)
1921 {
1922   gcc_assert (flag_wpa);
1923   if (TREE_PUBLIC (node->decl) || DECL_EXTERNAL (node->decl))
1924     return false;
1925   TREE_PUBLIC (node->decl) = 1;
1926   DECL_VISIBILITY (node->decl) = VISIBILITY_HIDDEN;
1927   DECL_VISIBILITY_SPECIFIED (node->decl) = true;
1928   if (cgraph_dump_file)
1929     fprintf (cgraph_dump_file,
1930              "Promoting function as hidden: %s/%i\n",
1931              cgraph_node_name (node), node->uid);
1932   return true;
1933 }
1934
1935 /* Find out all static decls that need to be promoted to global because
1936    of cross file sharing.  This function must be run in the WPA mode after
1937    all inlinees are added.  */
1938
1939 static void
1940 lto_promote_cross_file_statics (void)
1941 {
1942   struct varpool_node *vnode;
1943   unsigned i, n_sets;
1944   cgraph_node_set set;
1945   varpool_node_set vset;
1946   cgraph_node_set_iterator csi;
1947   varpool_node_set_iterator vsi;
1948   VEC(varpool_node_ptr, heap) *promoted_initializers = NULL;
1949   struct pointer_set_t *inserted = pointer_set_create ();
1950
1951   gcc_assert (flag_wpa);
1952
1953   n_sets = VEC_length (ltrans_partition, ltrans_partitions);
1954   for (i = 0; i < n_sets; i++)
1955     {
1956       ltrans_partition part
1957         = VEC_index (ltrans_partition, ltrans_partitions, i);
1958       set = part->cgraph_set;
1959       vset = part->varpool_set;
1960
1961       /* If node called or referred to from other partition, it needs to be
1962          globalized.  */
1963       for (csi = csi_start (set); !csi_end_p (csi); csi_next (&csi))
1964         {
1965           struct cgraph_node *node = csi_node (csi);
1966           if (node->local.externally_visible)
1967             continue;
1968           if (node->global.inlined_to)
1969             continue;
1970           if ((!DECL_EXTERNAL (node->decl) && !DECL_COMDAT (node->decl))
1971               && (referenced_from_other_partition_p (&node->ref_list, set, vset)
1972                   || reachable_from_other_partition_p (node, set)))
1973             promote_fn (node);
1974         }
1975       for (vsi = vsi_start (vset); !vsi_end_p (vsi); vsi_next (&vsi))
1976         {
1977           vnode = vsi_node (vsi);
1978           /* Constant pool references use internal labels and thus can not
1979              be made global.  It is sensible to keep those ltrans local to
1980              allow better optimization.  */
1981           if (!DECL_IN_CONSTANT_POOL (vnode->decl) && !DECL_COMDAT (vnode->decl)
1982               && !vnode->externally_visible && vnode->analyzed
1983               && referenced_from_other_partition_p (&vnode->ref_list,
1984                                                     set, vset))
1985             promote_var (vnode);
1986         }
1987
1988       /* We export the initializer of a read-only var into each partition
1989          referencing the var.  Folding might take declarations from the
1990          initializer and use them, so everything referenced from the
1991          initializer can be accessed from this partition after folding.
1992
1993          This means that we need to promote all variables and functions
1994          referenced from all initializers of read-only vars referenced
1995          from this partition that are not in this partition.  This needs
1996          to be done recursively.  */
1997       for (vnode = varpool_nodes; vnode; vnode = vnode->next)
1998         if (const_value_known_p (vnode->decl)
1999             && DECL_INITIAL (vnode->decl)
2000             && !varpool_node_in_set_p (vnode, vset)
2001             && referenced_from_this_partition_p (&vnode->ref_list, set, vset)
2002             && !pointer_set_insert (inserted, vnode))
2003         VEC_safe_push (varpool_node_ptr, heap, promoted_initializers, vnode);
2004
2005       while (!VEC_empty (varpool_node_ptr, promoted_initializers))
2006         {
2007           int i;
2008           struct ipa_ref *ref;
2009
2010           vnode = VEC_pop (varpool_node_ptr, promoted_initializers);
2011           for (i = 0;
2012                ipa_ref_list_reference_iterate (&vnode->ref_list, i, ref);
2013                i++)
2014             {
2015               if (ref->refered_type == IPA_REF_CGRAPH)
2016                 {
2017                   struct cgraph_node *n = ipa_ref_node (ref);
2018                   gcc_assert (!n->global.inlined_to);
2019                   if (!n->local.externally_visible
2020                       && !cgraph_node_in_set_p (n, set))
2021                     promote_fn (n);
2022                 }
2023               else
2024                 {
2025                   struct varpool_node *v = ipa_ref_varpool_node (ref);
2026                   if (varpool_node_in_set_p (v, vset))
2027                     continue;
2028
2029                   /* Constant pool references use internal labels and thus
2030                      cannot be made global.  It is sensible to keep those
2031                      ltrans local to allow better optimization.  */
2032                   if (DECL_IN_CONSTANT_POOL (v->decl))
2033                     {
2034                       if (!pointer_set_insert (inserted, vnode))
2035                         VEC_safe_push (varpool_node_ptr, heap,
2036                                        promoted_initializers, v);
2037                     }
2038                   else if (!v->externally_visible && v->analyzed)
2039                     {
2040                       if (promote_var (v)
2041                           && DECL_INITIAL (v->decl)
2042                           && const_value_known_p (v->decl)
2043                           && !pointer_set_insert (inserted, vnode))
2044                         VEC_safe_push (varpool_node_ptr, heap,
2045                                        promoted_initializers, v);
2046                     }
2047                 }
2048             }
2049         }
2050     }
2051   pointer_set_destroy (inserted);
2052 }
2053
2054 static lto_file *current_lto_file;
2055
2056 /* Helper for qsort; compare partitions and return one with smaller size.
2057    We sort from greatest to smallest so parallel build doesn't stale on the
2058    longest compilation being executed too late.  */
2059
2060 static int
2061 cmp_partitions (const void *a, const void *b)
2062 {
2063   const struct ltrans_partition_def *pa
2064      = *(struct ltrans_partition_def *const *)a;
2065   const struct ltrans_partition_def *pb
2066      = *(struct ltrans_partition_def *const *)b;
2067   return pb->insns - pa->insns;
2068 }
2069
2070 /* Write all output files in WPA mode and the file with the list of
2071    LTRANS units.  */
2072
2073 static void
2074 lto_wpa_write_files (void)
2075 {
2076   unsigned i, n_sets;
2077   lto_file *file;
2078   cgraph_node_set set;
2079   varpool_node_set vset;
2080   ltrans_partition part;
2081   FILE *ltrans_output_list_stream;
2082   char *temp_filename;
2083   size_t blen;
2084
2085   /* Open the LTRANS output list.  */
2086   if (!ltrans_output_list)
2087     fatal_error ("no LTRANS output list filename provided");
2088   ltrans_output_list_stream = fopen (ltrans_output_list, "w");
2089   if (ltrans_output_list_stream == NULL)
2090     fatal_error ("opening LTRANS output list %s: %m", ltrans_output_list);
2091
2092   timevar_push (TV_WHOPR_WPA);
2093
2094   FOR_EACH_VEC_ELT (ltrans_partition, ltrans_partitions, i, part)
2095     lto_stats.num_output_cgraph_nodes += VEC_length (cgraph_node_ptr,
2096                                                      part->cgraph_set->nodes);
2097
2098   /* Find out statics that need to be promoted
2099      to globals with hidden visibility because they are accessed from multiple
2100      partitions.  */
2101   lto_promote_cross_file_statics ();
2102
2103   timevar_pop (TV_WHOPR_WPA);
2104
2105   timevar_push (TV_WHOPR_WPA_IO);
2106
2107   /* Generate a prefix for the LTRANS unit files.  */
2108   blen = strlen (ltrans_output_list);
2109   temp_filename = (char *) xmalloc (blen + sizeof ("2147483648.o"));
2110   strcpy (temp_filename, ltrans_output_list);
2111   if (blen > sizeof (".out")
2112       && strcmp (temp_filename + blen - sizeof (".out") + 1,
2113                  ".out") == 0)
2114     temp_filename[blen - sizeof (".out") + 1] = '\0';
2115   blen = strlen (temp_filename);
2116
2117   n_sets = VEC_length (ltrans_partition, ltrans_partitions);
2118   VEC_qsort (ltrans_partition, ltrans_partitions, cmp_partitions);
2119   for (i = 0; i < n_sets; i++)
2120     {
2121       size_t len;
2122       ltrans_partition part = VEC_index (ltrans_partition, ltrans_partitions, i);
2123
2124       set = part->cgraph_set;
2125       vset = part->varpool_set;
2126
2127       /* Write all the nodes in SET.  */
2128       sprintf (temp_filename + blen, "%u.o", i);
2129       file = lto_obj_file_open (temp_filename, true);
2130       if (!file)
2131         fatal_error ("lto_obj_file_open() failed");
2132
2133       if (!quiet_flag)
2134         fprintf (stderr, " %s (%s %i insns)", temp_filename, part->name, part->insns);
2135       if (cgraph_dump_file)
2136         {
2137           fprintf (cgraph_dump_file, "Writing partition %s to file %s, %i insns\n",
2138                    part->name, temp_filename, part->insns);
2139           fprintf (cgraph_dump_file, "cgraph nodes:");
2140           dump_cgraph_node_set (cgraph_dump_file, set);
2141           fprintf (cgraph_dump_file, "varpool nodes:");
2142           dump_varpool_node_set (cgraph_dump_file, vset);
2143         }
2144       gcc_checking_assert (cgraph_node_set_nonempty_p (set)
2145                            || varpool_node_set_nonempty_p (vset) || !i);
2146
2147       lto_set_current_out_file (file);
2148
2149       ipa_write_optimization_summaries (set, vset);
2150
2151       lto_set_current_out_file (NULL);
2152       lto_obj_file_close (file);
2153
2154       len = strlen (temp_filename);
2155       if (fwrite (temp_filename, 1, len, ltrans_output_list_stream) < len
2156           || fwrite ("\n", 1, 1, ltrans_output_list_stream) < 1)
2157         fatal_error ("writing to LTRANS output list %s: %m",
2158                      ltrans_output_list);
2159     }
2160
2161   lto_stats.num_output_files += n_sets;
2162
2163   /* Close the LTRANS output list.  */
2164   if (fclose (ltrans_output_list_stream))
2165     fatal_error ("closing LTRANS output list %s: %m", ltrans_output_list);
2166
2167   free_ltrans_partitions();
2168
2169   timevar_pop (TV_WHOPR_WPA_IO);
2170 }
2171
2172
2173 /* If TT is a variable or function decl replace it with its
2174    prevailing variant.  */
2175 #define LTO_SET_PREVAIL(tt) \
2176   do {\
2177     if ((tt) && VAR_OR_FUNCTION_DECL_P (tt)) \
2178       tt = lto_symtab_prevailing_decl (tt); \
2179   } while (0)
2180
2181 /* Ensure that TT isn't a replacable var of function decl.  */
2182 #define LTO_NO_PREVAIL(tt) \
2183   gcc_assert (!(tt) || !VAR_OR_FUNCTION_DECL_P (tt))
2184
2185 /* Given a tree T replace all fields referring to variables or functions
2186    with their prevailing variant.  */
2187 static void
2188 lto_fixup_prevailing_decls (tree t)
2189 {
2190   enum tree_code code = TREE_CODE (t);
2191   LTO_NO_PREVAIL (TREE_TYPE (t));
2192   if (CODE_CONTAINS_STRUCT (code, TS_COMMON))
2193     LTO_NO_PREVAIL (TREE_CHAIN (t));
2194   if (DECL_P (t))
2195     {
2196       LTO_NO_PREVAIL (DECL_NAME (t));
2197       LTO_SET_PREVAIL (DECL_CONTEXT (t));
2198       if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
2199         {
2200           LTO_SET_PREVAIL (DECL_SIZE (t));
2201           LTO_SET_PREVAIL (DECL_SIZE_UNIT (t));
2202           LTO_SET_PREVAIL (DECL_INITIAL (t));
2203           LTO_NO_PREVAIL (DECL_ATTRIBUTES (t));
2204           LTO_SET_PREVAIL (DECL_ABSTRACT_ORIGIN (t));
2205         }
2206       if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
2207         {
2208           LTO_NO_PREVAIL (t->decl_with_vis.assembler_name);
2209           LTO_NO_PREVAIL (DECL_SECTION_NAME (t));
2210         }
2211       if (CODE_CONTAINS_STRUCT (code, TS_DECL_NON_COMMON))
2212         {
2213           LTO_NO_PREVAIL (DECL_ARGUMENT_FLD (t));
2214           LTO_NO_PREVAIL (DECL_RESULT_FLD (t));
2215           LTO_NO_PREVAIL (DECL_VINDEX (t));
2216         }
2217       if (CODE_CONTAINS_STRUCT (code, TS_FUNCTION_DECL))
2218         LTO_SET_PREVAIL (DECL_FUNCTION_PERSONALITY (t));
2219       if (CODE_CONTAINS_STRUCT (code, TS_FIELD_DECL))
2220         {
2221           LTO_NO_PREVAIL (DECL_FIELD_OFFSET (t));
2222           LTO_NO_PREVAIL (DECL_BIT_FIELD_TYPE (t));
2223           LTO_NO_PREVAIL (DECL_QUALIFIER (t));
2224           LTO_NO_PREVAIL (DECL_FIELD_BIT_OFFSET (t));
2225           LTO_NO_PREVAIL (DECL_FCONTEXT (t));
2226         }
2227     }
2228   else if (TYPE_P (t))
2229     {
2230       LTO_NO_PREVAIL (TYPE_CACHED_VALUES (t));
2231       LTO_SET_PREVAIL (TYPE_SIZE (t));
2232       LTO_SET_PREVAIL (TYPE_SIZE_UNIT (t));
2233       LTO_NO_PREVAIL (TYPE_ATTRIBUTES (t));
2234       LTO_NO_PREVAIL (TYPE_NAME (t));
2235
2236       LTO_SET_PREVAIL (TYPE_MINVAL (t));
2237       LTO_SET_PREVAIL (TYPE_MAXVAL (t));
2238       LTO_SET_PREVAIL (t->type_non_common.binfo);
2239
2240       LTO_SET_PREVAIL (TYPE_CONTEXT (t));
2241
2242       LTO_NO_PREVAIL (TYPE_CANONICAL (t));
2243       LTO_NO_PREVAIL (TYPE_MAIN_VARIANT (t));
2244       LTO_NO_PREVAIL (TYPE_NEXT_VARIANT (t));
2245     }
2246   else if (EXPR_P (t))
2247     {
2248       int i;
2249       LTO_NO_PREVAIL (t->exp.block);
2250       for (i = TREE_OPERAND_LENGTH (t) - 1; i >= 0; --i)
2251         LTO_SET_PREVAIL (TREE_OPERAND (t, i));
2252     }
2253   else
2254     {
2255       switch (code)
2256         {
2257         case TREE_LIST:
2258           LTO_SET_PREVAIL (TREE_VALUE (t));
2259           LTO_SET_PREVAIL (TREE_PURPOSE (t));
2260           break;
2261         default:
2262           gcc_unreachable ();
2263         }
2264     }
2265 }
2266 #undef LTO_SET_PREVAIL
2267 #undef LTO_NO_PREVAIL
2268
2269 /* Helper function of lto_fixup_decls. Walks the var and fn streams in STATE,
2270    replaces var and function decls with the corresponding prevailing def.  */
2271
2272 static void
2273 lto_fixup_state (struct lto_in_decl_state *state)
2274 {
2275   unsigned i, si;
2276   struct lto_tree_ref_table *table;
2277
2278   /* Although we only want to replace FUNCTION_DECLs and VAR_DECLs,
2279      we still need to walk from all DECLs to find the reachable
2280      FUNCTION_DECLs and VAR_DECLs.  */
2281   for (si = 0; si < LTO_N_DECL_STREAMS; si++)
2282     {
2283       table = &state->streams[si];
2284       for (i = 0; i < table->size; i++)
2285         {
2286           tree *tp = table->trees + i;
2287           if (VAR_OR_FUNCTION_DECL_P (*tp))
2288             *tp = lto_symtab_prevailing_decl (*tp);
2289         }
2290     }
2291 }
2292
2293 /* A callback of htab_traverse. Just extracts a state from SLOT
2294    and calls lto_fixup_state. */
2295
2296 static int
2297 lto_fixup_state_aux (void **slot, void *aux ATTRIBUTE_UNUSED)
2298 {
2299   struct lto_in_decl_state *state = (struct lto_in_decl_state *) *slot;
2300   lto_fixup_state (state);
2301   return 1;
2302 }
2303
2304 /* Fix the decls from all FILES. Replaces each decl with the corresponding
2305    prevailing one.  */
2306
2307 static void
2308 lto_fixup_decls (struct lto_file_decl_data **files)
2309 {
2310   unsigned int i;
2311   htab_iterator hi;
2312   tree t;
2313
2314   FOR_EACH_HTAB_ELEMENT (tree_with_vars, t, tree, hi)
2315     lto_fixup_prevailing_decls (t);
2316
2317   for (i = 0; files[i]; i++)
2318     {
2319       struct lto_file_decl_data *file = files[i];
2320       struct lto_in_decl_state *state = file->global_decl_state;
2321       lto_fixup_state (state);
2322
2323       htab_traverse (file->function_decl_states, lto_fixup_state_aux, NULL);
2324     }
2325 }
2326
2327 /* Read the options saved from each file in the command line.  Called
2328    from lang_hooks.post_options which is called by process_options
2329    right before all the options are used to initialize the compiler.
2330    This assumes that decode_options has already run, so the
2331    num_in_fnames and in_fnames are properly set.
2332
2333    Note that this assumes that all the files had been compiled with
2334    the same options, which is not a good assumption.  In general,
2335    options ought to be read from all the files in the set and merged.
2336    However, it is still unclear what the merge rules should be.  */
2337
2338 void
2339 lto_read_all_file_options (void)
2340 {
2341   size_t i;
2342
2343   /* Clear any file options currently saved.  */
2344   lto_clear_file_options ();
2345
2346   /* Set the hooks to read ELF sections.  */
2347   lto_set_in_hooks (NULL, get_section_data, free_section_data);
2348   if (!quiet_flag)
2349     fprintf (stderr, "Reading command line options:");
2350
2351   for (i = 0; i < num_in_fnames; i++)
2352     {
2353       struct lto_file_decl_data *file_data;
2354       lto_file *file = lto_obj_file_open (in_fnames[i], false);
2355       if (!file)
2356         break;
2357       if (!quiet_flag)
2358         {
2359           fprintf (stderr, " %s", in_fnames[i]);
2360           fflush (stderr);
2361         }
2362
2363       file_data = XCNEW (struct lto_file_decl_data);
2364       file_data->file_name = file->filename;
2365       file_data->section_hash_table = lto_obj_build_section_table (file);
2366
2367       lto_read_file_options (file_data);
2368
2369       lto_obj_file_close (file);
2370       htab_delete (file_data->section_hash_table);
2371       free (file_data);
2372     }
2373
2374   if (!quiet_flag)
2375     fprintf (stderr, "\n");
2376
2377   /* Apply globally the options read from all the files.  */
2378   lto_reissue_options ();
2379 }
2380
2381 static GTY((length ("lto_stats.num_input_files + 1"))) struct lto_file_decl_data **all_file_decl_data;
2382
2383 /* Turn file datas for sub files into a single array, so that they look
2384    like separate files for further passes. */
2385
2386 static void
2387 lto_flatten_files (struct lto_file_decl_data **orig, int count, int last_file_ix)
2388 {
2389   struct lto_file_decl_data *n, *next;
2390   int i, k;
2391
2392   lto_stats.num_input_files = count;
2393   all_file_decl_data
2394     = ggc_alloc_cleared_vec_lto_file_decl_data_ptr (count + 1);
2395   /* Set the hooks so that all of the ipa passes can read in their data.  */
2396   lto_set_in_hooks (all_file_decl_data, get_section_data, free_section_data);
2397   for (i = 0, k = 0; i < last_file_ix; i++) 
2398     {
2399       for (n = orig[i]; n != NULL; n = next)
2400         {
2401           all_file_decl_data[k++] = n;
2402           next = n->next;
2403           n->next = NULL;
2404         }
2405     }
2406   all_file_decl_data[k] = NULL;
2407   gcc_assert (k == count);
2408 }
2409
2410 /* Input file data before flattening (i.e. splitting them to subfiles to support
2411    incremental linking.  */
2412 static int real_file_count;
2413 static GTY((length ("real_file_count + 1"))) struct lto_file_decl_data **real_file_decl_data;
2414
2415 /* Read all the symbols from the input files FNAMES.  NFILES is the
2416    number of files requested in the command line.  Instantiate a
2417    global call graph by aggregating all the sub-graphs found in each
2418    file.  */
2419
2420 static void
2421 read_cgraph_and_symbols (unsigned nfiles, const char **fnames)
2422 {
2423   unsigned int i, last_file_ix;
2424   FILE *resolution;
2425   struct cgraph_node *node;
2426   int count = 0;
2427   struct lto_file_decl_data **decl_data;
2428
2429   init_cgraph ();
2430
2431   timevar_push (TV_IPA_LTO_DECL_IN);
2432
2433   real_file_decl_data
2434     = decl_data = ggc_alloc_cleared_vec_lto_file_decl_data_ptr (nfiles + 1);
2435   real_file_count = nfiles;
2436
2437   /* Read the resolution file.  */
2438   resolution = NULL;
2439   if (resolution_file_name)
2440     {
2441       int t;
2442       unsigned num_objects;
2443
2444       resolution = fopen (resolution_file_name, "r");
2445       if (resolution == NULL)
2446         fatal_error ("could not open symbol resolution file: %m");
2447
2448       t = fscanf (resolution, "%u", &num_objects);
2449       gcc_assert (t == 1);
2450
2451       /* True, since the plugin splits the archives.  */
2452       gcc_assert (num_objects == nfiles);
2453     }
2454
2455   tree_with_vars = htab_create_ggc (101, htab_hash_pointer, htab_eq_pointer,
2456                                     NULL);
2457
2458   if (!quiet_flag)
2459     fprintf (stderr, "Reading object files:");
2460
2461   /* Read all of the object files specified on the command line.  */
2462   for (i = 0, last_file_ix = 0; i < nfiles; ++i)
2463     {
2464       struct lto_file_decl_data *file_data = NULL;
2465       if (!quiet_flag)
2466         {
2467           fprintf (stderr, " %s", fnames[i]);
2468           fflush (stderr);
2469         }
2470
2471       current_lto_file = lto_obj_file_open (fnames[i], false);
2472       if (!current_lto_file)
2473         break;
2474
2475       file_data = lto_file_read (current_lto_file, resolution, &count);
2476       if (!file_data)
2477         {
2478           lto_obj_file_close (current_lto_file);
2479           current_lto_file = NULL;
2480           break;
2481         }
2482
2483       decl_data[last_file_ix++] = file_data;
2484
2485       lto_obj_file_close (current_lto_file);
2486       current_lto_file = NULL;
2487       ggc_collect ();
2488     }
2489
2490   lto_flatten_files (decl_data, count, last_file_ix);
2491   lto_stats.num_input_files = count;
2492   ggc_free(decl_data);
2493   real_file_decl_data = NULL;
2494
2495   if (resolution_file_name)
2496     fclose (resolution);
2497
2498   /* Set the hooks so that all of the ipa passes can read in their data.  */
2499   lto_set_in_hooks (all_file_decl_data, get_section_data, free_section_data);
2500
2501   timevar_pop (TV_IPA_LTO_DECL_IN);
2502
2503   if (!quiet_flag)
2504     fprintf (stderr, "\nReading the callgraph\n");
2505
2506   timevar_push (TV_IPA_LTO_CGRAPH_IO);
2507   /* Read the callgraph.  */
2508   input_cgraph ();
2509   timevar_pop (TV_IPA_LTO_CGRAPH_IO);
2510
2511   if (!quiet_flag)
2512     fprintf (stderr, "Merging declarations\n");
2513
2514   timevar_push (TV_IPA_LTO_DECL_MERGE);
2515   /* Merge global decls.  */
2516   lto_symtab_merge_decls ();
2517
2518   /* If there were errors during symbol merging bail out, we have no
2519      good way to recover here.  */
2520   if (seen_error ())
2521     fatal_error ("errors during merging of translation units");
2522
2523   /* Fixup all decls and types and free the type hash tables.  */
2524   lto_fixup_decls (all_file_decl_data);
2525   htab_delete (tree_with_vars);
2526   tree_with_vars = NULL;
2527   free_gimple_type_tables ();
2528   ggc_collect ();
2529
2530   timevar_pop (TV_IPA_LTO_DECL_MERGE);
2531   /* Each pass will set the appropriate timer.  */
2532
2533   if (!quiet_flag)
2534     fprintf (stderr, "Reading summaries\n");
2535
2536   /* Read the IPA summary data.  */
2537   if (flag_ltrans)
2538     ipa_read_optimization_summaries ();
2539   else
2540     ipa_read_summaries ();
2541
2542   /* Finally merge the cgraph according to the decl merging decisions.  */
2543   timevar_push (TV_IPA_LTO_CGRAPH_MERGE);
2544   if (cgraph_dump_file)
2545     {
2546       fprintf (cgraph_dump_file, "Before merging:\n");
2547       dump_cgraph (cgraph_dump_file);
2548       dump_varpool (cgraph_dump_file);
2549     }
2550   lto_symtab_merge_cgraph_nodes ();
2551   ggc_collect ();
2552
2553   if (flag_ltrans)
2554     for (node = cgraph_nodes; node; node = node->next)
2555       {
2556         /* FIXME: ipa_transforms_to_apply holds list of passes that have optimization
2557            summaries computed and needs to apply changes.  At the moment WHOPR only
2558            supports inlining, so we can push it here by hand.  In future we need to stream
2559            this field into ltrans compilation.  */
2560         if (node->analyzed)
2561           VEC_safe_push (ipa_opt_pass, heap,
2562                          node->ipa_transforms_to_apply,
2563                          (ipa_opt_pass)&pass_ipa_inline);
2564       }
2565   lto_symtab_free ();
2566
2567   timevar_pop (TV_IPA_LTO_CGRAPH_MERGE);
2568
2569   timevar_push (TV_IPA_LTO_DECL_INIT_IO);
2570
2571   /* FIXME lto. This loop needs to be changed to use the pass manager to
2572      call the ipa passes directly.  */
2573   if (!seen_error ())
2574     for (i = 0; i < last_file_ix; i++)
2575       {
2576         struct lto_file_decl_data *file_data = all_file_decl_data [i];
2577         lto_materialize_constructors_and_inits (file_data);
2578       }
2579
2580   /* Indicate that the cgraph is built and ready.  */
2581   cgraph_function_flags_ready = true;
2582
2583   timevar_pop (TV_IPA_LTO_DECL_INIT_IO);
2584   ggc_free (all_file_decl_data);
2585   all_file_decl_data = NULL;
2586 }
2587
2588
2589 /* Materialize all the bodies for all the nodes in the callgraph.  */
2590
2591 static void
2592 materialize_cgraph (void)
2593 {
2594   tree decl;
2595   struct cgraph_node *node; 
2596   unsigned i;
2597   timevar_id_t lto_timer;
2598
2599   if (!quiet_flag)
2600     fprintf (stderr,
2601              flag_wpa ? "Materializing decls:" : "Reading function bodies:");
2602
2603
2604   /* Now that we have input the cgraph, we need to clear all of the aux
2605      nodes and read the functions if we are not running in WPA mode.  */
2606   timevar_push (TV_IPA_LTO_GIMPLE_IN);
2607
2608   for (node = cgraph_nodes; node; node = node->next)
2609     {
2610       if (node->local.lto_file_data)
2611         {
2612           lto_materialize_function (node);
2613           lto_stats.num_input_cgraph_nodes++;
2614         }
2615     }
2616
2617   timevar_pop (TV_IPA_LTO_GIMPLE_IN);
2618
2619   /* Start the appropriate timer depending on the mode that we are
2620      operating in.  */
2621   lto_timer = (flag_wpa) ? TV_WHOPR_WPA
2622               : (flag_ltrans) ? TV_WHOPR_LTRANS
2623               : TV_LTO;
2624   timevar_push (lto_timer);
2625
2626   current_function_decl = NULL;
2627   set_cfun (NULL);
2628
2629   /* Inform the middle end about the global variables we have seen.  */
2630   FOR_EACH_VEC_ELT (tree, lto_global_var_decls, i, decl)
2631     rest_of_decl_compilation (decl, 1, 0);
2632
2633   if (!quiet_flag)
2634     fprintf (stderr, "\n");
2635
2636   timevar_pop (lto_timer);
2637 }
2638
2639
2640 /* Perform whole program analysis (WPA) on the callgraph and write out the
2641    optimization plan.  */
2642
2643 static void
2644 do_whole_program_analysis (void)
2645 {
2646   /* Note that since we are in WPA mode, materialize_cgraph will not
2647      actually read in all the function bodies.  It only materializes
2648      the decls and cgraph nodes so that analysis can be performed.  */
2649   materialize_cgraph ();
2650
2651   /* Reading in the cgraph uses different timers, start timing WPA now.  */
2652   timevar_push (TV_WHOPR_WPA);
2653
2654   if (pre_ipa_mem_report)
2655     {
2656       fprintf (stderr, "Memory consumption before IPA\n");
2657       dump_memory_report (false);
2658     }
2659
2660   cgraph_function_flags_ready = true;
2661
2662   if (cgraph_dump_file)
2663     {
2664       dump_cgraph (cgraph_dump_file);
2665       dump_varpool (cgraph_dump_file);
2666     }
2667   bitmap_obstack_initialize (NULL);
2668   cgraph_state = CGRAPH_STATE_IPA_SSA;
2669
2670   execute_ipa_pass_list (all_regular_ipa_passes);
2671
2672   if (cgraph_dump_file)
2673     {
2674       fprintf (cgraph_dump_file, "Optimized ");
2675       dump_cgraph (cgraph_dump_file);
2676       dump_varpool (cgraph_dump_file);
2677     }
2678   verify_cgraph ();
2679   bitmap_obstack_release (NULL);
2680
2681   /* We are about to launch the final LTRANS phase, stop the WPA timer.  */
2682   timevar_pop (TV_WHOPR_WPA);
2683
2684   if (flag_lto_partition_1to1)
2685     lto_1_to_1_map ();
2686   else
2687     lto_balanced_map ();
2688
2689   if (!quiet_flag)
2690     {
2691       fprintf (stderr, "\nStreaming out");
2692       fflush (stderr);
2693     }
2694   lto_wpa_write_files ();
2695   ggc_collect ();
2696   if (!quiet_flag)
2697     fprintf (stderr, "\n");
2698
2699   if (post_ipa_mem_report)
2700     {
2701       fprintf (stderr, "Memory consumption after IPA\n");
2702       dump_memory_report (false);
2703     }
2704
2705   /* Show the LTO report before launching LTRANS.  */
2706   if (flag_lto_report)
2707     print_lto_report ();
2708 }
2709
2710
2711 static GTY(()) tree lto_eh_personality_decl;
2712
2713 /* Return the LTO personality function decl.  */
2714
2715 tree
2716 lto_eh_personality (void)
2717 {
2718   if (!lto_eh_personality_decl)
2719     {
2720       /* Use the first personality DECL for our personality if we don't
2721          support multiple ones.  This ensures that we don't artificially
2722          create the need for them in a single-language program.  */
2723       if (first_personality_decl && !dwarf2out_do_cfi_asm ())
2724         lto_eh_personality_decl = first_personality_decl;
2725       else
2726         lto_eh_personality_decl = lhd_gcc_personality ();
2727     }
2728
2729   return lto_eh_personality_decl;
2730 }
2731
2732 /* Set the process name based on the LTO mode. */
2733
2734 static void 
2735 lto_process_name (void)
2736 {
2737   if (flag_lto)
2738     setproctitle ("lto1-lto");
2739   if (flag_wpa)
2740     setproctitle ("lto1-wpa");
2741   if (flag_ltrans)
2742     setproctitle ("lto1-ltrans");
2743 }
2744
2745
2746 /* Initialize the LTO front end.  */
2747
2748 static void
2749 lto_init (void)
2750 {
2751   lto_process_name ();
2752   lto_streamer_hooks_init ();
2753   lto_reader_init ();
2754   memset (&lto_stats, 0, sizeof (lto_stats));
2755   bitmap_obstack_initialize (NULL);
2756   gimple_register_cfg_hooks ();
2757 }
2758
2759
2760 /* Main entry point for the GIMPLE front end.  This front end has
2761    three main personalities:
2762
2763    - LTO (-flto).  All the object files on the command line are
2764      loaded in memory and processed as a single translation unit.
2765      This is the traditional link-time optimization behavior.
2766
2767    - WPA (-fwpa).  Only the callgraph and summary information for
2768      files in the command file are loaded.  A single callgraph
2769      (without function bodies) is instantiated for the whole set of
2770      files.  IPA passes are only allowed to analyze the call graph
2771      and make transformation decisions.  The callgraph is
2772      partitioned, each partition is written to a new object file
2773      together with the transformation decisions.
2774
2775    - LTRANS (-fltrans).  Similar to -flto but it prevents the IPA
2776      summary files from running again.  Since WPA computed summary
2777      information and decided what transformations to apply, LTRANS
2778      simply applies them.  */
2779
2780 void
2781 lto_main (void)
2782 {
2783   /* Initialize the LTO front end.  */
2784   lto_init ();
2785
2786   /* Read all the symbols and call graph from all the files in the
2787      command line.  */
2788   read_cgraph_and_symbols (num_in_fnames, in_fnames);
2789
2790   if (!seen_error ())
2791     {
2792       /* If WPA is enabled analyze the whole call graph and create an
2793          optimization plan.  Otherwise, read in all the function
2794          bodies and continue with optimization.  */
2795       if (flag_wpa)
2796         do_whole_program_analysis ();
2797       else
2798         {
2799           materialize_cgraph ();
2800
2801           /* Let the middle end know that we have read and merged all of
2802              the input files.  */ 
2803           cgraph_optimize ();
2804
2805           /* FIXME lto, if the processes spawned by WPA fail, we miss
2806              the chance to print WPA's report, so WPA will call
2807              print_lto_report before launching LTRANS.  If LTRANS was
2808              launched directly by the driver we would not need to do
2809              this.  */
2810           if (flag_lto_report)
2811             print_lto_report ();
2812         }
2813     }
2814 }
2815
2816 #include "gt-lto-lto.h"