Current GCC Passes
This is the list of Current GCC passes as of GCC 15/16
GIMPLE Passes
GIMPLE lowering passes
These passes lower from one form of gimple to another. Some lower into different specific things like complex or bitint while others lower higher level gimple constructs into lower level ones (e.g. eh).
- lower_omp
- lower_cf
- lower_tm
- refactor_eh
- lower_eh
- coroutine_lower_builtins
- build_cfg
- omp_oacc_kernels_decompose
- coroutine_early_expand_ifns
- expand_omp
- expand_omp_ssa
- build_ssa
- lower_complex (does some opt too)
- lower_bitint (does some opt too)
- lower_vector_ssa
- lower_switch (is this opt?)
- lower_vaarg
- lower_vector (O0 version of vector_ssa but both work ssa now)
- lower_complex_O0
- lower_bitint_O0
- lower_switch_O0
- lower_resx
- gimple_isel (is this opt or lowering or combo)
GIMPLE optimization passes
- ccp
- forwprop
- early_thread_jumps
- sra_early
- phiprop
- fre
- early_vrp
- merge_phi
- dse
- cd_dce
- phiopt
- cleanup_eh
- tail_recursion
- if_to_switch
- convert_switch
- scccopy
- split_functions
- strip_predict_hints
- early_object_sizes (also warns?)
- early_inline
- object_sizes (also warns?)
- complete_unrolli
- backprop
- return_slot
- thread_jumps_full
- vrp
- stdarg
- call_cdce
- cselim
- copy_prop
- tree_ifcombine
- sra
- thread_jumps
- dominator
- copy_prop
- isolate_erroneous_paths (warns too)
- reassoc
- expand_pow (is this lowering?)
- optimize_bswap
- laddress (is this a kind of lowering?)
- pre
- sink_code
- slp_vectorize
- cse_sincos
- cse_reciprocals
- strength_reduction
- split_paths (is this a loop one?)
- tracer
- strlen
- optimize_widening_mul
- store_merging
- tail_calls
- uncprop
- sanopt (runs late)
- nrv (rans late)
- cleanup_cfg_post_optimizing (late)
GIMPLE Loop optimization passes
- lim
- ch
- tree_unswitch
- loop_split
- scev_cprop
- loop_versioning
- loop_jam
- iv_canon
- loop_distribution
- crc_optimization
- linterchange
- graphite (seperate topic?)
- parallelize_loops
- ch_vect
- if_conversion
- vectorize
- predcom
- complete_unroll
- loop_prefetch
- iv_optimize
GIMPLE warning passes
These passes only are there to do warnings.
- warn_function_return
- warn_unused_result
- diagnose_omp_blocks
- diagnose_tm_blocks
- walloca
- warn_printf
- warn_nonnull_compare
- early_warn_uninitialized
- warn_access
- warn_recursion
- post_ipa_warn
- array_bounds
- walloca
- warn_restrict
- late_warn_uninitialized
- warn_function_noreturn
GIMPLE analysis passes
These passes are used for analysis only of the IR which is used by others.
- build_cgraph_edges (IPA edges)
- local_fn_summary
- nothrow
- rebuild_cgraph_edges
- remove_cgraph_callee_edges
- build_ealias (is this analysis or optimization?)
- profile (is this analysis)
- local_pure_const
- modref
- rebuild_frequencies
- fix_loops
GIMPLE misc/uncat passes
- ubsan
- fixup_cfg
- release_ssa_names
- sancov
- asan
- tsan
- simduid_cleanup
- split_crit_edges (used before late_warn_uninitialized)
- vtable_verify
- sancov_O0 (?)
- asan_O0
- tsan_O0
- musttail (is this an opt or misc right place for it?)
- harden_conditional_branches
- harden_compares
GIMPLE IPA passes