3

optさまざまなハードウェア アーキテクチャの LLVM で使用されるパスを理解し、変更したいと考えています。

4

2 に答える 2

3

optLLVM IR の特定の部分でどのパスが実行されているかがわかります。

$ opt -O2 -debug-pass=Arguments example_file.ll -disable-output
Pass Arguments:  -tti -no-aa -tbaa -scoped-noalias -assumption-cache-tracker -targetlibinfo -basicaa -verify -simplifycfg -domtree -sroa -early-cse -lower-expect
Pass Arguments:  -targetlibinfo -tti -no-aa -tbaa -scoped-noalias -assumption-cache-tracker -basicaa -ipsccp -globalopt -deadargelim -domtree -instcombine -simplifycfg -basiccg -prune-eh -inline-cost -inline -functionattrs -domtree -sroa -early-cse -lazy-value-info -jump-threading -correlated-propagation -simplifycfg -domtree -instcombine -tailcallelim -simplifycfg -reassociate -domtree -loops -loop-simplify -lcssa -loop-rotate -licm -loop-unswitch -instcombine -scalar-evolution -loop-simplify -lcssa -indvars -loop-idiom -loop-deletion -loop-unroll -mldst-motion -domtree -memdep -gvn -memdep -memcpyopt -sccp -domtree -bdce -instcombine -lazy-value-info -jump-threading -correlated-propagation -domtree -memdep -dse -loops -loop-simplify -lcssa -licm -adce -simplifycfg -domtree -instcombine -barrier -float2int -domtree -loops -loop-simplify -lcssa -loop-rotate -branch-prob -block-freq -scalar-evolution -loop-accesses -loop-vectorize -instcombine -scalar-evolution -slp-vectorizer -simplifycfg -domtree -instcombine -loops -loop-simplify -lcssa -scalar-evolution -loop-unroll -instcombine -loop-simplify -lcssa -licm -scalar-evolution -alignment-from-assumptions -strip-dead-prototypes -elim-avail-extern -globaldce -constmerge -verify

ソースコードを見ると、これは一般的に次の問題です。

をインスタンス化し、PassManagerBuilderを呼び出しSetOptLevelます。次にビルダーは、 populateModulePassManager の一部としてパスを追加します

デフォルトのパスの順序は C/C++ 用に調整されており、他の言語には最適ではない可能性があることに注意してください。

于 2015-12-20T16:37:20.650 に答える
0

clang を使用している場合、 -debug-pass=Arguments オプションを使用して、各最適化レベルで実行されているパスを確認します。

于 2013-02-12T11:48:56.240 に答える