19.1 Optimization Feature Summary

Each big O optimization is equal to specific options. Lists of currently-supported optimization options are show below. “No” versions of options may be available, for example -fdefer-pop and -fno-defer-pop.

These features are subject to change.

Enabled/Disabledf<option>O1 enabledO2 enabledO3 enabledOs enabled
O1 optimization
defer popEnabledfdefer-popYesYesYesYes
guess branch probabilityEnabledfguess-branch-probabilityYesYesYesYes
cprop registersEnabledfcprop-registersYesYesYesYes
forward propogateEnabledfforward-propagateYesYesYesYes
if conversionEnabledfif-conversionYesYesYesYes
if conversion2Enabledfif-conversion2YesYesYesYes
ipa pure constEnabledfipa-pure-constYesYesYesYes
ipa referenceEnabledfipa-referenceYesYesYesYes
ipa profileEnabledfipa-profileYesYesYesYes
merge constantsEnabledfmerge-constantsYesYesYesYes
reorder blocksEnabledfreorder-blocksYesYesYesYes
shrink wrapEnabledfshrink-wrapYesYesYesYes
split wide typesEnabled, Disabled for Os, O1fsplit-wide-typesNo (XC-DSC disables)YesYesNo (XC-DSC disables)
tree ccpEnabledftree-ccpYesYesYesYes
tree bit ccpEnabledftree-bit-ccpYesYesYesYes
tree coalesce varsEnabledftree-coalesce-varsYesYesYesYes
tree dceEnabledftree-dceYesYesYesYes
tree dominator optsEnabledftree-dominator-optsYesYesYesYes
tree dseEnabledftree-dseYesYesYesYes
tree terEnabledftree-terYesYesYesYes
tree sraEnabledftree-sraYesYesYesYes
tree freEnabledftree-freYesYesYesYes
tree copy propEnabledftree-copy-propYesYesYesYes
tree sinkEnabledftree-sinkYesYesYesYes
tree chEnabledftree-chYesYesYesYes
combine stack adjustmentsEnabledfcombine-stack-adjustmentsYesYesYesYes
compare elimEnabledfcompare-elimYesYesYesYes
tree slsrEnabledftree-slsrYesYesYesYes
branch count regEnabledfbranch-count-regYesYesYesYes
move loop invariantsEnabled, Disabled for Osfmove-loop-invariantsYesYesYesNo (XC-DSC disables)
tree ptaEnabledftree-ptaYesYesYesYes
ssa phioptEnabledfssa-phioptYesYesYesYes
tree builtin call dceEnabledftree-builtin-call-dceYesYesYesYes
omit frame pointerEnabledfomit-frame-pointerYesYesYesYes
O2 optimization
inline small functionsEnabled, Disabled for Os, O1finline-small-functionsNoYesYesNo (XC-DSC disables)
indirect inliningEnabled, Disabled for Os, O1findirect-inliningNoYesYesNo (XC-DSC disables)
partial inliningEnabledfpartial-inliningNoYesYesYes
thread jumpsEnabledfthread-jumpsNoYesYesYes
crossjumpingEnabledfcrossjumpingNoYesYesYes
optimize sibling callsEnabledfoptimize-sibling-callsNoYesYesYes
cse follow jumpsEnabledfcse-follow-jumpsNoYesYesYes
gcseEnabledfgcseNoYesYesYes
expensive optimizationsEnabledfexpensive-optimizationsNoYesYesYes
rerun cse after loopEnabledfrerun-cse-after-loopNoYesYesYes
caller savesEnabledfcaller-savesNoYesYesYes
peephole2Enabledfpeephole2NoYesYesYes
schedule insnsDisabled, except -merratafschedule-insnsNo (XC-DSC disables)No (XC-DSC disables)No (XC-DSC disables)No (XC-DSC disables)
schedule insns2Disabled, except -merratafschedule-insns2No (XC-DSC disables)No (XC-DSC disables)No (XC-DSC disables)No (XC-DSC disables)
strict aliasingEnabledfstrict-aliasingNoYesYesYes
reorder blocks algorithm Enabled, Disabled for Os (by default in gcc)freorder-blocks-algorithm=NoYesYesNo
reorder functionsEnabledfreorder-functionsNoYesYesYes
tree vrpEnabledftree-vrpNoYesYesYes
code hoistingEnabledfcode-hoistingNoYesYesYes
tree preEnabledftree-preNoYesYesYes
tree switch conversionEnabled, Disabled for Os, O1ftree-switch-conversionNoYesYesNo (XC-DSC disables)
ipa cpEnabledfipa-cpNoYesYesYes
ipa bit cpEnabledfipa-bit-cpNoYesYesYes
ipa vrpEnabledfipa-vrpNoYesYesYes
devirtualizeEnabledfdevirtualizeNoYesYesYes
devirtualize speculativelyEnabledfdevirtualize-speculativelyNoYesYesYes
ipa sraEnabledfipa-sraNoYesYesYes
align loopsEnabledfalign-loopsNoYesYesYes
align jumpsEnabledfalign-jumpsNoYesYesYes
align labelsEnabledfalign-labelsNoYesYesYes
align functionsEnabledfalign-functionsNoYesYesYes
tree tail mergeEnabledftree-tail-mergeNoYesYesYes
vect cost model Enabledfvect-cost-modelNoYesYesYes
optimize strlenEnabled, Disabled for Os (by default in gcc)foptimize-strlenNoYesYesNo
hoist adjacent loadsEnabledfhoist-adjacent-loadsNoYesYesYes
ipa icfEnabledfipa-icfNoYesYesYes
isolate erroneous paths dereferenceEnabledfisolate-erroneous-paths-dereferenceNoYesYesYes
ipa raEnabledfipa-raNoYesYesYes
lra rematEnabledflra-rematNoYesYesYes
store mergingEnabledfstore-mergingNoYesYesYes
O3 optimization
tree loop distribute patternsEnabledftree-loop-distribute-patternsNoNoYesYes
predictive commoningEnabledfpredictive-commoningNoNoYesNo
split pathsEnabledfsplit-pathsNoNoYesNo
inline functionsEnabled, Disabled for Os, O1finline-functionsNoNoYesNo
inline functions called onceEnabled, Disabled for Os, O1finline-functions-called-onceNoNoYesNo
split loopsEnabledfsplit-loopsNoNoYesNo
unswitch loopsEnabledfunswitch-loopsNoNoYesNo
loop unroll and jamEnabledfloop-unroll-and-jamNoNoYesNo
gcse after reloadEnabledfgcse-after-reloadNoNoYesNo
tree loop vectorizeDisabledftree-loop-vectorizeNoNoNoNo
tree slp vectorizeDisabledftree-slp-vectorizeNoNoNoNo
vect cost model Enabledfvect-cost-modelNoNoYesNo
ipa cp cloneEnabledfipa-cp-cloneNoNoYesNo
tree partial preEnabledftree-partial-preNoNoYesNo
peel loopsEnabledfpeel-loopsNoNoYesNo