OSDN Git Service

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