OSDN Git Service

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