re PR middle-end/59125 (gcc triggers wrong strncpy_chk)
[platform/upstream/gcc.git] / gcc / passes.def
1 /* Description of pass structure
2    Copyright (C) 1987-2013 Free Software Foundation, Inc.
3
4 This file is part of GCC.
5
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
9 version.
10
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3.  If not see
18 <http://www.gnu.org/licenses/>.  */
19
20 /*
21  Macros that should be defined when using this file:
22    INSERT_PASSES_AFTER (PASS)
23    PUSH_INSERT_PASSES_WITHIN (PASS)
24    POP_INSERT_PASSES ()
25    NEXT_PASS (PASS)
26    TERMINATE_PASS_LIST ()
27  */
28
29  /* All passes needed to lower the function into shape optimizers can
30     operate on.  These passes are always run first on the function, but
31     backend might produce already lowered functions that are not processed
32     by these passes.  */
33   INSERT_PASSES_AFTER (all_lowering_passes)
34   NEXT_PASS (pass_warn_unused_result);
35   NEXT_PASS (pass_diagnose_omp_blocks);
36   NEXT_PASS (pass_diagnose_tm_blocks);
37   NEXT_PASS (pass_lower_omp);
38   NEXT_PASS (pass_lower_cf);
39   NEXT_PASS (pass_lower_tm);
40   NEXT_PASS (pass_refactor_eh);
41   NEXT_PASS (pass_lower_eh);
42   NEXT_PASS (pass_build_cfg);
43   NEXT_PASS (pass_warn_function_return);
44   NEXT_PASS (pass_expand_omp);
45   NEXT_PASS (pass_build_cgraph_edges);
46   TERMINATE_PASS_LIST ()
47
48   /* Interprocedural optimization passes.  */
49   INSERT_PASSES_AFTER (all_small_ipa_passes)
50   NEXT_PASS (pass_ipa_free_lang_data);
51   NEXT_PASS (pass_ipa_function_and_variable_visibility);
52   NEXT_PASS (pass_early_local_passes);
53   PUSH_INSERT_PASSES_WITHIN (pass_early_local_passes)
54       NEXT_PASS (pass_fixup_cfg);
55       NEXT_PASS (pass_init_datastructures);
56
57       NEXT_PASS (pass_build_ssa);
58       NEXT_PASS (pass_early_warn_uninitialized);
59       NEXT_PASS (pass_rebuild_cgraph_edges);
60       NEXT_PASS (pass_inline_parameters);
61       NEXT_PASS (pass_early_inline);
62       NEXT_PASS (pass_all_early_optimizations);
63       PUSH_INSERT_PASSES_WITHIN (pass_all_early_optimizations)
64           NEXT_PASS (pass_remove_cgraph_callee_edges);
65           NEXT_PASS (pass_rename_ssa_copies);
66           NEXT_PASS (pass_ccp);
67           /* After CCP we rewrite no longer addressed locals into SSA
68              form if possible.  */
69           NEXT_PASS (pass_forwprop);
70           /* pass_build_ealias is a dummy pass that ensures that we
71              execute TODO_rebuild_alias at this point.  */
72           NEXT_PASS (pass_build_ealias);
73           NEXT_PASS (pass_sra_early);
74           NEXT_PASS (pass_fre);
75           NEXT_PASS (pass_copy_prop);
76           NEXT_PASS (pass_merge_phi);
77           NEXT_PASS (pass_cd_dce);
78           NEXT_PASS (pass_early_ipa_sra);
79           NEXT_PASS (pass_tail_recursion);
80           NEXT_PASS (pass_convert_switch);
81           NEXT_PASS (pass_cleanup_eh);
82           NEXT_PASS (pass_profile);
83           NEXT_PASS (pass_local_pure_const);
84           /* Split functions creates parts that are not run through
85              early optimizations again.  It is thus good idea to do this
86              late.  */
87           NEXT_PASS (pass_split_functions);
88       POP_INSERT_PASSES ()
89       NEXT_PASS (pass_release_ssa_names);
90       NEXT_PASS (pass_rebuild_cgraph_edges);
91       NEXT_PASS (pass_inline_parameters);
92   POP_INSERT_PASSES ()
93   NEXT_PASS (pass_ipa_free_inline_summary);
94   NEXT_PASS (pass_ipa_tree_profile);
95   PUSH_INSERT_PASSES_WITHIN (pass_ipa_tree_profile)
96       NEXT_PASS (pass_feedback_split_functions);
97   POP_INSERT_PASSES ()
98   NEXT_PASS (pass_ipa_increase_alignment);
99   NEXT_PASS (pass_ipa_tm);
100   NEXT_PASS (pass_ipa_lower_emutls);
101   TERMINATE_PASS_LIST ()
102
103   INSERT_PASSES_AFTER (all_regular_ipa_passes)
104   NEXT_PASS (pass_ipa_whole_program_visibility);
105   NEXT_PASS (pass_ipa_profile);
106   NEXT_PASS (pass_ipa_devirt);
107   NEXT_PASS (pass_ipa_cp);
108   NEXT_PASS (pass_ipa_cdtor_merge);
109   NEXT_PASS (pass_ipa_inline);
110   NEXT_PASS (pass_ipa_pure_const);
111   NEXT_PASS (pass_ipa_reference);
112   TERMINATE_PASS_LIST ()
113
114   INSERT_PASSES_AFTER (all_lto_gen_passes)
115   NEXT_PASS (pass_ipa_lto_gimple_out);
116   NEXT_PASS (pass_ipa_lto_finish_out);  /* This must be the last LTO pass.  */
117   TERMINATE_PASS_LIST ()
118
119   /* Simple IPA passes executed after the regular passes.  In WHOPR mode the
120      passes are executed after partitioning and thus see just parts of the
121      compiled unit.  */
122   INSERT_PASSES_AFTER (all_late_ipa_passes)
123   NEXT_PASS (pass_ipa_pta);
124   TERMINATE_PASS_LIST ()
125
126   /* These passes are run after IPA passes on every function that is being
127      output to the assembler file.  */
128   INSERT_PASSES_AFTER (all_passes)
129   NEXT_PASS (pass_fixup_cfg);
130   NEXT_PASS (pass_lower_eh_dispatch);
131   NEXT_PASS (pass_all_optimizations);
132   PUSH_INSERT_PASSES_WITHIN (pass_all_optimizations)
133       NEXT_PASS (pass_remove_cgraph_callee_edges);
134       /* Initial scalar cleanups before alias computation.
135          They ensure memory accesses are not indirect wherever possible.  */
136       NEXT_PASS (pass_strip_predict_hints);
137       NEXT_PASS (pass_rename_ssa_copies);
138       NEXT_PASS (pass_copy_prop);
139       NEXT_PASS (pass_complete_unrolli);
140       NEXT_PASS (pass_ccp);
141       /* After CCP we rewrite no longer addressed locals into SSA
142          form if possible.  */
143       NEXT_PASS (pass_phiprop);
144       NEXT_PASS (pass_forwprop);
145       NEXT_PASS (pass_object_sizes);
146       /* pass_build_alias is a dummy pass that ensures that we
147          execute TODO_rebuild_alias at this point.  */
148       NEXT_PASS (pass_build_alias);
149       NEXT_PASS (pass_return_slot);
150       NEXT_PASS (pass_fre);
151       NEXT_PASS (pass_copy_prop);
152       NEXT_PASS (pass_merge_phi);
153       NEXT_PASS (pass_vrp);
154       NEXT_PASS (pass_dce);
155       NEXT_PASS (pass_call_cdce);
156       NEXT_PASS (pass_cselim);
157       NEXT_PASS (pass_tree_ifcombine);
158       NEXT_PASS (pass_phiopt);
159       NEXT_PASS (pass_tail_recursion);
160       NEXT_PASS (pass_ch);
161       NEXT_PASS (pass_stdarg);
162       NEXT_PASS (pass_lower_complex);
163       NEXT_PASS (pass_sra);
164       NEXT_PASS (pass_rename_ssa_copies);
165       /* The dom pass will also resolve all __builtin_constant_p calls
166          that are still there to 0.  This has to be done after some
167          propagations have already run, but before some more dead code
168          is removed, and this place fits nicely.  Remember this when
169          trying to move or duplicate pass_dominator somewhere earlier.  */
170       NEXT_PASS (pass_dominator);
171       /* At this point the majority of const/copy propagations
172          are exposed.  Go ahead and identify paths that should never
173          be executed in a conforming program and isolate those paths.
174
175          This will expose more degenerate PHIs in the main path and
176          expose more PRE/DOM optimization opportunities.  */
177       NEXT_PASS (pass_isolate_erroneous_paths);
178       /* The only const/copy propagation opportunities left after
179          DOM and erroneous path isolation should be due to degenerate PHI nodes.
180          So rather than run the full propagators, run a specialized pass which
181          only examines PHIs to discover const/copy propagation
182          opportunities.  */
183       NEXT_PASS (pass_phi_only_cprop);
184       NEXT_PASS (pass_dse);
185       NEXT_PASS (pass_reassoc);
186       NEXT_PASS (pass_dce);
187       NEXT_PASS (pass_forwprop);
188       NEXT_PASS (pass_phiopt);
189       NEXT_PASS (pass_strlen);
190       NEXT_PASS (pass_ccp);
191       /* After CCP we rewrite no longer addressed locals into SSA
192          form if possible.  */
193       NEXT_PASS (pass_copy_prop);
194       NEXT_PASS (pass_cse_sincos);
195       NEXT_PASS (pass_optimize_bswap);
196       NEXT_PASS (pass_split_crit_edges);
197       NEXT_PASS (pass_pre);
198       NEXT_PASS (pass_sink_code);
199       NEXT_PASS (pass_asan);
200       NEXT_PASS (pass_tsan);
201       NEXT_PASS (pass_tree_loop);
202       PUSH_INSERT_PASSES_WITHIN (pass_tree_loop)
203           NEXT_PASS (pass_tree_loop_init);
204           NEXT_PASS (pass_lim);
205           NEXT_PASS (pass_copy_prop);
206           NEXT_PASS (pass_dce_loop);
207           NEXT_PASS (pass_tree_unswitch);
208           NEXT_PASS (pass_scev_cprop);
209           NEXT_PASS (pass_record_bounds);
210           NEXT_PASS (pass_check_data_deps);
211           NEXT_PASS (pass_loop_distribution);
212           NEXT_PASS (pass_copy_prop);
213           NEXT_PASS (pass_graphite);
214           PUSH_INSERT_PASSES_WITHIN (pass_graphite)
215               NEXT_PASS (pass_graphite_transforms);
216               NEXT_PASS (pass_lim);
217               NEXT_PASS (pass_copy_prop);
218               NEXT_PASS (pass_dce_loop);
219           POP_INSERT_PASSES ()
220           NEXT_PASS (pass_iv_canon);
221           NEXT_PASS (pass_parallelize_loops);
222           NEXT_PASS (pass_if_conversion);
223           NEXT_PASS (pass_vectorize);
224           PUSH_INSERT_PASSES_WITHIN (pass_vectorize)
225               NEXT_PASS (pass_dce_loop);
226           POP_INSERT_PASSES ()
227           NEXT_PASS (pass_predcom);
228           NEXT_PASS (pass_complete_unroll);
229           NEXT_PASS (pass_slp_vectorize);
230           NEXT_PASS (pass_loop_prefetch);
231           NEXT_PASS (pass_iv_optimize);
232           NEXT_PASS (pass_lim);
233           NEXT_PASS (pass_tree_loop_done);
234       POP_INSERT_PASSES ()
235       NEXT_PASS (pass_lower_vector_ssa);
236       NEXT_PASS (pass_cse_reciprocals);
237       NEXT_PASS (pass_reassoc);
238       NEXT_PASS (pass_strength_reduction);
239       NEXT_PASS (pass_dominator);
240       /* The only const/copy propagation opportunities left after
241          DOM should be due to degenerate PHI nodes.  So rather than
242          run the full propagators, run a specialized pass which
243          only examines PHIs to discover const/copy propagation
244          opportunities.  */
245       NEXT_PASS (pass_phi_only_cprop);
246       NEXT_PASS (pass_vrp);
247       NEXT_PASS (pass_cd_dce);
248       NEXT_PASS (pass_tracer);
249       NEXT_PASS (pass_dse);
250       NEXT_PASS (pass_forwprop);
251       NEXT_PASS (pass_phiopt);
252       NEXT_PASS (pass_fold_builtins);
253       NEXT_PASS (pass_optimize_widening_mul);
254       NEXT_PASS (pass_tail_calls);
255       NEXT_PASS (pass_rename_ssa_copies);
256       /* FIXME: If DCE is not run before checking for uninitialized uses,
257          we may get false warnings (e.g., testsuite/gcc.dg/uninit-5.c).
258          However, this also causes us to misdiagnose cases that should be
259          real warnings (e.g., testsuite/gcc.dg/pr18501.c).
260
261          To fix the false positives in uninit-5.c, we would have to
262          account for the predicates protecting the set and the use of each
263          variable.  Using a representation like Gated Single Assignment
264          may help.  */
265       /* Split critical edges before late uninit warning to reduce the
266          number of false positives from it.  */
267       NEXT_PASS (pass_split_crit_edges);
268       NEXT_PASS (pass_late_warn_uninitialized);
269       NEXT_PASS (pass_uncprop);
270       NEXT_PASS (pass_local_pure_const);
271   POP_INSERT_PASSES ()
272   NEXT_PASS (pass_all_optimizations_g);
273   PUSH_INSERT_PASSES_WITHIN (pass_all_optimizations_g)
274       NEXT_PASS (pass_remove_cgraph_callee_edges);
275       NEXT_PASS (pass_strip_predict_hints);
276       /* Lower remaining pieces of GIMPLE.  */
277       NEXT_PASS (pass_lower_complex);
278       NEXT_PASS (pass_lower_vector_ssa);
279       /* Perform simple scalar cleanup which is constant/copy propagation.  */
280       NEXT_PASS (pass_ccp);
281       NEXT_PASS (pass_object_sizes);
282       /* Fold remaining builtins.  */
283       NEXT_PASS (pass_fold_builtins);
284       /* Copy propagation also copy-propagates constants, this is necessary
285          to forward object-size and builtin folding results properly.  */
286       NEXT_PASS (pass_copy_prop);
287       NEXT_PASS (pass_dce);
288       NEXT_PASS (pass_asan);
289       NEXT_PASS (pass_tsan);
290       NEXT_PASS (pass_rename_ssa_copies);
291       /* ???  We do want some kind of loop invariant motion, but we possibly
292          need to adjust LIM to be more friendly towards preserving accurate
293          debug information here.  */
294       /* Split critical edges before late uninit warning to reduce the
295          number of false positives from it.  */
296       NEXT_PASS (pass_split_crit_edges);
297       NEXT_PASS (pass_late_warn_uninitialized);
298       NEXT_PASS (pass_uncprop);
299       NEXT_PASS (pass_local_pure_const);
300   POP_INSERT_PASSES ()
301   NEXT_PASS (pass_tm_init);
302   PUSH_INSERT_PASSES_WITHIN (pass_tm_init)
303       NEXT_PASS (pass_tm_mark);
304       NEXT_PASS (pass_tm_memopt);
305       NEXT_PASS (pass_tm_edges);
306   POP_INSERT_PASSES ()
307   NEXT_PASS (pass_vtable_verify);
308   NEXT_PASS (pass_lower_vector);
309   NEXT_PASS (pass_lower_complex_O0);
310   NEXT_PASS (pass_asan_O0);
311   NEXT_PASS (pass_tsan_O0);
312   NEXT_PASS (pass_cleanup_eh);
313   NEXT_PASS (pass_lower_resx);
314   NEXT_PASS (pass_nrv);
315   NEXT_PASS (pass_cleanup_cfg_post_optimizing);
316   NEXT_PASS (pass_warn_function_noreturn);
317
318   NEXT_PASS (pass_expand);
319
320   NEXT_PASS (pass_rest_of_compilation);
321   PUSH_INSERT_PASSES_WITHIN (pass_rest_of_compilation)
322       NEXT_PASS (pass_instantiate_virtual_regs);
323       NEXT_PASS (pass_into_cfg_layout_mode);
324       NEXT_PASS (pass_jump);
325       NEXT_PASS (pass_lower_subreg);
326       NEXT_PASS (pass_df_initialize_opt);
327       NEXT_PASS (pass_cse);
328       NEXT_PASS (pass_rtl_fwprop);
329       NEXT_PASS (pass_rtl_cprop);
330       NEXT_PASS (pass_rtl_pre);
331       NEXT_PASS (pass_rtl_hoist);
332       NEXT_PASS (pass_rtl_cprop);
333       NEXT_PASS (pass_rtl_store_motion);
334       NEXT_PASS (pass_cse_after_global_opts);
335       NEXT_PASS (pass_rtl_ifcvt);
336       NEXT_PASS (pass_reginfo_init);
337       /* Perform loop optimizations.  It might be better to do them a bit
338          sooner, but we want the profile feedback to work more
339          efficiently.  */
340       NEXT_PASS (pass_loop2);
341       PUSH_INSERT_PASSES_WITHIN (pass_loop2)
342           NEXT_PASS (pass_rtl_loop_init);
343           NEXT_PASS (pass_rtl_move_loop_invariants);
344           NEXT_PASS (pass_rtl_unswitch);
345           NEXT_PASS (pass_rtl_unroll_and_peel_loops);
346           NEXT_PASS (pass_rtl_doloop);
347           NEXT_PASS (pass_rtl_loop_done);
348           TERMINATE_PASS_LIST ()
349       POP_INSERT_PASSES ()
350       NEXT_PASS (pass_web);
351       NEXT_PASS (pass_rtl_cprop);
352       NEXT_PASS (pass_cse2);
353       NEXT_PASS (pass_rtl_dse1);
354       NEXT_PASS (pass_rtl_fwprop_addr);
355       NEXT_PASS (pass_inc_dec);
356       NEXT_PASS (pass_initialize_regs);
357       NEXT_PASS (pass_ud_rtl_dce);
358       NEXT_PASS (pass_combine);
359       NEXT_PASS (pass_if_after_combine);
360       NEXT_PASS (pass_partition_blocks);
361       NEXT_PASS (pass_outof_cfg_layout_mode);
362       NEXT_PASS (pass_split_all_insns);
363       NEXT_PASS (pass_lower_subreg2);
364       NEXT_PASS (pass_df_initialize_no_opt);
365       NEXT_PASS (pass_stack_ptr_mod);
366       NEXT_PASS (pass_mode_switching);
367       NEXT_PASS (pass_match_asm_constraints);
368       NEXT_PASS (pass_sms);
369       NEXT_PASS (pass_live_range_shrinkage);
370       NEXT_PASS (pass_sched);
371       NEXT_PASS (pass_ira);
372       NEXT_PASS (pass_reload);
373       NEXT_PASS (pass_postreload);
374       PUSH_INSERT_PASSES_WITHIN (pass_postreload)
375           NEXT_PASS (pass_postreload_cse);
376           NEXT_PASS (pass_gcse2);
377           NEXT_PASS (pass_split_after_reload);
378           NEXT_PASS (pass_ree);
379           NEXT_PASS (pass_compare_elim_after_reload);
380           NEXT_PASS (pass_branch_target_load_optimize1);
381           NEXT_PASS (pass_thread_prologue_and_epilogue);
382           NEXT_PASS (pass_rtl_dse2);
383           NEXT_PASS (pass_stack_adjustments);
384           NEXT_PASS (pass_jump2);
385           NEXT_PASS (pass_peephole2);
386           NEXT_PASS (pass_if_after_reload);
387           NEXT_PASS (pass_regrename);
388           NEXT_PASS (pass_cprop_hardreg);
389           NEXT_PASS (pass_fast_rtl_dce);
390           NEXT_PASS (pass_reorder_blocks);
391           NEXT_PASS (pass_branch_target_load_optimize2);
392           NEXT_PASS (pass_leaf_regs);
393           NEXT_PASS (pass_split_before_sched2);
394           NEXT_PASS (pass_sched2);
395           NEXT_PASS (pass_stack_regs);
396           PUSH_INSERT_PASSES_WITHIN (pass_stack_regs)
397               NEXT_PASS (pass_split_before_regstack);
398               NEXT_PASS (pass_stack_regs_run);
399           POP_INSERT_PASSES ()
400           NEXT_PASS (pass_compute_alignments);
401           NEXT_PASS (pass_duplicate_computed_gotos);
402           NEXT_PASS (pass_variable_tracking);
403           NEXT_PASS (pass_free_cfg);
404           NEXT_PASS (pass_machine_reorg);
405           NEXT_PASS (pass_cleanup_barriers);
406           NEXT_PASS (pass_delay_slots);
407           NEXT_PASS (pass_split_for_shorten_branches);
408           NEXT_PASS (pass_convert_to_eh_region_ranges);
409           NEXT_PASS (pass_shorten_branches);
410           NEXT_PASS (pass_set_nothrow_function_flags);
411           NEXT_PASS (pass_dwarf2_frame);
412           NEXT_PASS (pass_final);
413       POP_INSERT_PASSES ()
414       NEXT_PASS (pass_df_finish);
415   POP_INSERT_PASSES ()
416   NEXT_PASS (pass_clean_state);
417   TERMINATE_PASS_LIST ()