xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/tree-pass.h (revision 8feb0f0b7eaff0608f8350bbfa3098827b4bb91b)
11debfc3dSmrg /* Definitions for describing one tree-ssa optimization pass.
2*8feb0f0bSmrg    Copyright (C) 2004-2020 Free Software Foundation, Inc.
31debfc3dSmrg    Contributed by Richard Henderson <rth@redhat.com>
41debfc3dSmrg 
51debfc3dSmrg This file is part of GCC.
61debfc3dSmrg 
71debfc3dSmrg GCC is free software; you can redistribute it and/or modify
81debfc3dSmrg it under the terms of the GNU General Public License as published by
91debfc3dSmrg the Free Software Foundation; either version 3, or (at your option)
101debfc3dSmrg any later version.
111debfc3dSmrg 
121debfc3dSmrg GCC is distributed in the hope that it will be useful,
131debfc3dSmrg but WITHOUT ANY WARRANTY; without even the implied warranty of
141debfc3dSmrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
151debfc3dSmrg GNU General Public License for more details.
161debfc3dSmrg 
171debfc3dSmrg You should have received a copy of the GNU General Public License
181debfc3dSmrg along with GCC; see the file COPYING3.  If not see
191debfc3dSmrg <http://www.gnu.org/licenses/>.  */
201debfc3dSmrg 
211debfc3dSmrg 
221debfc3dSmrg #ifndef GCC_TREE_PASS_H
231debfc3dSmrg #define GCC_TREE_PASS_H 1
241debfc3dSmrg 
251debfc3dSmrg #include "timevar.h"
261debfc3dSmrg #include "dumpfile.h"
271debfc3dSmrg 
281debfc3dSmrg struct function;
291debfc3dSmrg 
301debfc3dSmrg /* Optimization pass type.  */
311debfc3dSmrg enum opt_pass_type
321debfc3dSmrg {
331debfc3dSmrg   GIMPLE_PASS,
341debfc3dSmrg   RTL_PASS,
351debfc3dSmrg   SIMPLE_IPA_PASS,
361debfc3dSmrg   IPA_PASS
371debfc3dSmrg };
381debfc3dSmrg 
391debfc3dSmrg /* Metadata for a pass, non-varying across all instances of a pass.  */
401debfc3dSmrg struct pass_data
411debfc3dSmrg {
421debfc3dSmrg   /* Optimization pass type.  */
431debfc3dSmrg   enum opt_pass_type type;
441debfc3dSmrg 
451debfc3dSmrg   /* Terse name of the pass used as a fragment of the dump file
461debfc3dSmrg      name.  If the name starts with a star, no dump happens. */
471debfc3dSmrg   const char *name;
481debfc3dSmrg 
491debfc3dSmrg   /* The -fopt-info optimization group flags as defined in dumpfile.h. */
50c0a68be4Smrg   optgroup_flags_t optinfo_flags;
511debfc3dSmrg 
521debfc3dSmrg   /* The timevar id associated with this pass.  */
531debfc3dSmrg   /* ??? Ideally would be dynamically assigned.  */
541debfc3dSmrg   timevar_id_t tv_id;
551debfc3dSmrg 
561debfc3dSmrg   /* Sets of properties input and output from this pass.  */
571debfc3dSmrg   unsigned int properties_required;
581debfc3dSmrg   unsigned int properties_provided;
591debfc3dSmrg   unsigned int properties_destroyed;
601debfc3dSmrg 
611debfc3dSmrg   /* Flags indicating common sets things to do before and after.  */
621debfc3dSmrg   unsigned int todo_flags_start;
631debfc3dSmrg   unsigned int todo_flags_finish;
641debfc3dSmrg };
651debfc3dSmrg 
661debfc3dSmrg namespace gcc
671debfc3dSmrg {
681debfc3dSmrg   class context;
691debfc3dSmrg } // namespace gcc
701debfc3dSmrg 
711debfc3dSmrg /* An instance of a pass.  This is also "pass_data" to minimize the
721debfc3dSmrg    changes in existing code.  */
731debfc3dSmrg class opt_pass : public pass_data
741debfc3dSmrg {
751debfc3dSmrg public:
~opt_pass()761debfc3dSmrg   virtual ~opt_pass () { }
771debfc3dSmrg 
781debfc3dSmrg   /* Create a copy of this pass.
791debfc3dSmrg 
801debfc3dSmrg      Passes that can have multiple instances must provide their own
811debfc3dSmrg      implementation of this, to ensure that any sharing of state between
821debfc3dSmrg      this instance and the copy is "wired up" correctly.
831debfc3dSmrg 
841debfc3dSmrg      The default implementation prints an error message and aborts.  */
851debfc3dSmrg   virtual opt_pass *clone ();
861debfc3dSmrg   virtual void set_pass_param (unsigned int, bool);
871debfc3dSmrg 
881debfc3dSmrg   /* This pass and all sub-passes are executed only if the function returns
891debfc3dSmrg      true.  The default implementation returns true.  */
901debfc3dSmrg   virtual bool gate (function *fun);
911debfc3dSmrg 
921debfc3dSmrg   /* This is the code to run.  If this is not overridden, then there should
931debfc3dSmrg      be sub-passes otherwise this pass does nothing.
941debfc3dSmrg      The return value contains TODOs to execute in addition to those in
951debfc3dSmrg      TODO_flags_finish.   */
961debfc3dSmrg   virtual unsigned int execute (function *fun);
971debfc3dSmrg 
981debfc3dSmrg protected:
991debfc3dSmrg   opt_pass (const pass_data&, gcc::context *);
1001debfc3dSmrg 
1011debfc3dSmrg public:
1021debfc3dSmrg   /* A list of sub-passes to run, dependent on gate predicate.  */
1031debfc3dSmrg   opt_pass *sub;
1041debfc3dSmrg 
1051debfc3dSmrg   /* Next in the list of passes to run, independent of gate predicate.  */
1061debfc3dSmrg   opt_pass *next;
1071debfc3dSmrg 
1081debfc3dSmrg   /* Static pass number, used as a fragment of the dump file name.  */
1091debfc3dSmrg   int static_pass_number;
1101debfc3dSmrg 
1111debfc3dSmrg protected:
1121debfc3dSmrg   gcc::context *m_ctxt;
1131debfc3dSmrg };
1141debfc3dSmrg 
1151debfc3dSmrg /* Description of GIMPLE pass.  */
1161debfc3dSmrg class gimple_opt_pass : public opt_pass
1171debfc3dSmrg {
1181debfc3dSmrg protected:
gimple_opt_pass(const pass_data & data,gcc::context * ctxt)1191debfc3dSmrg   gimple_opt_pass (const pass_data& data, gcc::context *ctxt)
1201debfc3dSmrg     : opt_pass (data, ctxt)
1211debfc3dSmrg   {
1221debfc3dSmrg   }
1231debfc3dSmrg };
1241debfc3dSmrg 
1251debfc3dSmrg /* Description of RTL pass.  */
1261debfc3dSmrg class rtl_opt_pass : public opt_pass
1271debfc3dSmrg {
1281debfc3dSmrg protected:
rtl_opt_pass(const pass_data & data,gcc::context * ctxt)1291debfc3dSmrg   rtl_opt_pass (const pass_data& data, gcc::context *ctxt)
1301debfc3dSmrg     : opt_pass (data, ctxt)
1311debfc3dSmrg   {
1321debfc3dSmrg   }
1331debfc3dSmrg };
1341debfc3dSmrg 
135*8feb0f0bSmrg struct varpool_node;
1361debfc3dSmrg struct cgraph_node;
1371debfc3dSmrg struct lto_symtab_encoder_d;
1381debfc3dSmrg 
1391debfc3dSmrg /* Description of IPA pass with generate summary, write, execute, read and
1401debfc3dSmrg    transform stages.  */
1411debfc3dSmrg class ipa_opt_pass_d : public opt_pass
1421debfc3dSmrg {
1431debfc3dSmrg public:
1441debfc3dSmrg   /* IPA passes can analyze function body and variable initializers
1451debfc3dSmrg       using this hook and produce summary.  */
1461debfc3dSmrg   void (*generate_summary) (void);
1471debfc3dSmrg 
1481debfc3dSmrg   /* This hook is used to serialize IPA summaries on disk.  */
1491debfc3dSmrg   void (*write_summary) (void);
1501debfc3dSmrg 
1511debfc3dSmrg   /* This hook is used to deserialize IPA summaries from disk.  */
1521debfc3dSmrg   void (*read_summary) (void);
1531debfc3dSmrg 
1541debfc3dSmrg   /* This hook is used to serialize IPA optimization summaries on disk.  */
1551debfc3dSmrg   void (*write_optimization_summary) (void);
1561debfc3dSmrg 
1571debfc3dSmrg   /* This hook is used to deserialize IPA summaries from disk.  */
1581debfc3dSmrg   void (*read_optimization_summary) (void);
1591debfc3dSmrg 
1601debfc3dSmrg   /* Hook to convert gimple stmt uids into true gimple statements.  The second
1611debfc3dSmrg      parameter is an array of statements indexed by their uid. */
1621debfc3dSmrg   void (*stmt_fixup) (struct cgraph_node *, gimple **);
1631debfc3dSmrg 
1641debfc3dSmrg   /* Results of interprocedural propagation of an IPA pass is applied to
1651debfc3dSmrg      function body via this hook.  */
1661debfc3dSmrg   unsigned int function_transform_todo_flags_start;
1671debfc3dSmrg   unsigned int (*function_transform) (struct cgraph_node *);
1681debfc3dSmrg   void (*variable_transform) (varpool_node *);
1691debfc3dSmrg 
1701debfc3dSmrg protected:
ipa_opt_pass_d(const pass_data & data,gcc::context * ctxt,void (* generate_summary)(void),void (* write_summary)(void),void (* read_summary)(void),void (* write_optimization_summary)(void),void (* read_optimization_summary)(void),void (* stmt_fixup)(struct cgraph_node *,gimple **),unsigned int function_transform_todo_flags_start,unsigned int (* function_transform)(struct cgraph_node *),void (* variable_transform)(varpool_node *))1711debfc3dSmrg   ipa_opt_pass_d (const pass_data& data, gcc::context *ctxt,
1721debfc3dSmrg 		  void (*generate_summary) (void),
1731debfc3dSmrg 		  void (*write_summary) (void),
1741debfc3dSmrg 		  void (*read_summary) (void),
1751debfc3dSmrg 		  void (*write_optimization_summary) (void),
1761debfc3dSmrg 		  void (*read_optimization_summary) (void),
1771debfc3dSmrg 		  void (*stmt_fixup) (struct cgraph_node *, gimple **),
1781debfc3dSmrg 		  unsigned int function_transform_todo_flags_start,
1791debfc3dSmrg 		  unsigned int (*function_transform) (struct cgraph_node *),
1801debfc3dSmrg 		  void (*variable_transform) (varpool_node *))
1811debfc3dSmrg     : opt_pass (data, ctxt),
1821debfc3dSmrg       generate_summary (generate_summary),
1831debfc3dSmrg       write_summary (write_summary),
1841debfc3dSmrg       read_summary (read_summary),
1851debfc3dSmrg       write_optimization_summary (write_optimization_summary),
1861debfc3dSmrg       read_optimization_summary (read_optimization_summary),
1871debfc3dSmrg       stmt_fixup (stmt_fixup),
1881debfc3dSmrg       function_transform_todo_flags_start (function_transform_todo_flags_start),
1891debfc3dSmrg       function_transform (function_transform),
1901debfc3dSmrg       variable_transform (variable_transform)
1911debfc3dSmrg   {
1921debfc3dSmrg   }
1931debfc3dSmrg };
1941debfc3dSmrg 
1951debfc3dSmrg /* Description of simple IPA pass.  Simple IPA passes have just one execute
1961debfc3dSmrg    hook.  */
1971debfc3dSmrg class simple_ipa_opt_pass : public opt_pass
1981debfc3dSmrg {
1991debfc3dSmrg protected:
simple_ipa_opt_pass(const pass_data & data,gcc::context * ctxt)2001debfc3dSmrg   simple_ipa_opt_pass (const pass_data& data, gcc::context *ctxt)
2011debfc3dSmrg     : opt_pass (data, ctxt)
2021debfc3dSmrg   {
2031debfc3dSmrg   }
2041debfc3dSmrg };
2051debfc3dSmrg 
2061debfc3dSmrg /* Pass properties.  */
2071debfc3dSmrg #define PROP_gimple_any		(1 << 0)	/* entire gimple grammar */
2081debfc3dSmrg #define PROP_gimple_lcf		(1 << 1)	/* lowered control flow */
2091debfc3dSmrg #define PROP_gimple_leh		(1 << 2)	/* lowered eh */
2101debfc3dSmrg #define PROP_cfg		(1 << 3)
2111debfc3dSmrg #define PROP_ssa		(1 << 5)
2121debfc3dSmrg #define PROP_no_crit_edges      (1 << 6)
2131debfc3dSmrg #define PROP_rtl		(1 << 7)
2141debfc3dSmrg #define PROP_gimple_lomp	(1 << 8)	/* lowered OpenMP directives */
2151debfc3dSmrg #define PROP_cfglayout	 	(1 << 9)	/* cfglayout mode on RTL */
2161debfc3dSmrg #define PROP_gimple_lcx		(1 << 10)       /* lowered complex */
2171debfc3dSmrg #define PROP_loops		(1 << 11)	/* preserve loop structures */
2181debfc3dSmrg #define PROP_gimple_lvec	(1 << 12)       /* lowered vector */
2191debfc3dSmrg #define PROP_gimple_eomp	(1 << 13)       /* no OpenMP directives */
2201debfc3dSmrg #define PROP_gimple_lva		(1 << 14)       /* No va_arg internal function.  */
2211debfc3dSmrg #define PROP_gimple_opt_math	(1 << 15)	/* Disable canonicalization
2221debfc3dSmrg 						   of math functions; the
2231debfc3dSmrg 						   current choices have
2241debfc3dSmrg 						   been optimized.  */
2251debfc3dSmrg #define PROP_gimple_lomp_dev	(1 << 16)	/* done omp_device_lower */
226a2dc1f3fSmrg #define PROP_rtl_split_insns	(1 << 17)	/* RTL has insns split.  */
2271debfc3dSmrg 
2281debfc3dSmrg #define PROP_trees \
2291debfc3dSmrg   (PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh | PROP_gimple_lomp)
2301debfc3dSmrg 
2311debfc3dSmrg /* To-do flags.  */
2321debfc3dSmrg #define TODO_do_not_ggc_collect		(1 << 1)
2331debfc3dSmrg #define TODO_cleanup_cfg        	(1 << 5)
2341debfc3dSmrg #define TODO_verify_il			(1 << 6)
2351debfc3dSmrg #define TODO_dump_symtab		(1 << 7)
2361debfc3dSmrg #define TODO_remove_functions		(1 << 8)
2371debfc3dSmrg #define TODO_rebuild_frequencies	(1 << 9)
2381debfc3dSmrg 
2391debfc3dSmrg /* To-do flags for calls to update_ssa.  */
2401debfc3dSmrg 
2411debfc3dSmrg /* Update the SSA form inserting PHI nodes for newly exposed symbols
2421debfc3dSmrg    and virtual names marked for updating.  When updating real names,
2431debfc3dSmrg    only insert PHI nodes for a real name O_j in blocks reached by all
2441debfc3dSmrg    the new and old definitions for O_j.  If the iterated dominance
2451debfc3dSmrg    frontier for O_j is not pruned, we may end up inserting PHI nodes
2461debfc3dSmrg    in blocks that have one or more edges with no incoming definition
2471debfc3dSmrg    for O_j.  This would lead to uninitialized warnings for O_j's
2481debfc3dSmrg    symbol.  */
2491debfc3dSmrg #define TODO_update_ssa			(1 << 11)
2501debfc3dSmrg 
2511debfc3dSmrg /* Update the SSA form without inserting any new PHI nodes at all.
2521debfc3dSmrg    This is used by passes that have either inserted all the PHI nodes
2531debfc3dSmrg    themselves or passes that need only to patch use-def and def-def
2541debfc3dSmrg    chains for virtuals (e.g., DCE).  */
2551debfc3dSmrg #define TODO_update_ssa_no_phi		(1 << 12)
2561debfc3dSmrg 
2571debfc3dSmrg /* Insert PHI nodes everywhere they are needed.  No pruning of the
2581debfc3dSmrg    IDF is done.  This is used by passes that need the PHI nodes for
2591debfc3dSmrg    O_j even if it means that some arguments will come from the default
2601debfc3dSmrg    definition of O_j's symbol.
2611debfc3dSmrg 
2621debfc3dSmrg    WARNING: If you need to use this flag, chances are that your pass
2631debfc3dSmrg    may be doing something wrong.  Inserting PHI nodes for an old name
2641debfc3dSmrg    where not all edges carry a new replacement may lead to silent
2651debfc3dSmrg    codegen errors or spurious uninitialized warnings.  */
2661debfc3dSmrg #define TODO_update_ssa_full_phi	(1 << 13)
2671debfc3dSmrg 
2681debfc3dSmrg /* Passes that update the SSA form on their own may want to delegate
2691debfc3dSmrg    the updating of virtual names to the generic updater.  Since FUD
2701debfc3dSmrg    chains are easier to maintain, this simplifies the work they need
2711debfc3dSmrg    to do.  NOTE: If this flag is used, any OLD->NEW mappings for real
2721debfc3dSmrg    names are explicitly destroyed and only the symbols marked for
2731debfc3dSmrg    renaming are processed.  */
2741debfc3dSmrg #define TODO_update_ssa_only_virtuals	(1 << 14)
2751debfc3dSmrg 
2761debfc3dSmrg /* Some passes leave unused local variables that can be removed from
2771debfc3dSmrg    cfun->local_decls.  This reduces the size of dump files
2781debfc3dSmrg    and the memory footprint for VAR_DECLs.  */
2791debfc3dSmrg #define TODO_remove_unused_locals	(1 << 15)
2801debfc3dSmrg 
2811debfc3dSmrg /* Call df_finish at the end of the pass.  This is done after all of
2821debfc3dSmrg    the dumpers have been allowed to run so that they have access to
2831debfc3dSmrg    the instance before it is destroyed.  */
2841debfc3dSmrg #define TODO_df_finish                  (1 << 17)
2851debfc3dSmrg 
2861debfc3dSmrg /* Call df_verify at the end of the pass if checking is enabled.  */
2871debfc3dSmrg #define TODO_df_verify                  (1 << 18)
2881debfc3dSmrg 
2891debfc3dSmrg /* Internally used for the first instance of a pass.  */
2901debfc3dSmrg #define TODO_mark_first_instance	(1 << 19)
2911debfc3dSmrg 
2921debfc3dSmrg /* Rebuild aliasing info.  */
2931debfc3dSmrg #define TODO_rebuild_alias              (1 << 20)
2941debfc3dSmrg 
2951debfc3dSmrg /* Rebuild the addressable-vars bitmap and do register promotion.  */
2961debfc3dSmrg #define TODO_update_address_taken	(1 << 21)
2971debfc3dSmrg 
2981debfc3dSmrg /* Rebuild the callgraph edges.  */
2991debfc3dSmrg #define TODO_rebuild_cgraph_edges       (1 << 22)
3001debfc3dSmrg 
3011debfc3dSmrg /* Release function body and stop pass manager.  */
3021debfc3dSmrg #define TODO_discard_function		(1 << 23)
3031debfc3dSmrg 
3041debfc3dSmrg /* Internally used in execute_function_todo().  */
3051debfc3dSmrg #define TODO_update_ssa_any		\
3061debfc3dSmrg     (TODO_update_ssa			\
3071debfc3dSmrg      | TODO_update_ssa_no_phi		\
3081debfc3dSmrg      | TODO_update_ssa_full_phi		\
3091debfc3dSmrg      | TODO_update_ssa_only_virtuals)
3101debfc3dSmrg 
3111debfc3dSmrg #define TODO_verify_all TODO_verify_il
3121debfc3dSmrg 
3131debfc3dSmrg 
3141debfc3dSmrg /* Register pass info. */
3151debfc3dSmrg 
3161debfc3dSmrg enum pass_positioning_ops
3171debfc3dSmrg {
3181debfc3dSmrg   PASS_POS_INSERT_AFTER,  /* Insert after the reference pass.  */
3191debfc3dSmrg   PASS_POS_INSERT_BEFORE, /* Insert before the reference pass.  */
3201debfc3dSmrg   PASS_POS_REPLACE        /* Replace the reference pass.  */
3211debfc3dSmrg };
3221debfc3dSmrg 
3231debfc3dSmrg struct register_pass_info
3241debfc3dSmrg {
3251debfc3dSmrg   opt_pass *pass;		    /* New pass to register.  */
3261debfc3dSmrg   const char *reference_pass_name;  /* Name of the reference pass for hooking
3271debfc3dSmrg                                        up the new pass.  */
3281debfc3dSmrg   int ref_pass_instance_number;     /* Insert the pass at the specified
3291debfc3dSmrg                                        instance number of the reference pass.
3301debfc3dSmrg                                        Do it for every instance if it is 0.  */
3311debfc3dSmrg   enum pass_positioning_ops pos_op; /* how to insert the new pass.  */
3321debfc3dSmrg };
3331debfc3dSmrg 
3341debfc3dSmrg /* Registers a new pass.  Either fill out the register_pass_info or specify
3351debfc3dSmrg    the individual parameters.  The pass object is expected to have been
3361debfc3dSmrg    allocated using operator new and the pass manager takes the ownership of
3371debfc3dSmrg    the pass object.  */
3381debfc3dSmrg extern void register_pass (register_pass_info *);
3391debfc3dSmrg extern void register_pass (opt_pass* pass, pass_positioning_ops pos,
3401debfc3dSmrg 			   const char* ref_pass_name, int ref_pass_inst_number);
3411debfc3dSmrg 
3421debfc3dSmrg extern gimple_opt_pass *make_pass_asan (gcc::context *ctxt);
3431debfc3dSmrg extern gimple_opt_pass *make_pass_asan_O0 (gcc::context *ctxt);
3441debfc3dSmrg extern gimple_opt_pass *make_pass_tsan (gcc::context *ctxt);
3451debfc3dSmrg extern gimple_opt_pass *make_pass_tsan_O0 (gcc::context *ctxt);
3461debfc3dSmrg extern gimple_opt_pass *make_pass_sancov (gcc::context *ctxt);
3471debfc3dSmrg extern gimple_opt_pass *make_pass_sancov_O0 (gcc::context *ctxt);
3481debfc3dSmrg extern gimple_opt_pass *make_pass_lower_cf (gcc::context *ctxt);
3491debfc3dSmrg extern gimple_opt_pass *make_pass_refactor_eh (gcc::context *ctxt);
3501debfc3dSmrg extern gimple_opt_pass *make_pass_lower_eh (gcc::context *ctxt);
3511debfc3dSmrg extern gimple_opt_pass *make_pass_lower_eh_dispatch (gcc::context *ctxt);
3521debfc3dSmrg extern gimple_opt_pass *make_pass_lower_resx (gcc::context *ctxt);
3531debfc3dSmrg extern gimple_opt_pass *make_pass_build_cfg (gcc::context *ctxt);
3541debfc3dSmrg extern gimple_opt_pass *make_pass_early_tree_profile (gcc::context *ctxt);
3551debfc3dSmrg extern gimple_opt_pass *make_pass_cleanup_eh (gcc::context *ctxt);
3561debfc3dSmrg extern gimple_opt_pass *make_pass_sra (gcc::context *ctxt);
3571debfc3dSmrg extern gimple_opt_pass *make_pass_sra_early (gcc::context *ctxt);
3581debfc3dSmrg extern gimple_opt_pass *make_pass_tail_recursion (gcc::context *ctxt);
3591debfc3dSmrg extern gimple_opt_pass *make_pass_tail_calls (gcc::context *ctxt);
3601debfc3dSmrg extern gimple_opt_pass *make_pass_fix_loops (gcc::context *ctxt);
3611debfc3dSmrg extern gimple_opt_pass *make_pass_tree_loop (gcc::context *ctxt);
3621debfc3dSmrg extern gimple_opt_pass *make_pass_tree_no_loop (gcc::context *ctxt);
3631debfc3dSmrg extern gimple_opt_pass *make_pass_tree_loop_init (gcc::context *ctxt);
364c0a68be4Smrg extern gimple_opt_pass *make_pass_loop_versioning (gcc::context *ctxt);
3651debfc3dSmrg extern gimple_opt_pass *make_pass_lim (gcc::context *ctxt);
366a2dc1f3fSmrg extern gimple_opt_pass *make_pass_linterchange (gcc::context *ctxt);
3671debfc3dSmrg extern gimple_opt_pass *make_pass_tree_unswitch (gcc::context *ctxt);
3681debfc3dSmrg extern gimple_opt_pass *make_pass_loop_split (gcc::context *ctxt);
369a2dc1f3fSmrg extern gimple_opt_pass *make_pass_loop_jam (gcc::context *ctxt);
3701debfc3dSmrg extern gimple_opt_pass *make_pass_predcom (gcc::context *ctxt);
3711debfc3dSmrg extern gimple_opt_pass *make_pass_iv_canon (gcc::context *ctxt);
3721debfc3dSmrg extern gimple_opt_pass *make_pass_scev_cprop (gcc::context *ctxt);
3731debfc3dSmrg extern gimple_opt_pass *make_pass_empty_loop (gcc::context *ctxt);
3741debfc3dSmrg extern gimple_opt_pass *make_pass_graphite (gcc::context *ctxt);
3751debfc3dSmrg extern gimple_opt_pass *make_pass_graphite_transforms (gcc::context *ctxt);
3761debfc3dSmrg extern gimple_opt_pass *make_pass_if_conversion (gcc::context *ctxt);
3771debfc3dSmrg extern gimple_opt_pass *make_pass_loop_distribution (gcc::context *ctxt);
3781debfc3dSmrg extern gimple_opt_pass *make_pass_vectorize (gcc::context *ctxt);
3791debfc3dSmrg extern gimple_opt_pass *make_pass_simduid_cleanup (gcc::context *ctxt);
3801debfc3dSmrg extern gimple_opt_pass *make_pass_slp_vectorize (gcc::context *ctxt);
3811debfc3dSmrg extern gimple_opt_pass *make_pass_complete_unroll (gcc::context *ctxt);
3821debfc3dSmrg extern gimple_opt_pass *make_pass_complete_unrolli (gcc::context *ctxt);
3831debfc3dSmrg extern gimple_opt_pass *make_pass_parallelize_loops (gcc::context *ctxt);
3841debfc3dSmrg extern gimple_opt_pass *make_pass_loop_prefetch (gcc::context *ctxt);
3851debfc3dSmrg extern gimple_opt_pass *make_pass_iv_optimize (gcc::context *ctxt);
3861debfc3dSmrg extern gimple_opt_pass *make_pass_tree_loop_done (gcc::context *ctxt);
3871debfc3dSmrg extern gimple_opt_pass *make_pass_ch (gcc::context *ctxt);
3881debfc3dSmrg extern gimple_opt_pass *make_pass_ch_vect (gcc::context *ctxt);
3891debfc3dSmrg extern gimple_opt_pass *make_pass_ccp (gcc::context *ctxt);
3901debfc3dSmrg extern gimple_opt_pass *make_pass_split_paths (gcc::context *ctxt);
3911debfc3dSmrg extern gimple_opt_pass *make_pass_build_ssa (gcc::context *ctxt);
3921debfc3dSmrg extern gimple_opt_pass *make_pass_build_alias (gcc::context *ctxt);
3931debfc3dSmrg extern gimple_opt_pass *make_pass_build_ealias (gcc::context *ctxt);
3941debfc3dSmrg extern gimple_opt_pass *make_pass_dominator (gcc::context *ctxt);
3951debfc3dSmrg extern gimple_opt_pass *make_pass_dce (gcc::context *ctxt);
3961debfc3dSmrg extern gimple_opt_pass *make_pass_cd_dce (gcc::context *ctxt);
3971debfc3dSmrg extern gimple_opt_pass *make_pass_call_cdce (gcc::context *ctxt);
3981debfc3dSmrg extern gimple_opt_pass *make_pass_merge_phi (gcc::context *ctxt);
3991debfc3dSmrg extern gimple_opt_pass *make_pass_thread_jumps (gcc::context *ctxt);
4001debfc3dSmrg extern gimple_opt_pass *make_pass_early_thread_jumps (gcc::context *ctxt);
4011debfc3dSmrg extern gimple_opt_pass *make_pass_split_crit_edges (gcc::context *ctxt);
4021debfc3dSmrg extern gimple_opt_pass *make_pass_laddress (gcc::context *ctxt);
4031debfc3dSmrg extern gimple_opt_pass *make_pass_pre (gcc::context *ctxt);
4041debfc3dSmrg extern unsigned int tail_merge_optimize (unsigned int);
4051debfc3dSmrg extern gimple_opt_pass *make_pass_profile (gcc::context *ctxt);
4061debfc3dSmrg extern gimple_opt_pass *make_pass_strip_predict_hints (gcc::context *ctxt);
4071debfc3dSmrg extern gimple_opt_pass *make_pass_lower_complex_O0 (gcc::context *ctxt);
4081debfc3dSmrg extern gimple_opt_pass *make_pass_lower_complex (gcc::context *ctxt);
409a2dc1f3fSmrg extern gimple_opt_pass *make_pass_lower_switch (gcc::context *ctxt);
410c0a68be4Smrg extern gimple_opt_pass *make_pass_lower_switch_O0 (gcc::context *ctxt);
4111debfc3dSmrg extern gimple_opt_pass *make_pass_lower_vector (gcc::context *ctxt);
4121debfc3dSmrg extern gimple_opt_pass *make_pass_lower_vector_ssa (gcc::context *ctxt);
4131debfc3dSmrg extern gimple_opt_pass *make_pass_lower_omp (gcc::context *ctxt);
4141debfc3dSmrg extern gimple_opt_pass *make_pass_diagnose_omp_blocks (gcc::context *ctxt);
4151debfc3dSmrg extern gimple_opt_pass *make_pass_expand_omp (gcc::context *ctxt);
4161debfc3dSmrg extern gimple_opt_pass *make_pass_expand_omp_ssa (gcc::context *ctxt);
4171debfc3dSmrg extern gimple_opt_pass *make_pass_omp_target_link (gcc::context *ctxt);
4181debfc3dSmrg extern gimple_opt_pass *make_pass_oacc_device_lower (gcc::context *ctxt);
4191debfc3dSmrg extern gimple_opt_pass *make_pass_omp_device_lower (gcc::context *ctxt);
4201debfc3dSmrg extern gimple_opt_pass *make_pass_object_sizes (gcc::context *ctxt);
421*8feb0f0bSmrg extern gimple_opt_pass *make_pass_warn_printf (gcc::context *ctxt);
4221debfc3dSmrg extern gimple_opt_pass *make_pass_strlen (gcc::context *ctxt);
4231debfc3dSmrg extern gimple_opt_pass *make_pass_fold_builtins (gcc::context *ctxt);
4241debfc3dSmrg extern gimple_opt_pass *make_pass_post_ipa_warn (gcc::context *ctxt);
4251debfc3dSmrg extern gimple_opt_pass *make_pass_stdarg (gcc::context *ctxt);
4261debfc3dSmrg extern gimple_opt_pass *make_pass_early_warn_uninitialized (gcc::context *ctxt);
4271debfc3dSmrg extern gimple_opt_pass *make_pass_late_warn_uninitialized (gcc::context *ctxt);
4281debfc3dSmrg extern gimple_opt_pass *make_pass_cse_reciprocals (gcc::context *ctxt);
4291debfc3dSmrg extern gimple_opt_pass *make_pass_cse_sincos (gcc::context *ctxt);
4301debfc3dSmrg extern gimple_opt_pass *make_pass_optimize_bswap (gcc::context *ctxt);
4311debfc3dSmrg extern gimple_opt_pass *make_pass_store_merging (gcc::context *ctxt);
4321debfc3dSmrg extern gimple_opt_pass *make_pass_optimize_widening_mul (gcc::context *ctxt);
4331debfc3dSmrg extern gimple_opt_pass *make_pass_warn_function_return (gcc::context *ctxt);
4341debfc3dSmrg extern gimple_opt_pass *make_pass_warn_function_noreturn (gcc::context *ctxt);
4351debfc3dSmrg extern gimple_opt_pass *make_pass_cselim (gcc::context *ctxt);
4361debfc3dSmrg extern gimple_opt_pass *make_pass_phiopt (gcc::context *ctxt);
4371debfc3dSmrg extern gimple_opt_pass *make_pass_forwprop (gcc::context *ctxt);
4381debfc3dSmrg extern gimple_opt_pass *make_pass_phiprop (gcc::context *ctxt);
4391debfc3dSmrg extern gimple_opt_pass *make_pass_tree_ifcombine (gcc::context *ctxt);
4401debfc3dSmrg extern gimple_opt_pass *make_pass_dse (gcc::context *ctxt);
4411debfc3dSmrg extern gimple_opt_pass *make_pass_nrv (gcc::context *ctxt);
4421debfc3dSmrg extern gimple_opt_pass *make_pass_rename_ssa_copies (gcc::context *ctxt);
4431debfc3dSmrg extern gimple_opt_pass *make_pass_sink_code (gcc::context *ctxt);
4441debfc3dSmrg extern gimple_opt_pass *make_pass_fre (gcc::context *ctxt);
4451debfc3dSmrg extern gimple_opt_pass *make_pass_check_data_deps (gcc::context *ctxt);
4461debfc3dSmrg extern gimple_opt_pass *make_pass_copy_prop (gcc::context *ctxt);
4471debfc3dSmrg extern gimple_opt_pass *make_pass_isolate_erroneous_paths (gcc::context *ctxt);
4481debfc3dSmrg extern gimple_opt_pass *make_pass_early_vrp (gcc::context *ctxt);
4491debfc3dSmrg extern gimple_opt_pass *make_pass_vrp (gcc::context *ctxt);
4501debfc3dSmrg extern gimple_opt_pass *make_pass_uncprop (gcc::context *ctxt);
4511debfc3dSmrg extern gimple_opt_pass *make_pass_return_slot (gcc::context *ctxt);
4521debfc3dSmrg extern gimple_opt_pass *make_pass_reassoc (gcc::context *ctxt);
4531debfc3dSmrg extern gimple_opt_pass *make_pass_rebuild_cgraph_edges (gcc::context *ctxt);
4541debfc3dSmrg extern gimple_opt_pass *make_pass_remove_cgraph_callee_edges (gcc::context
4551debfc3dSmrg 							      *ctxt);
4561debfc3dSmrg extern gimple_opt_pass *make_pass_build_cgraph_edges (gcc::context *ctxt);
4571debfc3dSmrg extern gimple_opt_pass *make_pass_local_pure_const (gcc::context *ctxt);
4581debfc3dSmrg extern gimple_opt_pass *make_pass_nothrow (gcc::context *ctxt);
4591debfc3dSmrg extern gimple_opt_pass *make_pass_tracer (gcc::context *ctxt);
460a2dc1f3fSmrg extern gimple_opt_pass *make_pass_warn_restrict (gcc::context *ctxt);
4611debfc3dSmrg extern gimple_opt_pass *make_pass_warn_unused_result (gcc::context *ctxt);
4621debfc3dSmrg extern gimple_opt_pass *make_pass_diagnose_tm_blocks (gcc::context *ctxt);
4631debfc3dSmrg extern gimple_opt_pass *make_pass_lower_tm (gcc::context *ctxt);
4641debfc3dSmrg extern gimple_opt_pass *make_pass_tm_init (gcc::context *ctxt);
4651debfc3dSmrg extern gimple_opt_pass *make_pass_tm_mark (gcc::context *ctxt);
4661debfc3dSmrg extern gimple_opt_pass *make_pass_tm_memopt (gcc::context *ctxt);
4671debfc3dSmrg extern gimple_opt_pass *make_pass_tm_edges (gcc::context *ctxt);
4681debfc3dSmrg extern gimple_opt_pass *make_pass_split_functions (gcc::context *ctxt);
4691debfc3dSmrg extern gimple_opt_pass *make_pass_feedback_split_functions (gcc::context *ctxt);
4701debfc3dSmrg extern gimple_opt_pass *make_pass_strength_reduction (gcc::context *ctxt);
4711debfc3dSmrg extern gimple_opt_pass *make_pass_vtable_verify (gcc::context *ctxt);
4721debfc3dSmrg extern gimple_opt_pass *make_pass_ubsan (gcc::context *ctxt);
4731debfc3dSmrg extern gimple_opt_pass *make_pass_sanopt (gcc::context *ctxt);
4741debfc3dSmrg extern gimple_opt_pass *make_pass_oacc_kernels (gcc::context *ctxt);
4751debfc3dSmrg extern simple_ipa_opt_pass *make_pass_ipa_oacc (gcc::context *ctxt);
4761debfc3dSmrg extern simple_ipa_opt_pass *make_pass_ipa_oacc_kernels (gcc::context *ctxt);
4771debfc3dSmrg extern gimple_opt_pass *make_pass_gen_hsail (gcc::context *ctxt);
4781debfc3dSmrg extern gimple_opt_pass *make_pass_warn_nonnull_compare (gcc::context *ctxt);
4791debfc3dSmrg extern gimple_opt_pass *make_pass_sprintf_length (gcc::context *ctxt);
4801debfc3dSmrg extern gimple_opt_pass *make_pass_walloca (gcc::context *ctxt);
481*8feb0f0bSmrg extern gimple_opt_pass *make_pass_coroutine_lower_builtins (gcc::context *ctxt);
482*8feb0f0bSmrg extern gimple_opt_pass *make_pass_coroutine_early_expand_ifns (gcc::context *ctxt);
4831debfc3dSmrg 
4841debfc3dSmrg /* IPA Passes */
4851debfc3dSmrg extern simple_ipa_opt_pass *make_pass_ipa_lower_emutls (gcc::context *ctxt);
4861debfc3dSmrg extern simple_ipa_opt_pass
4871debfc3dSmrg 							      *make_pass_ipa_function_and_variable_visibility (gcc::context *ctxt);
4881debfc3dSmrg extern simple_ipa_opt_pass *make_pass_ipa_tree_profile (gcc::context *ctxt);
4891debfc3dSmrg extern simple_ipa_opt_pass *make_pass_ipa_auto_profile (gcc::context *ctxt);
4901debfc3dSmrg 
4911debfc3dSmrg extern simple_ipa_opt_pass *make_pass_build_ssa_passes (gcc::context *ctxt);
4921debfc3dSmrg extern simple_ipa_opt_pass *make_pass_local_optimization_passes (gcc::context *ctxt);
493c0a68be4Smrg extern simple_ipa_opt_pass *make_pass_ipa_remove_symbols (gcc::context *ctxt);
4941debfc3dSmrg 
495*8feb0f0bSmrg extern ipa_opt_pass_d *make_pass_analyzer (gcc::context *ctxt);
4961debfc3dSmrg extern ipa_opt_pass_d *make_pass_ipa_whole_program_visibility (gcc::context
4971debfc3dSmrg 							       *ctxt);
4981debfc3dSmrg extern simple_ipa_opt_pass *make_pass_ipa_increase_alignment (gcc::context
4991debfc3dSmrg 							      *ctxt);
500a2dc1f3fSmrg extern ipa_opt_pass_d *make_pass_ipa_fn_summary (gcc::context *ctxt);
5011debfc3dSmrg extern ipa_opt_pass_d *make_pass_ipa_inline (gcc::context *ctxt);
5021debfc3dSmrg extern simple_ipa_opt_pass *make_pass_ipa_free_lang_data (gcc::context *ctxt);
503a2dc1f3fSmrg extern simple_ipa_opt_pass *make_pass_ipa_free_fn_summary (gcc::context *ctxt);
5041debfc3dSmrg extern ipa_opt_pass_d *make_pass_ipa_cp (gcc::context *ctxt);
505*8feb0f0bSmrg extern ipa_opt_pass_d *make_pass_ipa_sra (gcc::context *ctxt);
5061debfc3dSmrg extern ipa_opt_pass_d *make_pass_ipa_icf (gcc::context *ctxt);
5071debfc3dSmrg extern ipa_opt_pass_d *make_pass_ipa_devirt (gcc::context *ctxt);
508*8feb0f0bSmrg extern ipa_opt_pass_d *make_pass_ipa_odr (gcc::context *ctxt);
5091debfc3dSmrg extern ipa_opt_pass_d *make_pass_ipa_reference (gcc::context *ctxt);
5101debfc3dSmrg extern ipa_opt_pass_d *make_pass_ipa_hsa (gcc::context *ctxt);
5111debfc3dSmrg extern ipa_opt_pass_d *make_pass_ipa_pure_const (gcc::context *ctxt);
5121debfc3dSmrg extern simple_ipa_opt_pass *make_pass_ipa_pta (gcc::context *ctxt);
5131debfc3dSmrg extern simple_ipa_opt_pass *make_pass_ipa_tm (gcc::context *ctxt);
5141debfc3dSmrg extern simple_ipa_opt_pass *make_pass_target_clone (gcc::context *ctxt);
5151debfc3dSmrg extern simple_ipa_opt_pass *make_pass_dispatcher_calls (gcc::context *ctxt);
5161debfc3dSmrg extern simple_ipa_opt_pass *make_pass_omp_simd_clone (gcc::context *ctxt);
5171debfc3dSmrg extern ipa_opt_pass_d *make_pass_ipa_profile (gcc::context *ctxt);
5181debfc3dSmrg extern ipa_opt_pass_d *make_pass_ipa_cdtor_merge (gcc::context *ctxt);
5191debfc3dSmrg extern ipa_opt_pass_d *make_pass_ipa_single_use (gcc::context *ctxt);
5201debfc3dSmrg extern ipa_opt_pass_d *make_pass_ipa_comdats (gcc::context *ctxt);
5211debfc3dSmrg extern simple_ipa_opt_pass *make_pass_materialize_all_clones (gcc::context *
5221debfc3dSmrg 							      ctxt);
5231debfc3dSmrg 
5241debfc3dSmrg extern gimple_opt_pass *make_pass_cleanup_cfg_post_optimizing (gcc::context
5251debfc3dSmrg 							       *ctxt);
5261debfc3dSmrg extern gimple_opt_pass *make_pass_fixup_cfg (gcc::context *ctxt);
5271debfc3dSmrg extern gimple_opt_pass *make_pass_backprop (gcc::context *ctxt);
5281debfc3dSmrg 
5291debfc3dSmrg extern rtl_opt_pass *make_pass_expand (gcc::context *ctxt);
5301debfc3dSmrg extern rtl_opt_pass *make_pass_instantiate_virtual_regs (gcc::context *ctxt);
5311debfc3dSmrg extern rtl_opt_pass *make_pass_rtl_fwprop (gcc::context *ctxt);
5321debfc3dSmrg extern rtl_opt_pass *make_pass_rtl_fwprop_addr (gcc::context *ctxt);
5331debfc3dSmrg extern rtl_opt_pass *make_pass_jump (gcc::context *ctxt);
5341debfc3dSmrg extern rtl_opt_pass *make_pass_jump2 (gcc::context *ctxt);
5351debfc3dSmrg extern rtl_opt_pass *make_pass_lower_subreg (gcc::context *ctxt);
5361debfc3dSmrg extern rtl_opt_pass *make_pass_cse (gcc::context *ctxt);
5371debfc3dSmrg extern rtl_opt_pass *make_pass_fast_rtl_dce (gcc::context *ctxt);
5381debfc3dSmrg extern rtl_opt_pass *make_pass_ud_rtl_dce (gcc::context *ctxt);
5391debfc3dSmrg extern rtl_opt_pass *make_pass_rtl_dce (gcc::context *ctxt);
5401debfc3dSmrg extern rtl_opt_pass *make_pass_rtl_dse1 (gcc::context *ctxt);
5411debfc3dSmrg extern rtl_opt_pass *make_pass_rtl_dse2 (gcc::context *ctxt);
5421debfc3dSmrg extern rtl_opt_pass *make_pass_rtl_dse3 (gcc::context *ctxt);
5431debfc3dSmrg extern rtl_opt_pass *make_pass_rtl_cprop (gcc::context *ctxt);
5441debfc3dSmrg extern rtl_opt_pass *make_pass_rtl_pre (gcc::context *ctxt);
5451debfc3dSmrg extern rtl_opt_pass *make_pass_rtl_hoist (gcc::context *ctxt);
5461debfc3dSmrg extern rtl_opt_pass *make_pass_rtl_store_motion (gcc::context *ctxt);
5471debfc3dSmrg extern rtl_opt_pass *make_pass_cse_after_global_opts (gcc::context *ctxt);
5481debfc3dSmrg extern rtl_opt_pass *make_pass_rtl_ifcvt (gcc::context *ctxt);
5491debfc3dSmrg 
5501debfc3dSmrg extern rtl_opt_pass *make_pass_into_cfg_layout_mode (gcc::context *ctxt);
5511debfc3dSmrg extern rtl_opt_pass *make_pass_outof_cfg_layout_mode (gcc::context *ctxt);
5521debfc3dSmrg 
5531debfc3dSmrg extern rtl_opt_pass *make_pass_loop2 (gcc::context *ctxt);
5541debfc3dSmrg extern rtl_opt_pass *make_pass_rtl_loop_init (gcc::context *ctxt);
5551debfc3dSmrg extern rtl_opt_pass *make_pass_rtl_move_loop_invariants (gcc::context *ctxt);
5561debfc3dSmrg extern rtl_opt_pass *make_pass_rtl_unroll_loops (gcc::context *ctxt);
5571debfc3dSmrg extern rtl_opt_pass *make_pass_rtl_doloop (gcc::context *ctxt);
5581debfc3dSmrg extern rtl_opt_pass *make_pass_rtl_loop_done (gcc::context *ctxt);
5591debfc3dSmrg 
560*8feb0f0bSmrg extern rtl_opt_pass *make_pass_lower_subreg2 (gcc::context *ctxt);
5611debfc3dSmrg extern rtl_opt_pass *make_pass_web (gcc::context *ctxt);
5621debfc3dSmrg extern rtl_opt_pass *make_pass_cse2 (gcc::context *ctxt);
5631debfc3dSmrg extern rtl_opt_pass *make_pass_df_initialize_opt (gcc::context *ctxt);
5641debfc3dSmrg extern rtl_opt_pass *make_pass_df_initialize_no_opt (gcc::context *ctxt);
5651debfc3dSmrg extern rtl_opt_pass *make_pass_reginfo_init (gcc::context *ctxt);
5661debfc3dSmrg extern rtl_opt_pass *make_pass_inc_dec (gcc::context *ctxt);
5671debfc3dSmrg extern rtl_opt_pass *make_pass_stack_ptr_mod (gcc::context *ctxt);
5681debfc3dSmrg extern rtl_opt_pass *make_pass_initialize_regs (gcc::context *ctxt);
5691debfc3dSmrg extern rtl_opt_pass *make_pass_combine (gcc::context *ctxt);
5701debfc3dSmrg extern rtl_opt_pass *make_pass_if_after_combine (gcc::context *ctxt);
571c0a68be4Smrg extern rtl_opt_pass *make_pass_jump_after_combine (gcc::context *ctxt);
5721debfc3dSmrg extern rtl_opt_pass *make_pass_ree (gcc::context *ctxt);
5731debfc3dSmrg extern rtl_opt_pass *make_pass_partition_blocks (gcc::context *ctxt);
5741debfc3dSmrg extern rtl_opt_pass *make_pass_match_asm_constraints (gcc::context *ctxt);
5751debfc3dSmrg extern rtl_opt_pass *make_pass_split_all_insns (gcc::context *ctxt);
5761debfc3dSmrg extern rtl_opt_pass *make_pass_fast_rtl_byte_dce (gcc::context *ctxt);
577*8feb0f0bSmrg extern rtl_opt_pass *make_pass_lower_subreg3 (gcc::context *ctxt);
5781debfc3dSmrg extern rtl_opt_pass *make_pass_mode_switching (gcc::context *ctxt);
5791debfc3dSmrg extern rtl_opt_pass *make_pass_sms (gcc::context *ctxt);
5801debfc3dSmrg extern rtl_opt_pass *make_pass_sched (gcc::context *ctxt);
5811debfc3dSmrg extern rtl_opt_pass *make_pass_live_range_shrinkage (gcc::context *ctxt);
582a2dc1f3fSmrg extern rtl_opt_pass *make_pass_early_remat (gcc::context *ctxt);
5831debfc3dSmrg extern rtl_opt_pass *make_pass_ira (gcc::context *ctxt);
5841debfc3dSmrg extern rtl_opt_pass *make_pass_reload (gcc::context *ctxt);
5851debfc3dSmrg extern rtl_opt_pass *make_pass_clean_state (gcc::context *ctxt);
5861debfc3dSmrg extern rtl_opt_pass *make_pass_branch_prob (gcc::context *ctxt);
5871debfc3dSmrg extern rtl_opt_pass *make_pass_value_profile_transformations (gcc::context
5881debfc3dSmrg 							      *ctxt);
5891debfc3dSmrg extern rtl_opt_pass *make_pass_postreload_cse (gcc::context *ctxt);
5901debfc3dSmrg extern rtl_opt_pass *make_pass_gcse2 (gcc::context *ctxt);
5911debfc3dSmrg extern rtl_opt_pass *make_pass_split_after_reload (gcc::context *ctxt);
5921debfc3dSmrg extern rtl_opt_pass *make_pass_thread_prologue_and_epilogue (gcc::context
5931debfc3dSmrg 							     *ctxt);
5941debfc3dSmrg extern rtl_opt_pass *make_pass_stack_adjustments (gcc::context *ctxt);
5951debfc3dSmrg extern rtl_opt_pass *make_pass_sched_fusion (gcc::context *ctxt);
5961debfc3dSmrg extern rtl_opt_pass *make_pass_peephole2 (gcc::context *ctxt);
5971debfc3dSmrg extern rtl_opt_pass *make_pass_if_after_reload (gcc::context *ctxt);
5981debfc3dSmrg extern rtl_opt_pass *make_pass_regrename (gcc::context *ctxt);
5991debfc3dSmrg extern rtl_opt_pass *make_pass_cprop_hardreg (gcc::context *ctxt);
6001debfc3dSmrg extern rtl_opt_pass *make_pass_reorder_blocks (gcc::context *ctxt);
6011debfc3dSmrg extern rtl_opt_pass *make_pass_leaf_regs (gcc::context *ctxt);
6021debfc3dSmrg extern rtl_opt_pass *make_pass_split_before_sched2 (gcc::context *ctxt);
6031debfc3dSmrg extern rtl_opt_pass *make_pass_compare_elim_after_reload (gcc::context *ctxt);
6041debfc3dSmrg extern rtl_opt_pass *make_pass_sched2 (gcc::context *ctxt);
6051debfc3dSmrg extern rtl_opt_pass *make_pass_stack_regs (gcc::context *ctxt);
6061debfc3dSmrg extern rtl_opt_pass *make_pass_stack_regs_run (gcc::context *ctxt);
6071debfc3dSmrg extern rtl_opt_pass *make_pass_df_finish (gcc::context *ctxt);
6081debfc3dSmrg extern rtl_opt_pass *make_pass_compute_alignments (gcc::context *ctxt);
6091debfc3dSmrg extern rtl_opt_pass *make_pass_duplicate_computed_gotos (gcc::context *ctxt);
6101debfc3dSmrg extern rtl_opt_pass *make_pass_variable_tracking (gcc::context *ctxt);
6111debfc3dSmrg extern rtl_opt_pass *make_pass_free_cfg (gcc::context *ctxt);
6121debfc3dSmrg extern rtl_opt_pass *make_pass_machine_reorg (gcc::context *ctxt);
6131debfc3dSmrg extern rtl_opt_pass *make_pass_cleanup_barriers (gcc::context *ctxt);
6141debfc3dSmrg extern rtl_opt_pass *make_pass_delay_slots (gcc::context *ctxt);
6151debfc3dSmrg extern rtl_opt_pass *make_pass_split_for_shorten_branches (gcc::context *ctxt);
6161debfc3dSmrg extern rtl_opt_pass *make_pass_split_before_regstack (gcc::context *ctxt);
6171debfc3dSmrg extern rtl_opt_pass *make_pass_convert_to_eh_region_ranges (gcc::context *ctxt);
6181debfc3dSmrg extern rtl_opt_pass *make_pass_shorten_branches (gcc::context *ctxt);
6191debfc3dSmrg extern rtl_opt_pass *make_pass_set_nothrow_function_flags (gcc::context *ctxt);
6201debfc3dSmrg extern rtl_opt_pass *make_pass_dwarf2_frame (gcc::context *ctxt);
6211debfc3dSmrg extern rtl_opt_pass *make_pass_final (gcc::context *ctxt);
6221debfc3dSmrg extern rtl_opt_pass *make_pass_rtl_seqabstr (gcc::context *ctxt);
6231debfc3dSmrg extern gimple_opt_pass *make_pass_release_ssa_names (gcc::context *ctxt);
6241debfc3dSmrg extern gimple_opt_pass *make_pass_early_inline (gcc::context *ctxt);
625a2dc1f3fSmrg extern gimple_opt_pass *make_pass_local_fn_summary (gcc::context *ctxt);
6261debfc3dSmrg extern gimple_opt_pass *make_pass_update_address_taken (gcc::context *ctxt);
6271debfc3dSmrg extern gimple_opt_pass *make_pass_convert_switch (gcc::context *ctxt);
6281debfc3dSmrg extern gimple_opt_pass *make_pass_lower_vaarg (gcc::context *ctxt);
6291debfc3dSmrg 
6301debfc3dSmrg /* Current optimization pass.  */
6311debfc3dSmrg extern opt_pass *current_pass;
6321debfc3dSmrg 
6331debfc3dSmrg extern bool execute_one_pass (opt_pass *);
6341debfc3dSmrg extern void execute_pass_list (function *, opt_pass *);
6351debfc3dSmrg extern void execute_ipa_pass_list (opt_pass *);
6361debfc3dSmrg extern void execute_ipa_summary_passes (ipa_opt_pass_d *);
637c0a68be4Smrg extern void execute_all_ipa_transforms (bool);
6381debfc3dSmrg extern void execute_all_ipa_stmt_fixups (struct cgraph_node *, gimple **);
6391debfc3dSmrg extern bool pass_init_dump_file (opt_pass *);
6401debfc3dSmrg extern void pass_fini_dump_file (opt_pass *);
641a2dc1f3fSmrg extern void emergency_dump_function (void);
6421debfc3dSmrg 
6431debfc3dSmrg extern void print_current_pass (FILE *);
6441debfc3dSmrg extern void debug_pass (void);
6451debfc3dSmrg extern void ipa_write_summaries (void);
6461debfc3dSmrg extern void ipa_write_optimization_summaries (struct lto_symtab_encoder_d *);
6471debfc3dSmrg extern void ipa_read_summaries (void);
6481debfc3dSmrg extern void ipa_read_optimization_summaries (void);
6491debfc3dSmrg extern void register_one_dump_file (opt_pass *);
6501debfc3dSmrg extern bool function_called_by_processed_nodes_p (void);
6511debfc3dSmrg 
6521debfc3dSmrg /* Declare for plugins.  */
6531debfc3dSmrg extern void do_per_function_toporder (void (*) (function *, void *), void *);
6541debfc3dSmrg 
6551debfc3dSmrg extern void disable_pass (const char *);
6561debfc3dSmrg extern void enable_pass (const char *);
6571debfc3dSmrg extern void dump_passes (void);
6581debfc3dSmrg 
6591debfc3dSmrg #endif /* GCC_TREE_PASS_H */
660