[llvm-dev] Replicate Individual O3 optimizations
David Greene via llvm-dev
llvm-dev at lists.llvm.org
Thu Oct 17 11:21:40 PDT 2019
hameeza ahmed via llvm-dev <llvm-dev at lists.llvm.org> writes:
> I want to study the individual O3 optimizations. For this I am using
> following commands, but unable to replicate O3 behavior.
> 1. Documents/clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/clang -O1
> -Xclang -disable-llvm-passes -emit-llvm -S vecsum.c -o vecsum-noopt.ll
> 2. Documents/clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/clang -O3
> -mllvm -debug-pass=Arguments -emit-llvm -S vecsum.c
> 3. Documents/clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/opt
> <optimization sequence obtained in step 2> -S vecsum-noopt.ll -S -o
> Why the IR obtained by above step i.e individual O3 sequences, is not same
> when O3 is passed?
> Where I am doing mistake?
I think you need to turn off LLVM optimizations when doing the
-emit-llvm dump. Something like this:
Documents/clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/clang -O3 \
-mllvm -debug-pass=Arguments -Xclang -disable-llvm-optzns -emit-llvm \
Otherwise you are effectively running the O3 pipeline twice, as clang
will emit LLVM IR after optimization, not before (this confused me too
when I first tried it).
That said, I'm not sure you will get the same IR out of opt as with
clang -O3 even with the above. For example, clang sets
TargetTransformInfo for the pass pipeline and the detailed information
it uses may or may not be transmitted via the IR it dumps out. I have
not personally tried to do this kind of thing in a while.
More information about the llvm-dev