/* This file is auto-generated by gen-pass-instances.awk
   from passes.def.  */
/* Description of pass structure
   Copyright (C) 1987-2016 Free Software Foundation, Inc.

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.

GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.  */

/*
 Macros that should be defined when using this file:
   INSERT_PASSES_AFTER (PASS)
   PUSH_INSERT_PASSES_WITHIN (PASS)
   POP_INSERT_PASSES ()
   NEXT_PASS (PASS, 1)
   TERMINATE_PASS_LIST ()
 */

 /* All passes needed to lower the function into shape optimizers can
    operate on.  These passes are always run first on the function, but
    backend might produce already lowered functions that are not processed
    by these passes.  */
  INSERT_PASSES_AFTER (all_lowering_passes)
  NEXT_PASS (pass_warn_unused_result, 1);
  NEXT_PASS (pass_diagnose_omp_blocks, 1);
  NEXT_PASS (pass_diagnose_tm_blocks, 1);
  NEXT_PASS (pass_lower_omp, 1);
  NEXT_PASS (pass_lower_cf, 1);
  NEXT_PASS (pass_lower_tm, 1);
  NEXT_PASS (pass_refactor_eh, 1);
  NEXT_PASS (pass_lower_eh, 1);
  NEXT_PASS (pass_build_cfg, 1);
  NEXT_PASS (pass_warn_function_return, 1);
  NEXT_PASS (pass_expand_omp, 1);
  NEXT_PASS (pass_build_cgraph_edges, 1);
  TERMINATE_PASS_LIST ()

  /* Interprocedural optimization passes.  */
  INSERT_PASSES_AFTER (all_small_ipa_passes)
  NEXT_PASS (pass_ipa_free_lang_data, 1);
  NEXT_PASS (pass_ipa_function_and_variable_visibility, 1);
  NEXT_PASS (pass_ipa_chkp_versioning, 1);
  NEXT_PASS (pass_ipa_chkp_early_produce_thunks, 1);
  NEXT_PASS (pass_build_ssa_passes, 1);
  PUSH_INSERT_PASSES_WITHIN (pass_build_ssa_passes)
      NEXT_PASS (pass_fixup_cfg, 1);
      NEXT_PASS (pass_init_datastructures, 1);
      NEXT_PASS (pass_build_ssa, 1);
      NEXT_PASS (pass_warn_nonnull_compare, 1);
      NEXT_PASS (pass_ubsan, 1);
      NEXT_PASS (pass_early_warn_uninitialized, 1);
      NEXT_PASS (pass_nothrow, 1);
  POP_INSERT_PASSES ()

  NEXT_PASS (pass_chkp_instrumentation_passes, 1);
  PUSH_INSERT_PASSES_WITHIN (pass_chkp_instrumentation_passes)
      NEXT_PASS (pass_fixup_cfg, 2);
      NEXT_PASS (pass_chkp, 1);
      NEXT_PASS (pass_rebuild_cgraph_edges, 1);
  POP_INSERT_PASSES ()

  NEXT_PASS (pass_local_optimization_passes, 1);
  PUSH_INSERT_PASSES_WITHIN (pass_local_optimization_passes)
      NEXT_PASS (pass_fixup_cfg, 3);
      NEXT_PASS (pass_rebuild_cgraph_edges, 2);
      NEXT_PASS (pass_inline_parameters, 1);
      NEXT_PASS (pass_early_inline, 1);
      NEXT_PASS (pass_all_early_optimizations, 1);
      PUSH_INSERT_PASSES_WITHIN (pass_all_early_optimizations)
	  NEXT_PASS (pass_remove_cgraph_callee_edges, 1);
	  NEXT_PASS_WITH_ARG (pass_object_sizes, 1,  true /* insert_min_max_p */);
	  /* Don't record nonzero bits before IPA to avoid
	     using too much memory.  */
	  NEXT_PASS_WITH_ARG (pass_ccp, 1,  false /* nonzero_p */);
	  /* After CCP we rewrite no longer addressed locals into SSA
	     form if possible.  */
	  NEXT_PASS (pass_forwprop, 1);
	  NEXT_PASS (pass_sra_early, 1);
	  /* pass_build_ealias is a dummy pass that ensures that we
	     execute TODO_rebuild_alias at this point.  */
	  NEXT_PASS (pass_build_ealias, 1);
	  NEXT_PASS (pass_fre, 1);
	  NEXT_PASS (pass_merge_phi, 1);
          NEXT_PASS (pass_dse, 1);
	  NEXT_PASS (pass_cd_dce, 1);
	  NEXT_PASS (pass_early_ipa_sra, 1);
	  NEXT_PASS (pass_tail_recursion, 1);
	  NEXT_PASS (pass_convert_switch, 1);
	  NEXT_PASS (pass_cleanup_eh, 1);
	  NEXT_PASS (pass_profile, 1);
	  NEXT_PASS (pass_local_pure_const, 1);
	  /* Split functions creates parts that are not run through
	     early optimizations again.  It is thus good idea to do this
	      late.  */
	  NEXT_PASS (pass_split_functions, 1);
      POP_INSERT_PASSES ()
      NEXT_PASS (pass_release_ssa_names, 1);
      NEXT_PASS (pass_rebuild_cgraph_edges, 3);
      NEXT_PASS (pass_inline_parameters, 2);
  POP_INSERT_PASSES ()

  NEXT_PASS (pass_ipa_oacc, 1);
  PUSH_INSERT_PASSES_WITHIN (pass_ipa_oacc)
      NEXT_PASS (pass_ipa_pta, 1);
      /* Pass group that runs when the function is an offloaded function
	 containing oacc kernels loops.	 */
      NEXT_PASS (pass_ipa_oacc_kernels, 1);
      PUSH_INSERT_PASSES_WITHIN (pass_ipa_oacc_kernels)
	  NEXT_PASS (pass_oacc_kernels, 1);
	  PUSH_INSERT_PASSES_WITHIN (pass_oacc_kernels)
	      NEXT_PASS (pass_ch, 1);
	      NEXT_PASS (pass_fre, 2);
	      /* We use pass_lim to rewrite in-memory iteration and reduction
		 variable accesses in loops into local variables accesses.  */
	      NEXT_PASS (pass_lim, 1);
	      NEXT_PASS_WITH_ARG (pass_dominator, 1,  false /* may_peel_loop_headers_p */);
	      NEXT_PASS (pass_dce, 1);
	      NEXT_PASS_WITH_ARG (pass_parallelize_loops, 1,  true /* oacc_kernels_p */);
	      NEXT_PASS (pass_expand_omp_ssa, 1);
	      NEXT_PASS (pass_rebuild_cgraph_edges, 4);
	  POP_INSERT_PASSES ()
      POP_INSERT_PASSES ()
  POP_INSERT_PASSES ()

  NEXT_PASS (pass_ipa_chkp_produce_thunks, 1);
  NEXT_PASS (pass_ipa_auto_profile, 1);
  NEXT_PASS (pass_ipa_free_inline_summary, 1);
  NEXT_PASS (pass_ipa_tree_profile, 1);
  PUSH_INSERT_PASSES_WITHIN (pass_ipa_tree_profile)
      NEXT_PASS (pass_feedback_split_functions, 1);
  POP_INSERT_PASSES ()
  NEXT_PASS (pass_ipa_increase_alignment, 1);
  NEXT_PASS (pass_ipa_tm, 1);
  NEXT_PASS (pass_ipa_lower_emutls, 1);
  TERMINATE_PASS_LIST ()

  INSERT_PASSES_AFTER (all_regular_ipa_passes)
  NEXT_PASS (pass_ipa_whole_program_visibility, 1);
  NEXT_PASS (pass_ipa_profile, 1);
  NEXT_PASS (pass_ipa_icf, 1);
  NEXT_PASS (pass_ipa_devirt, 1);
  NEXT_PASS (pass_ipa_cp, 1);
  NEXT_PASS (pass_ipa_cdtor_merge, 1);
  NEXT_PASS (pass_target_clone, 1);
  NEXT_PASS (pass_ipa_hsa, 1);
  NEXT_PASS (pass_ipa_inline, 1);
  NEXT_PASS (pass_ipa_pure_const, 1);
  NEXT_PASS (pass_ipa_reference, 1);
  /* This pass needs to be scheduled after any IP code duplication.   */
  NEXT_PASS (pass_ipa_single_use, 1);
  /* Comdat privatization come last, as direct references to comdat local
     symbols are not allowed outside of the comdat group.  Privatizing early
     would result in missed optimizations due to this restriction.  */
  NEXT_PASS (pass_ipa_comdats, 1);
  TERMINATE_PASS_LIST ()

  /* Simple IPA passes executed after the regular passes.  In WHOPR mode the
     passes are executed after partitioning and thus see just parts of the
     compiled unit.  */
  INSERT_PASSES_AFTER (all_late_ipa_passes)
  NEXT_PASS (pass_ipa_pta, 2);
  NEXT_PASS (pass_dispatcher_calls, 1);
  NEXT_PASS (pass_omp_simd_clone, 1);
  TERMINATE_PASS_LIST ()

  /* These passes are run after IPA passes on every function that is being
     output to the assembler file.  */
  INSERT_PASSES_AFTER (all_passes)
  NEXT_PASS (pass_fixup_cfg, 4);
  NEXT_PASS (pass_lower_eh_dispatch, 1);
  NEXT_PASS (pass_oacc_device_lower, 1);
  NEXT_PASS (pass_omp_target_link, 1);
  NEXT_PASS (pass_all_optimizations, 1);
  PUSH_INSERT_PASSES_WITHIN (pass_all_optimizations)
      NEXT_PASS (pass_remove_cgraph_callee_edges, 2);
      /* Initial scalar cleanups before alias computation.
	 They ensure memory accesses are not indirect wherever possible.  */
      NEXT_PASS (pass_strip_predict_hints, 1);
      NEXT_PASS_WITH_ARG (pass_ccp, 2,  true /* nonzero_p */);
      /* After CCP we rewrite no longer addressed locals into SSA
	 form if possible.  */
      NEXT_PASS (pass_complete_unrolli, 1);
      NEXT_PASS (pass_backprop, 1);
      NEXT_PASS (pass_phiprop, 1);
      NEXT_PASS (pass_forwprop, 2);
      NEXT_PASS_WITH_ARG (pass_object_sizes, 2,  false /* insert_min_max_p */);
      /* pass_build_alias is a dummy pass that ensures that we
	 execute TODO_rebuild_alias at this point.  */
      NEXT_PASS (pass_build_alias, 1);
      NEXT_PASS (pass_return_slot, 1);
      NEXT_PASS (pass_fre, 3);
      NEXT_PASS (pass_merge_phi, 2);
      NEXT_PASS_WITH_ARG (pass_vrp, 1,  true /* warn_array_bounds_p */);
      NEXT_PASS (pass_chkp_opt, 1);
      NEXT_PASS (pass_dce, 2);
      NEXT_PASS (pass_stdarg, 1);
      NEXT_PASS (pass_call_cdce, 1);
      NEXT_PASS (pass_cselim, 1);
      NEXT_PASS (pass_copy_prop, 1);
      NEXT_PASS (pass_tree_ifcombine, 1);
      NEXT_PASS (pass_merge_phi, 3);
      NEXT_PASS (pass_phiopt, 1);
      NEXT_PASS (pass_tail_recursion, 2);
      NEXT_PASS (pass_ch, 2);
      NEXT_PASS (pass_lower_complex, 1);
      NEXT_PASS (pass_sra, 1);
      /* The dom pass will also resolve all __builtin_constant_p calls
         that are still there to 0.  This has to be done after some
	 propagations have already run, but before some more dead code
	 is removed, and this place fits nicely.  Remember this when
	 trying to move or duplicate pass_dominator somewhere earlier.  */
      NEXT_PASS_WITH_ARG (pass_dominator, 2,  true /* may_peel_loop_headers_p */);
      /* At this point the majority of const/copy propagations
	 are exposed.  Go ahead and identify paths that should never
	 be executed in a conforming program and isolate those paths.

	 This will expose more degenerate PHIs in the main path and
	 expose more PRE/DOM optimization opportunities.  */
      NEXT_PASS (pass_isolate_erroneous_paths, 1);
      /* The only const/copy propagation opportunities left after
	 DOM and erroneous path isolation should be due to degenerate PHI nodes.
	 So rather than run the full propagators, run a specialized pass which
	 only examines PHIs to discover const/copy propagation
	 opportunities.  */
      NEXT_PASS (pass_phi_only_cprop, 1);
      NEXT_PASS (pass_dse, 2);
      NEXT_PASS_WITH_ARG (pass_reassoc, 1,  true /* insert_powi_p */);
      NEXT_PASS (pass_dce, 3);
      NEXT_PASS (pass_forwprop, 3);
      NEXT_PASS (pass_phiopt, 2);
      NEXT_PASS_WITH_ARG (pass_ccp, 3,  true /* nonzero_p */);
      /* After CCP we rewrite no longer addressed locals into SSA
	 form if possible.  */
      NEXT_PASS (pass_cse_sincos, 1);
      NEXT_PASS (pass_optimize_bswap, 1);
      NEXT_PASS (pass_laddress, 1);
      NEXT_PASS (pass_split_crit_edges, 1);
      NEXT_PASS (pass_pre, 1);
      NEXT_PASS (pass_sink_code, 1);
      NEXT_PASS (pass_sancov, 1);
      NEXT_PASS (pass_asan, 1);
      NEXT_PASS (pass_tsan, 1);
      /* Pass group that runs when 1) enabled, 2) there are loops
	 in the function.  Make sure to run pass_fix_loops before
	 to discover/remove loops before running the gate function
	 of pass_tree_loop.  */
      NEXT_PASS (pass_fix_loops, 1);
      NEXT_PASS (pass_tree_loop, 1);
      PUSH_INSERT_PASSES_WITHIN (pass_tree_loop)
	  NEXT_PASS (pass_tree_loop_init, 1);
	  NEXT_PASS (pass_lim, 2);
	  NEXT_PASS (pass_copy_prop, 2);
	  NEXT_PASS (pass_dce, 4);
	  NEXT_PASS (pass_tree_unswitch, 1);
	  NEXT_PASS (pass_scev_cprop, 1);
	  NEXT_PASS (pass_record_bounds, 1);
	  NEXT_PASS (pass_loop_distribution, 1);
	  NEXT_PASS (pass_copy_prop, 3);
	  NEXT_PASS (pass_graphite, 1);
	  PUSH_INSERT_PASSES_WITHIN (pass_graphite)
	      NEXT_PASS (pass_graphite_transforms, 1);
	      NEXT_PASS (pass_lim, 3);
	      NEXT_PASS (pass_copy_prop, 4);
	      NEXT_PASS (pass_dce, 5);
	  POP_INSERT_PASSES ()
	  NEXT_PASS (pass_iv_canon, 1);
	  NEXT_PASS_WITH_ARG (pass_parallelize_loops, 2,  false /* oacc_kernels_p */);
	  NEXT_PASS (pass_expand_omp_ssa, 2);
	  NEXT_PASS (pass_ch_vect, 1);
	  NEXT_PASS (pass_if_conversion, 1);
	  /* pass_vectorize must immediately follow pass_if_conversion.
	     Please do not add any other passes in between.  */
	  NEXT_PASS (pass_vectorize, 1);
          PUSH_INSERT_PASSES_WITHIN (pass_vectorize)
	      NEXT_PASS (pass_dce, 6);
          POP_INSERT_PASSES ()
          NEXT_PASS (pass_predcom, 1);
	  NEXT_PASS (pass_complete_unroll, 1);
	  NEXT_PASS (pass_slp_vectorize, 1);
	  NEXT_PASS (pass_loop_prefetch, 1);
	  /* Run IVOPTs after the last pass that uses data-reference analysis
	     as that doesn't handle TARGET_MEM_REFs.  */
	  NEXT_PASS (pass_iv_optimize, 1);
	  NEXT_PASS (pass_lim, 4);
	  NEXT_PASS (pass_tree_loop_done, 1);
      POP_INSERT_PASSES ()
      /* Pass group that runs when pass_tree_loop is disabled or there
         are no loops in the function.  */
      NEXT_PASS (pass_tree_no_loop, 1);
      PUSH_INSERT_PASSES_WITHIN (pass_tree_no_loop)
	  NEXT_PASS (pass_slp_vectorize, 2);
      POP_INSERT_PASSES ()
      NEXT_PASS (pass_simduid_cleanup, 1);
      NEXT_PASS (pass_lower_vector_ssa, 1);
      NEXT_PASS (pass_cse_reciprocals, 1);
      NEXT_PASS_WITH_ARG (pass_reassoc, 2,  false /* insert_powi_p */);
      NEXT_PASS (pass_strength_reduction, 1);
      NEXT_PASS (pass_split_paths, 1);
      NEXT_PASS (pass_tracer, 1);
      NEXT_PASS_WITH_ARG (pass_dominator, 3,  false /* may_peel_loop_headers_p */);
      NEXT_PASS (pass_strlen, 1);
      NEXT_PASS_WITH_ARG (pass_vrp, 2,  false /* warn_array_bounds_p */);
      /* The only const/copy propagation opportunities left after
	 DOM and VRP should be due to degenerate PHI nodes.  So rather than
	 run the full propagators, run a specialized pass which
	 only examines PHIs to discover const/copy propagation
	 opportunities.  */
      NEXT_PASS (pass_phi_only_cprop, 2);
      NEXT_PASS (pass_cd_dce, 2);
      NEXT_PASS (pass_dse, 3);
      NEXT_PASS (pass_forwprop, 4);
      NEXT_PASS (pass_phiopt, 3);
      NEXT_PASS (pass_fold_builtins, 1);
      NEXT_PASS (pass_optimize_widening_mul, 1);
      NEXT_PASS (pass_tail_calls, 1);
      /* If DCE is not run before checking for uninitialized uses,
	 we may get false warnings (e.g., testsuite/gcc.dg/uninit-5.c).
	 However, this also causes us to misdiagnose cases that should be
	 real warnings (e.g., testsuite/gcc.dg/pr18501.c).  */
      NEXT_PASS (pass_dce, 7);
      /* Split critical edges before late uninit warning to reduce the
         number of false positives from it.  */
      NEXT_PASS (pass_split_crit_edges, 2);
      NEXT_PASS (pass_late_warn_uninitialized, 1);
      NEXT_PASS (pass_uncprop, 1);
      NEXT_PASS (pass_local_pure_const, 2);
  POP_INSERT_PASSES ()
  NEXT_PASS (pass_all_optimizations_g, 1);
  PUSH_INSERT_PASSES_WITHIN (pass_all_optimizations_g)
      NEXT_PASS (pass_remove_cgraph_callee_edges, 3);
      NEXT_PASS (pass_strip_predict_hints, 2);
      /* Lower remaining pieces of GIMPLE.  */
      NEXT_PASS (pass_lower_complex, 2);
      NEXT_PASS (pass_lower_vector_ssa, 2);
      /* Perform simple scalar cleanup which is constant/copy propagation.  */
      NEXT_PASS_WITH_ARG (pass_ccp, 4,  true /* nonzero_p */);
      NEXT_PASS (pass_object_sizes, 3);
      /* Fold remaining builtins.  */
      NEXT_PASS (pass_fold_builtins, 2);
      /* Copy propagation also copy-propagates constants, this is necessary
         to forward object-size and builtin folding results properly.  */
      NEXT_PASS (pass_copy_prop, 5);
      NEXT_PASS (pass_dce, 8);
      NEXT_PASS (pass_sancov, 2);
      NEXT_PASS (pass_asan, 2);
      NEXT_PASS (pass_tsan, 2);
      /* ???  We do want some kind of loop invariant motion, but we possibly
         need to adjust LIM to be more friendly towards preserving accurate
	 debug information here.  */
      /* Split critical edges before late uninit warning to reduce the
         number of false positives from it.  */
      NEXT_PASS (pass_split_crit_edges, 3);
      NEXT_PASS (pass_late_warn_uninitialized, 2);
      NEXT_PASS (pass_uncprop, 2);
      NEXT_PASS (pass_local_pure_const, 3);
  POP_INSERT_PASSES ()
  NEXT_PASS (pass_tm_init, 1);
  PUSH_INSERT_PASSES_WITHIN (pass_tm_init)
      NEXT_PASS (pass_tm_mark, 1);
      NEXT_PASS (pass_tm_memopt, 1);
      NEXT_PASS (pass_tm_edges, 1);
  POP_INSERT_PASSES ()
  NEXT_PASS (pass_simduid_cleanup, 2);
  NEXT_PASS (pass_vtable_verify, 1);
  NEXT_PASS (pass_lower_vaarg, 1);
  NEXT_PASS (pass_lower_vector, 1);
  NEXT_PASS (pass_lower_complex_O0, 1);
  NEXT_PASS (pass_sancov_O0, 1);
  NEXT_PASS (pass_asan_O0, 1);
  NEXT_PASS (pass_tsan_O0, 1);
  NEXT_PASS (pass_sanopt, 1);
  NEXT_PASS (pass_cleanup_eh, 2);
  NEXT_PASS (pass_lower_resx, 1);
  NEXT_PASS (pass_nrv, 1);
  NEXT_PASS (pass_cleanup_cfg_post_optimizing, 1);
  NEXT_PASS (pass_warn_function_noreturn, 1);
  NEXT_PASS (pass_gen_hsail, 1);

  NEXT_PASS (pass_expand, 1);

  NEXT_PASS (pass_rest_of_compilation, 1);
  PUSH_INSERT_PASSES_WITHIN (pass_rest_of_compilation)
      NEXT_PASS (pass_instantiate_virtual_regs, 1);
      NEXT_PASS (pass_into_cfg_layout_mode, 1);
      NEXT_PASS (pass_jump, 1);
      NEXT_PASS (pass_lower_subreg, 1);
      NEXT_PASS (pass_df_initialize_opt, 1);
      NEXT_PASS (pass_cse, 1);
      NEXT_PASS (pass_rtl_fwprop, 1);
      NEXT_PASS (pass_rtl_cprop, 1);
      NEXT_PASS (pass_rtl_pre, 1);
      NEXT_PASS (pass_rtl_hoist, 1);
      NEXT_PASS (pass_rtl_cprop, 2);
      NEXT_PASS (pass_rtl_store_motion, 1);
      NEXT_PASS (pass_cse_after_global_opts, 1);
      NEXT_PASS (pass_rtl_ifcvt, 1);
      NEXT_PASS (pass_reginfo_init, 1);
      /* Perform loop optimizations.  It might be better to do them a bit
	 sooner, but we want the profile feedback to work more
	 efficiently.  */
      NEXT_PASS (pass_loop2, 1);
      PUSH_INSERT_PASSES_WITHIN (pass_loop2)
	  NEXT_PASS (pass_rtl_loop_init, 1);
	  NEXT_PASS (pass_rtl_move_loop_invariants, 1);
	  NEXT_PASS (pass_rtl_unroll_loops, 1);
	  NEXT_PASS (pass_rtl_doloop, 1);
	  NEXT_PASS (pass_rtl_loop_done, 1);
      POP_INSERT_PASSES ()
      NEXT_PASS (pass_web, 1);
      NEXT_PASS (pass_rtl_cprop, 3);
      NEXT_PASS (pass_cse2, 1);
      NEXT_PASS (pass_rtl_dse1, 1);
      NEXT_PASS (pass_rtl_fwprop_addr, 1);
      NEXT_PASS (pass_inc_dec, 1);
      NEXT_PASS (pass_initialize_regs, 1);
      NEXT_PASS (pass_ud_rtl_dce, 1);
      NEXT_PASS (pass_combine, 1);
      NEXT_PASS (pass_if_after_combine, 1);
      NEXT_PASS (pass_partition_blocks, 1);
      NEXT_PASS (pass_outof_cfg_layout_mode, 1);
      NEXT_PASS (pass_split_all_insns, 1);
      NEXT_PASS (pass_lower_subreg2, 1);
      NEXT_PASS (pass_df_initialize_no_opt, 1);
      NEXT_PASS (pass_stack_ptr_mod, 1);
      NEXT_PASS (pass_mode_switching, 1);
      NEXT_PASS (pass_match_asm_constraints, 1);
      NEXT_PASS (pass_sms, 1);
      NEXT_PASS (pass_live_range_shrinkage, 1);
      NEXT_PASS (pass_sched, 1);
      NEXT_PASS (pass_ira, 1);
      NEXT_PASS (pass_reload, 1);
      NEXT_PASS (pass_postreload, 1);
      PUSH_INSERT_PASSES_WITHIN (pass_postreload)
	  NEXT_PASS (pass_postreload_cse, 1);
	  NEXT_PASS (pass_gcse2, 1);
	  NEXT_PASS (pass_split_after_reload, 1);
	  NEXT_PASS (pass_ree, 1);
	  NEXT_PASS (pass_compare_elim_after_reload, 1);
	  NEXT_PASS (pass_branch_target_load_optimize1, 1);
	  NEXT_PASS (pass_thread_prologue_and_epilogue, 1);
	  NEXT_PASS (pass_rtl_dse2, 1);
	  NEXT_PASS (pass_stack_adjustments, 1);
	  NEXT_PASS (pass_jump2, 1);
	  NEXT_PASS (pass_duplicate_computed_gotos, 1);
	  NEXT_PASS (pass_sched_fusion, 1);
	  NEXT_PASS (pass_peephole2, 1);
	  NEXT_PASS (pass_if_after_reload, 1);
	  NEXT_PASS (pass_regrename, 1);
	  NEXT_PASS (pass_cprop_hardreg, 1);
	  NEXT_PASS (pass_fast_rtl_dce, 1);
	  NEXT_PASS (pass_reorder_blocks, 1);
	  NEXT_PASS (pass_branch_target_load_optimize2, 1);
	  NEXT_PASS (pass_leaf_regs, 1);
	  NEXT_PASS (pass_split_before_sched2, 1);
	  NEXT_PASS (pass_sched2, 1);
	  NEXT_PASS (pass_stack_regs, 1);
	  PUSH_INSERT_PASSES_WITHIN (pass_stack_regs)
	      NEXT_PASS (pass_split_before_regstack, 1);
	      NEXT_PASS (pass_stack_regs_run, 1);
	  POP_INSERT_PASSES ()
      POP_INSERT_PASSES ()
      NEXT_PASS (pass_late_compilation, 1);
      PUSH_INSERT_PASSES_WITHIN (pass_late_compilation)
	  NEXT_PASS (pass_compute_alignments, 1);
	  NEXT_PASS (pass_variable_tracking, 1);
	  NEXT_PASS (pass_free_cfg, 1);
	  NEXT_PASS (pass_machine_reorg, 1);
	  NEXT_PASS (pass_cleanup_barriers, 1);
	  NEXT_PASS (pass_delay_slots, 1);
	  NEXT_PASS (pass_split_for_shorten_branches, 1);
	  NEXT_PASS (pass_convert_to_eh_region_ranges, 1);
	  NEXT_PASS (pass_shorten_branches, 1);
	  NEXT_PASS (pass_set_nothrow_function_flags, 1);
	  NEXT_PASS (pass_dwarf2_frame, 1);
	  NEXT_PASS (pass_final, 1);
      POP_INSERT_PASSES ()
      NEXT_PASS (pass_df_finish, 1);
  POP_INSERT_PASSES ()
  NEXT_PASS (pass_clean_state, 1);
  TERMINATE_PASS_LIST ()
