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).

_images/passes.svg

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