[llvm-dev] Some questions about phase ordering in OPT and LLC
Ricardo Nobre via llvm-dev
llvm-dev at lists.llvm.org
Mon May 9 10:43:30 PDT 2016
I'm a PhD student doing phase ordering as part of my PhD topic and I
would like to ask some questions about LLVM.
Executing the following command to see what passes does OPT execute when
targeting a SPARC V8 processor:
/dev/null | /opt/clang+llvm-3.7.1-x86_64-linux-gnu-ubuntu-15.10/bin/opt
-O3 -march=sparc -mcpu=v8 -disable-output -debug-pass=Arguments
I get the following 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 -argpromotion -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
Why are there two "Pass Arguments"?
What does it mean?
What passes should I pass the 'opt' tool (the LLVM Optimizer) so that it
is equivalent to the use of -O3 with 'opt'?
The ones of the first "Pass Arguments", or the second?
I'm testing different phase orders, and one of the exploration schemes I
want to try is to start with the equivalent of -O3 and iteratively apply
small changes (e.g. swap passes in the compiler pass sequence equivalent
to -O3), and compile and test with those different sequences.
Additionally, I'm a bit confused about what passes does 'llc' (the LLVM
static compiler) apply by default, when passing to it a LLVM IR
previously optimized using the 'opt' tool.
'llc --help' says that the default is -O2:
"Optimization level. [-O0, -O1, -O2, or -O3] (default = '-O2')"
But is this -O2 the same as the -O2 from the 'opt' tool?
Does it mean that if I generate an optimized LLVM IR with 'opt' (with
-O2) and pass it to 'llc', it will by default apply all passes in -O2 a
Or do 'opt -O2' and 'llc -O2' represent different passes?
Thanks in advance,
More information about the llvm-dev