opt オプション

LLVM の最適化コマンド opt は山ほどオプションがあって、しかも任意の順番に組み合わせて実行できる。-std-compile-opts で実行されるオプションにして2.4 と 2.5 で異なっている。よく見ると同じ最適化オプションが繰返し使われていて、ほとんど暗号。「カブト虫!イチジクのタルト!カブト虫!」という感じ。いろいろな組み合わせを自動生成して延々最適化したらそのうち速くなるのだろうか。-functionattrs(Deduce function attributes), -loop-deletion(delete dead loops) が追加、-tailduplicate が削除か。意味は調べていない。

さっき気付いたけれど、LLVM のコマンドはパイプで延々と続けて実行できる。どれくらい意味があるか分からないけど。

opt -verify foo.bc | opt -O3 | llvm-dis | tee foo.opt.ll | llvm-as | lli

LLVM 2.5 opt -std-compile-opts

  • preverify
  • domtree
  • verify
  • lowersetjmp
  • raiseallocs
  • simplifycfg
  • domtree
  • domfrontier
  • mem2reg
  • globalopt
  • globaldce
  • ipconstprop
  • deadargelim
  • instcombine
  • simplifycfg
  • basiccg
  • prune-eh
  • functionattrs
  • inline
  • argpromotion
  • simplify-libcalls
  • instcombine
  • jump-threading
  • simplifycfg
  • domtree
  • domfrontier
  • scalarrepl
  • instcombine
  • break-crit-edges
  • condprop
  • tailcallelim
  • simplifycfg
  • reassociate
  • domtree
  • loops
  • loopsimplify
  • domfrontier
  • scalar-evolution
  • lcssa
  • loop-rotate
  • licm
  • lcssa
  • loop-unswitch
  • scalar-evolution
  • lcssa
  • loop-index-split
  • instcombine
  • scalar-evolution
  • lcssa
  • indvars
  • scalar-evolution
  • lcssa
  • loop-deletion
  • domfrontier
  • lcssa
  • loop-unroll
  • instcombine
  • memdep
  • gvn
  • memdep
  • memcpyopt
  • sccp
  • instcombine
  • break-crit-edges
  • condprop
  • domtree
  • memdep
  • dse
  • adce
  • simplifycfg
  • strip-dead-prototypes
  • print-used-types
  • deadtypeelim
  • constmerge
  • preverify
  • domtree
  • verify

LLVM 勉強会に期待。体調崩したけど仕事を片付けなくては。