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