1/* Description of pass structure
2   Copyright (C) 1987-2021 Free Software Foundation, Inc.
3
4This file is part of GCC.
5
6GCC is free software; you can redistribute it and/or modify it under
7the terms of the GNU General Public License as published by the Free
8Software Foundation; either version 3, or (at your option) any later
9version.
10
11GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12WARRANTY; without even the implied warranty of MERCHANTABILITY or
13FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14for more details.
15
16You should have received a copy of the GNU General Public License
17along 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 (PASS)
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_omp_oacc_kernels_decompose);
38  NEXT_PASS (pass_lower_omp);
39  NEXT_PASS (pass_lower_cf);
40  NEXT_PASS (pass_lower_tm);
41  NEXT_PASS (pass_refactor_eh);
42  NEXT_PASS (pass_lower_eh);
43  NEXT_PASS (pass_coroutine_lower_builtins);
44  NEXT_PASS (pass_build_cfg);
45  NEXT_PASS (pass_warn_function_return);
46  NEXT_PASS (pass_coroutine_early_expand_ifns);
47  NEXT_PASS (pass_expand_omp);
48  NEXT_PASS (pass_warn_printf);
49  NEXT_PASS (pass_walloca, /*strict_mode_p=*/true);
50  NEXT_PASS (pass_build_cgraph_edges);
51  TERMINATE_PASS_LIST (all_lowering_passes)
52
53  /* Interprocedural optimization passes.  */
54  INSERT_PASSES_AFTER (all_small_ipa_passes)
55  NEXT_PASS (pass_ipa_free_lang_data);
56  NEXT_PASS (pass_ipa_function_and_variable_visibility);
57  NEXT_PASS (pass_build_ssa_passes);
58  PUSH_INSERT_PASSES_WITHIN (pass_build_ssa_passes)
59      NEXT_PASS (pass_fixup_cfg);
60      NEXT_PASS (pass_build_ssa);
61      NEXT_PASS (pass_warn_nonnull_compare);
62      NEXT_PASS (pass_early_warn_uninitialized);
63      NEXT_PASS (pass_ubsan);
64      NEXT_PASS (pass_nothrow);
65      NEXT_PASS (pass_rebuild_cgraph_edges);
66  POP_INSERT_PASSES ()
67
68  NEXT_PASS (pass_local_optimization_passes);
69  PUSH_INSERT_PASSES_WITHIN (pass_local_optimization_passes)
70      NEXT_PASS (pass_fixup_cfg);
71      NEXT_PASS (pass_rebuild_cgraph_edges);
72      NEXT_PASS (pass_local_fn_summary);
73      NEXT_PASS (pass_early_inline);
74      NEXT_PASS (pass_all_early_optimizations);
75      PUSH_INSERT_PASSES_WITHIN (pass_all_early_optimizations)
76	  NEXT_PASS (pass_remove_cgraph_callee_edges);
77	  NEXT_PASS (pass_object_sizes, true /* insert_min_max_p */);
78	  /* Don't record nonzero bits before IPA to avoid
79	     using too much memory.  */
80	  NEXT_PASS (pass_ccp, false /* nonzero_p */);
81	  /* After CCP we rewrite no longer addressed locals into SSA
82	     form if possible.  */
83	  NEXT_PASS (pass_forwprop);
84          NEXT_PASS (pass_early_thread_jumps);
85	  NEXT_PASS (pass_sra_early);
86	  /* pass_build_ealias is a dummy pass that ensures that we
87	     execute TODO_rebuild_alias at this point.  */
88	  NEXT_PASS (pass_build_ealias);
89	  NEXT_PASS (pass_fre, true /* may_iterate */);
90	  NEXT_PASS (pass_early_vrp);
91	  NEXT_PASS (pass_merge_phi);
92          NEXT_PASS (pass_dse);
93	  NEXT_PASS (pass_cd_dce, false /* update_address_taken_p */);
94	  NEXT_PASS (pass_phiopt, true /* early_p */);
95	  NEXT_PASS (pass_modref);
96	  NEXT_PASS (pass_tail_recursion);
97	  NEXT_PASS (pass_if_to_switch);
98	  NEXT_PASS (pass_convert_switch);
99	  NEXT_PASS (pass_cleanup_eh);
100	  NEXT_PASS (pass_profile);
101	  NEXT_PASS (pass_local_pure_const);
102	  /* Split functions creates parts that are not run through
103	     early optimizations again.  It is thus good idea to do this
104	      late.  */
105	  NEXT_PASS (pass_split_functions);
106	  NEXT_PASS (pass_strip_predict_hints, true /* early_p */);
107      POP_INSERT_PASSES ()
108      NEXT_PASS (pass_release_ssa_names);
109      NEXT_PASS (pass_rebuild_cgraph_edges);
110      NEXT_PASS (pass_local_fn_summary);
111  POP_INSERT_PASSES ()
112
113  NEXT_PASS (pass_ipa_remove_symbols);
114  NEXT_PASS (pass_ipa_oacc);
115  PUSH_INSERT_PASSES_WITHIN (pass_ipa_oacc)
116      NEXT_PASS (pass_ipa_pta);
117      /* Pass group that runs when the function is an offloaded function
118	 containing oacc kernels loops.	 */
119      NEXT_PASS (pass_ipa_oacc_kernels);
120      PUSH_INSERT_PASSES_WITHIN (pass_ipa_oacc_kernels)
121	  NEXT_PASS (pass_oacc_kernels);
122	  PUSH_INSERT_PASSES_WITHIN (pass_oacc_kernels)
123	      NEXT_PASS (pass_ch);
124	      NEXT_PASS (pass_fre, true /* may_iterate */);
125	      /* We use pass_lim to rewrite in-memory iteration and reduction
126		 variable accesses in loops into local variables accesses.  */
127	      NEXT_PASS (pass_lim);
128	      NEXT_PASS (pass_dominator, false /* may_peel_loop_headers_p */);
129	      NEXT_PASS (pass_dce);
130	      NEXT_PASS (pass_parallelize_loops, true /* oacc_kernels_p */);
131	      NEXT_PASS (pass_expand_omp_ssa);
132	      NEXT_PASS (pass_rebuild_cgraph_edges);
133	  POP_INSERT_PASSES ()
134      POP_INSERT_PASSES ()
135  POP_INSERT_PASSES ()
136
137  NEXT_PASS (pass_target_clone);
138  NEXT_PASS (pass_ipa_auto_profile);
139  NEXT_PASS (pass_ipa_tree_profile);
140  PUSH_INSERT_PASSES_WITHIN (pass_ipa_tree_profile)
141      NEXT_PASS (pass_feedback_split_functions);
142  POP_INSERT_PASSES ()
143  NEXT_PASS (pass_ipa_free_fn_summary, true /* small_p */);
144  NEXT_PASS (pass_ipa_increase_alignment);
145  NEXT_PASS (pass_ipa_tm);
146  NEXT_PASS (pass_ipa_lower_emutls);
147  TERMINATE_PASS_LIST (all_small_ipa_passes)
148
149  INSERT_PASSES_AFTER (all_regular_ipa_passes)
150  NEXT_PASS (pass_analyzer);
151  NEXT_PASS (pass_ipa_odr);
152  NEXT_PASS (pass_ipa_whole_program_visibility);
153  NEXT_PASS (pass_ipa_profile);
154  NEXT_PASS (pass_ipa_icf);
155  NEXT_PASS (pass_ipa_devirt);
156  NEXT_PASS (pass_ipa_cp);
157  NEXT_PASS (pass_ipa_sra);
158  NEXT_PASS (pass_ipa_cdtor_merge);
159  NEXT_PASS (pass_ipa_fn_summary);
160  NEXT_PASS (pass_ipa_inline);
161  NEXT_PASS (pass_ipa_pure_const);
162  NEXT_PASS (pass_ipa_modref);
163  NEXT_PASS (pass_ipa_free_fn_summary, false /* small_p */);
164  NEXT_PASS (pass_ipa_reference);
165  /* This pass needs to be scheduled after any IP code duplication.   */
166  NEXT_PASS (pass_ipa_single_use);
167  /* Comdat privatization come last, as direct references to comdat local
168     symbols are not allowed outside of the comdat group.  Privatizing early
169     would result in missed optimizations due to this restriction.  */
170  NEXT_PASS (pass_ipa_comdats);
171  TERMINATE_PASS_LIST (all_regular_ipa_passes)
172
173  /* Simple IPA passes executed after the regular passes.  In WHOPR mode the
174     passes are executed after partitioning and thus see just parts of the
175     compiled unit.  */
176  INSERT_PASSES_AFTER (all_late_ipa_passes)
177  NEXT_PASS (pass_ipa_pta);
178  NEXT_PASS (pass_omp_simd_clone);
179  TERMINATE_PASS_LIST (all_late_ipa_passes)
180
181  /* These passes are run after IPA passes on every function that is being
182     output to the assembler file.  */
183  INSERT_PASSES_AFTER (all_passes)
184  NEXT_PASS (pass_fixup_cfg);
185  NEXT_PASS (pass_lower_eh_dispatch);
186  NEXT_PASS (pass_oacc_device_lower);
187  NEXT_PASS (pass_omp_device_lower);
188  NEXT_PASS (pass_omp_target_link);
189  NEXT_PASS (pass_adjust_alignment);
190  NEXT_PASS (pass_all_optimizations);
191  PUSH_INSERT_PASSES_WITHIN (pass_all_optimizations)
192      NEXT_PASS (pass_remove_cgraph_callee_edges);
193      /* Initial scalar cleanups before alias computation.
194	 They ensure memory accesses are not indirect wherever possible.  */
195      NEXT_PASS (pass_strip_predict_hints, false /* early_p */);
196      NEXT_PASS (pass_ccp, true /* nonzero_p */);
197      NEXT_PASS (pass_post_ipa_warn);
198      /* After CCP we rewrite no longer addressed locals into SSA
199	 form if possible.  */
200      NEXT_PASS (pass_complete_unrolli);
201      NEXT_PASS (pass_backprop);
202      NEXT_PASS (pass_phiprop);
203      NEXT_PASS (pass_forwprop);
204      NEXT_PASS (pass_object_sizes, false /* insert_min_max_p */);
205      /* pass_build_alias is a dummy pass that ensures that we
206	 execute TODO_rebuild_alias at this point.  */
207      NEXT_PASS (pass_build_alias);
208      NEXT_PASS (pass_return_slot);
209      NEXT_PASS (pass_fre, true /* may_iterate */);
210      NEXT_PASS (pass_merge_phi);
211      NEXT_PASS (pass_thread_jumps);
212      NEXT_PASS (pass_vrp, true /* warn_array_bounds_p */);
213      NEXT_PASS (pass_dce);
214      NEXT_PASS (pass_stdarg);
215      NEXT_PASS (pass_call_cdce);
216      NEXT_PASS (pass_cselim);
217      NEXT_PASS (pass_copy_prop);
218      NEXT_PASS (pass_tree_ifcombine);
219      NEXT_PASS (pass_merge_phi);
220      NEXT_PASS (pass_phiopt, false /* early_p */);
221      NEXT_PASS (pass_tail_recursion);
222      NEXT_PASS (pass_ch);
223      NEXT_PASS (pass_lower_complex);
224      NEXT_PASS (pass_sra);
225      /* The dom pass will also resolve all __builtin_constant_p calls
226         that are still there to 0.  This has to be done after some
227	 propagations have already run, but before some more dead code
228	 is removed, and this place fits nicely.  Remember this when
229	 trying to move or duplicate pass_dominator somewhere earlier.  */
230      NEXT_PASS (pass_thread_jumps);
231      NEXT_PASS (pass_dominator, true /* may_peel_loop_headers_p */);
232      /* Threading can leave many const/copy propagations in the IL.
233	 Clean them up.  Failure to do so well can lead to false
234	 positives from warnings for erroneous code.  */
235      NEXT_PASS (pass_copy_prop);
236      /* Identify paths that should never be executed in a conforming
237	 program and isolate those paths.  */
238      NEXT_PASS (pass_isolate_erroneous_paths);
239      NEXT_PASS (pass_dse);
240      NEXT_PASS (pass_reassoc, true /* insert_powi_p */);
241      NEXT_PASS (pass_dce);
242      NEXT_PASS (pass_forwprop);
243      NEXT_PASS (pass_phiopt, false /* early_p */);
244      NEXT_PASS (pass_ccp, true /* nonzero_p */);
245      /* After CCP we rewrite no longer addressed locals into SSA
246	 form if possible.  */
247      NEXT_PASS (pass_cse_sincos);
248      NEXT_PASS (pass_optimize_bswap);
249      NEXT_PASS (pass_laddress);
250      NEXT_PASS (pass_lim);
251      NEXT_PASS (pass_walloca, false);
252      NEXT_PASS (pass_pre);
253      NEXT_PASS (pass_sink_code);
254      NEXT_PASS (pass_sancov);
255      NEXT_PASS (pass_asan);
256      NEXT_PASS (pass_tsan);
257      NEXT_PASS (pass_dce);
258      /* Pass group that runs when 1) enabled, 2) there are loops
259	 in the function.  Make sure to run pass_fix_loops before
260	 to discover/remove loops before running the gate function
261	 of pass_tree_loop.  */
262      NEXT_PASS (pass_fix_loops);
263      NEXT_PASS (pass_tree_loop);
264      PUSH_INSERT_PASSES_WITHIN (pass_tree_loop)
265          /* Before loop_init we rewrite no longer addressed locals into SSA
266	     form if possible.  */
267	  NEXT_PASS (pass_tree_loop_init);
268	  NEXT_PASS (pass_tree_unswitch);
269	  NEXT_PASS (pass_scev_cprop);
270	  NEXT_PASS (pass_loop_split);
271	  NEXT_PASS (pass_loop_versioning);
272	  NEXT_PASS (pass_loop_jam);
273	  /* All unswitching, final value replacement and splitting can expose
274	     empty loops.  Remove them now.  */
275	  NEXT_PASS (pass_cd_dce, false /* update_address_taken_p */);
276	  NEXT_PASS (pass_iv_canon);
277	  NEXT_PASS (pass_loop_distribution);
278	  NEXT_PASS (pass_linterchange);
279	  NEXT_PASS (pass_copy_prop);
280	  NEXT_PASS (pass_graphite);
281	  PUSH_INSERT_PASSES_WITHIN (pass_graphite)
282	      NEXT_PASS (pass_graphite_transforms);
283	      NEXT_PASS (pass_lim);
284	      NEXT_PASS (pass_copy_prop);
285	      NEXT_PASS (pass_dce);
286	  POP_INSERT_PASSES ()
287	  NEXT_PASS (pass_parallelize_loops, false /* oacc_kernels_p */);
288	  NEXT_PASS (pass_expand_omp_ssa);
289	  NEXT_PASS (pass_ch_vect);
290	  NEXT_PASS (pass_if_conversion);
291	  /* pass_vectorize must immediately follow pass_if_conversion.
292	     Please do not add any other passes in between.  */
293	  NEXT_PASS (pass_vectorize);
294	  PUSH_INSERT_PASSES_WITHIN (pass_vectorize)
295	      NEXT_PASS (pass_dce);
296	  POP_INSERT_PASSES ()
297	  NEXT_PASS (pass_predcom);
298	  NEXT_PASS (pass_complete_unroll);
299	  NEXT_PASS (pass_pre_slp_scalar_cleanup);
300	  PUSH_INSERT_PASSES_WITHIN (pass_pre_slp_scalar_cleanup)
301	      NEXT_PASS (pass_fre, false /* may_iterate */);
302	      NEXT_PASS (pass_dse);
303	  POP_INSERT_PASSES ()
304	  NEXT_PASS (pass_slp_vectorize);
305	  NEXT_PASS (pass_loop_prefetch);
306	  /* Run IVOPTs after the last pass that uses data-reference analysis
307	     as that doesn't handle TARGET_MEM_REFs.  */
308	  NEXT_PASS (pass_iv_optimize);
309	  NEXT_PASS (pass_lim);
310	  NEXT_PASS (pass_tree_loop_done);
311      POP_INSERT_PASSES ()
312      /* Pass group that runs when pass_tree_loop is disabled or there
313         are no loops in the function.  */
314      NEXT_PASS (pass_tree_no_loop);
315      PUSH_INSERT_PASSES_WITHIN (pass_tree_no_loop)
316	  NEXT_PASS (pass_slp_vectorize);
317      POP_INSERT_PASSES ()
318      NEXT_PASS (pass_simduid_cleanup);
319      NEXT_PASS (pass_lower_vector_ssa);
320      NEXT_PASS (pass_lower_switch);
321      NEXT_PASS (pass_cse_reciprocals);
322      NEXT_PASS (pass_reassoc, false /* insert_powi_p */);
323      NEXT_PASS (pass_strength_reduction);
324      NEXT_PASS (pass_split_paths);
325      NEXT_PASS (pass_tracer);
326      NEXT_PASS (pass_fre, false /* may_iterate */);
327      /* After late FRE we rewrite no longer addressed locals into SSA
328         form if possible.  */
329      NEXT_PASS (pass_thread_jumps);
330      NEXT_PASS (pass_dominator, false /* may_peel_loop_headers_p */);
331      NEXT_PASS (pass_strlen);
332      NEXT_PASS (pass_thread_jumps);
333      NEXT_PASS (pass_vrp, false /* warn_array_bounds_p */);
334      /* Threading can leave many const/copy propagations in the IL.
335	 Clean them up.  */
336      NEXT_PASS (pass_copy_prop);
337      NEXT_PASS (pass_warn_restrict);
338      NEXT_PASS (pass_dse);
339      NEXT_PASS (pass_cd_dce, true /* update_address_taken_p */);
340      /* After late CD DCE we rewrite no longer addressed locals into SSA
341	 form if possible.  */
342      NEXT_PASS (pass_forwprop);
343      NEXT_PASS (pass_phiopt, false /* early_p */);
344      NEXT_PASS (pass_fold_builtins);
345      NEXT_PASS (pass_optimize_widening_mul);
346      NEXT_PASS (pass_store_merging);
347      NEXT_PASS (pass_tail_calls);
348      /* If DCE is not run before checking for uninitialized uses,
349	 we may get false warnings (e.g., testsuite/gcc.dg/uninit-5.c).
350	 However, this also causes us to misdiagnose cases that should be
351	 real warnings (e.g., testsuite/gcc.dg/pr18501.c).  */
352      NEXT_PASS (pass_dce);
353      /* Split critical edges before late uninit warning to reduce the
354         number of false positives from it.  */
355      NEXT_PASS (pass_split_crit_edges);
356      NEXT_PASS (pass_late_warn_uninitialized);
357      NEXT_PASS (pass_uncprop);
358      NEXT_PASS (pass_local_pure_const);
359      NEXT_PASS (pass_modref);
360  POP_INSERT_PASSES ()
361  NEXT_PASS (pass_all_optimizations_g);
362  PUSH_INSERT_PASSES_WITHIN (pass_all_optimizations_g)
363      NEXT_PASS (pass_remove_cgraph_callee_edges);
364      NEXT_PASS (pass_strip_predict_hints, false /* early_p */);
365      /* Lower remaining pieces of GIMPLE.  */
366      NEXT_PASS (pass_lower_complex);
367      NEXT_PASS (pass_lower_vector_ssa);
368      NEXT_PASS (pass_lower_switch);
369      /* Perform simple scalar cleanup which is constant/copy propagation.  */
370      NEXT_PASS (pass_ccp, true /* nonzero_p */);
371      NEXT_PASS (pass_post_ipa_warn);
372      NEXT_PASS (pass_object_sizes);
373      /* Fold remaining builtins.  */
374      NEXT_PASS (pass_fold_builtins);
375      NEXT_PASS (pass_strlen);
376      /* Copy propagation also copy-propagates constants, this is necessary
377         to forward object-size and builtin folding results properly.  */
378      NEXT_PASS (pass_copy_prop);
379      NEXT_PASS (pass_dce);
380      NEXT_PASS (pass_sancov);
381      NEXT_PASS (pass_asan);
382      NEXT_PASS (pass_tsan);
383      /* ???  We do want some kind of loop invariant motion, but we possibly
384         need to adjust LIM to be more friendly towards preserving accurate
385	 debug information here.  */
386      /* Split critical edges before late uninit warning to reduce the
387         number of false positives from it.  */
388      NEXT_PASS (pass_split_crit_edges);
389      NEXT_PASS (pass_late_warn_uninitialized);
390      NEXT_PASS (pass_uncprop);
391      NEXT_PASS (pass_local_pure_const);
392      NEXT_PASS (pass_modref);
393  POP_INSERT_PASSES ()
394  NEXT_PASS (pass_tm_init);
395  PUSH_INSERT_PASSES_WITHIN (pass_tm_init)
396      NEXT_PASS (pass_tm_mark);
397      NEXT_PASS (pass_tm_memopt);
398      NEXT_PASS (pass_tm_edges);
399  POP_INSERT_PASSES ()
400  NEXT_PASS (pass_simduid_cleanup);
401  NEXT_PASS (pass_vtable_verify);
402  NEXT_PASS (pass_lower_vaarg);
403  NEXT_PASS (pass_lower_vector);
404  NEXT_PASS (pass_lower_complex_O0);
405  NEXT_PASS (pass_sancov_O0);
406  NEXT_PASS (pass_lower_switch_O0);
407  NEXT_PASS (pass_asan_O0);
408  NEXT_PASS (pass_tsan_O0);
409  NEXT_PASS (pass_sanopt);
410  NEXT_PASS (pass_cleanup_eh);
411  NEXT_PASS (pass_lower_resx);
412  NEXT_PASS (pass_nrv);
413  NEXT_PASS (pass_gimple_isel);
414  NEXT_PASS (pass_cleanup_cfg_post_optimizing);
415  NEXT_PASS (pass_warn_function_noreturn);
416
417  NEXT_PASS (pass_expand);
418
419  NEXT_PASS (pass_rest_of_compilation);
420  PUSH_INSERT_PASSES_WITHIN (pass_rest_of_compilation)
421      NEXT_PASS (pass_instantiate_virtual_regs);
422      NEXT_PASS (pass_into_cfg_layout_mode);
423      NEXT_PASS (pass_jump);
424      NEXT_PASS (pass_lower_subreg);
425      NEXT_PASS (pass_df_initialize_opt);
426      NEXT_PASS (pass_cse);
427      NEXT_PASS (pass_rtl_fwprop);
428      NEXT_PASS (pass_rtl_cprop);
429      NEXT_PASS (pass_rtl_pre);
430      NEXT_PASS (pass_rtl_hoist);
431      NEXT_PASS (pass_rtl_cprop);
432      NEXT_PASS (pass_rtl_store_motion);
433      NEXT_PASS (pass_cse_after_global_opts);
434      NEXT_PASS (pass_rtl_ifcvt);
435      NEXT_PASS (pass_reginfo_init);
436      /* Perform loop optimizations.  It might be better to do them a bit
437	 sooner, but we want the profile feedback to work more
438	 efficiently.  */
439      NEXT_PASS (pass_loop2);
440      PUSH_INSERT_PASSES_WITHIN (pass_loop2)
441	  NEXT_PASS (pass_rtl_loop_init);
442	  NEXT_PASS (pass_rtl_move_loop_invariants);
443	  NEXT_PASS (pass_rtl_unroll_loops);
444	  NEXT_PASS (pass_rtl_doloop);
445	  NEXT_PASS (pass_rtl_loop_done);
446      POP_INSERT_PASSES ()
447      NEXT_PASS (pass_lower_subreg2);
448      NEXT_PASS (pass_web);
449      NEXT_PASS (pass_rtl_cprop);
450      NEXT_PASS (pass_cse2);
451      NEXT_PASS (pass_rtl_dse1);
452      NEXT_PASS (pass_rtl_fwprop_addr);
453      NEXT_PASS (pass_inc_dec);
454      NEXT_PASS (pass_initialize_regs);
455      NEXT_PASS (pass_ud_rtl_dce);
456      NEXT_PASS (pass_combine);
457      NEXT_PASS (pass_if_after_combine);
458      NEXT_PASS (pass_jump_after_combine);
459      NEXT_PASS (pass_partition_blocks);
460      NEXT_PASS (pass_outof_cfg_layout_mode);
461      NEXT_PASS (pass_split_all_insns);
462      NEXT_PASS (pass_lower_subreg3);
463      NEXT_PASS (pass_df_initialize_no_opt);
464      NEXT_PASS (pass_stack_ptr_mod);
465      NEXT_PASS (pass_mode_switching);
466      NEXT_PASS (pass_match_asm_constraints);
467      NEXT_PASS (pass_sms);
468      NEXT_PASS (pass_live_range_shrinkage);
469      NEXT_PASS (pass_sched);
470      NEXT_PASS (pass_early_remat);
471      NEXT_PASS (pass_ira);
472      NEXT_PASS (pass_reload);
473      NEXT_PASS (pass_postreload);
474      PUSH_INSERT_PASSES_WITHIN (pass_postreload)
475	  NEXT_PASS (pass_postreload_cse);
476	  NEXT_PASS (pass_gcse2);
477	  NEXT_PASS (pass_split_after_reload);
478	  NEXT_PASS (pass_ree);
479	  NEXT_PASS (pass_compare_elim_after_reload);
480	  NEXT_PASS (pass_thread_prologue_and_epilogue);
481	  NEXT_PASS (pass_rtl_dse2);
482	  NEXT_PASS (pass_stack_adjustments);
483	  NEXT_PASS (pass_jump2);
484	  NEXT_PASS (pass_duplicate_computed_gotos);
485	  NEXT_PASS (pass_sched_fusion);
486	  NEXT_PASS (pass_peephole2);
487	  NEXT_PASS (pass_if_after_reload);
488	  NEXT_PASS (pass_regrename);
489	  NEXT_PASS (pass_cprop_hardreg);
490	  NEXT_PASS (pass_fast_rtl_dce);
491	  NEXT_PASS (pass_reorder_blocks);
492	  NEXT_PASS (pass_leaf_regs);
493	  NEXT_PASS (pass_split_before_sched2);
494	  NEXT_PASS (pass_sched2);
495	  NEXT_PASS (pass_stack_regs);
496	  PUSH_INSERT_PASSES_WITHIN (pass_stack_regs)
497	      NEXT_PASS (pass_split_before_regstack);
498	      NEXT_PASS (pass_stack_regs_run);
499	  POP_INSERT_PASSES ()
500      POP_INSERT_PASSES ()
501      NEXT_PASS (pass_late_compilation);
502      PUSH_INSERT_PASSES_WITHIN (pass_late_compilation)
503	  NEXT_PASS (pass_zero_call_used_regs);
504	  NEXT_PASS (pass_compute_alignments);
505	  NEXT_PASS (pass_variable_tracking);
506	  NEXT_PASS (pass_free_cfg);
507	  NEXT_PASS (pass_machine_reorg);
508	  NEXT_PASS (pass_cleanup_barriers);
509	  NEXT_PASS (pass_delay_slots);
510	  NEXT_PASS (pass_split_for_shorten_branches);
511	  NEXT_PASS (pass_convert_to_eh_region_ranges);
512	  NEXT_PASS (pass_shorten_branches);
513	  NEXT_PASS (pass_set_nothrow_function_flags);
514	  NEXT_PASS (pass_dwarf2_frame);
515	  NEXT_PASS (pass_final);
516      POP_INSERT_PASSES ()
517      NEXT_PASS (pass_df_finish);
518  POP_INSERT_PASSES ()
519  NEXT_PASS (pass_clean_state);
520  TERMINATE_PASS_LIST (all_passes)
521