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      

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