OSDN Git Service

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