OSDN Git Service

* config/vax/netbsd-elf.h (NETBSD_CC1_AND_CC1PLUS_SPEC): Define as
[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
88 #if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO)
89 #include "dwarf2out.h"
90 #endif
91
92 #if defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO)
93 #include "dbxout.h"
94 #endif
95
96 #ifdef SDB_DEBUGGING_INFO
97 #include "sdbout.h"
98 #endif
99
100 #ifdef XCOFF_DEBUGGING_INFO
101 #include "xcoffout.h"           /* Needed for external data
102                                    declarations for e.g. AIX 4.x.  */
103 #endif
104
105 /* This is used for debugging.  It allows the current pass to printed
106    from anywhere in compilation.  */
107 struct opt_pass *current_pass;
108
109 /* Call from anywhere to find out what pass this is.  Useful for
110    printing out debugging information deep inside an service
111    routine.  */
112 void
113 print_current_pass (FILE *file)
114 {
115   if (current_pass)
116     fprintf (file, "current pass = %s (%d)\n", 
117              current_pass->name, current_pass->static_pass_number);
118   else
119     fprintf (file, "no current pass.\n");
120 }
121
122
123 /* Call from the debugger to get the current pass name.  */
124 void
125 debug_pass (void)
126 {
127   print_current_pass (stderr);
128
129
130
131
132 /* Global variables used to communicate with passes.  */
133 int dump_flags;
134 bool in_gimple_form;
135 bool first_pass_instance;
136
137
138 /* This is called from various places for FUNCTION_DECL, VAR_DECL,
139    and TYPE_DECL nodes.
140
141    This does nothing for local (non-static) variables, unless the
142    variable is a register variable with DECL_ASSEMBLER_NAME set.  In
143    that case, or if the variable is not an automatic, it sets up the
144    RTL and outputs any assembler code (label definition, storage
145    allocation and initialization).
146
147    DECL is the declaration.  TOP_LEVEL is nonzero
148    if this declaration is not within a function.  */
149
150 void
151 rest_of_decl_compilation (tree decl,
152                           int top_level,
153                           int at_end)
154 {
155   /* We deferred calling assemble_alias so that we could collect
156      other attributes such as visibility.  Emit the alias now.  */
157   {
158     tree alias;
159     alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl));
160     if (alias)
161       {
162         alias = TREE_VALUE (TREE_VALUE (alias));
163         alias = get_identifier (TREE_STRING_POINTER (alias));
164         assemble_alias (decl, alias);
165       }
166   }
167
168   /* Can't defer this, because it needs to happen before any
169      later function definitions are processed.  */
170   if (DECL_ASSEMBLER_NAME_SET_P (decl) && DECL_REGISTER (decl))
171     make_decl_rtl (decl);
172
173   /* Forward declarations for nested functions are not "external",
174      but we need to treat them as if they were.  */
175   if (TREE_STATIC (decl) || DECL_EXTERNAL (decl)
176       || TREE_CODE (decl) == FUNCTION_DECL)
177     {
178       timevar_push (TV_VARCONST);
179
180       /* Don't output anything when a tentative file-scope definition
181          is seen.  But at end of compilation, do output code for them.
182
183          We do output all variables and rely on
184          callgraph code to defer them except for forward declarations
185          (see gcc.c-torture/compile/920624-1.c) */
186       if ((at_end
187            || !DECL_DEFER_OUTPUT (decl)
188            || DECL_INITIAL (decl))
189           && !DECL_EXTERNAL (decl))
190         {
191           if (TREE_CODE (decl) != FUNCTION_DECL)
192             varpool_finalize_decl (decl);
193           else
194             assemble_variable (decl, top_level, at_end, 0);
195         }
196
197 #ifdef ASM_FINISH_DECLARE_OBJECT
198       if (decl == last_assemble_variable_decl)
199         {
200           ASM_FINISH_DECLARE_OBJECT (asm_out_file, decl,
201                                      top_level, at_end);
202         }
203 #endif
204
205       timevar_pop (TV_VARCONST);
206     }
207   else if (TREE_CODE (decl) == TYPE_DECL
208            /* Like in rest_of_type_compilation, avoid confusing the debug
209               information machinery when there are errors.  */
210            && !(sorrycount || errorcount))
211     {
212       timevar_push (TV_SYMOUT);
213       debug_hooks->type_decl (decl, !top_level);
214       timevar_pop (TV_SYMOUT);
215     }
216
217   /* Let cgraph know about the existence of variables.  */
218   if (TREE_CODE (decl) == VAR_DECL && !DECL_EXTERNAL (decl))
219     varpool_node (decl);
220 }
221
222 /* Called after finishing a record, union or enumeral type.  */
223
224 void
225 rest_of_type_compilation (tree type, int toplev)
226 {
227   /* Avoid confusing the debug information machinery when there are
228      errors.  */
229   if (errorcount != 0 || sorrycount != 0)
230     return;
231
232   timevar_push (TV_SYMOUT);
233   debug_hooks->type_decl (TYPE_STUB_DECL (type), !toplev);
234   timevar_pop (TV_SYMOUT);
235 }
236
237 \f
238
239 void
240 finish_optimization_passes (void)
241 {
242   int i;
243   struct dump_file_info *dfi;
244   char *name;
245
246   timevar_push (TV_DUMP);
247   if (profile_arc_flag || flag_test_coverage || flag_branch_probabilities)
248     {
249       dump_file = dump_begin (pass_profile.pass.static_pass_number, NULL);
250       end_branch_prob ();
251       if (dump_file)
252         dump_end (pass_profile.pass.static_pass_number, dump_file);
253     }
254
255   if (optimize > 0)
256     {
257       dump_file = dump_begin (pass_combine.pass.static_pass_number, NULL);
258       if (dump_file)
259         {
260           dump_combine_total_stats (dump_file);
261           dump_end (pass_combine.pass.static_pass_number, dump_file);
262         }
263     }
264
265   /* Do whatever is necessary to finish printing the graphs.  */
266   if (graph_dump_format != no_graph)
267     for (i = TDI_end; (dfi = get_dump_file_info (i)) != NULL; ++i)
268       if (dump_initialized_p (i)
269           && (dfi->flags & TDF_GRAPH) != 0
270           && (name = get_dump_file_name (i)) != NULL)
271         {
272           finish_graph_dump_file (name);
273           free (name);
274         }
275
276   timevar_pop (TV_DUMP);
277 }
278
279 static bool
280 gate_rest_of_compilation (void)
281 {
282   /* Early return if there were errors.  We can run afoul of our
283      consistency checks, and there's not really much point in fixing them.  */
284   return !(rtl_dump_and_exit || flag_syntax_only || errorcount || sorrycount);
285 }
286
287 struct gimple_opt_pass pass_rest_of_compilation =
288 {
289  {
290   GIMPLE_PASS,
291   "*rest_of_compilation",               /* name */
292   gate_rest_of_compilation,             /* gate */
293   NULL,                                 /* execute */
294   NULL,                                 /* sub */
295   NULL,                                 /* next */
296   0,                                    /* static_pass_number */
297   TV_REST_OF_COMPILATION,               /* tv_id */
298   PROP_rtl,                             /* properties_required */
299   0,                                    /* properties_provided */
300   0,                                    /* properties_destroyed */
301   0,                                    /* todo_flags_start */
302   TODO_ggc_collect                      /* todo_flags_finish */
303  }
304 };
305
306 static bool
307 gate_postreload (void)
308 {
309   return reload_completed;
310 }
311
312 struct rtl_opt_pass pass_postreload =
313 {
314  {
315   RTL_PASS,
316   NULL,                                 /* name */
317   gate_postreload,                      /* gate */
318   NULL,                                 /* execute */
319   NULL,                                 /* sub */
320   NULL,                                 /* next */
321   0,                                    /* static_pass_number */
322   TV_NONE,                              /* tv_id */
323   PROP_rtl,                             /* properties_required */
324   0,                                    /* properties_provided */
325   0,                                    /* properties_destroyed */
326   0,                                    /* todo_flags_start */
327   TODO_ggc_collect | TODO_verify_rtl_sharing /* todo_flags_finish */
328  }
329 };
330
331
332
333 /* The root of the compilation pass tree, once constructed.  */
334 struct opt_pass *all_passes, *all_ipa_passes, *all_lowering_passes;
335
336 /* A map from static pass id to optimization pass.  */
337 struct opt_pass **passes_by_id;
338 int passes_by_id_size;
339
340 /* Set the static pass number of pass PASS to ID and record that
341    in the mapping from static pass number to pass.  */
342
343 static void
344 set_pass_for_id (int id, struct opt_pass *pass)
345 {
346   pass->static_pass_number = id;
347   if (passes_by_id_size <= id)
348     {
349       passes_by_id = XRESIZEVEC (struct opt_pass *, passes_by_id, id + 1);
350       memset (passes_by_id + passes_by_id_size, 0,
351               (id + 1 - passes_by_id_size) * sizeof (void *));
352       passes_by_id_size = id + 1;
353     }
354   passes_by_id[id] = pass;
355 }
356
357 /* Return the pass with the static pass number ID.  */
358
359 struct opt_pass *
360 get_pass_for_id (int id)
361 {
362   if (id >= passes_by_id_size)
363     return NULL;
364   return passes_by_id[id];
365 }
366
367 /* Iterate over the pass tree allocating dump file numbers.  We want
368    to do this depth first, and independent of whether the pass is
369    enabled or not.  */
370
371 void
372 register_one_dump_file (struct opt_pass *pass)
373 {
374   char *dot_name, *flag_name, *glob_name;
375   const char *prefix;
376   char num[10];
377   int flags, id;
378
379   /* See below in next_pass_1.  */
380   num[0] = '\0';
381   if (pass->static_pass_number != -1)
382     sprintf (num, "%d", ((int) pass->static_pass_number < 0
383                          ? 1 : pass->static_pass_number));
384
385   dot_name = concat (".", pass->name, num, NULL);
386   if (pass->type == SIMPLE_IPA_PASS || pass->type == IPA_PASS)
387     prefix = "ipa-", flags = TDF_IPA;
388   else if (pass->type == GIMPLE_PASS)
389     prefix = "tree-", flags = TDF_TREE;
390   else
391     prefix = "rtl-", flags = TDF_RTL;
392
393   flag_name = concat (prefix, pass->name, num, NULL);
394   glob_name = concat (prefix, pass->name, NULL);
395   id = dump_register (dot_name, flag_name, glob_name, flags);
396   set_pass_for_id (id, pass);
397 }
398
399 /* Recursive worker function for register_dump_files.  */
400
401 static int 
402 register_dump_files_1 (struct opt_pass *pass, int properties)
403 {
404   do
405     {
406       int new_properties = (properties | pass->properties_provided)
407                            & ~pass->properties_destroyed;
408
409       if (pass->name && pass->name[0] != '*')
410         register_one_dump_file (pass);
411
412       if (pass->sub)
413         new_properties = register_dump_files_1 (pass->sub, new_properties);
414
415       /* If we have a gate, combine the properties that we could have with
416          and without the pass being examined.  */
417       if (pass->gate)
418         properties &= new_properties;
419       else
420         properties = new_properties;
421
422       pass = pass->next;
423     }
424   while (pass);
425
426   return properties;
427 }
428
429 /* Register the dump files for the pipeline starting at PASS. 
430    PROPERTIES reflects the properties that are guaranteed to be available at
431    the beginning of the pipeline.  */
432
433 static void 
434 register_dump_files (struct opt_pass *pass,int properties)
435 {
436   pass->properties_required |= properties;
437   register_dump_files_1 (pass, properties);
438 }
439
440 /* Look at the static_pass_number and duplicate the pass
441    if it is already added to a list. */
442
443 static struct opt_pass *
444 make_pass_instance (struct opt_pass *pass, bool track_duplicates)
445 {
446   /* A nonzero static_pass_number indicates that the
447      pass is already in the list.  */
448   if (pass->static_pass_number)
449     {
450       struct opt_pass *new_pass;
451
452       new_pass = XNEW (struct opt_pass);
453       memcpy (new_pass, pass, sizeof (*new_pass));
454       new_pass->next = NULL;
455
456       new_pass->todo_flags_start &= ~TODO_mark_first_instance;
457
458       /* Indicate to register_dump_files that this pass has duplicates,
459          and so it should rename the dump file.  The first instance will
460          be -1, and be number of duplicates = -static_pass_number - 1.
461          Subsequent instances will be > 0 and just the duplicate number.  */
462       if (pass->name || track_duplicates)
463         {
464           pass->static_pass_number -= 1;
465           new_pass->static_pass_number = -pass->static_pass_number;
466         }
467       return new_pass;
468     }
469   else
470     {
471       pass->todo_flags_start |= TODO_mark_first_instance;
472       pass->static_pass_number = -1;
473     } 
474   return pass; 
475 }
476
477 /* Add a pass to the pass list. Duplicate the pass if it's already
478    in the list.  */
479
480 static struct opt_pass **
481 next_pass_1 (struct opt_pass **list, struct opt_pass *pass)
482 {
483   *list = make_pass_instance (pass, false);
484   
485   return &(*list)->next;
486 }
487
488 /* List node for an inserted pass instance. We need to keep track of all
489    the newly-added pass instances (with 'added_pass_nodes' defined below)
490    so that we can register their dump files after pass-positioning is finished.
491    Registering dumping files needs to be post-processed or the
492    static_pass_number of the opt_pass object would be modified and mess up
493    the dump file names of future pass instances to be added.  */
494
495 struct pass_list_node
496 {
497   struct opt_pass *pass;
498   struct pass_list_node *next;
499 };
500
501 static struct pass_list_node *added_pass_nodes = NULL;
502 static struct pass_list_node *prev_added_pass_node;
503
504 /* Insert the pass at the proper position. Return true if the pass 
505    is successfully added.
506
507    NEW_PASS_INFO - new pass to be inserted
508    PASS_LIST - root of the pass list to insert the new pass to  */
509
510 static bool
511 position_pass (struct register_pass_info *new_pass_info,
512                struct opt_pass **pass_list)
513 {
514   struct opt_pass *pass = *pass_list, *prev_pass = NULL;
515   bool success = false;
516
517   for ( ; pass; prev_pass = pass, pass = pass->next)
518     {
519       /* Check if the current pass is of the same type as the new pass and
520          matches the name and the instance number of the reference pass.  */
521       if (pass->type == new_pass_info->pass->type
522           && pass->name
523           && !strcmp (pass->name, new_pass_info->reference_pass_name)
524           && ((new_pass_info->ref_pass_instance_number == 0)
525               || (new_pass_info->ref_pass_instance_number ==
526                   pass->static_pass_number)
527               || (new_pass_info->ref_pass_instance_number == 1
528                   && pass->todo_flags_start & TODO_mark_first_instance)))
529         {
530           struct opt_pass *new_pass;
531           struct pass_list_node *new_pass_node;
532
533           new_pass = make_pass_instance (new_pass_info->pass, true);
534   
535           /* Insert the new pass instance based on the positioning op.  */
536           switch (new_pass_info->pos_op)
537             {
538               case PASS_POS_INSERT_AFTER:
539                 new_pass->next = pass->next;
540                 pass->next = new_pass;
541
542                 /* Skip newly inserted pass to avoid repeated
543                    insertions in the case where the new pass and the
544                    existing one have the same name.  */
545                 pass = new_pass; 
546                 break;
547               case PASS_POS_INSERT_BEFORE:
548                 new_pass->next = pass;
549                 if (prev_pass)
550                   prev_pass->next = new_pass;
551                 else
552                   *pass_list = new_pass;
553                 break;
554               case PASS_POS_REPLACE:
555                 new_pass->next = pass->next;
556                 if (prev_pass)
557                   prev_pass->next = new_pass;
558                 else
559                   *pass_list = new_pass;
560                 new_pass->sub = pass->sub;
561                 new_pass->tv_id = pass->tv_id;
562                 pass = new_pass;
563                 break;
564               default:
565                 error ("Invalid pass positioning operation");
566                 return false;
567             }
568
569           /* Save the newly added pass (instance) in the added_pass_nodes
570              list so that we can register its dump file later. Note that
571              we cannot register the dump file now because doing so will modify
572              the static_pass_number of the opt_pass object and therefore
573              mess up the dump file name of future instances.  */
574           new_pass_node = XCNEW (struct pass_list_node);
575           new_pass_node->pass = new_pass;
576           if (!added_pass_nodes)
577             added_pass_nodes = new_pass_node;
578           else
579             prev_added_pass_node->next = new_pass_node;
580           prev_added_pass_node = new_pass_node;
581
582           success = true;
583         }
584
585       if (pass->sub && position_pass (new_pass_info, &pass->sub))
586         success = true;
587     }
588
589   return success;
590 }
591
592 /* Hooks a new pass into the pass lists.
593
594    PASS_INFO   - pass information that specifies the opt_pass object,
595                  reference pass, instance number, and how to position
596                  the pass  */
597
598 void
599 register_pass (struct register_pass_info *pass_info)
600 {
601   if (!pass_info->pass)
602     {
603       gcc_unreachable ();
604     } 
605
606   if (!pass_info->reference_pass_name)
607     {
608       gcc_unreachable ();
609     }
610
611   /* Try to insert the new pass to the pass lists. We need to check all
612      three lists as the reference pass could be in one (or all) of them.  */
613   if (!position_pass (pass_info, &all_lowering_passes)
614       && !position_pass (pass_info, &all_ipa_passes)
615       && !position_pass (pass_info, &all_passes))
616     gcc_unreachable ();
617   else
618     {
619       /* OK, we have successfully inserted the new pass. We need to register
620          the dump files for the newly added pass and its duplicates (if any).
621          Because the registration of plugin/backend passes happens after the
622          command-line options are parsed, the options that specify single
623          pass dumping (e.g. -fdump-tree-PASSNAME) cannot be used for new
624          passes. Therefore we currently can only enable dumping of
625          new passes when the 'dump-all' flags (e.g. -fdump-tree-all)
626          are specified. While doing so, we also delete the pass_list_node
627          objects created during pass positioning.  */
628       while (added_pass_nodes)
629         {
630           struct pass_list_node *next_node = added_pass_nodes->next;
631           enum tree_dump_index tdi;
632           register_one_dump_file (added_pass_nodes->pass);
633           if (added_pass_nodes->pass->type == SIMPLE_IPA_PASS
634               || added_pass_nodes->pass->type == IPA_PASS)
635             tdi = TDI_ipa_all;
636           else if (added_pass_nodes->pass->type == GIMPLE_PASS)
637             tdi = TDI_tree_all;
638           else
639             tdi = TDI_rtl_all;
640           /* Check if dump-all flag is specified.  */
641           if (get_dump_file_info (tdi)->state)
642             get_dump_file_info (added_pass_nodes->pass->static_pass_number)
643                 ->state = get_dump_file_info (tdi)->state;
644           XDELETE (added_pass_nodes);
645           added_pass_nodes = next_node;
646         }
647     }
648 }
649
650 /* Construct the pass tree.  The sequencing of passes is driven by
651    the cgraph routines:
652
653    cgraph_finalize_compilation_unit ()
654        for each node N in the cgraph
655            cgraph_analyze_function (N)
656                cgraph_lower_function (N) -> all_lowering_passes
657
658    If we are optimizing, cgraph_optimize is then invoked:
659
660    cgraph_optimize ()
661        ipa_passes ()                    -> all_ipa_passes
662        cgraph_expand_all_functions ()
663            for each node N in the cgraph
664                cgraph_expand_function (N)
665                   tree_rest_of_compilation (DECL (N))  -> all_passes
666 */
667
668 void
669 init_optimization_passes (void)
670 {
671   struct opt_pass **p;
672
673 #define NEXT_PASS(PASS)  (p = next_pass_1 (p, &((PASS).pass)))
674
675  /* All passes needed to lower the function into shape optimizers can
676     operate on.  These passes are always run first on the function, but
677     backend might produce already lowered functions that are not processed
678     by these passes.  */
679   p = &all_lowering_passes;
680   NEXT_PASS (pass_warn_unused_result);
681   NEXT_PASS (pass_diagnose_omp_blocks);
682   NEXT_PASS (pass_remove_useless_stmts);
683   NEXT_PASS (pass_mudflap_1);
684   NEXT_PASS (pass_lower_omp);
685   NEXT_PASS (pass_lower_cf);
686   NEXT_PASS (pass_refactor_eh);
687   NEXT_PASS (pass_lower_eh);
688   NEXT_PASS (pass_build_cfg);
689   NEXT_PASS (pass_lower_complex_O0);
690   NEXT_PASS (pass_lower_vector);
691   NEXT_PASS (pass_warn_function_return);
692   NEXT_PASS (pass_build_cgraph_edges);
693   NEXT_PASS (pass_inline_parameters);
694   *p = NULL;
695
696   /* Interprocedural optimization passes.  */
697   p = &all_ipa_passes;
698   NEXT_PASS (pass_ipa_function_and_variable_visibility);
699   NEXT_PASS (pass_ipa_early_inline);
700     {
701       struct opt_pass **p = &pass_ipa_early_inline.pass.sub;
702       NEXT_PASS (pass_early_inline);
703       NEXT_PASS (pass_inline_parameters);
704       NEXT_PASS (pass_rebuild_cgraph_edges);
705     }
706   NEXT_PASS (pass_ipa_free_lang_data);
707   NEXT_PASS (pass_early_local_passes);
708     {
709       struct opt_pass **p = &pass_early_local_passes.pass.sub;
710       NEXT_PASS (pass_fixup_cfg);
711       NEXT_PASS (pass_tree_profile);
712       NEXT_PASS (pass_cleanup_cfg);
713       NEXT_PASS (pass_init_datastructures);
714       NEXT_PASS (pass_expand_omp);
715
716       NEXT_PASS (pass_referenced_vars);
717       NEXT_PASS (pass_build_ssa);
718       NEXT_PASS (pass_early_warn_uninitialized);
719       NEXT_PASS (pass_all_early_optimizations);
720         {
721           struct opt_pass **p = &pass_all_early_optimizations.pass.sub;
722           NEXT_PASS (pass_rebuild_cgraph_edges);
723           NEXT_PASS (pass_early_inline);
724           NEXT_PASS (pass_remove_cgraph_callee_edges);
725           NEXT_PASS (pass_rename_ssa_copies);
726           NEXT_PASS (pass_ccp);
727           NEXT_PASS (pass_forwprop);
728           /* pass_build_ealias is a dummy pass that ensures that we
729              execute TODO_rebuild_alias at this point.  Re-building
730              alias information also rewrites no longer addressed
731              locals into SSA form if possible.  */
732           NEXT_PASS (pass_build_ealias);
733           NEXT_PASS (pass_sra_early);
734           NEXT_PASS (pass_copy_prop);
735           NEXT_PASS (pass_merge_phi);
736           NEXT_PASS (pass_cd_dce);
737           NEXT_PASS (pass_early_ipa_sra);
738           NEXT_PASS (pass_tail_recursion);
739           NEXT_PASS (pass_convert_switch);
740           NEXT_PASS (pass_cleanup_eh);
741           NEXT_PASS (pass_profile);
742           NEXT_PASS (pass_local_pure_const);
743         }
744       NEXT_PASS (pass_release_ssa_names);
745       NEXT_PASS (pass_rebuild_cgraph_edges);
746       NEXT_PASS (pass_inline_parameters);
747     }
748   NEXT_PASS (pass_ipa_increase_alignment);
749   NEXT_PASS (pass_ipa_matrix_reorg);
750   NEXT_PASS (pass_ipa_cp);
751   NEXT_PASS (pass_ipa_inline);
752   NEXT_PASS (pass_ipa_reference);
753   NEXT_PASS (pass_ipa_pure_const); 
754   NEXT_PASS (pass_ipa_type_escape);
755   NEXT_PASS (pass_ipa_pta);
756   NEXT_PASS (pass_ipa_struct_reorg);  
757   *p = NULL;
758
759   /* These passes are run after IPA passes on every function that is being
760      output to the assembler file.  */
761   p = &all_passes;
762   NEXT_PASS (pass_lower_eh_dispatch);
763   NEXT_PASS (pass_all_optimizations);
764     {
765       struct opt_pass **p = &pass_all_optimizations.pass.sub;
766       NEXT_PASS (pass_remove_cgraph_callee_edges);
767       /* Initial scalar cleanups before alias computation.
768          They ensure memory accesses are not indirect wherever possible.  */
769       NEXT_PASS (pass_strip_predict_hints);
770       NEXT_PASS (pass_update_address_taken);
771       NEXT_PASS (pass_rename_ssa_copies);
772       NEXT_PASS (pass_complete_unrolli);
773       NEXT_PASS (pass_ccp);
774       NEXT_PASS (pass_forwprop);
775       NEXT_PASS (pass_call_cdce);
776       /* pass_build_alias is a dummy pass that ensures that we
777          execute TODO_rebuild_alias at this point.  Re-building
778          alias information also rewrites no longer addressed
779          locals into SSA form if possible.  */
780       NEXT_PASS (pass_build_alias);
781       NEXT_PASS (pass_return_slot);
782       NEXT_PASS (pass_phiprop);
783       NEXT_PASS (pass_fre);
784       NEXT_PASS (pass_copy_prop);
785       NEXT_PASS (pass_merge_phi);
786       NEXT_PASS (pass_vrp);
787       NEXT_PASS (pass_dce);
788       NEXT_PASS (pass_cselim);
789       NEXT_PASS (pass_tree_ifcombine);
790       NEXT_PASS (pass_phiopt);
791       NEXT_PASS (pass_tail_recursion);
792       NEXT_PASS (pass_ch);
793       NEXT_PASS (pass_stdarg);
794       NEXT_PASS (pass_lower_complex);
795       NEXT_PASS (pass_sra);
796       NEXT_PASS (pass_rename_ssa_copies);
797       /* The dom pass will also resolve all __builtin_constant_p calls
798          that are still there to 0.  This has to be done after some
799          propagations have already run, but before some more dead code
800          is removed, and this place fits nicely.  Remember this when
801          trying to move or duplicate pass_dominator somewhere earlier.  */
802       NEXT_PASS (pass_dominator);
803       /* The only const/copy propagation opportunities left after
804          DOM should be due to degenerate PHI nodes.  So rather than
805          run the full propagators, run a specialized pass which
806          only examines PHIs to discover const/copy propagation
807          opportunities.  */
808       NEXT_PASS (pass_phi_only_cprop);
809       NEXT_PASS (pass_dse);
810       NEXT_PASS (pass_reassoc);
811       NEXT_PASS (pass_dce);
812       NEXT_PASS (pass_forwprop);
813       NEXT_PASS (pass_phiopt);
814       NEXT_PASS (pass_object_sizes);
815       NEXT_PASS (pass_ccp);
816       NEXT_PASS (pass_copy_prop);
817       NEXT_PASS (pass_cse_sincos);
818       NEXT_PASS (pass_optimize_bswap);
819       NEXT_PASS (pass_split_crit_edges);
820       NEXT_PASS (pass_pre);
821       NEXT_PASS (pass_sink_code);
822       NEXT_PASS (pass_tree_loop);
823         {
824           struct opt_pass **p = &pass_tree_loop.pass.sub;
825           NEXT_PASS (pass_tree_loop_init);
826           NEXT_PASS (pass_copy_prop);
827           NEXT_PASS (pass_dce_loop);
828           NEXT_PASS (pass_lim);
829           NEXT_PASS (pass_tree_unswitch);
830           NEXT_PASS (pass_scev_cprop);
831           NEXT_PASS (pass_record_bounds);
832           NEXT_PASS (pass_check_data_deps);
833           NEXT_PASS (pass_loop_distribution);
834           NEXT_PASS (pass_linear_transform);
835           NEXT_PASS (pass_graphite_transforms);
836             {
837               struct opt_pass **p = &pass_graphite_transforms.pass.sub;
838               NEXT_PASS (pass_dce_loop);
839               NEXT_PASS (pass_lim);
840             }
841           NEXT_PASS (pass_iv_canon);
842           NEXT_PASS (pass_if_conversion);
843           NEXT_PASS (pass_vectorize);
844             {
845               struct opt_pass **p = &pass_vectorize.pass.sub;
846               NEXT_PASS (pass_lower_vector_ssa);
847               NEXT_PASS (pass_dce_loop);
848             }
849           NEXT_PASS (pass_predcom);
850           NEXT_PASS (pass_complete_unroll);
851           NEXT_PASS (pass_slp_vectorize);
852           NEXT_PASS (pass_parallelize_loops);
853           NEXT_PASS (pass_loop_prefetch);
854           NEXT_PASS (pass_iv_optimize);
855           NEXT_PASS (pass_tree_loop_done);
856         }
857       NEXT_PASS (pass_cse_reciprocals);
858       NEXT_PASS (pass_convert_to_rsqrt);
859       NEXT_PASS (pass_reassoc);
860       NEXT_PASS (pass_vrp);
861       NEXT_PASS (pass_dominator);
862       /* The only const/copy propagation opportunities left after
863          DOM should be due to degenerate PHI nodes.  So rather than
864          run the full propagators, run a specialized pass which
865          only examines PHIs to discover const/copy propagation
866          opportunities.  */
867       NEXT_PASS (pass_phi_only_cprop);
868       NEXT_PASS (pass_cd_dce);
869       NEXT_PASS (pass_tracer);
870
871       /* FIXME: If DCE is not run before checking for uninitialized uses,
872          we may get false warnings (e.g., testsuite/gcc.dg/uninit-5.c).
873          However, this also causes us to misdiagnose cases that should be
874          real warnings (e.g., testsuite/gcc.dg/pr18501.c).
875          
876          To fix the false positives in uninit-5.c, we would have to
877          account for the predicates protecting the set and the use of each
878          variable.  Using a representation like Gated Single Assignment
879          may help.  */
880       NEXT_PASS (pass_late_warn_uninitialized);
881       NEXT_PASS (pass_dse);
882       NEXT_PASS (pass_forwprop);
883       NEXT_PASS (pass_phiopt);
884       NEXT_PASS (pass_fold_builtins);
885       NEXT_PASS (pass_tail_calls);
886       NEXT_PASS (pass_rename_ssa_copies);
887       NEXT_PASS (pass_uncprop);
888       NEXT_PASS (pass_local_pure_const);
889     }
890   NEXT_PASS (pass_cleanup_eh);
891   NEXT_PASS (pass_lower_resx);
892   NEXT_PASS (pass_nrv);
893   NEXT_PASS (pass_mudflap_2);
894   NEXT_PASS (pass_cleanup_cfg_post_optimizing);
895   NEXT_PASS (pass_warn_function_noreturn);
896
897   NEXT_PASS (pass_expand);
898
899   NEXT_PASS (pass_rest_of_compilation);
900     {
901       struct opt_pass **p = &pass_rest_of_compilation.pass.sub;
902       NEXT_PASS (pass_init_function);
903       NEXT_PASS (pass_jump);
904       NEXT_PASS (pass_rtl_eh);
905       NEXT_PASS (pass_initial_value_sets);
906       NEXT_PASS (pass_unshare_all_rtl);
907       NEXT_PASS (pass_instantiate_virtual_regs);
908       NEXT_PASS (pass_into_cfg_layout_mode);
909       NEXT_PASS (pass_jump2);
910       NEXT_PASS (pass_lower_subreg);
911       NEXT_PASS (pass_df_initialize_opt);
912       NEXT_PASS (pass_cse);
913       NEXT_PASS (pass_rtl_fwprop);
914       NEXT_PASS (pass_rtl_cprop);
915       NEXT_PASS (pass_rtl_pre);
916       NEXT_PASS (pass_rtl_hoist);
917       NEXT_PASS (pass_rtl_cprop);
918       NEXT_PASS (pass_rtl_store_motion);
919       NEXT_PASS (pass_cse_after_global_opts);
920       NEXT_PASS (pass_rtl_ifcvt);
921       /* Perform loop optimizations.  It might be better to do them a bit
922          sooner, but we want the profile feedback to work more
923          efficiently.  */
924       NEXT_PASS (pass_loop2);
925         {
926           struct opt_pass **p = &pass_loop2.pass.sub;
927           NEXT_PASS (pass_rtl_loop_init);
928           NEXT_PASS (pass_rtl_move_loop_invariants);
929           NEXT_PASS (pass_rtl_unswitch);
930           NEXT_PASS (pass_rtl_unroll_and_peel_loops);
931           NEXT_PASS (pass_rtl_doloop);
932           NEXT_PASS (pass_rtl_loop_done);
933           *p = NULL;
934         }
935       NEXT_PASS (pass_web);
936       NEXT_PASS (pass_rtl_cprop);
937       NEXT_PASS (pass_cse2);
938       NEXT_PASS (pass_rtl_dse1);
939       NEXT_PASS (pass_rtl_fwprop_addr);
940       NEXT_PASS (pass_reginfo_init);
941       NEXT_PASS (pass_inc_dec);
942       NEXT_PASS (pass_initialize_regs);
943       NEXT_PASS (pass_ud_rtl_dce);
944       NEXT_PASS (pass_combine);
945       NEXT_PASS (pass_if_after_combine);
946       NEXT_PASS (pass_partition_blocks);
947       NEXT_PASS (pass_regmove);
948       NEXT_PASS (pass_outof_cfg_layout_mode);
949       NEXT_PASS (pass_split_all_insns);
950       NEXT_PASS (pass_lower_subreg2);
951       NEXT_PASS (pass_df_initialize_no_opt);
952       NEXT_PASS (pass_stack_ptr_mod);
953       NEXT_PASS (pass_mode_switching);
954       NEXT_PASS (pass_match_asm_constraints);
955       NEXT_PASS (pass_sms);
956       NEXT_PASS (pass_subregs_of_mode_init);
957       NEXT_PASS (pass_sched);
958       NEXT_PASS (pass_ira);
959       NEXT_PASS (pass_subregs_of_mode_finish);
960       NEXT_PASS (pass_postreload);
961         {
962           struct opt_pass **p = &pass_postreload.pass.sub;
963           NEXT_PASS (pass_postreload_cse);
964           NEXT_PASS (pass_gcse2);
965           NEXT_PASS (pass_split_after_reload);
966           NEXT_PASS (pass_branch_target_load_optimize1);
967           NEXT_PASS (pass_thread_prologue_and_epilogue);
968           NEXT_PASS (pass_rtl_dse2);
969           NEXT_PASS (pass_stack_adjustments);
970           NEXT_PASS (pass_peephole2);
971           NEXT_PASS (pass_if_after_reload);
972           NEXT_PASS (pass_regrename);
973           NEXT_PASS (pass_cprop_hardreg);
974           NEXT_PASS (pass_fast_rtl_dce);
975           NEXT_PASS (pass_reorder_blocks);
976           NEXT_PASS (pass_branch_target_load_optimize2);
977           NEXT_PASS (pass_leaf_regs);
978           NEXT_PASS (pass_split_before_sched2);
979           NEXT_PASS (pass_sched2);
980           NEXT_PASS (pass_stack_regs);
981             {
982               struct opt_pass **p = &pass_stack_regs.pass.sub;
983               NEXT_PASS (pass_split_before_regstack);
984               NEXT_PASS (pass_stack_regs_run);
985             }
986           NEXT_PASS (pass_compute_alignments);
987           NEXT_PASS (pass_duplicate_computed_gotos);
988           NEXT_PASS (pass_variable_tracking);
989           NEXT_PASS (pass_free_cfg);
990           NEXT_PASS (pass_machine_reorg);
991           NEXT_PASS (pass_cleanup_barriers);
992           NEXT_PASS (pass_delay_slots);
993           NEXT_PASS (pass_split_for_shorten_branches);
994           NEXT_PASS (pass_convert_to_eh_region_ranges);
995           NEXT_PASS (pass_shorten_branches);
996           NEXT_PASS (pass_set_nothrow_function_flags);
997           NEXT_PASS (pass_final);
998         }
999       NEXT_PASS (pass_df_finish);
1000     }
1001   NEXT_PASS (pass_clean_state);
1002   *p = NULL;
1003
1004 #undef NEXT_PASS
1005
1006   /* Register the passes with the tree dump code.  */
1007   register_dump_files (all_lowering_passes, PROP_gimple_any);
1008   register_dump_files (all_ipa_passes, 
1009                        PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh
1010                        | PROP_cfg);
1011   register_dump_files (all_passes, 
1012                        PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh
1013                        | PROP_cfg);
1014 }
1015
1016 /* If we are in IPA mode (i.e., current_function_decl is NULL), call
1017    function CALLBACK for every function in the call graph.  Otherwise,
1018    call CALLBACK on the current function.  */ 
1019
1020 static void
1021 do_per_function (void (*callback) (void *data), void *data)
1022 {
1023   if (current_function_decl)
1024     callback (data);
1025   else
1026     {
1027       struct cgraph_node *node;
1028       for (node = cgraph_nodes; node; node = node->next)
1029         if (node->analyzed && gimple_has_body_p (node->decl)
1030             && (!node->clone_of || node->decl != node->clone_of->decl))
1031           {
1032             push_cfun (DECL_STRUCT_FUNCTION (node->decl));
1033             current_function_decl = node->decl;
1034             callback (data);
1035             free_dominance_info (CDI_DOMINATORS);
1036             free_dominance_info (CDI_POST_DOMINATORS);
1037             current_function_decl = NULL;
1038             pop_cfun ();
1039             ggc_collect ();
1040           }
1041     }
1042 }
1043
1044 /* Because inlining might remove no-longer reachable nodes, we need to
1045    keep the array visible to garbage collector to avoid reading collected
1046    out nodes.  */
1047 static int nnodes;
1048 static GTY ((length ("nnodes"))) struct cgraph_node **order;
1049
1050 /* If we are in IPA mode (i.e., current_function_decl is NULL), call
1051    function CALLBACK for every function in the call graph.  Otherwise,
1052    call CALLBACK on the current function.  */ 
1053
1054 static void
1055 do_per_function_toporder (void (*callback) (void *data), void *data)
1056 {
1057   int i;
1058
1059   if (current_function_decl)
1060     callback (data);
1061   else
1062     {
1063       gcc_assert (!order);
1064       order = GGC_NEWVEC (struct cgraph_node *, cgraph_n_nodes);
1065       nnodes = cgraph_postorder (order);
1066       for (i = nnodes - 1; i >= 0; i--)
1067         order[i]->process = 1;
1068       for (i = nnodes - 1; i >= 0; i--)
1069         {
1070           struct cgraph_node *node = order[i];
1071
1072           /* Allow possibly removed nodes to be garbage collected.  */
1073           order[i] = NULL;
1074           node->process = 0;
1075           if (node->analyzed && (node->needed || node->reachable))
1076             {
1077               push_cfun (DECL_STRUCT_FUNCTION (node->decl));
1078               current_function_decl = node->decl;
1079               callback (data);
1080               free_dominance_info (CDI_DOMINATORS);
1081               free_dominance_info (CDI_POST_DOMINATORS);
1082               current_function_decl = NULL;
1083               pop_cfun ();
1084               ggc_collect ();
1085             }
1086         }
1087     }
1088   ggc_free (order);
1089   order = NULL;
1090   nnodes = 0;
1091 }
1092
1093 /* Perform all TODO actions that ought to be done on each function.  */
1094
1095 static void
1096 execute_function_todo (void *data)
1097 {
1098   unsigned int flags = (size_t)data;
1099   if (cfun->curr_properties & PROP_ssa)
1100     flags |= TODO_verify_ssa;
1101   flags &= ~cfun->last_verified;
1102   if (!flags)
1103     return;
1104
1105   statistics_fini_pass ();
1106
1107   /* Always cleanup the CFG before trying to update SSA.  */
1108   if (flags & TODO_cleanup_cfg)
1109     {
1110       bool cleanup = cleanup_tree_cfg ();
1111
1112       if (cleanup && (cfun->curr_properties & PROP_ssa))
1113         flags |= TODO_remove_unused_locals;
1114         
1115       /* When cleanup_tree_cfg merges consecutive blocks, it may
1116          perform some simplistic propagation when removing single
1117          valued PHI nodes.  This propagation may, in turn, cause the
1118          SSA form to become out-of-date (see PR 22037).  So, even
1119          if the parent pass had not scheduled an SSA update, we may
1120          still need to do one.  */
1121       if (!(flags & TODO_update_ssa_any) && need_ssa_update_p (cfun))
1122         flags |= TODO_update_ssa;
1123     }
1124
1125   if (flags & TODO_update_ssa_any)
1126     {
1127       unsigned update_flags = flags & TODO_update_ssa_any;
1128       update_ssa (update_flags);
1129       cfun->last_verified &= ~TODO_verify_ssa;
1130     }
1131   
1132   if (flags & TODO_update_address_taken)
1133     execute_update_addresses_taken (true);
1134
1135   if (flags & TODO_rebuild_alias)
1136     {
1137       if (!(flags & TODO_update_address_taken))
1138         execute_update_addresses_taken (true);
1139       compute_may_aliases ();
1140     }
1141   
1142   if (flags & TODO_remove_unused_locals)
1143     remove_unused_locals ();
1144
1145   if ((flags & TODO_dump_func) && dump_file && current_function_decl)
1146     {
1147       if (cfun->curr_properties & PROP_trees)
1148         dump_function_to_file (current_function_decl, dump_file, dump_flags);
1149       else
1150         {
1151           if (dump_flags & TDF_SLIM)
1152             print_rtl_slim_with_bb (dump_file, get_insns (), dump_flags);
1153           else if ((cfun->curr_properties & PROP_cfg)
1154                    && (dump_flags & TDF_BLOCKS))
1155             print_rtl_with_bb (dump_file, get_insns ());
1156           else
1157             print_rtl (dump_file, get_insns ());
1158
1159           if ((cfun->curr_properties & PROP_cfg)
1160               && graph_dump_format != no_graph
1161               && (dump_flags & TDF_GRAPH))
1162             print_rtl_graph_with_bb (dump_file_name, get_insns ());
1163         }
1164
1165       /* Flush the file.  If verification fails, we won't be able to
1166          close the file before aborting.  */
1167       fflush (dump_file);
1168     }
1169
1170   if (flags & TODO_rebuild_frequencies)
1171     {
1172       if (profile_status == PROFILE_GUESSED)
1173         {
1174           loop_optimizer_init (0);
1175           add_noreturn_fake_exit_edges ();
1176           mark_irreducible_loops ();
1177           connect_infinite_loops_to_exit ();
1178           estimate_bb_frequencies ();
1179           remove_fake_exit_edges ();
1180           loop_optimizer_finalize ();
1181         }
1182       else if (profile_status == PROFILE_READ)
1183         counts_to_freqs ();
1184       else
1185         gcc_unreachable ();
1186     }
1187
1188 #if defined ENABLE_CHECKING
1189   if (flags & TODO_verify_ssa)
1190     verify_ssa (true);
1191   if (flags & TODO_verify_flow)
1192     verify_flow_info ();
1193   if (flags & TODO_verify_stmts)
1194     verify_stmts ();
1195   if (flags & TODO_verify_loops)
1196     verify_loop_closed_ssa ();
1197   if (flags & TODO_verify_rtl_sharing)
1198     verify_rtl_sharing ();
1199 #endif
1200
1201   cfun->last_verified = flags & TODO_verify_all;
1202 }
1203
1204 /* Perform all TODO actions.  */
1205 static void
1206 execute_todo (unsigned int flags)
1207 {
1208 #if defined ENABLE_CHECKING
1209   if (cfun
1210       && need_ssa_update_p (cfun))
1211     gcc_assert (flags & TODO_update_ssa_any);
1212 #endif
1213
1214   /* Inform the pass whether it is the first time it is run.  */
1215   first_pass_instance = (flags & TODO_mark_first_instance) != 0;
1216
1217   do_per_function (execute_function_todo, (void *)(size_t) flags);
1218
1219   /* Always remove functions just as before inlining: IPA passes might be
1220      interested to see bodies of extern inline functions that are not inlined
1221      to analyze side effects.  The full removal is done just at the end
1222      of IPA pass queue.  */
1223   if (flags & TODO_remove_functions)
1224     {
1225       gcc_assert (!cfun);
1226       cgraph_remove_unreachable_nodes (true, dump_file);
1227     }
1228
1229   if ((flags & TODO_dump_cgraph) && dump_file && !current_function_decl)
1230     {
1231       gcc_assert (!cfun);
1232       dump_cgraph (dump_file);
1233       /* Flush the file.  If verification fails, we won't be able to
1234          close the file before aborting.  */
1235       fflush (dump_file);
1236     }
1237
1238   if (flags & TODO_ggc_collect)
1239     ggc_collect ();
1240
1241   /* Now that the dumping has been done, we can get rid of the optional 
1242      df problems.  */
1243   if (flags & TODO_df_finish)
1244     df_finish_pass ((flags & TODO_df_verify) != 0);
1245 }
1246
1247 /* Verify invariants that should hold between passes.  This is a place
1248    to put simple sanity checks.  */
1249
1250 static void
1251 verify_interpass_invariants (void)
1252 {
1253 #ifdef ENABLE_CHECKING
1254   gcc_assert (!fold_deferring_overflow_warnings_p ());
1255 #endif
1256 }
1257
1258 /* Clear the last verified flag.  */
1259
1260 static void
1261 clear_last_verified (void *data ATTRIBUTE_UNUSED)
1262 {
1263   cfun->last_verified = 0;
1264 }
1265
1266 /* Helper function. Verify that the properties has been turn into the
1267    properties expected by the pass.  */
1268
1269 #ifdef ENABLE_CHECKING
1270 static void
1271 verify_curr_properties (void *data)
1272 {
1273   unsigned int props = (size_t)data;
1274   gcc_assert ((cfun->curr_properties & props) == props);
1275 }
1276 #endif
1277
1278 /* Initialize pass dump file.  */
1279
1280 static bool
1281 pass_init_dump_file (struct opt_pass *pass)
1282 {
1283   /* If a dump file name is present, open it if enabled.  */
1284   if (pass->static_pass_number != -1)
1285     {
1286       bool initializing_dump = !dump_initialized_p (pass->static_pass_number);
1287       dump_file_name = get_dump_file_name (pass->static_pass_number);
1288       dump_file = dump_begin (pass->static_pass_number, &dump_flags);
1289       if (dump_file && current_function_decl)
1290         {
1291           const char *dname, *aname;
1292           dname = lang_hooks.decl_printable_name (current_function_decl, 2);
1293           aname = (IDENTIFIER_POINTER
1294                    (DECL_ASSEMBLER_NAME (current_function_decl)));
1295           fprintf (dump_file, "\n;; Function %s (%s)%s\n\n", dname, aname,
1296              cfun->function_frequency == FUNCTION_FREQUENCY_HOT
1297              ? " (hot)"
1298              : cfun->function_frequency == FUNCTION_FREQUENCY_UNLIKELY_EXECUTED
1299              ? " (unlikely executed)"
1300              : "");
1301         }
1302       return initializing_dump;
1303     }
1304   else
1305     return false;
1306 }
1307
1308 /* Flush PASS dump file.  */
1309
1310 static void
1311 pass_fini_dump_file (struct opt_pass *pass)
1312 {
1313   /* Flush and close dump file.  */
1314   if (dump_file_name)
1315     {
1316       free (CONST_CAST (char *, dump_file_name));
1317       dump_file_name = NULL;
1318     }
1319
1320   if (dump_file)
1321     {
1322       dump_end (pass->static_pass_number, dump_file);
1323       dump_file = NULL;
1324     }
1325 }
1326
1327 /* After executing the pass, apply expected changes to the function
1328    properties. */
1329
1330 static void
1331 update_properties_after_pass (void *data)
1332 {
1333   struct opt_pass *pass = (struct opt_pass *) data;
1334   cfun->curr_properties = (cfun->curr_properties | pass->properties_provided)
1335                            & ~pass->properties_destroyed;
1336 }
1337
1338 /* Schedule IPA transform pass DATA for CFUN.  */
1339
1340 static void
1341 add_ipa_transform_pass (void *data)
1342 {
1343   struct ipa_opt_pass_d *ipa_pass = (struct ipa_opt_pass_d *) data;
1344   VEC_safe_push (ipa_opt_pass, heap, cfun->ipa_transforms_to_apply, ipa_pass);
1345 }
1346
1347 /* Execute summary generation for all of the passes in IPA_PASS.  */
1348
1349 static void
1350 execute_ipa_summary_passes (struct ipa_opt_pass_d *ipa_pass)
1351 {
1352   while (ipa_pass)
1353     {
1354       struct opt_pass *pass = &ipa_pass->pass;
1355
1356       /* Execute all of the IPA_PASSes in the list.  */
1357       if (ipa_pass->pass.type == IPA_PASS 
1358           && (!pass->gate || pass->gate ()))
1359         {
1360           pass_init_dump_file (pass);
1361           ipa_pass->generate_summary ();
1362           pass_fini_dump_file (pass);
1363         }
1364       ipa_pass = (struct ipa_opt_pass_d *)ipa_pass->pass.next;
1365     }
1366 }
1367
1368 /* Execute IPA_PASS function transform on NODE.  */
1369
1370 static void
1371 execute_one_ipa_transform_pass (struct cgraph_node *node,
1372                                 struct ipa_opt_pass_d *ipa_pass)
1373 {
1374   struct opt_pass *pass = &ipa_pass->pass;
1375   unsigned int todo_after = 0;
1376
1377   current_pass = pass;
1378   if (!ipa_pass->function_transform)
1379     return;
1380
1381   /* Note that the folders should only create gimple expressions.
1382      This is a hack until the new folder is ready.  */
1383   in_gimple_form = (cfun && (cfun->curr_properties & PROP_trees)) != 0;
1384
1385   pass_init_dump_file (pass);
1386
1387   /* Run pre-pass verification.  */
1388   execute_todo (ipa_pass->function_transform_todo_flags_start);
1389
1390   /* If a timevar is present, start it.  */
1391   if (pass->tv_id != TV_NONE)
1392     timevar_push (pass->tv_id);
1393
1394   /* Do it!  */
1395   todo_after = ipa_pass->function_transform (node);
1396
1397   /* Stop timevar.  */
1398   if (pass->tv_id != TV_NONE)
1399     timevar_pop (pass->tv_id);
1400
1401   /* Run post-pass cleanup and verification.  */
1402   execute_todo (todo_after);
1403   verify_interpass_invariants ();
1404
1405   pass_fini_dump_file (pass);
1406
1407   current_pass = NULL;
1408 }
1409
1410 static bool
1411 execute_one_pass (struct opt_pass *pass)
1412 {
1413   bool initializing_dump;
1414   unsigned int todo_after = 0;
1415
1416   /* IPA passes are executed on whole program, so cfun should be NULL.
1417      Other passes need function context set.  */
1418   if (pass->type == SIMPLE_IPA_PASS || pass->type == IPA_PASS)
1419     gcc_assert (!cfun && !current_function_decl);
1420   else
1421     gcc_assert (cfun && current_function_decl);
1422
1423   if (cfun && cfun->ipa_transforms_to_apply)
1424     {
1425       unsigned int i;
1426       struct cgraph_node *node = cgraph_node (current_function_decl);
1427
1428       for (i = 0; i < VEC_length (ipa_opt_pass, cfun->ipa_transforms_to_apply);
1429            i++)
1430         execute_one_ipa_transform_pass (node,
1431                                         VEC_index (ipa_opt_pass,
1432                                                    cfun->ipa_transforms_to_apply,
1433                                                    i));
1434       VEC_free (ipa_opt_pass, heap, cfun->ipa_transforms_to_apply);
1435       cfun->ipa_transforms_to_apply = NULL;
1436     }
1437
1438   current_pass = pass;
1439
1440   /* See if we're supposed to run this pass.  */
1441   if (pass->gate && !pass->gate ())
1442     return false;
1443
1444   if (!quiet_flag && !cfun)
1445     fprintf (stderr, " <%s>", pass->name ? pass->name : "");
1446
1447   /* Note that the folders should only create gimple expressions.
1448      This is a hack until the new folder is ready.  */
1449   in_gimple_form = (cfun && (cfun->curr_properties & PROP_trees)) != 0;
1450
1451   initializing_dump = pass_init_dump_file (pass);
1452
1453   /* Run pre-pass verification.  */
1454   execute_todo (pass->todo_flags_start);
1455
1456 #ifdef ENABLE_CHECKING
1457   do_per_function (verify_curr_properties,
1458                    (void *)(size_t)pass->properties_required);
1459 #endif
1460
1461   /* If a timevar is present, start it.  */
1462   if (pass->tv_id != TV_NONE)
1463     timevar_push (pass->tv_id);
1464
1465   /* Do it!  */
1466   if (pass->execute)
1467     {
1468       todo_after = pass->execute ();
1469       do_per_function (clear_last_verified, NULL);
1470     }
1471
1472   /* Stop timevar.  */
1473   if (pass->tv_id != TV_NONE)
1474     timevar_pop (pass->tv_id);
1475
1476   do_per_function (update_properties_after_pass, pass);
1477
1478   if (initializing_dump
1479       && dump_file
1480       && graph_dump_format != no_graph
1481       && cfun
1482       && (cfun->curr_properties & (PROP_cfg | PROP_rtl))
1483           == (PROP_cfg | PROP_rtl))
1484     {
1485       get_dump_file_info (pass->static_pass_number)->flags |= TDF_GRAPH;
1486       dump_flags |= TDF_GRAPH;
1487       clean_graph_dump_file (dump_file_name);
1488     }
1489
1490   /* Run post-pass cleanup and verification.  */
1491   execute_todo (todo_after | pass->todo_flags_finish);
1492   verify_interpass_invariants ();
1493   if (pass->type == IPA_PASS)
1494     do_per_function (add_ipa_transform_pass, pass);
1495
1496   if (!current_function_decl)
1497     cgraph_process_new_functions ();
1498
1499   pass_fini_dump_file (pass);
1500
1501   if (pass->type != SIMPLE_IPA_PASS && pass->type != IPA_PASS)
1502     gcc_assert (!(cfun->curr_properties & PROP_trees)
1503                 || pass->type != RTL_PASS);
1504
1505   current_pass = NULL;
1506
1507   return true;
1508 }
1509
1510 void
1511 execute_pass_list (struct opt_pass *pass)
1512 {
1513   do
1514     {
1515       gcc_assert (pass->type == GIMPLE_PASS
1516                   || pass->type == RTL_PASS);
1517       if (execute_one_pass (pass) && pass->sub)
1518         execute_pass_list (pass->sub);
1519       pass = pass->next;
1520     }
1521   while (pass);
1522 }
1523
1524 /* Same as execute_pass_list but assume that subpasses of IPA passes
1525    are local passes.  */
1526 void
1527 execute_ipa_pass_list (struct opt_pass *pass)
1528 {
1529   bool summaries_generated = false;
1530   do
1531     {
1532       gcc_assert (!current_function_decl);
1533       gcc_assert (!cfun);
1534       gcc_assert (pass->type == SIMPLE_IPA_PASS || pass->type == IPA_PASS);
1535       if (pass->type == IPA_PASS && (!pass->gate || pass->gate ()))
1536         {
1537           if (!summaries_generated)
1538             {
1539               if (!quiet_flag && !cfun)
1540                 fprintf (stderr, " <summary generate>");
1541               execute_ipa_summary_passes ((struct ipa_opt_pass_d *) pass);
1542             }
1543           summaries_generated = true;
1544         }
1545       if (execute_one_pass (pass) && pass->sub)
1546         {
1547           if (pass->sub->type == GIMPLE_PASS)
1548             do_per_function_toporder ((void (*)(void *))execute_pass_list,
1549                                       pass->sub);
1550           else if (pass->sub->type == SIMPLE_IPA_PASS
1551                    || pass->sub->type == IPA_PASS)
1552             execute_ipa_pass_list (pass->sub);
1553           else
1554             gcc_unreachable ();
1555         }
1556       if (!current_function_decl)
1557         cgraph_process_new_functions ();
1558       pass = pass->next;
1559     }
1560   while (pass);
1561 }
1562
1563 /* Called by local passes to see if function is called by already processed nodes.
1564    Because we process nodes in topological order, this means that function is
1565    in recursive cycle or we introduced new direct calls.  */
1566 bool
1567 function_called_by_processed_nodes_p (void)
1568 {
1569   struct cgraph_edge *e;
1570   for (e = cgraph_node (current_function_decl)->callers; e; e = e->next_caller)
1571     {
1572       if (e->caller->decl == current_function_decl)
1573         continue;
1574       if (!e->caller->analyzed || (!e->caller->needed && !e->caller->reachable))
1575         continue;
1576       if (TREE_ASM_WRITTEN (e->caller->decl))
1577         continue;
1578       if (!e->caller->process && !e->caller->global.inlined_to)
1579         break;
1580     }
1581   if (dump_file && e)
1582     {
1583       fprintf (dump_file, "Already processed call to:\n");
1584       dump_cgraph_node (dump_file, e->caller);
1585     }
1586   return e != NULL;
1587 }
1588
1589 #include "gt-passes.h"