2012年6月6日 星期三

Compiler 做了哪些最佳化?

我們都知道在編譯的時候可以下 O1 O2 等等的最佳化設定,但這些設定到底實際上做了哪些最佳化呢?我們可以利用下面這個指令知道:

$ arm-eabi-gcc -c -Q -O3 --help=optimizers 

以上面這個例子來說,當我們下-O3的時候實際上做了:

The following options control optimizations:
  -O                    
  -Os                           
  -falign-functions             [enabled]
  -falign-jumps                 [enabled]
  -falign-labels                [enabled]
  -falign-loops                 [disabled]
  -fargument-alias              [enabled]
  -fargument-noalias            [disabled]
  -fargument-noalias-anything   [disabled]
  -fargument-noalias-global     [disabled]
  -fasynchronous-unwind-tables   [disabled]
  -fbranch-count-reg            [enabled]
  -fbranch-probabilities        [disabled]
  -fbranch-target-load-optimize  [disabled]
  -fbranch-target-load-optimize2  [disabled]
  -fbtr-bb-exclusive            [disabled]
  -fcaller-saves                [enabled]
  -fcommon                      [enabled]
  -fconserve-stack              [disabled]
  -fcprop-registers             [enabled]
  -fcrossjumping                [enabled]
  -fcse-follow-jumps            [enabled]
  -fcse-skip-blocks             [disabled]
  -fcx-fortran-rules            [disabled]
  -fcx-limited-range            [disabled]
  -fdata-sections               [disabled]
  -fdce                         [enabled]
  -fdefer-pop                   [enabled]
  -fdelayed-branch              [disabled]
  -fdelete-null-pointer-checks   [enabled]
  -fdominance-check             [disabled]
  -fdse                         [enabled]
  -fearly-inlining              [enabled]
  -fexceptions                  [disabled]
  -fexpensive-optimizations     [enabled]
  -ffinite-math-only            [disabled]
  -ffloat-store                 [disabled]
  -fforward-propagate           [enabled]
  -fgcse                        [enabled]
  -fgcse-after-reload           [enabled]
  -fgcse-las                    [disabled]
  -fgcse-lm                     [enabled]
  -fgcse-sm                     [disabled]
  -fgraphite-identity           [disabled]
  -fguess-branch-probability    [enabled]
  -fhandle-exceptions           
  -fif-conversion               [enabled]
  -fif-conversion2              [enabled]
  -finline-functions            [enabled]
  -finline-functions-called-once  [enabled]
  -finline-small-functions      [enabled]
  -fipa-cp                      [enabled]
  -fipa-cp-clone                [enabled]
  -fipa-matrix-reorg            [disabled]
  -fipa-pta                     [disabled]
  -fipa-pure-const              [enabled]
  -fipa-reference               [enabled]
  -fipa-type-escape             [disabled]
  -fivopts                      [enabled]
  -fjump-tables                 [enabled]
  -flimit-hot-components        [disabled]
  -floop-block                  [disabled]
  -floop-interchange            [disabled]
  -floop-strip-mine             [disabled]
  -fmath-errno                  [enabled]
  -fmerge-all-constants         [disabled]
  -fmerge-constants             [enabled]
  -fmodulo-sched                [disabled]
  -fmove-loop-invariants        [enabled]
  -fnon-call-exceptions         [disabled]
  -fomit-frame-pointer          [enabled]
  -foptimize-register-move      [enabled]
  -foptimize-sibling-calls      [enabled]
  -fpack-struct                 [disabled]
  -fpack-struct=        
  -fpeel-loops                  [disabled]
  -fpeephole                    [enabled]
  -fpeephole2                   [enabled]
  -fpessimistic-inline-stack-limit  [enabled]
  -fpredictive-commoning        [enabled]
  -fprefetch-loop-arrays        [disabled]
  -fprofile-dump                [disabled]
  -frecord-options-in-elf       [disabled]
  -freg-struct-return           [enabled]
  -fregmove                     [enabled]
  -frename-registers            [enabled]
  -freorder-blocks              [enabled]
  -freorder-blocks-and-partition  [disabled]
  -freorder-functions           [enabled]
  -frerun-cse-after-loop        [enabled]
  -freschedule-modulo-scheduled-loops  [disabled]
  -frounding-math               [disabled]
  -frtti                        
  -fsample-profile              [disabled]
  -fsample-profile-use-entry    [disabled]
  -fsched-interblock            [enabled]
  -fsched-spec                  [enabled]
  -fsched-spec-load             [disabled]
  -fsched-spec-load-dangerous   [disabled]
  -fsched-stalled-insns         [disabled]
  -fsched-stalled-insns-dep     [enabled]
  -fsched2-use-superblocks      [disabled]
  -fsched2-use-traces           [disabled]
  -fschedule-insns              [enabled]
  -fschedule-insns2             [enabled]
  -fsection-anchors             [enabled]
  -fsel-sched-pipelining        [disabled]
  -fsel-sched-pipelining-outer-loops  [disabled]
  -fsel-sched-reschedule-pipelined  [disabled]
  -fselective-scheduling        [disabled]
  -fselective-scheduling2       [disabled]
  -fshort-double                
  -fshort-enums                 
  -fshort-wchar                 
  -fsignaling-nans              [disabled]
  -fsigned-zeros                [enabled]
  -fsingle-precision-constant   [disabled]
  -fsplit-ivs-in-unroller       [enabled]
  -fsplit-wide-types            [enabled]
  -fstrict-aliasing             [enabled]
  -fstrict-enum-precision       [enabled]
  -fthread-jumps                [enabled]
  -fno-threadsafe-statics       
  -ftoplevel-reorder            [enabled]
  -ftrapping-math               [enabled]
  -ftrapv                       [disabled]
  -ftree-builtin-call-dce       [enabled]
  -ftree-ccp                    [enabled]
  -ftree-ch                     [enabled]
  -ftree-copy-prop              [enabled]
  -ftree-copyrename             [enabled]
  -ftree-cselim                 [enabled]
  -ftree-dce                    [enabled]
  -ftree-dominator-opts         [enabled]
  -ftree-dse                    [enabled]
  -ftree-fre                    [enabled]
  -ftree-loop-distribution      [disabled]
  -ftree-loop-im                [enabled]
  -ftree-loop-ivcanon           [enabled]
  -ftree-loop-linear            [disabled]
  -ftree-loop-optimize          [enabled]
  -ftree-lr-shrinking           [enabled]
  -ftree-lrs                    [disabled]
  -ftree-pre                    [enabled]
  -ftree-reassoc                [enabled]
  -ftree-scev-cprop             [enabled]
  -ftree-sink                   [enabled]
  -ftree-sra                    [enabled]
  -ftree-switch-conversion      [enabled]
  -ftree-ter                    [enabled]
  -ftree-vect-loop-version      [enabled]
  -ftree-vectorize              [enabled]
  -ftree-vrp                    [enabled]
  -funit-at-a-time              [enabled]
  -funroll-all-loops            [disabled]
  -funroll-loops                [disabled]
  -funsafe-loop-optimizations   [disabled]
  -funsafe-math-optimizations   [disabled]
  -funswitch-loops              [enabled]
  -funwind-tables               [disabled]
  -fvar-tracking                [enabled]
  -fvar-tracking-uninit         [disabled]
  -fvariable-expansion-in-unroller  [disabled]
  -fvect-cost-model             [disabled]
  -fvpt                         [disabled]
  -fweb                         [enabled]
  -fwhole-program               [disabled]
  -fwrapv                       [disabled]

沒有留言: