[llvm-dev] How to produce the same result of clang++ -Oz through opt -Oz

Jiayu Zhao via llvm-dev llvm-dev at lists.llvm.org
Fri Mar 19 18:37:47 PDT 2021


Dear developers,

I am trying to use 'opt' command with different Optlevels -O3 and -Oz to an IR file to reproduce the results of directly applying clang++ -O3 and -Oz to a source c++ file.

1. Firstly I use the following commands to produce the result of opt -O3:
clang++ -O3 -Xclang -disable-llvm-optzns -emit-llvm -c raytracer.cpp -o raytracer.bc
opt -O3 raytracer.bc -o tmp.bc
llc -O3 tmp.bc -o tmp.s
clang++ tmp.s -o tmp.out

2. Then I use clang -O3 directly:
clang++ -O3 raytracer.cpp -o raytracer.out

3. Finally I compare the two files tmp.o and raytracer.o:
diff tmp.out raytracer.out

We can find the two files are exactly the same.

However, things are different in -Oz level

1. I use the following commands to produce the result of opt -Oz:
clang++ -Oz -Xclang -disable-llvm-optzns -emit-llvm -c raytracer.cpp -o raytracer.bc
opt -Oz raytracer.bc -o tmp.bc
llc -filetype=obj tmp.bc -o tmp.o (there is no -Oz option for llc)

2. Then I use clang -Oz directly:
clang++ -Oz -c raytracer.cpp -o raytracer.o

3. Finally I compare the two files tmp.o and raytracer.o:
diff tmp.o raytracer.o

It shows 'Binary files tmp.o and raytracer.o differ'

why 'opt -Oz' cannot produce the same result as 'clang++ -Oz' and how to solve it ? I use LLVM 10.0.1 and CentOS 7.6.

I'd very much appreciate if you could help me with this. Thank you.

Kind Regards,
Jiayu Zhao

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210320/d77004eb/attachment.html>


More information about the llvm-dev mailing list