All of GCC’s passes
This diagram shows the various GCC optimization passes, arranged vertically,
showing child passes via indentation.
The lifetime of the various properties that they maintain is shown, giving
the pass that initially creates the data (if any), the pass that destroys it
(if any), and each pass that requires a particular property (based on the
PROP_* flags).
These tables contain the same information. The diagram and tables were
autogenerated, using GCC 4.6.0
The lowering passes
Pass Name |
Required properties |
Provided properties |
Destroyed properties |
*warn_unused_result |
gimple_any |
|
|
*diagnose_omp_blocks |
gimple_any |
|
|
mudflap1 |
gimple_any |
|
|
omplower |
gimple_any |
gimple_lomp |
|
lower |
gimple_any |
gimple_lcf |
|
ehopt |
gimple_lcf |
|
|
eh |
gimple_lcf |
gimple_leh |
|
cfg |
gimple_leh |
cfg |
|
*warn_function_return |
cfg |
|
|
*build_cgraph_edges |
cfg |
|
|
The “small IPA” passes
Pass Name |
Required properties |
Provided properties |
Destroyed properties |
*free_lang_data |
gimple_any, gimple_lcf, gimple_leh, cfg |
|
|
visibility |
|
|
|
early_local_cleanups |
|
|
|
> *free_cfg_annotations |
cfg |
|
|
> *init_datastructures |
cfg |
|
|
> ompexp |
gimple_any |
|
|
> *referenced_vars |
gimple_leh, cfg |
referenced_vars |
|
> ssa |
cfg, referenced_vars |
ssa |
|
> veclower |
cfg |
|
|
> *early_warn_uninitialized |
ssa |
|
|
> *rebuild_cgraph_edges |
cfg |
|
|
> inline_param |
|
|
|
> einline |
|
|
|
> early_optimizations |
|
|
|
> > *remove_cgraph_callee_edges |
|
|
|
> > copyrename |
cfg, ssa |
|
|
> > ccp |
cfg, ssa |
|
|
> > forwprop |
cfg, ssa |
|
|
> > ealias |
cfg, ssa |
|
|
> > esra |
cfg, ssa |
|
|
> > copyprop |
cfg, ssa |
|
|
> > mergephi |
cfg, ssa |
|
|
> > cddce |
cfg, ssa |
|
|
> > eipa_sra |
|
|
|
> > tailr |
cfg, ssa |
|
|
> > switchconv |
cfg, ssa |
|
|
> > ehcleanup |
gimple_lcf |
|
|
> > profile |
cfg |
|
|
> > local-pure-const |
|
|
|
> > fnsplit |
cfg |
|
|
> release_ssa |
ssa |
|
|
> *rebuild_cgraph_edges |
cfg |
|
|
> inline_param |
|
|
|
tree_profile_ipa |
|
|
|
> feedback_fnsplit |
cfg |
|
|
increase_alignment |
|
|
|
matrix-reorg |
|
|
|
emutls |
cfg, ssa |
|
|
The “regular IPA” passes
Pass Name |
Required properties |
Provided properties |
Destroyed properties |
whole-program |
gimple_any, gimple_lcf, gimple_leh, cfg |
|
|
ipa-profile |
|
|
|
cp |
|
|
|
cdtor |
|
|
|
inline |
|
|
|
pure-const |
|
|
|
static-var |
|
|
|
type-escape-var |
|
|
|
pta |
|
|
|
ipa_struct_reorg |
|
|
|
Passes generating Link-Time Optimization data
Pass Name |
Required properties |
Provided properties |
Destroyed properties |
lto_gimple_out |
gimple_any, gimple_lcf, gimple_leh, cfg |
|
|
lto_decls_out |
|
|
|
The “all other passes” catch-all
Pass Name |
Required properties |
Provided properties |
Destroyed properties |
ehdisp |
gimple_any, gimple_lcf, gimple_leh, cfg |
|
|
*all_optimizations |
|
|
|
> *remove_cgraph_callee_edges |
|
|
|
> *strip_predict_hints |
cfg |
|
|
> copyrename |
cfg, ssa |
|
|
> cunrolli |
cfg, ssa |
|
|
> ccp |
cfg, ssa |
|
|
> forwprop |
cfg, ssa |
|
|
> cdce |
cfg, ssa |
|
|
> alias |
cfg, ssa |
|
|
> retslot |
ssa |
|
|
> phiprop |
cfg, ssa |
|
|
> fre |
cfg, ssa |
|
|
> copyprop |
cfg, ssa |
|
|
> mergephi |
cfg, ssa |
|
|
> vrp |
ssa |
|
|
> dce |
cfg, ssa |
|
|
> cselim |
cfg, ssa |
|
|
> ifcombine |
cfg, ssa |
|
|
> phiopt |
cfg, ssa |
|
|
> tailr |
cfg, ssa |
|
|
> ch |
cfg, ssa |
|
|
> stdarg |
cfg, ssa |
|
|
> cplxlower |
ssa |
gimple_lcx |
|
> sra |
cfg, ssa |
|
|
> copyrename |
cfg, ssa |
|
|
> dom |
cfg, ssa |
|
|
> phicprop |
cfg, ssa |
|
|
> dse |
cfg, ssa |
|
|
> reassoc |
cfg, ssa |
|
|
> dce |
cfg, ssa |
|
|
> forwprop |
cfg, ssa |
|
|
> phiopt |
cfg, ssa |
|
|
> objsz |
cfg, ssa |
|
|
> ccp |
cfg, ssa |
|
|
> copyprop |
cfg, ssa |
|
|
> sincos |
ssa |
|
|
> bswap |
ssa |
|
|
> crited |
cfg |
no_crit_edges |
|
> pre |
cfg, ssa, no_crit_edges |
|
|
> sink |
cfg, ssa, no_crit_edges |
|
|
> loop |
cfg |
|
|
> > loopinit |
cfg |
|
|
> > lim |
cfg |
|
|
> > copyprop |
cfg, ssa |
|
|
> > dceloop |
cfg, ssa |
|
|
> > unswitch |
cfg |
|
|
> > sccp |
cfg, ssa |
|
|
> > *record_bounds |
cfg, ssa |
|
|
> > ckdd |
cfg, ssa |
|
|
> > ldist |
cfg, ssa |
|
|
> > copyprop |
cfg, ssa |
|
|
> > graphite0 |
cfg, ssa |
|
|
> > > graphite |
cfg, ssa |
|
|
> > > lim |
cfg |
|
|
> > > copyprop |
cfg, ssa |
|
|
> > > dceloop |
cfg, ssa |
|
|
> > ivcanon |
cfg, ssa |
|
|
> > ifcvt |
cfg, ssa |
|
|
> > vect |
cfg, ssa |
|
|
> > > veclower2 |
cfg |
|
|
> > > dceloop |
cfg, ssa |
|
|
> > pcom |
cfg |
|
|
> > cunroll |
cfg, ssa |
|
|
> > slp |
cfg, ssa |
|
|
> > parloops |
cfg, ssa |
|
|
> > aprefetch |
cfg, ssa |
|
|
> > ivopts |
cfg, ssa |
|
|
> > loopdone |
cfg |
|
|
> recip |
ssa |
|
|
> reassoc |
cfg, ssa |
|
|
> vrp |
ssa |
|
|
> dom |
cfg, ssa |
|
|
> phicprop |
cfg, ssa |
|
|
> cddce |
cfg, ssa |
|
|
> tracer |
|
|
|
> uninit |
ssa |
|
|
> dse |
cfg, ssa |
|
|
> forwprop |
cfg, ssa |
|
|
> phiopt |
cfg, ssa |
|
|
> fab |
cfg, ssa |
|
|
> widening_mul |
ssa |
|
|
> tailc |
cfg, ssa |
|
|
> copyrename |
cfg, ssa |
|
|
> uncprop |
cfg, ssa |
|
|
> local-pure-const |
|
|
|
cplxlower0 |
cfg |
gimple_lcx |
|
ehcleanup |
gimple_lcf |
|
|
resx |
gimple_lcf |
|
|
nrv |
cfg, ssa |
|
|
mudflap2 |
gimple_leh, cfg, ssa |
|
|
optimized |
cfg |
|
|
*warn_function_noreturn |
cfg |
|
|
expand |
gimple_leh, cfg, ssa, gimple_lcx |
rtl |
gimple_any, gimple_lcf, gimple_leh, ssa, gimple_lomp |
*rest_of_compilation |
rtl |
|
|
> *init_function |
|
|
|
> sibling |
|
|
|
> rtl eh |
|
|
|
> initvals |
|
|
|
> unshare |
|
|
|
> vregs |
|
|
|
> into_cfglayout |
|
cfglayout |
|
> jump |
|
|
|
> subreg1 |
|
|
|
> dfinit |
|
|
|
> cse1 |
|
|
|
> fwprop1 |
|
|
|
> cprop |
cfglayout |
|
|
> rtl pre |
cfglayout |
|
|
> hoist |
cfglayout |
|
|
> cprop |
cfglayout |
|
|
> store_motion |
cfglayout |
|
|
> cse_local |
|
|
|
> ce1 |
|
|
|
> reginfo |
|
|
|
> loop2 |
|
|
|
> > loop2_init |
|
|
|
> > loop2_invariant |
|
|
|
> > loop2_unswitch |
|
|
|
> > loop2_unroll |
|
|
|
> > loop2_doloop |
|
|
|
> > loop2_done |
|
|
|
> web |
|
|
|
> cprop |
cfglayout |
|
|
> cse2 |
|
|
|
> dse1 |
|
|
|
> fwprop2 |
|
|
|
> auto_inc_dec |
|
|
|
> init-regs |
|
|
|
> ud dce |
|
|
|
> combine |
cfglayout |
|
|
> ce2 |
|
|
|
> bbpart |
cfglayout |
|
|
> regmove |
|
|
|
> outof_cfglayout |
|
|
cfglayout |
> split1 |
|
|
|
> subreg2 |
|
|
|
> no-opt dfinit |
|
|
|
> *stack_ptr_mod |
|
|
|
> mode_sw |
|
|
|
> asmcons |
|
|
|
> sms |
|
|
|
> sched1 |
|
|
|
> ira |
|
|
|
> *all-postreload |
rtl |
|
|
> > postreload |
|
|
|
> > gcse2 |
|
|
|
> > split2 |
|
|
|
> > zee |
|
|
|
> > cmpelim |
|
|
|
> > btl1 |
|
|
|
> > pro_and_epilogue |
|
|
|
> > dse2 |
|
|
|
> > csa |
|
|
|
> > peephole2 |
|
|
|
> > ce3 |
|
|
|
> > rnreg |
|
|
|
> > cprop_hardreg |
|
|
|
> > rtl dce |
|
|
|
> > bbro |
|
|
|
> > btl2 |
|
|
|
> > *leaf_regs |
|
|
|
> > split4 |
|
|
|
> > sched2 |
|
|
|
> > *stack_regs |
|
|
|
> > > split3 |
|
|
|
> > > stack |
|
|
|
> > alignments |
|
|
|
> > compgotos |
|
|
|
> > vartrack |
|
|
|
> > *free_cfg |
|
|
cfg |
> > mach |
|
|
|
> > barriers |
|
|
|
> > dbr |
|
|
|
> > split5 |
|
|
|
> > eh_ranges |
|
|
|
> > shorten |
|
|
|
> > nothrow |
|
|
|
> > final |
|
|
|
> dfinish |
|
|
|
*clean_state |
|
|
rtl |