OSDN Git Service

PR c++/41183
[pf3gnuchains/gcc-fork.git] / gcc / passes.c
1 /* Top level of GCC compilers (cc1, cc1plus, etc.)
2    Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
4    Free Software Foundation, Inc.
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22 /* This is the top level of cc1/c++.
23    It parses command args, opens files, invokes the various passes
24    in the proper order, and counts the time used by each.
25    Error messages and low-level interface to malloc also handled here.  */
26
27 #include "config.h"
28 #undef FLOAT /* This is for hpux. They should change hpux.  */
29 #undef FFS  /* Some systems define this in param.h.  */
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include <signal.h>
34
35 #ifdef HAVE_SYS_RESOURCE_H
36 # include <sys/resource.h>
37 #endif
38
39 #ifdef HAVE_SYS_TIMES_H
40 # include <sys/times.h>
41 #endif
42
43 #include "line-map.h"
44 #include "input.h"
45 #include "tree.h"
46 #include "rtl.h"
47 #include "tm_p.h"
48 #include "flags.h"
49 #include "insn-attr.h"
50 #include "insn-config.h"
51 #include "insn-flags.h"
52 #include "hard-reg-set.h"
53 #include "recog.h"
54 #include "output.h"
55 #include "except.h"
56 #include "function.h"
57 #include "toplev.h"
58 #include "expr.h"
59 #include "basic-block.h"
60 #include "intl.h"
61 #include "ggc.h"
62 #include "graph.h"
63 #include "regs.h"
64 #include "timevar.h"
65 #include "diagnostic.h"
66 #include "params.h"
67 #include "reload.h"
68 #include "dwarf2asm.h"
69 #include "integrate.h"
70 #include "real.h"
71 #include "debug.h"
72 #include "target.h"
73 #include "langhooks.h"
74 #include "cfglayout.h"
75 #include "cfgloop.h"
76 #include "hosthooks.h"
77 #include "cgraph.h"
78 #include "opts.h"
79 #include "coverage.h"
80 #include "value-prof.h"
81 #include "tree-inline.h"
82 #include "tree-flow.h"
83 #include "tree-pass.h"
84 #include "tree-dump.h"
85 #include "df.h"
86 #include "predict.h"
87 #include "lto-streamer.h"
88 #include "plugin.h"
89
90 #if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO)
91 #include "dwarf2out.h"
92 #endif
93
94 #if defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO)
95 #include "dbxout.h"
96 #endif
97
98 #ifdef SDB_DEBUGGING_INFO
99 #include "sdbout.h"
100 #endif
101
102 #ifdef XCOFF_DEBUGGING_INFO
103 #include "xcoffout.h"           /* Needed for external data
104                                    declarations for e.g. AIX 4.x.  */
105 #endif
106
107 /* This is used for debugging.  It allows the current pass to printed
108    from anywhere in compilation.
109    The variable current_pass is also used for statistics and plugins.  */
110 struct opt_pass *current_pass;
111
112 /* Call from anywhere to find out what pass this is.  Useful for
113    printing out debugging information deep inside an service
114    routine.  */
115 void
116 print_current_pass (FILE *file)
117 {
118   if (current_pass)
119     fprintf (file, "current pass = %s (%d)\n",
120              current_pass->name, current_pass->static_pass_number);
121   else
122     fprintf (file, "no current pass.\n");
123 }
124
125
126 /* Call from the debugger to get the current pass name.  */
127 void
128 debug_pass (void)
129 {
130   print_current_pass (stderr);
131 }
132
133
134
135 /* Global variables used to communicate with passes.  */
136 int dump_flags;
137 bool in_gimple_form;
138 bool first_pass_instance;
139
140
141 /* This is called from various places for FUNCTION_DECL, VAR_DECL,
142    and TYPE_DECL nodes.
143
144    This does nothing for local (non-static) variables, unless the
145    variable is a register variable with DECL_ASSEMBLER_NAME set.  In
146    that case, or if the variable is not an automatic, it sets up the
147    RTL and outputs any assembler code (label definition, storage
148    allocation and initialization).
149
150    DECL is the declaration.  TOP_LEVEL is nonzero
151    if this declaration is not within a function.  */
152
153 void
154 rest_of_decl_compilation (tree decl,
155                           int top_level,
156                           int at_end)
157 {
158   /* We deferred calling assemble_alias so that we could collect
159      other attributes such as visibility.  Emit the alias now.  */
160   {
161     tree alias;
162     alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl));
163     if (alias)
164       {
165         alias = TREE_VALUE (TREE_VALUE (alias));
166         alias = get_identifier (TREE_STRING_POINTER (alias));
167         assemble_alias (decl, alias);
168       }
169   }
170
171   /* Can't defer this, because it needs to happen before any
172      later function definitions are processed.  */
173   if (DECL_ASSEMBLER_NAME_SET_P (decl) && DECL_REGISTER (decl))
174     make_decl_rtl (decl);
175
176   /* Forward declarations for nested functions are not "external",
177      but we need to treat them as if they were.  */
178   if (TREE_STATIC (decl) || DECL_EXTERNAL (decl)
179       || TREE_CODE (decl) == FUNCTION_DECL)
180     {
181       timevar_push (TV_VARCONST);
182
183       /* Don't output anything when a tentative file-scope definition
184          is seen.  But at end of compilation, do output code for them.
185
186          We do output all variables and rely on
187          callgraph code to defer them except for forward declarations
188          (see gcc.c-torture/compile/920624-1.c) */
189       if ((at_end
190            || !DECL_DEFER_OUTPUT (decl)
191            || DECL_INITIAL (decl))
192           && !DECL_EXTERNAL (decl))
193         {
194           if (TREE_CODE (decl) != FUNCTION_DECL)
195             varpool_finalize_decl (decl);
196           else
197             assemble_variable (decl, top_level, at_end, 0);
198         }
199
200 #ifdef ASM_FINISH_DECLARE_OBJECT
201       if (decl == last_assemble_variable_decl)
202         {
203           ASM_FINISH_DECLARE_OBJECT (asm_out_file, decl,
204                                      top_level, at_end);
205         }
206 #endif
207
208       timevar_pop (TV_VARCONST);
209     }
210   else if (TREE_CODE (decl) == TYPE_DECL
211            /* Like in rest_of_type_compilation, avoid confusing the debug
212               information machinery when there are errors.  */
213            && !(sorrycount || errorcount))
214     {
215       timevar_push (TV_SYMOUT);
216       debug_hooks->type_decl (decl, !top_level);
217       timevar_pop (TV_SYMOUT);
218     }
219
220   /* Let cgraph know about the existence of variables.  */
221   if (TREE_CODE (decl) == VAR_DECL && !DECL_EXTERNAL (decl))
222     varpool_node (decl);
223 }
224
225 /* Called after finishing a record, union or enumeral type.  */
226
227 void
228 rest_of_type_compilation (tree type, int toplev)
229 {
230   /* Avoid confusing the debug information machinery when there are
231      errors.  */
232   if (errorcount != 0 || sorrycount != 0)
233     return;
234
235   timevar_push (TV_SYMOUT);
236   debug_hooks->type_decl (TYPE_STUB_DECL (type), !toplev);
237   timevar_pop (TV_SYMOUT);
238 }
239
240 \f
241
242 void
243 finish_optimization_passes (void)
244 {
245   int i;
246   struct dump_file_info *dfi;
247   char *name;
248
249   timevar_push (TV_DUMP);
250   if (profile_arc_flag || flag_test_coverage || flag_branch_probabilities)
251     {
252       dump_file = dump_begin (pass_profile.pass.static_pass_number, NULL);
253       end_branch_prob ();
254       if (dump_file)
255         dump_end (pass_profile.pass.static_pass_number, dump_file);
256     }
257
258   if (optimize > 0)
259     {
260       dump_file = dump_begin (pass_combine.pass.static_pass_number, NULL);
261       if (dump_file)
262         {
263           dump_combine_total_stats (dump_file);
264           dump_end (pass_combine.pass.static_pass_number, dump_file);
265         }
266     }
267
268   /* Do whatever is necessary to finish printing the graphs.  */
269   if (graph_dump_format != no_graph)
270     for (i = TDI_end; (dfi = get_dump_file_info (i)) != NULL; ++i)
271       if (dump_initialized_p (i)
272           && (dfi->flags & TDF_GRAPH) != 0
273           && (name = get_dump_file_name (i)) != NULL)
274         {
275           finish_graph_dump_file (name);
276           free (name);
277         }
278
279   timevar_pop (TV_DUMP);
280 }
281
282 static bool
283 gate_rest_of_compilation (void)
284 {
285   /* Early return if there were errors.  We can run afoul of our
286      consistency checks, and there's not really much point in fixing them.  */
287   return !(rtl_dump_and_exit || flag_syntax_only || errorcount || sorrycount);
288 }
289
290 struct gimple_opt_pass pass_rest_of_compilation =
291 {
292  {
293   GIMPLE_PASS,
294   "*rest_of_compilation",               /* name */
295   gate_rest_of_compilation,             /* gate */
296   NULL,                                 /* execute */
297   NULL,                                 /* sub */
298   NULL,                                 /* next */
299   0,                                    /* static_pass_number */
300   TV_REST_OF_COMPILATION,               /* tv_id */
301   PROP_rtl,                             /* properties_required */
302   0,                                    /* properties_provided */
303   0,                                    /* properties_destroyed */
304   0,                                    /* todo_flags_start */
305   TODO_ggc_collect                      /* todo_flags_finish */
306  }
307 };
308
309 static bool
310 gate_postreload (void)
311 {
312   return reload_completed;
313 }
314
315 struct rtl_opt_pass pass_postreload =
316 {
317  {
318   RTL_PASS,
319   "*all-postreload",                        /* name */
320   gate_postreload,                      /* gate */
321   NULL,                                 /* execute */
322   NULL,                                 /* sub */
323   NULL,                                 /* next */
324   0,                                    /* static_pass_number */
325   TV_NONE,                              /* tv_id */
326   PROP_rtl,                             /* properties_required */
327   0,                                    /* properties_provided */
328   0,                                    /* properties_destroyed */
329   0,                                    /* todo_flags_start */
330   TODO_ggc_collect | TODO_verify_rtl_sharing /* todo_flags_finish */
331  }
332 };
333
334
335
336 /* The root of the compilation pass tree, once constructed.  */
337 struct opt_pass *all_passes, *all_small_ipa_passes, *all_lowering_passes,
338   *all_regular_ipa_passes, *all_lto_gen_passes;
339
340 /* A map from static pass id to optimization pass.  */
341 struct opt_pass **passes_by_id;
342 int passes_by_id_size;
343
344 /* Set the static pass number of pass PASS to ID and record that
345    in the mapping from static pass number to pass.  */
346
347 static void
348 set_pass_for_id (int id, struct opt_pass *pass)
349 {
350   pass->static_pass_number = id;
351   if (passes_by_id_size <= id)
352     {
353       passes_by_id = XRESIZEVEC (struct opt_pass *, passes_by_id, id + 1);
354       memset (passes_by_id + passes_by_id_size, 0,
355               (id + 1 - passes_by_id_size) * sizeof (void *));
356       passes_by_id_size = id + 1;
357     }
358   passes_by_id[id] = pass;
359 }
360
361 /* Return the pass with the static pass number ID.  */
362
363 struct opt_pass *
364 get_pass_for_id (int id)
365 {
366   if (id >= passes_by_id_size)
367     return NULL;
368   return passes_by_id[id];
369 }
370
371 /* Iterate over the pass tree allocating dump file numbers.  We want
372    to do this depth first, and independent of whether the pass is
373    enabled or not.  */
374
375 void
376 register_one_dump_file (struct opt_pass *pass)
377 {
378   char *dot_name, *flag_name, *glob_name;
379   const char *name, *prefix;
380   char num[10];
381   int flags, id;
382
383   /* See below in next_pass_1.  */
384   num[0] = '\0';
385   if (pass->static_pass_number != -1)
386     sprintf (num, "%d", ((int) pass->static_pass_number < 0
387                          ? 1 : pass->static_pass_number));
388
389   /* The name is both used to identify the pass for the purposes of plugins,
390      and to specify dump file name and option.
391      The latter two might want something short which is not quite unique; for
392      that reason, we may have a disambiguating prefix, followed by a space
393      to mark the start of the following dump file name / option string.  */
394   name = strchr (pass->name, ' ');
395   name = name ? name + 1 : pass->name;
396   dot_name = concat (".", name, num, NULL);
397   if (pass->type == SIMPLE_IPA_PASS || pass->type == IPA_PASS)
398     prefix = "ipa-", flags = TDF_IPA;
399   else if (pass->type == GIMPLE_PASS)
400     prefix = "tree-", flags = TDF_TREE;
401   else
402     prefix = "rtl-", flags = TDF_RTL;
403
404   flag_name = concat (prefix, name, num, NULL);
405   glob_name = concat (prefix, name, NULL);
406   id = dump_register (dot_name, flag_name, glob_name, flags);
407   set_pass_for_id (id, pass);
408 }
409
410 /* Recursive worker function for register_dump_files.  */
411
412 static int
413 register_dump_files_1 (struct opt_pass *pass, int properties)
414 {
415   do
416     {
417       int new_properties = (properties | pass->properties_provided)
418                            & ~pass->properties_destroyed;
419
420       if (pass->name && pass->name[0] != '*')
421         register_one_dump_file (pass);
422
423       if (pass->sub)
424         new_properties = register_dump_files_1 (pass->sub, new_properties);
425
426       /* If we have a gate, combine the properties that we could have with
427          and without the pass being examined.  */
428       if (pass->gate)
429         properties &= new_properties;
430       else
431         properties = new_properties;
432
433       pass = pass->next;
434     }
435   while (pass);
436
437   return properties;
438 }
439
440 /* Register the dump files for the pipeline starting at PASS.
441    PROPERTIES reflects the properties that are guaranteed to be available at
442    the beginning of the pipeline.  */
443
444 static void
445 register_dump_files (struct opt_pass *pass,int properties)
446 {
447   pass->properties_required |= properties;
448   register_dump_files_1 (pass, properties);
449 }
450
451 /* Look at the static_pass_number and duplicate the pass
452    if it is already added to a list. */
453
454 static struct opt_pass *
455 make_pass_instance (struct opt_pass *pass, bool track_duplicates)
456 {
457   /* A nonzero static_pass_number indicates that the
458      pass is already in the list.  */
459   if (pass->static_pass_number)
460     {
461       struct opt_pass *new_pass;
462
463       if (pass->type == GIMPLE_PASS
464           || pass->type == RTL_PASS
465           || pass->type == SIMPLE_IPA_PASS)
466         {
467           new_pass = XNEW (struct opt_pass);
468           memcpy (new_pass, pass, sizeof (struct opt_pass));
469         }
470       else if (pass->type == IPA_PASS)
471         {
472           new_pass = (struct opt_pass *)XNEW (struct ipa_opt_pass_d);
473           memcpy (new_pass, pass, sizeof (struct ipa_opt_pass_d));
474         }
475       else
476         gcc_unreachable ();
477
478       new_pass->next = NULL;
479
480       new_pass->todo_flags_start &= ~TODO_mark_first_instance;
481
482       /* Indicate to register_dump_files that this pass has duplicates,
483          and so it should rename the dump file.  The first instance will
484          be -1, and be number of duplicates = -static_pass_number - 1.
485          Subsequent instances will be > 0 and just the duplicate number.  */
486       if ((pass->name && pass->name[0] != '*') || track_duplicates)
487         {
488           pass->static_pass_number -= 1;
489           new_pass->static_pass_number = -pass->static_pass_number;
490         }
491       return new_pass;
492     }
493   else
494     {
495       pass->todo_flags_start |= TODO_mark_first_instance;
496       pass->static_pass_number = -1;
497
498       invoke_plugin_callbacks (PLUGIN_NEW_PASS, pass);
499     }
500   return pass;
501 }
502
503 /* Add a pass to the pass list. Duplicate the pass if it's already
504    in the list.  */
505
506 static struct opt_pass **
507 next_pass_1 (struct opt_pass **list, struct opt_pass *pass)
508 {
509   /* Every pass should have a name so that plugins can refer to them.  */
510   gcc_assert (pass->name != NULL);
511
512   *list = make_pass_instance (pass, false);
513
514   return &(*list)->next;
515 }
516
517 /* List node for an inserted pass instance. We need to keep track of all
518    the newly-added pass instances (with 'added_pass_nodes' defined below)
519    so that we can register their dump files after pass-positioning is finished.
520    Registering dumping files needs to be post-processed or the
521    static_pass_number of the opt_pass object would be modified and mess up
522    the dump file names of future pass instances to be added.  */
523
524 struct pass_list_node
525 {
526   struct opt_pass *pass;
527   struct pass_list_node *next;
528 };
529
530 static struct pass_list_node *added_pass_nodes = NULL;
531 static struct pass_list_node *prev_added_pass_node;
532
533 /* Insert the pass at the proper position. Return true if the pass
534    is successfully added.
535
536    NEW_PASS_INFO - new pass to be inserted
537    PASS_LIST - root of the pass list to insert the new pass to  */
538
539 static bool
540 position_pass (struct register_pass_info *new_pass_info,
541                struct opt_pass **pass_list)
542 {
543   struct opt_pass *pass = *pass_list, *prev_pass = NULL;
544   bool success = false;
545
546   for ( ; pass; prev_pass = pass, pass = pass->next)
547     {
548       /* Check if the current pass is of the same type as the new pass and
549          matches the name and the instance number of the reference pass.  */
550       if (pass->type == new_pass_info->pass->type
551           && pass->name
552           && !strcmp (pass->name, new_pass_info->reference_pass_name)
553           && ((new_pass_info->ref_pass_instance_number == 0)
554               || (new_pass_info->ref_pass_instance_number ==
555                   pass->static_pass_number)
556               || (new_pass_info->ref_pass_instance_number == 1
557                   && pass->todo_flags_start & TODO_mark_first_instance)))
558         {
559           struct opt_pass *new_pass;
560           struct pass_list_node *new_pass_node;
561
562           new_pass = make_pass_instance (new_pass_info->pass, true);
563
564           /* Insert the new pass instance based on the positioning op.  */
565           switch (new_pass_info->pos_op)
566             {
567               case PASS_POS_INSERT_AFTER:
568                 new_pass->next = pass->next;
569                 pass->next = new_pass;
570
571                 /* Skip newly inserted pass to avoid repeated
572                    insertions in the case where the new pass and the
573                    existing one have the same name.  */
574                 pass = new_pass;
575                 break;
576               case PASS_POS_INSERT_BEFORE:
577                 new_pass->next = pass;
578                 if (prev_pass)
579                   prev_pass->next = new_pass;
580                 else
581                   *pass_list = new_pass;
582                 break;
583               case PASS_POS_REPLACE:
584                 new_pass->next = pass->next;
585                 if (prev_pass)
586                   prev_pass->next = new_pass;
587                 else
588                   *pass_list = new_pass;
589                 new_pass->sub = pass->sub;
590                 new_pass->tv_id = pass->tv_id;
591                 pass = new_pass;
592                 break;
593               default:
594                 error ("Invalid pass positioning operation");
595                 return false;
596             }
597
598           /* Save the newly added pass (instance) in the added_pass_nodes
599              list so that we can register its dump file later. Note that
600              we cannot register the dump file now because doing so will modify
601              the static_pass_number of the opt_pass object and therefore
602              mess up the dump file name of future instances.  */
603           new_pass_node = XCNEW (struct pass_list_node);
604           new_pass_node->pass = new_pass;
605           if (!added_pass_nodes)
606             added_pass_nodes = new_pass_node;
607           else
608             prev_added_pass_node->next = new_pass_node;
609           prev_added_pass_node = new_pass_node;
610
611           success = true;
612         }
613
614       if (pass->sub && position_pass (new_pass_info, &pass->sub))
615         success = true;
616     }
617
618   return success;
619 }
620
621 /* Hooks a new pass into the pass lists.
622
623    PASS_INFO   - pass information that specifies the opt_pass object,
624                  reference pass, instance number, and how to position
625                  the pass  */
626
627 void
628 register_pass (struct register_pass_info *pass_info)
629 {
630   /* The checks below could fail in buggy plugins.  Existing GCC
631      passes should never fail these checks, so we mention plugin in
632      the messages.  */
633   if (!pass_info->pass)
634       fatal_error ("plugin cannot register a missing pass");
635
636   if (!pass_info->pass->name)
637       fatal_error ("plugin cannot register an unnamed pass");
638
639   if (!pass_info->reference_pass_name)
640       fatal_error
641         ("plugin cannot register pass %qs without reference pass name",
642          pass_info->pass->name);
643
644   /* Try to insert the new pass to the pass lists.  We need to check
645      all three lists as the reference pass could be in one (or all) of
646      them.  */
647   if (!position_pass (pass_info, &all_lowering_passes)
648       && !position_pass (pass_info, &all_small_ipa_passes)
649       && !position_pass (pass_info, &all_regular_ipa_passes)
650       && !position_pass (pass_info, &all_lto_gen_passes)
651       && !position_pass (pass_info, &all_passes))
652     fatal_error
653       ("pass %qs not found but is referenced by new pass %qs",
654        pass_info->reference_pass_name, pass_info->pass->name);
655   else
656     {
657       /* OK, we have successfully inserted the new pass. We need to register
658          the dump files for the newly added pass and its duplicates (if any).
659          Because the registration of plugin/backend passes happens after the
660          command-line options are parsed, the options that specify single
661          pass dumping (e.g. -fdump-tree-PASSNAME) cannot be used for new
662          passes. Therefore we currently can only enable dumping of
663          new passes when the 'dump-all' flags (e.g. -fdump-tree-all)
664          are specified. While doing so, we also delete the pass_list_node
665          objects created during pass positioning.  */
666       while (added_pass_nodes)
667         {
668           struct pass_list_node *next_node = added_pass_nodes->next;
669           enum tree_dump_index tdi;
670           register_one_dump_file (added_pass_nodes->pass);
671           if (added_pass_nodes->pass->type == SIMPLE_IPA_PASS
672               || added_pass_nodes->pass->type == IPA_PASS)
673             tdi = TDI_ipa_all;
674           else if (added_pass_nodes->pass->type == GIMPLE_PASS)
675             tdi = TDI_tree_all;
676           else
677             tdi = TDI_rtl_all;
678           /* Check if dump-all flag is specified.  */
679           if (get_dump_file_info (tdi)->state)
680             get_dump_file_info (added_pass_nodes->pass->static_pass_number)
681                 ->state = get_dump_file_info (tdi)->state;
682           XDELETE (added_pass_nodes);
683           added_pass_nodes = next_node;
684         }
685     }
686 }
687
688 /* Construct the pass tree.  The sequencing of passes is driven by
689    the cgraph routines:
690
691    cgraph_finalize_compilation_unit ()
692        for each node N in the cgraph
693            cgraph_analyze_function (N)
694                cgraph_lower_function (N) -> all_lowering_passes
695
696    If we are optimizing, cgraph_optimize is then invoked:
697
698    cgraph_optimize ()
699        ipa_passes ()                    -> all_small_ipa_passes
700        cgraph_expand_all_functions ()
701            for each node N in the cgraph
702                cgraph_expand_function (N)
703                   tree_rest_of_compilation (DECL (N))  -> all_passes
704 */
705
706 void
707 init_optimization_passes (void)
708 {
709   struct opt_pass **p;
710
711 #define NEXT_PASS(PASS)  (p = next_pass_1 (p, &((PASS).pass)))
712
713  /* All passes needed to lower the function into shape optimizers can
714     operate on.  These passes are always run first on the function, but
715     backend might produce already lowered functions that are not processed
716     by these passes.  */
717   p = &all_lowering_passes;
718   NEXT_PASS (pass_warn_unused_result);
719   NEXT_PASS (pass_diagnose_omp_blocks);
720   NEXT_PASS (pass_mudflap_1);
721   NEXT_PASS (pass_lower_omp);
722   NEXT_PASS (pass_lower_cf);
723   NEXT_PASS (pass_refactor_eh);
724   NEXT_PASS (pass_lower_eh);
725   NEXT_PASS (pass_build_cfg);
726   NEXT_PASS (pass_lower_complex_O0);
727   NEXT_PASS (pass_lower_vector);
728   NEXT_PASS (pass_warn_function_return);
729   NEXT_PASS (pass_build_cgraph_edges);
730   NEXT_PASS (pass_inline_parameters);
731   *p = NULL;
732
733   /* Interprocedural optimization passes.  */
734   p = &all_small_ipa_passes;
735   NEXT_PASS (pass_ipa_function_and_variable_visibility);
736   NEXT_PASS (pass_ipa_early_inline);
737     {
738       struct opt_pass **p = &pass_ipa_early_inline.pass.sub;
739       NEXT_PASS (pass_early_inline);
740       NEXT_PASS (pass_inline_parameters);
741       NEXT_PASS (pass_rebuild_cgraph_edges);
742     }
743   NEXT_PASS (pass_ipa_free_lang_data);
744   NEXT_PASS (pass_early_local_passes);
745     {
746       struct opt_pass **p = &pass_early_local_passes.pass.sub;
747       NEXT_PASS (pass_fixup_cfg);
748       NEXT_PASS (pass_tree_profile);
749       NEXT_PASS (pass_cleanup_cfg);
750       NEXT_PASS (pass_init_datastructures);
751       NEXT_PASS (pass_expand_omp);
752
753       NEXT_PASS (pass_referenced_vars);
754       NEXT_PASS (pass_build_ssa);
755       NEXT_PASS (pass_early_warn_uninitialized);
756       /* Note that it is not strictly necessary to schedule an early
757          inline pass here.  However, some test cases (e.g.,
758          g++.dg/other/p334435.C g++.dg/other/i386-1.C) expect extern
759          inline functions to be inlined even at -O0.  This does not
760          happen during the first early inline pass.  */
761       NEXT_PASS (pass_rebuild_cgraph_edges);
762       NEXT_PASS (pass_early_inline);
763       NEXT_PASS (pass_all_early_optimizations);
764         {
765           struct opt_pass **p = &pass_all_early_optimizations.pass.sub;
766           NEXT_PASS (pass_remove_cgraph_callee_edges);
767           NEXT_PASS (pass_rename_ssa_copies);
768           NEXT_PASS (pass_ccp);
769           NEXT_PASS (pass_forwprop);
770           /* pass_build_ealias is a dummy pass that ensures that we
771              execute TODO_rebuild_alias at this point.  Re-building
772              alias information also rewrites no longer addressed
773              locals into SSA form if possible.  */
774           NEXT_PASS (pass_build_ealias);
775           NEXT_PASS (pass_sra_early);
776           NEXT_PASS (pass_copy_prop);
777           NEXT_PASS (pass_merge_phi);
778           NEXT_PASS (pass_cd_dce);
779           NEXT_PASS (pass_early_ipa_sra);
780           NEXT_PASS (pass_tail_recursion);
781           NEXT_PASS (pass_convert_switch);
782           NEXT_PASS (pass_cleanup_eh);
783           NEXT_PASS (pass_profile);
784           NEXT_PASS (pass_local_pure_const);
785         }
786       NEXT_PASS (pass_release_ssa_names);
787       NEXT_PASS (pass_rebuild_cgraph_edges);
788       NEXT_PASS (pass_inline_parameters);
789     }
790   NEXT_PASS (pass_ipa_increase_alignment);
791   NEXT_PASS (pass_ipa_matrix_reorg);
792   *p = NULL;
793
794   p = &all_regular_ipa_passes;
795   NEXT_PASS (pass_ipa_whole_program_visibility);
796   NEXT_PASS (pass_ipa_cp);
797   NEXT_PASS (pass_ipa_inline);
798   NEXT_PASS (pass_ipa_reference);
799   NEXT_PASS (pass_ipa_pure_const);
800   NEXT_PASS (pass_ipa_type_escape);
801   NEXT_PASS (pass_ipa_pta);
802   NEXT_PASS (pass_ipa_struct_reorg);
803   *p = NULL;
804
805   p = &all_lto_gen_passes;
806   NEXT_PASS (pass_ipa_lto_gimple_out);
807   NEXT_PASS (pass_ipa_lto_wpa_fixup);
808   NEXT_PASS (pass_ipa_lto_finish_out);  /* This must be the last LTO pass.  */
809   *p = NULL;
810
811   /* These passes are run after IPA passes on every function that is being
812      output to the assembler file.  */
813   p = &all_passes;
814   NEXT_PASS (pass_lower_eh_dispatch);
815   NEXT_PASS (pass_all_optimizations);
816     {
817       struct opt_pass **p = &pass_all_optimizations.pass.sub;
818       NEXT_PASS (pass_remove_cgraph_callee_edges);
819       /* Initial scalar cleanups before alias computation.
820          They ensure memory accesses are not indirect wherever possible.  */
821       NEXT_PASS (pass_strip_predict_hints);
822       NEXT_PASS (pass_update_address_taken);
823       NEXT_PASS (pass_rename_ssa_copies);
824       NEXT_PASS (pass_complete_unrolli);
825       NEXT_PASS (pass_ccp);
826       NEXT_PASS (pass_forwprop);
827       NEXT_PASS (pass_call_cdce);
828       /* pass_build_alias is a dummy pass that ensures that we
829          execute TODO_rebuild_alias at this point.  Re-building
830          alias information also rewrites no longer addressed
831          locals into SSA form if possible.  */
832       NEXT_PASS (pass_build_alias);
833       NEXT_PASS (pass_return_slot);
834       NEXT_PASS (pass_phiprop);
835       NEXT_PASS (pass_fre);
836       NEXT_PASS (pass_copy_prop);
837       NEXT_PASS (pass_merge_phi);
838       NEXT_PASS (pass_vrp);
839       NEXT_PASS (pass_dce);
840       NEXT_PASS (pass_cselim);
841       NEXT_PASS (pass_tree_ifcombine);
842       NEXT_PASS (pass_phiopt);
843       NEXT_PASS (pass_tail_recursion);
844       NEXT_PASS (pass_ch);
845       NEXT_PASS (pass_stdarg);
846       NEXT_PASS (pass_lower_complex);
847       NEXT_PASS (pass_sra);
848       NEXT_PASS (pass_rename_ssa_copies);
849       /* The dom pass will also resolve all __builtin_constant_p calls
850          that are still there to 0.  This has to be done after some
851          propagations have already run, but before some more dead code
852          is removed, and this place fits nicely.  Remember this when
853          trying to move or duplicate pass_dominator somewhere earlier.  */
854       NEXT_PASS (pass_dominator);
855       /* The only const/copy propagation opportunities left after
856          DOM should be due to degenerate PHI nodes.  So rather than
857          run the full propagators, run a specialized pass which
858          only examines PHIs to discover const/copy propagation
859          opportunities.  */
860       NEXT_PASS (pass_phi_only_cprop);
861       NEXT_PASS (pass_dse);
862       NEXT_PASS (pass_reassoc);
863       NEXT_PASS (pass_dce);
864       NEXT_PASS (pass_forwprop);
865       NEXT_PASS (pass_phiopt);
866       NEXT_PASS (pass_object_sizes);
867       NEXT_PASS (pass_ccp);
868       NEXT_PASS (pass_copy_prop);
869       NEXT_PASS (pass_cse_sincos);
870       NEXT_PASS (pass_optimize_bswap);
871       NEXT_PASS (pass_split_crit_edges);
872       NEXT_PASS (pass_pre);
873       NEXT_PASS (pass_sink_code);
874       NEXT_PASS (pass_tree_loop);
875         {
876           struct opt_pass **p = &pass_tree_loop.pass.sub;
877           NEXT_PASS (pass_tree_loop_init);
878           NEXT_PASS (pass_copy_prop);
879           NEXT_PASS (pass_dce_loop);
880           NEXT_PASS (pass_lim);
881           NEXT_PASS (pass_tree_unswitch);
882           NEXT_PASS (pass_scev_cprop);
883           NEXT_PASS (pass_record_bounds);
884           NEXT_PASS (pass_check_data_deps);
885           NEXT_PASS (pass_loop_distribution);
886           NEXT_PASS (pass_linear_transform);
887           NEXT_PASS (pass_graphite_transforms);
888             {
889               struct opt_pass **p = &pass_graphite_transforms.pass.sub;
890               NEXT_PASS (pass_dce_loop);
891               NEXT_PASS (pass_lim);
892             }
893           NEXT_PASS (pass_iv_canon);
894           NEXT_PASS (pass_if_conversion);
895           NEXT_PASS (pass_vectorize);
896             {
897               struct opt_pass **p = &pass_vectorize.pass.sub;
898               NEXT_PASS (pass_lower_vector_ssa);
899               NEXT_PASS (pass_dce_loop);
900             }
901           NEXT_PASS (pass_predcom);
902           NEXT_PASS (pass_complete_unroll);
903           NEXT_PASS (pass_slp_vectorize);
904           NEXT_PASS (pass_parallelize_loops);
905           NEXT_PASS (pass_loop_prefetch);
906           NEXT_PASS (pass_iv_optimize);
907           NEXT_PASS (pass_tree_loop_done);
908         }
909       NEXT_PASS (pass_cse_reciprocals);
910       NEXT_PASS (pass_reassoc);
911       NEXT_PASS (pass_vrp);
912       NEXT_PASS (pass_dominator);
913       /* The only const/copy propagation opportunities left after
914          DOM should be due to degenerate PHI nodes.  So rather than
915          run the full propagators, run a specialized pass which
916          only examines PHIs to discover const/copy propagation
917          opportunities.  */
918       NEXT_PASS (pass_phi_only_cprop);
919       NEXT_PASS (pass_cd_dce);
920       NEXT_PASS (pass_tracer);
921
922       /* FIXME: If DCE is not run before checking for uninitialized uses,
923          we may get false warnings (e.g., testsuite/gcc.dg/uninit-5.c).
924          However, this also causes us to misdiagnose cases that should be
925          real warnings (e.g., testsuite/gcc.dg/pr18501.c).
926
927          To fix the false positives in uninit-5.c, we would have to
928          account for the predicates protecting the set and the use of each
929          variable.  Using a representation like Gated Single Assignment
930          may help.  */
931       NEXT_PASS (pass_late_warn_uninitialized);
932       NEXT_PASS (pass_dse);
933       NEXT_PASS (pass_forwprop);
934       NEXT_PASS (pass_phiopt);
935       NEXT_PASS (pass_fold_builtins);
936       NEXT_PASS (pass_tail_calls);
937       NEXT_PASS (pass_rename_ssa_copies);
938       NEXT_PASS (pass_uncprop);
939       NEXT_PASS (pass_local_pure_const);
940     }
941   NEXT_PASS (pass_cleanup_eh);
942   NEXT_PASS (pass_lower_resx);
943   NEXT_PASS (pass_nrv);
944   NEXT_PASS (pass_mudflap_2);
945   NEXT_PASS (pass_cleanup_cfg_post_optimizing);
946   NEXT_PASS (pass_warn_function_noreturn);
947
948   NEXT_PASS (pass_expand);
949
950   NEXT_PASS (pass_rest_of_compilation);
951     {
952       struct opt_pass **p = &pass_rest_of_compilation.pass.sub;
953       NEXT_PASS (pass_init_function);
954       NEXT_PASS (pass_jump);
955       NEXT_PASS (pass_rtl_eh);
956       NEXT_PASS (pass_initial_value_sets);
957       NEXT_PASS (pass_unshare_all_rtl);
958       NEXT_PASS (pass_instantiate_virtual_regs);
959       NEXT_PASS (pass_into_cfg_layout_mode);
960       NEXT_PASS (pass_jump2);
961       NEXT_PASS (pass_lower_subreg);
962       NEXT_PASS (pass_df_initialize_opt);
963       NEXT_PASS (pass_cse);
964       NEXT_PASS (pass_rtl_fwprop);
965       NEXT_PASS (pass_rtl_cprop);
966       NEXT_PASS (pass_rtl_pre);
967       NEXT_PASS (pass_rtl_hoist);
968       NEXT_PASS (pass_rtl_cprop);
969       NEXT_PASS (pass_rtl_store_motion);
970       NEXT_PASS (pass_cse_after_global_opts);
971       NEXT_PASS (pass_rtl_ifcvt);
972       NEXT_PASS (pass_reginfo_init);
973       /* Perform loop optimizations.  It might be better to do them a bit
974          sooner, but we want the profile feedback to work more
975          efficiently.  */
976       NEXT_PASS (pass_loop2);
977         {
978           struct opt_pass **p = &pass_loop2.pass.sub;
979           NEXT_PASS (pass_rtl_loop_init);
980           NEXT_PASS (pass_rtl_move_loop_invariants);
981           NEXT_PASS (pass_rtl_unswitch);
982           NEXT_PASS (pass_rtl_unroll_and_peel_loops);
983           NEXT_PASS (pass_rtl_doloop);
984           NEXT_PASS (pass_rtl_loop_done);
985           *p = NULL;
986         }
987       NEXT_PASS (pass_web);
988       NEXT_PASS (pass_rtl_cprop);
989       NEXT_PASS (pass_cse2);
990       NEXT_PASS (pass_rtl_dse1);
991       NEXT_PASS (pass_rtl_fwprop_addr);
992       NEXT_PASS (pass_inc_dec);
993       NEXT_PASS (pass_initialize_regs);
994       NEXT_PASS (pass_ud_rtl_dce);
995       NEXT_PASS (pass_combine);
996       NEXT_PASS (pass_if_after_combine);
997       NEXT_PASS (pass_partition_blocks);
998       NEXT_PASS (pass_regmove);
999       NEXT_PASS (pass_outof_cfg_layout_mode);
1000       NEXT_PASS (pass_split_all_insns);
1001       NEXT_PASS (pass_lower_subreg2);
1002       NEXT_PASS (pass_df_initialize_no_opt);
1003       NEXT_PASS (pass_stack_ptr_mod);
1004       NEXT_PASS (pass_mode_switching);
1005       NEXT_PASS (pass_match_asm_constraints);
1006       NEXT_PASS (pass_sms);
1007       NEXT_PASS (pass_sched);
1008       NEXT_PASS (pass_ira);
1009       NEXT_PASS (pass_postreload);
1010         {
1011           struct opt_pass **p = &pass_postreload.pass.sub;
1012           NEXT_PASS (pass_postreload_cse);
1013           NEXT_PASS (pass_gcse2);
1014           NEXT_PASS (pass_split_after_reload);
1015           NEXT_PASS (pass_branch_target_load_optimize1);
1016           NEXT_PASS (pass_thread_prologue_and_epilogue);
1017           NEXT_PASS (pass_rtl_dse2);
1018           NEXT_PASS (pass_stack_adjustments);
1019           NEXT_PASS (pass_peephole2);
1020           NEXT_PASS (pass_if_after_reload);
1021           NEXT_PASS (pass_regrename);
1022           NEXT_PASS (pass_cprop_hardreg);
1023           NEXT_PASS (pass_fast_rtl_dce);
1024           NEXT_PASS (pass_reorder_blocks);
1025           NEXT_PASS (pass_branch_target_load_optimize2);
1026           NEXT_PASS (pass_leaf_regs);
1027           NEXT_PASS (pass_split_before_sched2);
1028           NEXT_PASS (pass_sched2);
1029           NEXT_PASS (pass_stack_regs);
1030             {
1031               struct opt_pass **p = &pass_stack_regs.pass.sub;
1032               NEXT_PASS (pass_split_before_regstack);
1033               NEXT_PASS (pass_stack_regs_run);
1034             }
1035           NEXT_PASS (pass_compute_alignments);
1036           NEXT_PASS (pass_duplicate_computed_gotos);
1037           NEXT_PASS (pass_variable_tracking);
1038           NEXT_PASS (pass_free_cfg);
1039           NEXT_PASS (pass_machine_reorg);
1040           NEXT_PASS (pass_cleanup_barriers);
1041           NEXT_PASS (pass_delay_slots);
1042           NEXT_PASS (pass_split_for_shorten_branches);
1043           NEXT_PASS (pass_convert_to_eh_region_ranges);
1044           NEXT_PASS (pass_shorten_branches);
1045           NEXT_PASS (pass_set_nothrow_function_flags);
1046           NEXT_PASS (pass_final);
1047         }
1048       NEXT_PASS (pass_df_finish);
1049     }
1050   NEXT_PASS (pass_clean_state);
1051   *p = NULL;
1052
1053 #undef NEXT_PASS
1054
1055   /* Register the passes with the tree dump code.  */
1056   register_dump_files (all_lowering_passes, PROP_gimple_any);
1057   register_dump_files (all_small_ipa_passes,
1058                        PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh
1059                        | PROP_cfg);
1060   register_dump_files (all_regular_ipa_passes,
1061                        PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh
1062                        | PROP_cfg);
1063   register_dump_files (all_lto_gen_passes,
1064                        PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh
1065                        | PROP_cfg);
1066   register_dump_files (all_passes,
1067                        PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh
1068                        | PROP_cfg);
1069 }
1070
1071 /* If we are in IPA mode (i.e., current_function_decl is NULL), call
1072    function CALLBACK for every function in the call graph.  Otherwise,
1073    call CALLBACK on the current function.  */
1074
1075 static void
1076 do_per_function (void (*callback) (void *data), void *data)
1077 {
1078   if (current_function_decl)
1079     callback (data);
1080   else
1081     {
1082       struct cgraph_node *node;
1083       for (node = cgraph_nodes; node; node = node->next)
1084         if (node->analyzed && gimple_has_body_p (node->decl)
1085             && (!node->clone_of || node->decl != node->clone_of->decl))
1086           {
1087             push_cfun (DECL_STRUCT_FUNCTION (node->decl));
1088             current_function_decl = node->decl;
1089             callback (data);
1090             if (!flag_wpa)
1091               {
1092                 free_dominance_info (CDI_DOMINATORS);
1093                 free_dominance_info (CDI_POST_DOMINATORS);
1094               }
1095             current_function_decl = NULL;
1096             pop_cfun ();
1097             ggc_collect ();
1098           }
1099     }
1100 }
1101
1102 /* Because inlining might remove no-longer reachable nodes, we need to
1103    keep the array visible to garbage collector to avoid reading collected
1104    out nodes.  */
1105 static int nnodes;
1106 static GTY ((length ("nnodes"))) struct cgraph_node **order;
1107
1108 /* If we are in IPA mode (i.e., current_function_decl is NULL), call
1109    function CALLBACK for every function in the call graph.  Otherwise,
1110    call CALLBACK on the current function.
1111    This function is global so that plugins can use it.  */
1112 void
1113 do_per_function_toporder (void (*callback) (void *data), void *data)
1114 {
1115   int i;
1116
1117   if (current_function_decl)
1118     callback (data);
1119   else
1120     {
1121       gcc_assert (!order);
1122       order = GGC_NEWVEC (struct cgraph_node *, cgraph_n_nodes);
1123       nnodes = cgraph_postorder (order);
1124       for (i = nnodes - 1; i >= 0; i--)
1125         order[i]->process = 1;
1126       for (i = nnodes - 1; i >= 0; i--)
1127         {
1128           struct cgraph_node *node = order[i];
1129
1130           /* Allow possibly removed nodes to be garbage collected.  */
1131           order[i] = NULL;
1132           node->process = 0;
1133           if (node->analyzed)
1134             {
1135               push_cfun (DECL_STRUCT_FUNCTION (node->decl));
1136               current_function_decl = node->decl;
1137               callback (data);
1138               free_dominance_info (CDI_DOMINATORS);
1139               free_dominance_info (CDI_POST_DOMINATORS);
1140               current_function_decl = NULL;
1141               pop_cfun ();
1142               ggc_collect ();
1143             }
1144         }
1145     }
1146   ggc_free (order);
1147   order = NULL;
1148   nnodes = 0;
1149 }
1150
1151 /* Perform all TODO actions that ought to be done on each function.  */
1152
1153 static void
1154 execute_function_todo (void *data)
1155 {
1156   unsigned int flags = (size_t)data;
1157   if (cfun->curr_properties & PROP_ssa)
1158     flags |= TODO_verify_ssa;
1159   flags &= ~cfun->last_verified;
1160   if (!flags)
1161     return;
1162
1163   statistics_fini_pass ();
1164
1165   /* Always cleanup the CFG before trying to update SSA.  */
1166   if (flags & TODO_cleanup_cfg)
1167     {
1168       bool cleanup = cleanup_tree_cfg ();
1169
1170       if (cleanup && (cfun->curr_properties & PROP_ssa))
1171         flags |= TODO_remove_unused_locals;
1172
1173       /* When cleanup_tree_cfg merges consecutive blocks, it may
1174          perform some simplistic propagation when removing single
1175          valued PHI nodes.  This propagation may, in turn, cause the
1176          SSA form to become out-of-date (see PR 22037).  So, even
1177          if the parent pass had not scheduled an SSA update, we may
1178          still need to do one.  */
1179       if (!(flags & TODO_update_ssa_any) && need_ssa_update_p (cfun))
1180         flags |= TODO_update_ssa;
1181     }
1182
1183   if (flags & TODO_update_ssa_any)
1184     {
1185       unsigned update_flags = flags & TODO_update_ssa_any;
1186       update_ssa (update_flags);
1187       cfun->last_verified &= ~TODO_verify_ssa;
1188     }
1189
1190   if (flags & TODO_update_address_taken)
1191     execute_update_addresses_taken (true);
1192
1193   if (flags & TODO_rebuild_alias)
1194     {
1195       if (!(flags & TODO_update_address_taken))
1196         execute_update_addresses_taken (true);
1197       compute_may_aliases ();
1198     }
1199
1200   if (flags & TODO_remove_unused_locals)
1201     remove_unused_locals ();
1202
1203   if ((flags & TODO_dump_func) && dump_file && current_function_decl)
1204     {
1205       if (cfun->curr_properties & PROP_trees)
1206         dump_function_to_file (current_function_decl, dump_file, dump_flags);
1207       else
1208         {
1209           if (dump_flags & TDF_SLIM)
1210             print_rtl_slim_with_bb (dump_file, get_insns (), dump_flags);
1211           else if ((cfun->curr_properties & PROP_cfg)
1212                    && (dump_flags & TDF_BLOCKS))
1213             print_rtl_with_bb (dump_file, get_insns ());
1214           else
1215             print_rtl (dump_file, get_insns ());
1216
1217           if ((cfun->curr_properties & PROP_cfg)
1218               && graph_dump_format != no_graph
1219               && (dump_flags & TDF_GRAPH))
1220             print_rtl_graph_with_bb (dump_file_name, get_insns ());
1221         }
1222
1223       /* Flush the file.  If verification fails, we won't be able to
1224          close the file before aborting.  */
1225       fflush (dump_file);
1226     }
1227
1228   if (flags & TODO_rebuild_frequencies)
1229     {
1230       if (profile_status == PROFILE_GUESSED)
1231         {
1232           loop_optimizer_init (0);
1233           add_noreturn_fake_exit_edges ();
1234           mark_irreducible_loops ();
1235           connect_infinite_loops_to_exit ();
1236           estimate_bb_frequencies ();
1237           remove_fake_exit_edges ();
1238           loop_optimizer_finalize ();
1239         }
1240       else if (profile_status == PROFILE_READ)
1241         counts_to_freqs ();
1242       else
1243         gcc_unreachable ();
1244     }
1245
1246 #if defined ENABLE_CHECKING
1247   if (flags & TODO_verify_ssa)
1248     verify_ssa (true);
1249   if (flags & TODO_verify_flow)
1250     verify_flow_info ();
1251   if (flags & TODO_verify_stmts)
1252     verify_stmts ();
1253   if (flags & TODO_verify_loops)
1254     verify_loop_closed_ssa ();
1255   if (flags & TODO_verify_rtl_sharing)
1256     verify_rtl_sharing ();
1257 #endif
1258
1259   cfun->last_verified = flags & TODO_verify_all;
1260 }
1261
1262 /* Perform all TODO actions.  */
1263 static void
1264 execute_todo (unsigned int flags)
1265 {
1266 #if defined ENABLE_CHECKING
1267   if (cfun
1268       && need_ssa_update_p (cfun))
1269     gcc_assert (flags & TODO_update_ssa_any);
1270 #endif
1271
1272   /* Inform the pass whether it is the first time it is run.  */
1273   first_pass_instance = (flags & TODO_mark_first_instance) != 0;
1274
1275   do_per_function (execute_function_todo, (void *)(size_t) flags);
1276
1277   /* Always remove functions just as before inlining: IPA passes might be
1278      interested to see bodies of extern inline functions that are not inlined
1279      to analyze side effects.  The full removal is done just at the end
1280      of IPA pass queue.  */
1281   if (flags & TODO_remove_functions)
1282     {
1283       gcc_assert (!cfun);
1284       cgraph_remove_unreachable_nodes (true, dump_file);
1285     }
1286
1287   if ((flags & TODO_dump_cgraph) && dump_file && !current_function_decl)
1288     {
1289       gcc_assert (!cfun);
1290       dump_cgraph (dump_file);
1291       /* Flush the file.  If verification fails, we won't be able to
1292          close the file before aborting.  */
1293       fflush (dump_file);
1294     }
1295
1296   if (flags & TODO_ggc_collect)
1297     ggc_collect ();
1298
1299   /* Now that the dumping has been done, we can get rid of the optional
1300      df problems.  */
1301   if (flags & TODO_df_finish)
1302     df_finish_pass ((flags & TODO_df_verify) != 0);
1303 }
1304
1305 /* Verify invariants that should hold between passes.  This is a place
1306    to put simple sanity checks.  */
1307
1308 static void
1309 verify_interpass_invariants (void)
1310 {
1311 #ifdef ENABLE_CHECKING
1312   gcc_assert (!fold_deferring_overflow_warnings_p ());
1313 #endif
1314 }
1315
1316 /* Clear the last verified flag.  */
1317
1318 static void
1319 clear_last_verified (void *data ATTRIBUTE_UNUSED)
1320 {
1321   cfun->last_verified = 0;
1322 }
1323
1324 /* Helper function. Verify that the properties has been turn into the
1325    properties expected by the pass.  */
1326
1327 #ifdef ENABLE_CHECKING
1328 static void
1329 verify_curr_properties (void *data)
1330 {
1331   unsigned int props = (size_t)data;
1332   gcc_assert ((cfun->curr_properties & props) == props);
1333 }
1334 #endif
1335
1336 /* Initialize pass dump file.  */
1337 /* This is non-static so that the plugins can use it.  */
1338
1339 bool
1340 pass_init_dump_file (struct opt_pass *pass)
1341 {
1342   /* If a dump file name is present, open it if enabled.  */
1343   if (pass->static_pass_number != -1)
1344     {
1345       bool initializing_dump = !dump_initialized_p (pass->static_pass_number);
1346       dump_file_name = get_dump_file_name (pass->static_pass_number);
1347       dump_file = dump_begin (pass->static_pass_number, &dump_flags);
1348       if (dump_file && current_function_decl)
1349         {
1350           const char *dname, *aname;
1351           dname = lang_hooks.decl_printable_name (current_function_decl, 2);
1352           aname = (IDENTIFIER_POINTER
1353                    (DECL_ASSEMBLER_NAME (current_function_decl)));
1354           fprintf (dump_file, "\n;; Function %s (%s)%s\n\n", dname, aname,
1355              cfun->function_frequency == FUNCTION_FREQUENCY_HOT
1356              ? " (hot)"
1357              : cfun->function_frequency == FUNCTION_FREQUENCY_UNLIKELY_EXECUTED
1358              ? " (unlikely executed)"
1359              : "");
1360         }
1361       return initializing_dump;
1362     }
1363   else
1364     return false;
1365 }
1366
1367 /* Flush PASS dump file.  */
1368 /* This is non-static so that plugins can use it.  */
1369
1370 void
1371 pass_fini_dump_file (struct opt_pass *pass)
1372 {
1373   /* Flush and close dump file.  */
1374   if (dump_file_name)
1375     {
1376       free (CONST_CAST (char *, dump_file_name));
1377       dump_file_name = NULL;
1378     }
1379
1380   if (dump_file)
1381     {
1382       dump_end (pass->static_pass_number, dump_file);
1383       dump_file = NULL;
1384     }
1385 }
1386
1387 /* After executing the pass, apply expected changes to the function
1388    properties. */
1389
1390 static void
1391 update_properties_after_pass (void *data)
1392 {
1393   struct opt_pass *pass = (struct opt_pass *) data;
1394   cfun->curr_properties = (cfun->curr_properties | pass->properties_provided)
1395                            & ~pass->properties_destroyed;
1396 }
1397
1398 /* Execute summary generation for all of the passes in IPA_PASS.  */
1399
1400 void
1401 execute_ipa_summary_passes (struct ipa_opt_pass_d *ipa_pass)
1402 {
1403   while (ipa_pass)
1404     {
1405       struct opt_pass *pass = &ipa_pass->pass;
1406
1407       /* Execute all of the IPA_PASSes in the list.  */
1408       if (ipa_pass->pass.type == IPA_PASS
1409           && (!pass->gate || pass->gate ())
1410           && ipa_pass->generate_summary)
1411         {
1412           pass_init_dump_file (pass);
1413
1414           /* If a timevar is present, start it.  */
1415           if (pass->tv_id)
1416             timevar_push (pass->tv_id);
1417
1418           ipa_pass->generate_summary ();
1419
1420           /* Stop timevar.  */
1421           if (pass->tv_id)
1422             timevar_pop (pass->tv_id);
1423
1424           pass_fini_dump_file (pass);
1425         }
1426       ipa_pass = (struct ipa_opt_pass_d *)ipa_pass->pass.next;
1427     }
1428 }
1429
1430 /* Execute IPA_PASS function transform on NODE.  */
1431
1432 static void
1433 execute_one_ipa_transform_pass (struct cgraph_node *node,
1434                                 struct ipa_opt_pass_d *ipa_pass)
1435 {
1436   struct opt_pass *pass = &ipa_pass->pass;
1437   unsigned int todo_after = 0;
1438
1439   current_pass = pass;
1440   if (!ipa_pass->function_transform)
1441     return;
1442
1443   /* Note that the folders should only create gimple expressions.
1444      This is a hack until the new folder is ready.  */
1445   in_gimple_form = (cfun && (cfun->curr_properties & PROP_trees)) != 0;
1446
1447   pass_init_dump_file (pass);
1448
1449   /* Run pre-pass verification.  */
1450   execute_todo (ipa_pass->function_transform_todo_flags_start);
1451
1452   /* If a timevar is present, start it.  */
1453   if (pass->tv_id != TV_NONE)
1454     timevar_push (pass->tv_id);
1455
1456   /* Do it!  */
1457   todo_after = ipa_pass->function_transform (node);
1458
1459   /* Stop timevar.  */
1460   if (pass->tv_id != TV_NONE)
1461     timevar_pop (pass->tv_id);
1462
1463   /* Run post-pass cleanup and verification.  */
1464   execute_todo (todo_after);
1465   verify_interpass_invariants ();
1466
1467   pass_fini_dump_file (pass);
1468
1469   current_pass = NULL;
1470 }
1471
1472 /* For the current function, execute all ipa transforms. */
1473
1474 void
1475 execute_all_ipa_transforms (void)
1476 {
1477   struct cgraph_node *node;
1478   if (!cfun)
1479     return;
1480   node = cgraph_node (current_function_decl);
1481   if (node->ipa_transforms_to_apply)
1482     {
1483       unsigned int i;
1484
1485       for (i = 0; i < VEC_length (ipa_opt_pass, node->ipa_transforms_to_apply);
1486            i++)
1487         execute_one_ipa_transform_pass (node,
1488                                         VEC_index (ipa_opt_pass,
1489                                                    node->ipa_transforms_to_apply,
1490                                                    i));
1491       VEC_free (ipa_opt_pass, heap, node->ipa_transforms_to_apply);
1492       node->ipa_transforms_to_apply = NULL;
1493     }
1494 }
1495
1496 /* Execute PASS. */
1497
1498 bool
1499 execute_one_pass (struct opt_pass *pass)
1500 {
1501   bool initializing_dump;
1502   unsigned int todo_after = 0;
1503
1504   bool gate_status;
1505
1506   /* IPA passes are executed on whole program, so cfun should be NULL.
1507      Other passes need function context set.  */
1508   if (pass->type == SIMPLE_IPA_PASS || pass->type == IPA_PASS)
1509     gcc_assert (!cfun && !current_function_decl);
1510   else
1511     gcc_assert (cfun && current_function_decl);
1512
1513   current_pass = pass;
1514
1515   /* Check whether gate check should be avoided.
1516      User controls the value of the gate through the parameter "gate_status". */
1517   gate_status = (pass->gate == NULL) ? true : pass->gate();
1518
1519   /* Override gate with plugin.  */
1520   invoke_plugin_callbacks (PLUGIN_OVERRIDE_GATE, &gate_status);
1521
1522   if (!gate_status)
1523     {
1524       current_pass = NULL;
1525       return false;
1526     }
1527
1528   /* Pass execution event trigger: useful to identify passes being
1529      executed.  */
1530   invoke_plugin_callbacks (PLUGIN_PASS_EXECUTION, pass);
1531
1532   if (!quiet_flag && !cfun)
1533     fprintf (stderr, " <%s>", pass->name ? pass->name : "");
1534
1535   /* Note that the folders should only create gimple expressions.
1536      This is a hack until the new folder is ready.  */
1537   in_gimple_form = (cfun && (cfun->curr_properties & PROP_trees)) != 0;
1538
1539   initializing_dump = pass_init_dump_file (pass);
1540
1541   /* Run pre-pass verification.  */
1542   execute_todo (pass->todo_flags_start);
1543
1544 #ifdef ENABLE_CHECKING
1545   do_per_function (verify_curr_properties,
1546                    (void *)(size_t)pass->properties_required);
1547 #endif
1548
1549   /* If a timevar is present, start it.  */
1550   if (pass->tv_id != TV_NONE)
1551     timevar_push (pass->tv_id);
1552
1553   /* Do it!  */
1554   if (pass->execute)
1555     {
1556       todo_after = pass->execute ();
1557       do_per_function (clear_last_verified, NULL);
1558     }
1559
1560   /* Stop timevar.  */
1561   if (pass->tv_id != TV_NONE)
1562     timevar_pop (pass->tv_id);
1563
1564   do_per_function (update_properties_after_pass, pass);
1565
1566   if (initializing_dump
1567       && dump_file
1568       && graph_dump_format != no_graph
1569       && cfun
1570       && (cfun->curr_properties & (PROP_cfg | PROP_rtl))
1571           == (PROP_cfg | PROP_rtl))
1572     {
1573       get_dump_file_info (pass->static_pass_number)->flags |= TDF_GRAPH;
1574       dump_flags |= TDF_GRAPH;
1575       clean_graph_dump_file (dump_file_name);
1576     }
1577
1578   /* Run post-pass cleanup and verification.  */
1579   execute_todo (todo_after | pass->todo_flags_finish);
1580   verify_interpass_invariants ();
1581   if (pass->type == IPA_PASS)
1582     {
1583       struct cgraph_node *node;
1584       for (node = cgraph_nodes; node; node = node->next)
1585         if (node->analyzed)
1586           VEC_safe_push (ipa_opt_pass, heap, node->ipa_transforms_to_apply,
1587                          (struct ipa_opt_pass_d *)pass);
1588     }
1589
1590   if (!current_function_decl)
1591     cgraph_process_new_functions ();
1592
1593   pass_fini_dump_file (pass);
1594
1595   if (pass->type != SIMPLE_IPA_PASS && pass->type != IPA_PASS)
1596     gcc_assert (!(cfun->curr_properties & PROP_trees)
1597                 || pass->type != RTL_PASS);
1598
1599   current_pass = NULL;
1600
1601   return true;
1602 }
1603
1604 void
1605 execute_pass_list (struct opt_pass *pass)
1606 {
1607   do
1608     {
1609       gcc_assert (pass->type == GIMPLE_PASS
1610                   || pass->type == RTL_PASS);
1611       if (execute_one_pass (pass) && pass->sub)
1612         execute_pass_list (pass->sub);
1613       pass = pass->next;
1614     }
1615   while (pass);
1616 }
1617
1618 /* Same as execute_pass_list but assume that subpasses of IPA passes
1619    are local passes. If SET is not NULL, write out summaries of only
1620    those node in SET. */
1621
1622 static void
1623 ipa_write_summaries_2 (struct opt_pass *pass, cgraph_node_set set,
1624                        struct lto_out_decl_state *state)
1625 {
1626   while (pass)
1627     {
1628       struct ipa_opt_pass_d *ipa_pass = (struct ipa_opt_pass_d *)pass;
1629       gcc_assert (!current_function_decl);
1630       gcc_assert (!cfun);
1631       gcc_assert (pass->type == SIMPLE_IPA_PASS || pass->type == IPA_PASS);
1632       if (pass->type == IPA_PASS
1633           && ipa_pass->write_summary
1634           && (!pass->gate || pass->gate ()))
1635         {
1636           /* If a timevar is present, start it.  */
1637           if (pass->tv_id)
1638             timevar_push (pass->tv_id);
1639
1640           ipa_pass->write_summary (set);
1641
1642           /* If a timevar is present, start it.  */
1643           if (pass->tv_id)
1644             timevar_pop (pass->tv_id);
1645         }
1646
1647       if (pass->sub && pass->sub->type != GIMPLE_PASS)
1648         ipa_write_summaries_2 (pass->sub, set, state);
1649
1650       pass = pass->next;
1651     }
1652 }
1653
1654 /* Helper function of ipa_write_summaries. Creates and destroys the
1655    decl state and calls ipa_write_summaries_2 for all passes that have
1656    summaries.  SET is the set of nodes to be written.  */
1657
1658 static void
1659 ipa_write_summaries_1 (cgraph_node_set set)
1660 {
1661   struct lto_out_decl_state *state = lto_new_out_decl_state ();
1662   lto_push_out_decl_state (state);
1663
1664   if (!flag_wpa)
1665     ipa_write_summaries_2 (all_regular_ipa_passes, set, state);
1666   ipa_write_summaries_2 (all_lto_gen_passes, set, state);
1667
1668   gcc_assert (lto_get_out_decl_state () == state);
1669   lto_pop_out_decl_state ();
1670   lto_delete_out_decl_state (state);
1671 }
1672
1673 /* Write out summaries for all the nodes in the callgraph.  */
1674
1675 void
1676 ipa_write_summaries (void)
1677 {
1678   cgraph_node_set set;
1679   struct cgraph_node **order;
1680   int i, order_pos;
1681
1682   if (!flag_generate_lto || errorcount || sorrycount)
1683     return;
1684
1685   lto_new_extern_inline_states ();
1686   set = cgraph_node_set_new ();
1687
1688   /* Create the callgraph set in the same order used in
1689      cgraph_expand_all_functions.  This mostly facilitates debugging,
1690      since it causes the gimple file to be processed in the same order
1691      as the source code.  */
1692   order = XCNEWVEC (struct cgraph_node *, cgraph_n_nodes);
1693   order_pos = cgraph_postorder (order);
1694   gcc_assert (order_pos == cgraph_n_nodes);
1695
1696   for (i = order_pos - 1; i >= 0; i--)
1697     {
1698       struct cgraph_node *node = order[i];
1699
1700       if (node->analyzed)
1701         {
1702           /* When streaming out references to statements as part of some IPA
1703              pass summary, the statements need to have uids assigned and the
1704              following does that for all the IPA passes here. Naturally, this
1705              ordering then matches the one IPA-passes get in their stmt_fixup
1706              hooks.  */
1707
1708           push_cfun (DECL_STRUCT_FUNCTION (node->decl));
1709           renumber_gimple_stmt_uids ();
1710           pop_cfun ();
1711         }
1712       cgraph_node_set_add (set, node);
1713     }
1714
1715   ipa_write_summaries_1 (set);
1716   lto_delete_extern_inline_states ();
1717
1718   free (order);
1719   ggc_free (set);
1720 }
1721
1722
1723 /* Write all the summaries for the cgraph nodes in SET.  If SET is
1724    NULL, write out all summaries of all nodes. */
1725
1726 void
1727 ipa_write_summaries_of_cgraph_node_set (cgraph_node_set set)
1728 {
1729   if (flag_generate_lto && !(errorcount || sorrycount))
1730     ipa_write_summaries_1 (set);
1731 }
1732
1733 /* Same as execute_pass_list but assume that subpasses of IPA passes
1734    are local passes.  */
1735
1736 static void
1737 ipa_read_summaries_1 (struct opt_pass *pass)
1738 {
1739   while (pass)
1740     {
1741       struct ipa_opt_pass_d *ipa_pass = (struct ipa_opt_pass_d *) pass;
1742
1743       gcc_assert (!current_function_decl);
1744       gcc_assert (!cfun);
1745       gcc_assert (pass->type == SIMPLE_IPA_PASS || pass->type == IPA_PASS);
1746
1747       if (pass->gate == NULL || pass->gate ())
1748         {
1749           if (pass->type == IPA_PASS && ipa_pass->read_summary)
1750             {
1751               /* If a timevar is present, start it.  */
1752               if (pass->tv_id)
1753                 timevar_push (pass->tv_id);
1754
1755               ipa_pass->read_summary ();
1756
1757               /* Stop timevar.  */
1758               if (pass->tv_id)
1759                 timevar_pop (pass->tv_id);
1760             }
1761
1762           if (pass->sub && pass->sub->type != GIMPLE_PASS)
1763             ipa_read_summaries_1 (pass->sub);
1764         }
1765       pass = pass->next;
1766     }
1767 }
1768
1769
1770 /* Read all the summaries for all_regular_ipa_passes and all_lto_gen_passes.  */
1771
1772 void
1773 ipa_read_summaries (void)
1774 {
1775   if (!flag_ltrans)
1776     ipa_read_summaries_1 (all_regular_ipa_passes);
1777   ipa_read_summaries_1 (all_lto_gen_passes);
1778 }
1779
1780 /* Same as execute_pass_list but assume that subpasses of IPA passes
1781    are local passes.  */
1782 void
1783 execute_ipa_pass_list (struct opt_pass *pass)
1784 {
1785   do
1786     {
1787       gcc_assert (!current_function_decl);
1788       gcc_assert (!cfun);
1789       gcc_assert (pass->type == SIMPLE_IPA_PASS || pass->type == IPA_PASS);
1790       if (execute_one_pass (pass) && pass->sub)
1791         {
1792           if (pass->sub->type == GIMPLE_PASS)
1793             {
1794               invoke_plugin_callbacks (PLUGIN_EARLY_GIMPLE_PASSES_START, NULL);
1795               do_per_function_toporder ((void (*)(void *))execute_pass_list,
1796                                         pass->sub);
1797               invoke_plugin_callbacks (PLUGIN_EARLY_GIMPLE_PASSES_END, NULL);
1798             }
1799           else if (pass->sub->type == SIMPLE_IPA_PASS
1800                    || pass->sub->type == IPA_PASS)
1801             execute_ipa_pass_list (pass->sub);
1802           else
1803             gcc_unreachable ();
1804         }
1805       gcc_assert (!current_function_decl);
1806       cgraph_process_new_functions ();
1807       pass = pass->next;
1808     }
1809   while (pass);
1810 }
1811
1812 /* Execute stmt fixup hooks of all passes in PASS for NODE and STMTS.  */
1813
1814 static void
1815 execute_ipa_stmt_fixups (struct opt_pass *pass,
1816                           struct cgraph_node *node, gimple *stmts)
1817 {
1818   while (pass)
1819     {
1820       /* Execute all of the IPA_PASSes in the list.  */
1821       if (pass->type == IPA_PASS
1822           && (!pass->gate || pass->gate ()))
1823         {
1824           struct ipa_opt_pass_d *ipa_pass = (struct ipa_opt_pass_d *) pass;
1825
1826           if (ipa_pass->stmt_fixup)
1827             {
1828               pass_init_dump_file (pass);
1829               /* If a timevar is present, start it.  */
1830               if (pass->tv_id)
1831                 timevar_push (pass->tv_id);
1832
1833               ipa_pass->stmt_fixup (node, stmts);
1834
1835               /* Stop timevar.  */
1836               if (pass->tv_id)
1837                 timevar_pop (pass->tv_id);
1838               pass_fini_dump_file (pass);
1839             }
1840           if (pass->sub)
1841             execute_ipa_stmt_fixups (pass->sub, node, stmts);
1842         }
1843       pass = pass->next;
1844     }
1845 }
1846
1847 /* Execute stmt fixup hooks of all IPA passes for NODE and STMTS.  */
1848
1849 void
1850 execute_all_ipa_stmt_fixups (struct cgraph_node *node, gimple *stmts)
1851 {
1852   execute_ipa_stmt_fixups (all_regular_ipa_passes, node, stmts);
1853 }
1854
1855
1856 extern void debug_properties (unsigned int);
1857 extern void dump_properties (FILE *, unsigned int);
1858
1859 void
1860 dump_properties (FILE *dump, unsigned int props)
1861 {
1862   fprintf (dump, "Properties:\n");
1863   if (props & PROP_gimple_any)
1864     fprintf (dump, "PROP_gimple_any\n");
1865   if (props & PROP_gimple_lcf)
1866     fprintf (dump, "PROP_gimple_lcf\n");
1867   if (props & PROP_gimple_leh)
1868     fprintf (dump, "PROP_gimple_leh\n");
1869   if (props & PROP_cfg)
1870     fprintf (dump, "PROP_cfg\n");
1871   if (props & PROP_referenced_vars)
1872     fprintf (dump, "PROP_referenced_vars\n");
1873   if (props & PROP_ssa)
1874     fprintf (dump, "PROP_ssa\n");
1875   if (props & PROP_no_crit_edges)
1876     fprintf (dump, "PROP_no_crit_edges\n");
1877   if (props & PROP_rtl)
1878     fprintf (dump, "PROP_rtl\n");
1879   if (props & PROP_gimple_lomp)
1880     fprintf (dump, "PROP_gimple_lomp\n");
1881 }
1882
1883 void
1884 debug_properties (unsigned int props)
1885 {
1886   dump_properties (stderr, props);
1887 }
1888
1889 /* Called by local passes to see if function is called by already processed nodes.
1890    Because we process nodes in topological order, this means that function is
1891    in recursive cycle or we introduced new direct calls.  */
1892 bool
1893 function_called_by_processed_nodes_p (void)
1894 {
1895   struct cgraph_edge *e;
1896   for (e = cgraph_node (current_function_decl)->callers; e; e = e->next_caller)
1897     {
1898       if (e->caller->decl == current_function_decl)
1899         continue;
1900       if (!e->caller->analyzed)
1901         continue;
1902       if (TREE_ASM_WRITTEN (e->caller->decl))
1903         continue;
1904       if (!e->caller->process && !e->caller->global.inlined_to)
1905         break;
1906     }
1907   if (dump_file && e)
1908     {
1909       fprintf (dump_file, "Already processed call to:\n");
1910       dump_cgraph_node (dump_file, e->caller);
1911     }
1912   return e != NULL;
1913 }
1914
1915 #include "gt-passes.h"