LCOV - code coverage report
Current view: top level - gcc - tree-pass.h (source / functions) Coverage Total Hit
Test: gcc.info Lines: 100.0 % 19 19
Test Date: 2026-02-28 14:20:25 Functions: 50.0 % 2 1
Legend: Lines:     hit not hit

            Line data    Source code
       1              : /* Definitions for describing one tree-ssa optimization pass.
       2              :    Copyright (C) 2004-2026 Free Software Foundation, Inc.
       3              :    Contributed by Richard Henderson <rth@redhat.com>
       4              : 
       5              : This file is part of GCC.
       6              : 
       7              : GCC is free software; you can redistribute it and/or modify
       8              : it under the terms of the GNU General Public License as published by
       9              : the Free Software Foundation; either version 3, or (at your option)
      10              : any later version.
      11              : 
      12              : GCC is distributed in the hope that it will be useful,
      13              : but WITHOUT ANY WARRANTY; without even the implied warranty of
      14              : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      15              : GNU General Public License for more details.
      16              : 
      17              : You should have received a copy of the GNU General Public License
      18              : along with GCC; see the file COPYING3.  If not see
      19              : <http://www.gnu.org/licenses/>.  */
      20              : 
      21              : 
      22              : #ifndef GCC_TREE_PASS_H
      23              : #define GCC_TREE_PASS_H 1
      24              : 
      25              : #include "timevar.h"
      26              : #include "dumpfile.h"
      27              : 
      28              : struct function;
      29              : 
      30              : /* Optimization pass type.  */
      31              : enum opt_pass_type
      32              : {
      33              :   GIMPLE_PASS,
      34              :   RTL_PASS,
      35              :   SIMPLE_IPA_PASS,
      36              :   IPA_PASS
      37              : };
      38              : 
      39              : /* Metadata for a pass, non-varying across all instances of a pass.  */
      40              : struct pass_data
      41              : {
      42              :   /* Optimization pass type.  */
      43              :   enum opt_pass_type type;
      44              : 
      45              :   /* Terse name of the pass used as a fragment of the dump file
      46              :      name.  If the name starts with a star, no dump happens. */
      47              :   const char *name;
      48              : 
      49              :   /* The -fopt-info optimization group flags as defined in dumpfile.h. */
      50              :   optgroup_flags_t optinfo_flags;
      51              : 
      52              :   /* The timevar id associated with this pass.  */
      53              :   /* ??? Ideally would be dynamically assigned.  */
      54              :   timevar_id_t tv_id;
      55              : 
      56              :   /* Sets of properties input and output from this pass.  */
      57              :   unsigned int properties_required;
      58              :   unsigned int properties_provided;
      59              :   unsigned int properties_destroyed;
      60              : 
      61              :   /* Flags indicating common sets things to do before and after.  */
      62              :   unsigned int todo_flags_start;
      63              :   unsigned int todo_flags_finish;
      64              : };
      65              : 
      66              : namespace gcc
      67              : {
      68              :   class context;
      69              : } // namespace gcc
      70              : 
      71              : /* An instance of a pass.  This is also "pass_data" to minimize the
      72              :    changes in existing code.  */
      73              : class opt_pass : public pass_data
      74              : {
      75              : public:
      76       769890 :   virtual ~opt_pass () { }
      77              : 
      78              :   /* Create a copy of this pass.
      79              : 
      80              :      Passes that can have multiple instances must provide their own
      81              :      implementation of this, to ensure that any sharing of state between
      82              :      this instance and the copy is "wired up" correctly.
      83              : 
      84              :      The default implementation prints an error message and aborts.  */
      85              :   virtual opt_pass *clone ();
      86              :   virtual void set_pass_param (unsigned int, bool);
      87              : 
      88              :   /* This pass and all sub-passes are executed only if the function returns
      89              :      true.  The default implementation returns true.  */
      90              :   virtual bool gate (function *fun);
      91              : 
      92              :   /* This is the code to run.  If this is not overridden, then there should
      93              :      be sub-passes otherwise this pass does nothing.
      94              :      The return value contains TODOs to execute in addition to those in
      95              :      TODO_flags_finish.   */
      96              :   virtual unsigned int execute (function *fun);
      97              : 
      98              : protected:
      99              :   opt_pass (const pass_data&, gcc::context *);
     100              : 
     101              : public:
     102              :   /* A list of sub-passes to run, dependent on gate predicate.  */
     103              :   opt_pass *sub;
     104              : 
     105              :   /* Next in the list of passes to run, independent of gate predicate.  */
     106              :   opt_pass *next;
     107              : 
     108              :   /* Static pass number, used as a fragment of the dump file name.  */
     109              :   int static_pass_number;
     110              : 
     111              : protected:
     112              :   gcc::context *m_ctxt;
     113              : };
     114              : 
     115              : /* Description of GIMPLE pass.  */
     116       769863 : class gimple_opt_pass : public opt_pass
     117              : {
     118              : protected:
     119     70573378 :   gimple_opt_pass (const pass_data& data, gcc::context *ctxt)
     120     70573378 :     : opt_pass (data, ctxt)
     121              :   {
     122              :   }
     123              : };
     124              : 
     125              : /* Description of RTL pass.  */
     126              : class rtl_opt_pass : public opt_pass
     127              : {
     128              : protected:
     129     30286536 :   rtl_opt_pass (const pass_data& data, gcc::context *ctxt)
     130     30286536 :     : opt_pass (data, ctxt)
     131              :   {
     132              :   }
     133              : };
     134              : 
     135              : struct varpool_node;
     136              : struct cgraph_node;
     137              : struct lto_symtab_encoder_d;
     138              : 
     139              : /* Description of IPA pass with generate summary, write, execute, read and
     140              :    transform stages.  */
     141              : class ipa_opt_pass_d : public opt_pass
     142              : {
     143              : public:
     144              :   /* IPA passes can analyze function body and variable initializers
     145              :       using this hook and produce summary.  */
     146              :   void (*generate_summary) (void);
     147              : 
     148              :   /* This hook is used to serialize IPA summaries on disk.  */
     149              :   void (*write_summary) (void);
     150              : 
     151              :   /* This hook is used to deserialize IPA summaries from disk.  */
     152              :   void (*read_summary) (void);
     153              : 
     154              :   /* This hook is used to serialize IPA optimization summaries on disk.  */
     155              :   void (*write_optimization_summary) (void);
     156              : 
     157              :   /* This hook is used to deserialize IPA summaries from disk.  */
     158              :   void (*read_optimization_summary) (void);
     159              : 
     160              :   /* Hook to convert gimple stmt uids into true gimple statements.  The second
     161              :      parameter is an array of statements indexed by their uid. */
     162              :   void (*stmt_fixup) (struct cgraph_node *, gimple **);
     163              : 
     164              :   /* Results of interprocedural propagation of an IPA pass is applied to
     165              :      function body via this hook.  */
     166              :   unsigned int function_transform_todo_flags_start;
     167              :   unsigned int (*function_transform) (struct cgraph_node *);
     168              :   void (*variable_transform) (varpool_node *);
     169              : 
     170              : protected:
     171      5428718 :   ipa_opt_pass_d (const pass_data& data, gcc::context *ctxt,
     172              :                   void (*generate_summary) (void),
     173              :                   void (*write_summary) (void),
     174              :                   void (*read_summary) (void),
     175              :                   void (*write_optimization_summary) (void),
     176              :                   void (*read_optimization_summary) (void),
     177              :                   void (*stmt_fixup) (struct cgraph_node *, gimple **),
     178              :                   unsigned int function_transform_todo_flags_start,
     179              :                   unsigned int (*function_transform) (struct cgraph_node *),
     180              :                   void (*variable_transform) (varpool_node *))
     181      5428718 :     : opt_pass (data, ctxt),
     182      5428718 :       generate_summary (generate_summary),
     183      5428718 :       write_summary (write_summary),
     184      5428718 :       read_summary (read_summary),
     185      5428718 :       write_optimization_summary (write_optimization_summary),
     186      5428718 :       read_optimization_summary (read_optimization_summary),
     187      5428718 :       stmt_fixup (stmt_fixup),
     188      5428718 :       function_transform_todo_flags_start (function_transform_todo_flags_start),
     189      5428718 :       function_transform (function_transform),
     190      5428718 :       variable_transform (variable_transform)
     191              :   {
     192              :   }
     193              : };
     194              : 
     195              : /* Description of simple IPA pass.  Simple IPA passes have just one execute
     196              :    hook.  */
     197              : class simple_ipa_opt_pass : public opt_pass
     198              : {
     199              : protected:
     200      6285884 :   simple_ipa_opt_pass (const pass_data& data, gcc::context *ctxt)
     201      6285884 :     : opt_pass (data, ctxt)
     202              :   {
     203              :   }
     204              : };
     205              : 
     206              : /* Pass properties.  */
     207              : #define PROP_gimple_any         (1 << 0)  /* entire gimple grammar */
     208              : #define PROP_gimple_lcf         (1 << 1)  /* lowered control flow */
     209              : #define PROP_gimple_leh         (1 << 2)  /* lowered eh */
     210              : #define PROP_cfg                (1 << 3)
     211              : #define PROP_objsz              (1 << 4)  /* object sizes computed */
     212              : #define PROP_ssa                (1 << 5)
     213              : #define PROP_no_crit_edges      (1 << 6)
     214              : #define PROP_rtl                (1 << 7)
     215              : #define PROP_gimple_lomp        (1 << 8)  /* lowered OpenMP directives */
     216              : #define PROP_cfglayout          (1 << 9)  /* cfglayout mode on RTL */
     217              : #define PROP_gimple_lcx         (1 << 10)       /* lowered complex */
     218              : #define PROP_loops              (1 << 11) /* preserve loop structures */
     219              : #define PROP_gimple_lvec        (1 << 12)       /* lowered vector */
     220              : #define PROP_gimple_eomp        (1 << 13)       /* no OpenMP directives */
     221              : #define PROP_gimple_lva         (1 << 14)       /* No va_arg internal function.  */
     222              : #define PROP_gimple_opt_math    (1 << 15) /* Disable canonicalization
     223              :                                                    of math functions; the
     224              :                                                    current choices have
     225              :                                                    been optimized.  */
     226              : #define PROP_gimple_lomp_dev    (1 << 16) /* done omp_device_lower */
     227              : #define PROP_rtl_split_insns    (1 << 17) /* RTL has insns split.  */
     228              : #define PROP_loop_opts_done     (1 << 18) /* SSA loop optimizations
     229              :                                                    have completed.  */
     230              : #define PROP_assumptions_done   (1 << 19) /* Assume function kept
     231              :                                                    around.  */
     232              : #define PROP_gimple_lbitint     (1 << 20)       /* lowered large _BitInt */
     233              : #define PROP_last_full_fold     (1 << 21) /* Start of last forwprop.  */
     234              : 
     235              : #define PROP_gimple \
     236              :   (PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh | PROP_gimple_lomp)
     237              : 
     238              : /* To-do flags.  */
     239              : /* Note (1ul << 31) is reserved for TODO_verify_il. */
     240              : #define TODO_do_not_ggc_collect         (1 << 1)
     241              : #define TODO_cleanup_cfg                (1 << 5)
     242              : #define TODO_dump_symtab                (1 << 7)
     243              : #define TODO_remove_functions           (1 << 8)
     244              : 
     245              : /* To-do flags for calls to update_ssa.  */
     246              : 
     247              : /* Update the SSA form inserting PHI nodes for newly exposed symbols
     248              :    and virtual names marked for updating.  When updating real names,
     249              :    only insert PHI nodes for a real name O_j in blocks reached by all
     250              :    the new and old definitions for O_j.  If the iterated dominance
     251              :    frontier for O_j is not pruned, we may end up inserting PHI nodes
     252              :    in blocks that have one or more edges with no incoming definition
     253              :    for O_j.  This would lead to uninitialized warnings for O_j's
     254              :    symbol.  */
     255              : #define TODO_update_ssa                 (1 << 11)
     256              : 
     257              : /* Update the SSA form without inserting any new PHI nodes at all.
     258              :    This is used by passes that have either inserted all the PHI nodes
     259              :    themselves or passes that need only to patch use-def and def-def
     260              :    chains for virtuals (e.g., DCE).  */
     261              : #define TODO_update_ssa_no_phi          (1 << 12)
     262              : 
     263              : /* Insert PHI nodes everywhere they are needed.  No pruning of the
     264              :    IDF is done.  This is used by passes that need the PHI nodes for
     265              :    O_j even if it means that some arguments will come from the default
     266              :    definition of O_j's symbol.
     267              : 
     268              :    WARNING: If you need to use this flag, chances are that your pass
     269              :    may be doing something wrong.  Inserting PHI nodes for an old name
     270              :    where not all edges carry a new replacement may lead to silent
     271              :    codegen errors or spurious uninitialized warnings.  */
     272              : #define TODO_update_ssa_full_phi        (1 << 13)
     273              : 
     274              : /* Passes that update the SSA form on their own may want to delegate
     275              :    the updating of virtual names to the generic updater.  Since FUD
     276              :    chains are easier to maintain, this simplifies the work they need
     277              :    to do.  NOTE: If this flag is used, any OLD->NEW mappings for real
     278              :    names are explicitly destroyed and only the symbols marked for
     279              :    renaming are processed.  */
     280              : #define TODO_update_ssa_only_virtuals   (1 << 14)
     281              : 
     282              : /* Some passes leave unused local variables that can be removed from
     283              :    cfun->local_decls.  This reduces the size of dump files
     284              :    and the memory footprint for VAR_DECLs.  */
     285              : #define TODO_remove_unused_locals       (1 << 15)
     286              : 
     287              : /* Call df_finish at the end of the pass.  This is done after all of
     288              :    the dumpers have been allowed to run so that they have access to
     289              :    the instance before it is destroyed.  */
     290              : #define TODO_df_finish                  (1 << 17)
     291              : 
     292              : /* Call df_verify at the end of the pass if checking is enabled.  */
     293              : #define TODO_df_verify                  (1 << 18)
     294              : 
     295              : /* Internally used for the first instance of a pass.  */
     296              : #define TODO_mark_first_instance        (1 << 19)
     297              : 
     298              : /* Rebuild aliasing info.  */
     299              : #define TODO_rebuild_alias              (1 << 20)
     300              : 
     301              : /* Rebuild the addressable-vars bitmap and do register promotion.  */
     302              : #define TODO_update_address_taken       (1 << 21)
     303              : 
     304              : /* Rebuild the callgraph edges.  */
     305              : #define TODO_rebuild_cgraph_edges       (1 << 22)
     306              : 
     307              : /* Release function body (unless assumption function)
     308              :    and stop pass manager.  */
     309              : #define TODO_discard_function           (1 << 23)
     310              : 
     311              : /* (1ul << 31) is reserved for TODO_verify_il. */
     312              : 
     313              : /* Internally used in execute_function_todo().  */
     314              : #define TODO_update_ssa_any             \
     315              :     (TODO_update_ssa                    \
     316              :      | TODO_update_ssa_no_phi           \
     317              :      | TODO_update_ssa_full_phi         \
     318              :      | TODO_update_ssa_only_virtuals)
     319              : 
     320              : /* To-do flags for pending_TODOs.  */
     321              : 
     322              : /* Tell the next scalar cleanup pass that there is
     323              :    work for it to do.  */
     324              : #define PENDING_TODO_force_next_scalar_cleanup  (1 << 1)
     325              : 
     326              : /* Register pass info. */
     327              : 
     328              : enum pass_positioning_ops
     329              : {
     330              :   PASS_POS_INSERT_AFTER,  /* Insert after the reference pass.  */
     331              :   PASS_POS_INSERT_BEFORE, /* Insert before the reference pass.  */
     332              :   PASS_POS_REPLACE        /* Replace the reference pass.  */
     333              : };
     334              : 
     335              : struct register_pass_info
     336              : {
     337              :   opt_pass *pass;                   /* New pass to register.  */
     338              :   const char *reference_pass_name;  /* Name of the reference pass for hooking
     339              :                                        up the new pass.  */
     340              :   int ref_pass_instance_number;     /* Insert the pass at the specified
     341              :                                        instance number of the reference pass.
     342              :                                        Do it for every instance if it is 0.  */
     343              :   enum pass_positioning_ops pos_op; /* how to insert the new pass.  */
     344              : };
     345              : 
     346              : /* Registers a new pass.  Either fill out the register_pass_info or specify
     347              :    the individual parameters.  The pass object is expected to have been
     348              :    allocated using operator new and the pass manager takes the ownership of
     349              :    the pass object.  */
     350              : extern void register_pass (register_pass_info *);
     351              : extern void register_pass (opt_pass* pass, pass_positioning_ops pos,
     352              :                            const char* ref_pass_name, int ref_pass_inst_number);
     353              : 
     354              : extern gimple_opt_pass *make_pass_asan (gcc::context *ctxt);
     355              : extern gimple_opt_pass *make_pass_asan_O0 (gcc::context *ctxt);
     356              : extern gimple_opt_pass *make_pass_tsan (gcc::context *ctxt);
     357              : extern gimple_opt_pass *make_pass_tsan_O0 (gcc::context *ctxt);
     358              : extern gimple_opt_pass *make_pass_sancov (gcc::context *ctxt);
     359              : extern gimple_opt_pass *make_pass_sancov_O0 (gcc::context *ctxt);
     360              : extern gimple_opt_pass *make_pass_lower_cf (gcc::context *ctxt);
     361              : extern gimple_opt_pass *make_pass_refactor_eh (gcc::context *ctxt);
     362              : extern gimple_opt_pass *make_pass_lower_eh (gcc::context *ctxt);
     363              : extern gimple_opt_pass *make_pass_lower_eh_dispatch (gcc::context *ctxt);
     364              : extern gimple_opt_pass *make_pass_lower_resx (gcc::context *ctxt);
     365              : extern gimple_opt_pass *make_pass_build_cfg (gcc::context *ctxt);
     366              : extern gimple_opt_pass *make_pass_early_tree_profile (gcc::context *ctxt);
     367              : extern gimple_opt_pass *make_pass_cleanup_eh (gcc::context *ctxt);
     368              : extern gimple_opt_pass *make_pass_sra (gcc::context *ctxt);
     369              : extern gimple_opt_pass *make_pass_sra_early (gcc::context *ctxt);
     370              : extern gimple_opt_pass *make_pass_tail_recursion (gcc::context *ctxt);
     371              : extern gimple_opt_pass *make_pass_tail_calls (gcc::context *ctxt);
     372              : extern gimple_opt_pass *make_pass_musttail (gcc::context *ctxt);
     373              : extern gimple_opt_pass *make_pass_fix_loops (gcc::context *ctxt);
     374              : extern gimple_opt_pass *make_pass_tree_loop (gcc::context *ctxt);
     375              : extern gimple_opt_pass *make_pass_tree_no_loop (gcc::context *ctxt);
     376              : extern gimple_opt_pass *make_pass_tree_loop_init (gcc::context *ctxt);
     377              : extern gimple_opt_pass *make_pass_loop_versioning (gcc::context *ctxt);
     378              : extern gimple_opt_pass *make_pass_lim (gcc::context *ctxt);
     379              : extern gimple_opt_pass *make_pass_linterchange (gcc::context *ctxt);
     380              : extern gimple_opt_pass *make_pass_tree_unswitch (gcc::context *ctxt);
     381              : extern gimple_opt_pass *make_pass_loop_split (gcc::context *ctxt);
     382              : extern gimple_opt_pass *make_pass_loop_jam (gcc::context *ctxt);
     383              : extern gimple_opt_pass *make_pass_predcom (gcc::context *ctxt);
     384              : extern gimple_opt_pass *make_pass_iv_canon (gcc::context *ctxt);
     385              : extern gimple_opt_pass *make_pass_scev_cprop (gcc::context *ctxt);
     386              : extern gimple_opt_pass *make_pass_empty_loop (gcc::context *ctxt);
     387              : extern gimple_opt_pass *make_pass_graphite (gcc::context *ctxt);
     388              : extern gimple_opt_pass *make_pass_graphite_transforms (gcc::context *ctxt);
     389              : extern gimple_opt_pass *make_pass_if_conversion (gcc::context *ctxt);
     390              : extern gimple_opt_pass *make_pass_if_to_switch (gcc::context *ctxt);
     391              : extern gimple_opt_pass *make_pass_loop_distribution (gcc::context *ctxt);
     392              : extern gimple_opt_pass *make_pass_crc_optimization (gcc::context *ctxt);
     393              : extern gimple_opt_pass *make_pass_vectorize (gcc::context *ctxt);
     394              : extern gimple_opt_pass *make_pass_simduid_cleanup (gcc::context *ctxt);
     395              : extern gimple_opt_pass *make_pass_slp_vectorize (gcc::context *ctxt);
     396              : extern gimple_opt_pass *make_pass_complete_unroll (gcc::context *ctxt);
     397              : extern gimple_opt_pass *make_pass_complete_unrolli (gcc::context *ctxt);
     398              : extern gimple_opt_pass *make_pass_pre_slp_scalar_cleanup (gcc::context *ctxt);
     399              : extern gimple_opt_pass *make_pass_parallelize_loops (gcc::context *ctxt);
     400              : extern gimple_opt_pass *make_pass_loop_prefetch (gcc::context *ctxt);
     401              : extern gimple_opt_pass *make_pass_iv_optimize (gcc::context *ctxt);
     402              : extern gimple_opt_pass *make_pass_tree_loop_done (gcc::context *ctxt);
     403              : extern gimple_opt_pass *make_pass_ch (gcc::context *ctxt);
     404              : extern gimple_opt_pass *make_pass_ch_vect (gcc::context *ctxt);
     405              : extern gimple_opt_pass *make_pass_sccopy (gcc::context *ctxt);
     406              : extern gimple_opt_pass *make_pass_ccp (gcc::context *ctxt);
     407              : extern gimple_opt_pass *make_pass_split_paths (gcc::context *ctxt);
     408              : extern gimple_opt_pass *make_pass_build_ssa (gcc::context *ctxt);
     409              : extern gimple_opt_pass *make_pass_build_alias (gcc::context *ctxt);
     410              : extern gimple_opt_pass *make_pass_build_ealias (gcc::context *ctxt);
     411              : extern gimple_opt_pass *make_pass_dominator (gcc::context *ctxt);
     412              : extern gimple_opt_pass *make_pass_dce (gcc::context *ctxt);
     413              : extern gimple_opt_pass *make_pass_cd_dce (gcc::context *ctxt);
     414              : extern gimple_opt_pass *make_pass_call_cdce (gcc::context *ctxt);
     415              : extern gimple_opt_pass *make_pass_merge_phi (gcc::context *ctxt);
     416              : extern gimple_opt_pass *make_pass_thread_jumps (gcc::context *ctxt);
     417              : extern gimple_opt_pass *make_pass_thread_jumps_full (gcc::context *ctxt);
     418              : extern gimple_opt_pass *make_pass_early_thread_jumps (gcc::context *ctxt);
     419              : extern gimple_opt_pass *make_pass_split_crit_edges (gcc::context *ctxt);
     420              : extern gimple_opt_pass *make_pass_laddress (gcc::context *ctxt);
     421              : extern gimple_opt_pass *make_pass_pre (gcc::context *ctxt);
     422              : extern unsigned int tail_merge_optimize (bool);
     423              : extern gimple_opt_pass *make_pass_profile (gcc::context *ctxt);
     424              : extern gimple_opt_pass *make_pass_strip_predict_hints (gcc::context *ctxt);
     425              : extern gimple_opt_pass *make_pass_rebuild_frequencies (gcc::context *ctxt);
     426              : extern gimple_opt_pass *make_pass_lower_complex_O0 (gcc::context *ctxt);
     427              : extern gimple_opt_pass *make_pass_lower_complex (gcc::context *ctxt);
     428              : extern gimple_opt_pass *make_pass_lower_bitint_O0 (gcc::context *ctxt);
     429              : extern gimple_opt_pass *make_pass_lower_bitint (gcc::context *ctxt);
     430              : extern gimple_opt_pass *make_pass_lower_switch (gcc::context *ctxt);
     431              : extern gimple_opt_pass *make_pass_lower_switch_O0 (gcc::context *ctxt);
     432              : extern gimple_opt_pass *make_pass_lower_vector (gcc::context *ctxt);
     433              : extern gimple_opt_pass *make_pass_lower_vector_ssa (gcc::context *ctxt);
     434              : extern gimple_opt_pass *make_pass_omp_oacc_kernels_decompose (gcc::context *ctxt);
     435              : extern gimple_opt_pass *make_pass_lower_omp (gcc::context *ctxt);
     436              : extern gimple_opt_pass *make_pass_diagnose_omp_blocks (gcc::context *ctxt);
     437              : extern gimple_opt_pass *make_pass_expand_omp (gcc::context *ctxt);
     438              : extern gimple_opt_pass *make_pass_expand_omp_ssa (gcc::context *ctxt);
     439              : extern gimple_opt_pass *make_pass_omp_target_link (gcc::context *ctxt);
     440              : extern gimple_opt_pass *make_pass_oacc_loop_designation (gcc::context *ctxt);
     441              : extern gimple_opt_pass *make_pass_omp_oacc_neuter_broadcast (gcc::context *ctxt);
     442              : extern gimple_opt_pass *make_pass_oacc_device_lower (gcc::context *ctxt);
     443              : extern gimple_opt_pass *make_pass_omp_device_lower (gcc::context *ctxt);
     444              : extern gimple_opt_pass *make_pass_object_sizes (gcc::context *ctxt);
     445              : extern gimple_opt_pass *make_pass_early_object_sizes (gcc::context *ctxt);
     446              : extern gimple_opt_pass *make_pass_warn_access (gcc::context *ctxt);
     447              : extern gimple_opt_pass *make_pass_warn_printf (gcc::context *ctxt);
     448              : extern gimple_opt_pass *make_pass_warn_recursion (gcc::context *ctxt);
     449              : extern gimple_opt_pass *make_pass_strlen (gcc::context *ctxt);
     450              : extern gimple_opt_pass *make_pass_post_ipa_warn (gcc::context *ctxt);
     451              : extern gimple_opt_pass *make_pass_stdarg (gcc::context *ctxt);
     452              : extern gimple_opt_pass *make_pass_early_warn_uninitialized (gcc::context *ctxt);
     453              : extern gimple_opt_pass *make_pass_late_warn_uninitialized (gcc::context *ctxt);
     454              : extern gimple_opt_pass *make_pass_cse_reciprocals (gcc::context *ctxt);
     455              : extern gimple_opt_pass *make_pass_cse_sincos (gcc::context *ctxt);
     456              : extern gimple_opt_pass *make_pass_expand_pow (gcc::context *ctxt);
     457              : extern gimple_opt_pass *make_pass_optimize_bswap (gcc::context *ctxt);
     458              : extern gimple_opt_pass *make_pass_store_merging (gcc::context *ctxt);
     459              : extern gimple_opt_pass *make_pass_optimize_widening_mul (gcc::context *ctxt);
     460              : extern gimple_opt_pass *make_pass_warn_function_return (gcc::context *ctxt);
     461              : extern gimple_opt_pass *make_pass_warn_function_noreturn (gcc::context *ctxt);
     462              : extern gimple_opt_pass *make_pass_cselim (gcc::context *ctxt);
     463              : extern gimple_opt_pass *make_pass_phiopt (gcc::context *ctxt);
     464              : extern gimple_opt_pass *make_pass_forwprop (gcc::context *ctxt);
     465              : extern gimple_opt_pass *make_pass_phiprop (gcc::context *ctxt);
     466              : extern gimple_opt_pass *make_pass_tree_ifcombine (gcc::context *ctxt);
     467              : extern gimple_opt_pass *make_pass_dse (gcc::context *ctxt);
     468              : extern gimple_opt_pass *make_pass_nrv (gcc::context *ctxt);
     469              : extern gimple_opt_pass *make_pass_rename_ssa_copies (gcc::context *ctxt);
     470              : extern gimple_opt_pass *make_pass_sink_code (gcc::context *ctxt);
     471              : extern gimple_opt_pass *make_pass_fre (gcc::context *ctxt);
     472              : extern gimple_opt_pass *make_pass_check_data_deps (gcc::context *ctxt);
     473              : extern gimple_opt_pass *make_pass_copy_prop (gcc::context *ctxt);
     474              : extern gimple_opt_pass *make_pass_isolate_erroneous_paths (gcc::context *ctxt);
     475              : extern gimple_opt_pass *make_pass_array_bounds (gcc::context *ctxt);
     476              : extern gimple_opt_pass *make_pass_early_vrp (gcc::context *ctxt);
     477              : extern gimple_opt_pass *make_pass_fast_vrp (gcc::context *ctxt);
     478              : extern gimple_opt_pass *make_pass_vrp (gcc::context *ctxt);
     479              : extern gimple_opt_pass *make_pass_assumptions (gcc::context *ctxt);
     480              : extern gimple_opt_pass *make_pass_uncprop (gcc::context *ctxt);
     481              : extern gimple_opt_pass *make_pass_return_slot (gcc::context *ctxt);
     482              : extern gimple_opt_pass *make_pass_reassoc (gcc::context *ctxt);
     483              : extern gimple_opt_pass *make_pass_rebuild_cgraph_edges (gcc::context *ctxt);
     484              : extern gimple_opt_pass *make_pass_remove_cgraph_callee_edges (gcc::context
     485              :                                                               *ctxt);
     486              : extern gimple_opt_pass *make_pass_build_cgraph_edges (gcc::context *ctxt);
     487              : extern gimple_opt_pass *make_pass_local_pure_const (gcc::context *ctxt);
     488              : extern gimple_opt_pass *make_pass_nothrow (gcc::context *ctxt);
     489              : extern gimple_opt_pass *make_pass_tracer (gcc::context *ctxt);
     490              : extern gimple_opt_pass *make_pass_warn_restrict (gcc::context *ctxt);
     491              : extern gimple_opt_pass *make_pass_warn_unused_result (gcc::context *ctxt);
     492              : extern gimple_opt_pass *make_pass_diagnose_tm_blocks (gcc::context *ctxt);
     493              : extern gimple_opt_pass *make_pass_lower_tm (gcc::context *ctxt);
     494              : extern gimple_opt_pass *make_pass_tm_init (gcc::context *ctxt);
     495              : extern gimple_opt_pass *make_pass_tm_mark (gcc::context *ctxt);
     496              : extern gimple_opt_pass *make_pass_tm_memopt (gcc::context *ctxt);
     497              : extern gimple_opt_pass *make_pass_tm_edges (gcc::context *ctxt);
     498              : extern gimple_opt_pass *make_pass_split_functions (gcc::context *ctxt);
     499              : extern gimple_opt_pass *make_pass_feedback_split_functions (gcc::context *ctxt);
     500              : extern gimple_opt_pass *make_pass_strength_reduction (gcc::context *ctxt);
     501              : extern gimple_opt_pass *make_pass_vtable_verify (gcc::context *ctxt);
     502              : extern gimple_opt_pass *make_pass_ubsan (gcc::context *ctxt);
     503              : extern gimple_opt_pass *make_pass_sanopt (gcc::context *ctxt);
     504              : extern gimple_opt_pass *make_pass_oacc_kernels (gcc::context *ctxt);
     505              : extern simple_ipa_opt_pass *make_pass_ipa_oacc (gcc::context *ctxt);
     506              : extern simple_ipa_opt_pass *make_pass_ipa_oacc_kernels (gcc::context *ctxt);
     507              : extern gimple_opt_pass *make_pass_warn_nonnull_compare (gcc::context *ctxt);
     508              : extern gimple_opt_pass *make_pass_sprintf_length (gcc::context *ctxt);
     509              : extern gimple_opt_pass *make_pass_walloca (gcc::context *ctxt);
     510              : extern gimple_opt_pass *make_pass_modref (gcc::context *ctxt);
     511              : extern gimple_opt_pass *make_pass_coroutine_lower_builtins (gcc::context *ctxt);
     512              : extern gimple_opt_pass *make_pass_coroutine_early_expand_ifns (gcc::context *ctxt);
     513              : extern gimple_opt_pass *make_pass_adjust_alignment (gcc::context *ctxt);
     514              : 
     515              : /* IPA Passes */
     516              : extern simple_ipa_opt_pass *make_pass_ipa_lower_emutls (gcc::context *ctxt);
     517              : extern simple_ipa_opt_pass *make_pass_ipa_function_and_variable_visibility (gcc::context *ctxt);
     518              : extern simple_ipa_opt_pass *make_pass_ipa_strub_mode (gcc::context *ctxt);
     519              : extern simple_ipa_opt_pass *make_pass_ipa_strub (gcc::context *ctxt);
     520              : extern simple_ipa_opt_pass *make_pass_ipa_tree_profile (gcc::context *ctxt);
     521              : extern simple_ipa_opt_pass *make_pass_ipa_auto_profile (gcc::context *ctxt);
     522              : extern simple_ipa_opt_pass *make_pass_ipa_auto_profile_offline
     523              :                 (gcc::context *ctxt);
     524              : 
     525              : extern simple_ipa_opt_pass *make_pass_build_ssa_passes (gcc::context *ctxt);
     526              : extern simple_ipa_opt_pass *make_pass_local_optimization_passes (gcc::context *ctxt);
     527              : extern simple_ipa_opt_pass *make_pass_ipa_remove_symbols (gcc::context *ctxt);
     528              : 
     529              : extern ipa_opt_pass_d *make_pass_analyzer (gcc::context *ctxt);
     530              : extern ipa_opt_pass_d *make_pass_ipa_asm_lgen (gcc::context *ctxt);
     531              : extern ipa_opt_pass_d *make_pass_ipa_asm_wpa (gcc::context *ctxt);
     532              : extern ipa_opt_pass_d *make_pass_ipa_whole_program_visibility (gcc::context
     533              :                                                                *ctxt);
     534              : extern simple_ipa_opt_pass *make_pass_ipa_increase_alignment (gcc::context
     535              :                                                               *ctxt);
     536              : extern ipa_opt_pass_d *make_pass_ipa_fn_summary (gcc::context *ctxt);
     537              : extern ipa_opt_pass_d *make_pass_ipa_inline (gcc::context *ctxt);
     538              : extern simple_ipa_opt_pass *make_pass_ipa_free_lang_data (gcc::context *ctxt);
     539              : extern simple_ipa_opt_pass *make_pass_ipa_free_fn_summary (gcc::context *ctxt);
     540              : extern ipa_opt_pass_d *make_pass_ipa_cp (gcc::context *ctxt);
     541              : extern ipa_opt_pass_d *make_pass_ipa_sra (gcc::context *ctxt);
     542              : extern ipa_opt_pass_d *make_pass_ipa_icf (gcc::context *ctxt);
     543              : extern ipa_opt_pass_d *make_pass_ipa_devirt (gcc::context *ctxt);
     544              : extern ipa_opt_pass_d *make_pass_ipa_odr (gcc::context *ctxt);
     545              : extern ipa_opt_pass_d *make_pass_ipa_reference (gcc::context *ctxt);
     546              : extern ipa_opt_pass_d *make_pass_ipa_pure_const (gcc::context *ctxt);
     547              : extern simple_ipa_opt_pass *make_pass_ipa_pta (gcc::context *ctxt);
     548              : extern simple_ipa_opt_pass *make_pass_ipa_tm (gcc::context *ctxt);
     549              : extern simple_ipa_opt_pass *make_pass_target_clone (gcc::context *ctxt);
     550              : extern simple_ipa_opt_pass *make_pass_dispatcher_calls (gcc::context *ctxt);
     551              : extern simple_ipa_opt_pass *make_pass_omp_simd_clone (gcc::context *ctxt);
     552              : extern ipa_opt_pass_d *make_pass_ipa_profile (gcc::context *ctxt);
     553              : extern ipa_opt_pass_d *make_pass_ipa_cdtor_merge (gcc::context *ctxt);
     554              : extern ipa_opt_pass_d *make_pass_ipa_single_use (gcc::context *ctxt);
     555              : extern ipa_opt_pass_d *make_pass_ipa_comdats (gcc::context *ctxt);
     556              : extern ipa_opt_pass_d *make_pass_ipa_modref (gcc::context *ctxt);
     557              : extern ipa_opt_pass_d *make_pass_ipa_locality_cloning (gcc::context *ctxt);
     558              : 
     559              : extern gimple_opt_pass *make_pass_cleanup_cfg_post_optimizing (gcc::context
     560              :                                                                *ctxt);
     561              : extern gimple_opt_pass *make_pass_fixup_cfg (gcc::context *ctxt);
     562              : extern gimple_opt_pass *make_pass_backprop (gcc::context *ctxt);
     563              : 
     564              : extern rtl_opt_pass *make_pass_expand (gcc::context *ctxt);
     565              : extern rtl_opt_pass *make_pass_instantiate_virtual_regs (gcc::context *ctxt);
     566              : extern rtl_opt_pass *make_pass_rtl_fwprop (gcc::context *ctxt);
     567              : extern rtl_opt_pass *make_pass_rtl_fwprop_addr (gcc::context *ctxt);
     568              : extern rtl_opt_pass *make_pass_jump (gcc::context *ctxt);
     569              : extern rtl_opt_pass *make_pass_jump2 (gcc::context *ctxt);
     570              : extern rtl_opt_pass *make_pass_lower_subreg (gcc::context *ctxt);
     571              : extern rtl_opt_pass *make_pass_cse (gcc::context *ctxt);
     572              : extern rtl_opt_pass *make_pass_fast_rtl_dce (gcc::context *ctxt);
     573              : extern rtl_opt_pass *make_pass_ud_rtl_dce (gcc::context *ctxt);
     574              : extern rtl_opt_pass *make_pass_rtl_dce (gcc::context *ctxt);
     575              : extern rtl_opt_pass *make_pass_rtl_dse1 (gcc::context *ctxt);
     576              : extern rtl_opt_pass *make_pass_rtl_dse2 (gcc::context *ctxt);
     577              : extern rtl_opt_pass *make_pass_rtl_dse3 (gcc::context *ctxt);
     578              : extern rtl_opt_pass *make_pass_rtl_cprop (gcc::context *ctxt);
     579              : extern rtl_opt_pass *make_pass_rtl_pre (gcc::context *ctxt);
     580              : extern rtl_opt_pass *make_pass_rtl_hoist (gcc::context *ctxt);
     581              : extern rtl_opt_pass *make_pass_hardreg_pre (gcc::context *ctxt);
     582              : extern rtl_opt_pass *make_pass_rtl_avoid_store_forwarding (gcc::context *ctxt);
     583              : extern rtl_opt_pass *make_pass_rtl_store_motion (gcc::context *ctxt);
     584              : extern rtl_opt_pass *make_pass_cse_after_global_opts (gcc::context *ctxt);
     585              : extern rtl_opt_pass *make_pass_rtl_ifcvt (gcc::context *ctxt);
     586              : 
     587              : extern rtl_opt_pass *make_pass_into_cfg_layout_mode (gcc::context *ctxt);
     588              : extern rtl_opt_pass *make_pass_outof_cfg_layout_mode (gcc::context *ctxt);
     589              : 
     590              : extern rtl_opt_pass *make_pass_loop2 (gcc::context *ctxt);
     591              : extern rtl_opt_pass *make_pass_rtl_loop_init (gcc::context *ctxt);
     592              : extern rtl_opt_pass *make_pass_rtl_move_loop_invariants (gcc::context *ctxt);
     593              : extern rtl_opt_pass *make_pass_rtl_unroll_loops (gcc::context *ctxt);
     594              : extern rtl_opt_pass *make_pass_rtl_doloop (gcc::context *ctxt);
     595              : extern rtl_opt_pass *make_pass_rtl_loop_done (gcc::context *ctxt);
     596              : 
     597              : extern rtl_opt_pass *make_pass_lower_subreg2 (gcc::context *ctxt);
     598              : extern rtl_opt_pass *make_pass_web (gcc::context *ctxt);
     599              : extern rtl_opt_pass *make_pass_cse2 (gcc::context *ctxt);
     600              : extern rtl_opt_pass *make_pass_df_initialize_opt (gcc::context *ctxt);
     601              : extern rtl_opt_pass *make_pass_df_initialize_no_opt (gcc::context *ctxt);
     602              : extern rtl_opt_pass *make_pass_reginfo_init (gcc::context *ctxt);
     603              : extern rtl_opt_pass *make_pass_inc_dec (gcc::context *ctxt);
     604              : extern rtl_opt_pass *make_pass_stack_ptr_mod (gcc::context *ctxt);
     605              : extern rtl_opt_pass *make_pass_initialize_regs (gcc::context *ctxt);
     606              : extern rtl_opt_pass *make_pass_ext_dce (gcc::context *ctxt);
     607              : extern rtl_opt_pass *make_pass_combine (gcc::context *ctxt);
     608              : extern rtl_opt_pass *make_pass_if_after_combine (gcc::context *ctxt);
     609              : extern rtl_opt_pass *make_pass_jump_after_combine (gcc::context *ctxt);
     610              : extern rtl_opt_pass *make_pass_ree (gcc::context *ctxt);
     611              : extern rtl_opt_pass *make_pass_partition_blocks (gcc::context *ctxt);
     612              : extern rtl_opt_pass *make_pass_match_asm_constraints (gcc::context *ctxt);
     613              : extern rtl_opt_pass *make_pass_split_all_insns (gcc::context *ctxt);
     614              : extern rtl_opt_pass *make_pass_fast_rtl_byte_dce (gcc::context *ctxt);
     615              : extern rtl_opt_pass *make_pass_lower_subreg3 (gcc::context *ctxt);
     616              : extern rtl_opt_pass *make_pass_mode_switching (gcc::context *ctxt);
     617              : extern rtl_opt_pass *make_pass_sms (gcc::context *ctxt);
     618              : extern rtl_opt_pass *make_pass_sched (gcc::context *ctxt);
     619              : extern rtl_opt_pass *make_pass_live_range_shrinkage (gcc::context *ctxt);
     620              : extern rtl_opt_pass *make_pass_early_remat (gcc::context *ctxt);
     621              : extern rtl_opt_pass *make_pass_ira (gcc::context *ctxt);
     622              : extern rtl_opt_pass *make_pass_reload (gcc::context *ctxt);
     623              : extern rtl_opt_pass *make_pass_clean_state (gcc::context *ctxt);
     624              : extern rtl_opt_pass *make_pass_branch_prob (gcc::context *ctxt);
     625              : extern rtl_opt_pass *make_pass_value_profile_transformations (gcc::context
     626              :                                                               *ctxt);
     627              : extern rtl_opt_pass *make_pass_postreload_cse (gcc::context *ctxt);
     628              : extern rtl_opt_pass *make_pass_late_combine (gcc::context *ctxt);
     629              : extern rtl_opt_pass *make_pass_dep_fusion (gcc::context *ctxt);
     630              : extern rtl_opt_pass *make_pass_gcse2 (gcc::context *ctxt);
     631              : extern rtl_opt_pass *make_pass_split_after_reload (gcc::context *ctxt);
     632              : extern rtl_opt_pass *make_pass_thread_prologue_and_epilogue (gcc::context
     633              :                                                              *ctxt);
     634              : extern rtl_opt_pass *make_pass_late_thread_prologue_and_epilogue (gcc::context
     635              :                                                                   *ctxt);
     636              : extern rtl_opt_pass *make_pass_zero_call_used_regs (gcc::context *ctxt);
     637              : extern rtl_opt_pass *make_pass_stack_adjustments (gcc::context *ctxt);
     638              : extern rtl_opt_pass *make_pass_sched_fusion (gcc::context *ctxt);
     639              : extern rtl_opt_pass *make_pass_peephole2 (gcc::context *ctxt);
     640              : extern rtl_opt_pass *make_pass_if_after_reload (gcc::context *ctxt);
     641              : extern rtl_opt_pass *make_pass_regrename (gcc::context *ctxt);
     642              : extern rtl_opt_pass *make_pass_fold_mem_offsets (gcc::context *ctxt);
     643              : extern rtl_opt_pass *make_pass_cprop_hardreg (gcc::context *ctxt);
     644              : extern rtl_opt_pass *make_pass_reorder_blocks (gcc::context *ctxt);
     645              : extern rtl_opt_pass *make_pass_leaf_regs (gcc::context *ctxt);
     646              : extern rtl_opt_pass *make_pass_split_before_sched2 (gcc::context *ctxt);
     647              : extern rtl_opt_pass *make_pass_compare_elim_after_reload (gcc::context *ctxt);
     648              : extern rtl_opt_pass *make_pass_sched2 (gcc::context *ctxt);
     649              : extern rtl_opt_pass *make_pass_stack_regs (gcc::context *ctxt);
     650              : extern rtl_opt_pass *make_pass_stack_regs_run (gcc::context *ctxt);
     651              : extern rtl_opt_pass *make_pass_df_finish (gcc::context *ctxt);
     652              : extern rtl_opt_pass *make_pass_compute_alignments (gcc::context *ctxt);
     653              : extern rtl_opt_pass *make_pass_duplicate_computed_gotos (gcc::context *ctxt);
     654              : extern rtl_opt_pass *make_pass_variable_tracking (gcc::context *ctxt);
     655              : extern rtl_opt_pass *make_pass_free_cfg (gcc::context *ctxt);
     656              : extern rtl_opt_pass *make_pass_machine_reorg (gcc::context *ctxt);
     657              : extern rtl_opt_pass *make_pass_cleanup_barriers (gcc::context *ctxt);
     658              : extern rtl_opt_pass *make_pass_delay_slots (gcc::context *ctxt);
     659              : extern rtl_opt_pass *make_pass_split_for_shorten_branches (gcc::context *ctxt);
     660              : extern rtl_opt_pass *make_pass_split_before_regstack (gcc::context *ctxt);
     661              : extern rtl_opt_pass *make_pass_convert_to_eh_region_ranges (gcc::context *ctxt);
     662              : extern rtl_opt_pass *make_pass_shorten_branches (gcc::context *ctxt);
     663              : extern rtl_opt_pass *make_pass_set_nothrow_function_flags (gcc::context *ctxt);
     664              : extern rtl_opt_pass *make_pass_dwarf2_frame (gcc::context *ctxt);
     665              : extern rtl_opt_pass *make_pass_final (gcc::context *ctxt);
     666              : extern rtl_opt_pass *make_pass_rtl_seqabstr (gcc::context *ctxt);
     667              : extern gimple_opt_pass *make_pass_release_ssa_names (gcc::context *ctxt);
     668              : extern gimple_opt_pass *make_pass_early_inline (gcc::context *ctxt);
     669              : extern gimple_opt_pass *make_pass_local_fn_summary (gcc::context *ctxt);
     670              : extern gimple_opt_pass *make_pass_update_address_taken (gcc::context *ctxt);
     671              : extern gimple_opt_pass *make_pass_convert_switch (gcc::context *ctxt);
     672              : extern gimple_opt_pass *make_pass_lower_vaarg (gcc::context *ctxt);
     673              : extern gimple_opt_pass *make_pass_gimple_isel (gcc::context *ctxt);
     674              : extern gimple_opt_pass *make_pass_harden_compares (gcc::context *ctxt);
     675              : extern gimple_opt_pass *make_pass_harden_conditional_branches (gcc::context
     676              :                                                                *ctxt);
     677              : extern gimple_opt_pass *make_pass_harden_control_flow_redundancy (gcc::context
     678              :                                                                   *ctxt);
     679              : 
     680              : /* Current optimization pass.  */
     681              : extern opt_pass *current_pass;
     682              : 
     683              : extern bool execute_one_pass (opt_pass *);
     684              : extern void execute_pass_list (function *, opt_pass *);
     685              : extern void execute_ipa_pass_list (opt_pass *);
     686              : extern void execute_ipa_summary_passes (ipa_opt_pass_d *);
     687              : extern void execute_all_ipa_transforms (bool);
     688              : extern void execute_all_ipa_stmt_fixups (struct cgraph_node *, gimple **);
     689              : extern bool pass_init_dump_file (opt_pass *);
     690              : extern void pass_fini_dump_file (opt_pass *);
     691              : extern void emergency_dump_function (void);
     692              : 
     693              : extern void print_current_pass (FILE *);
     694              : extern void debug_pass (void);
     695              : extern void ipa_write_summaries (void);
     696              : extern void ipa_write_optimization_summaries (struct lto_symtab_encoder_d *,
     697              :                                               bool);
     698              : extern void ipa_read_summaries (void);
     699              : extern void ipa_read_optimization_summaries (void);
     700              : extern void register_one_dump_file (opt_pass *);
     701              : extern bool function_called_by_processed_nodes_p (void);
     702              : 
     703              : /* Declare for plugins.  */
     704              : extern void do_per_function_toporder (void (*) (function *, void *), void *);
     705              : 
     706              : extern void disable_pass (const char *);
     707              : extern void enable_pass (const char *);
     708              : extern void dump_passes (void);
     709              : 
     710              : #endif /* GCC_TREE_PASS_H */
        

Generated by: LCOV version 2.4-beta

LCOV profile is generated on x86_64 machine using following configure options: configure --disable-bootstrap --enable-coverage=opt --enable-languages=c,c++,fortran,go,jit,lto,rust,m2 --enable-host-shared. GCC test suite is run with the built compiler.