/* This file is auto-generated by gen-pass-instances.awk
   from passes.def.  */
/* Description of pass structure
   Copyright (C) 1987-2014 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_early_local_passes, 1);
  PUSH_INSERT_PASSES_WITHIN (pass_early_local_passes)
      NEXT_PASS (pass_fixup_cfg, 1);
      NEXT_PASS (pass_init_datastructures, 1);

      NEXT_PASS (pass_build_ssa, 1);
      NEXT_PASS (pass_ubsan, 1);
      NEXT_PASS (pass_early_warn_uninitialized, 1);
      NEXT_PASS (pass_rebuild_cgraph_edges, 1);
      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 (pass_rename_ssa_copies, 1);
	  NEXT_PASS (pass_ccp, 1);
	  /* After CCP we rewrite no longer addressed locals into SSA
	     form if possible.  */
	  NEXT_PASS (pass_forwprop, 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_sra_early, 1);
	  NEXT_PASS (pass_fre, 1);
	  NEXT_PASS (pass_copy_prop, 1);
	  NEXT_PASS (pass_merge_phi, 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, 2);
      NEXT_PASS (pass_inline_parameters, 2);
  POP_INSERT_PASSES ()
  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_devirt, 1);
  NEXT_PASS (pass_ipa_cp, 1);
  NEXT_PASS (pass_ipa_cdtor_merge, 1);
  NEXT_PASS (pass_ipa_inline, 1);
  NEXT_PASS (pass_ipa_pure_const, 1);
  NEXT_PASS (pass_ipa_reference, 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, 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, 2);
  NEXT_PASS (pass_lower_eh_dispatch, 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 (pass_rename_ssa_copies, 2);
      NEXT_PASS (pass_ccp, 2);
      /* After CCP we rewrite no longer addressed locals into SSA
	 form if possible.  */
      NEXT_PASS (pass_copy_prop, 2);
      NEXT_PASS (pass_complete_unrolli, 1);
      NEXT_PASS (pass_phiprop, 1);
      NEXT_PASS (pass_forwprop, 2);
      NEXT_PASS (pass_object_sizes, 1);
      /* 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, 2);
      NEXT_PASS (pass_copy_prop, 3);
      NEXT_PASS (pass_merge_phi, 2);
      NEXT_PASS (pass_vrp, 1);
      NEXT_PASS (pass_dce, 1);
      NEXT_PASS (pass_call_cdce, 1);
      NEXT_PASS (pass_cselim, 1);
      NEXT_PASS (pass_tree_ifcombine, 1);
      NEXT_PASS (pass_phiopt, 1);
      NEXT_PASS (pass_tail_recursion, 2);
      NEXT_PASS (pass_ch, 1);
      NEXT_PASS (pass_stdarg, 1);
      NEXT_PASS (pass_lower_complex, 1);
      NEXT_PASS (pass_sra, 1);
      NEXT_PASS (pass_rename_ssa_copies, 3);
      /* 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 (pass_dominator, 1);
      /* 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, 1);
      NEXT_PASS (pass_reassoc, 1);
      NEXT_PASS (pass_dce, 2);
      NEXT_PASS (pass_forwprop, 3);
      NEXT_PASS (pass_phiopt, 2);
      NEXT_PASS (pass_strlen, 1);
      NEXT_PASS (pass_ccp, 3);
      /* After CCP we rewrite no longer addressed locals into SSA
	 form if possible.  */
      NEXT_PASS (pass_copy_prop, 4);
      NEXT_PASS (pass_cse_sincos, 1);
      NEXT_PASS (pass_optimize_bswap, 1);
      NEXT_PASS (pass_split_crit_edges, 1);
      NEXT_PASS (pass_pre, 1);
      NEXT_PASS (pass_sink_code, 1);
      NEXT_PASS (pass_asan, 1);
      NEXT_PASS (pass_tsan, 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, 1);
	  NEXT_PASS (pass_copy_prop, 5);
	  NEXT_PASS (pass_dce_loop, 1);
	  NEXT_PASS (pass_tree_unswitch, 1);
	  NEXT_PASS (pass_scev_cprop, 1);
	  NEXT_PASS (pass_record_bounds, 1);
	  NEXT_PASS (pass_check_data_deps, 1);
	  NEXT_PASS (pass_loop_distribution, 1);
	  NEXT_PASS (pass_copy_prop, 6);
	  NEXT_PASS (pass_graphite, 1);
	  PUSH_INSERT_PASSES_WITHIN (pass_graphite)
	      NEXT_PASS (pass_graphite_transforms, 1);
	      NEXT_PASS (pass_lim, 2);
	      NEXT_PASS (pass_copy_prop, 7);
	      NEXT_PASS (pass_dce_loop, 2);
	  POP_INSERT_PASSES ()
	  NEXT_PASS (pass_iv_canon, 1);
	  NEXT_PASS (pass_parallelize_loops, 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_loop, 3);
          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);
	  NEXT_PASS (pass_iv_optimize, 1);
	  NEXT_PASS (pass_lim, 3);
	  NEXT_PASS (pass_tree_loop_done, 1);
      POP_INSERT_PASSES ()
      NEXT_PASS (pass_lower_vector_ssa, 1);
      NEXT_PASS (pass_cse_reciprocals, 1);
      NEXT_PASS (pass_reassoc, 2);
      NEXT_PASS (pass_strength_reduction, 1);
      NEXT_PASS (pass_dominator, 2);
      /* The only const/copy propagation opportunities left after
	 DOM 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_vrp, 2);
      NEXT_PASS (pass_cd_dce, 2);
      NEXT_PASS (pass_tracer, 1);
      NEXT_PASS (pass_dse, 2);
      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);
      NEXT_PASS (pass_rename_ssa_copies, 4);
      /* FIXME: 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).

	 To fix the false positives in uninit-5.c, we would have to
	 account for the predicates protecting the set and the use of each
	 variable.  Using a representation like Gated Single Assignment
	 may help.  */
      /* 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 (pass_ccp, 4);
      NEXT_PASS (pass_object_sizes, 2);
      /* 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, 8);
      NEXT_PASS (pass_dce, 3);
      NEXT_PASS (pass_asan, 2);
      NEXT_PASS (pass_tsan, 2);
      NEXT_PASS (pass_rename_ssa_copies, 5);
      /* ???  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_vtable_verify, 1);
  NEXT_PASS (pass_lower_vector, 1);
  NEXT_PASS (pass_lower_complex_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_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_unswitch, 1);
	  NEXT_PASS (pass_rtl_unroll_and_peel_loops, 1);
	  NEXT_PASS (pass_rtl_doloop, 1);
	  NEXT_PASS (pass_rtl_loop_done, 1);
	  TERMINATE_PASS_LIST ()
      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_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_duplicate_computed_gotos, 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 ()
	  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 ()
