[LLVMdev] Reproducing output of llvm-gcc using opt tool

Chris Lattner sabre at nondot.org
Fri Dec 7 20:33:00 PST 2007

On Dec 7, 2007, at 1:43 AM, Wojciech Matyjewicz wrote:
> Recently, I was looking into the bug #1227. I wanted to check if
> reordering optimization passes could solve it. To start with, I  
> tried to
> reproduce the output of llvm-g++ -O3 using the combination of llvm-g++
> -O0 and opt with the appropriate passes. However, I was unable to. I  
> use
> SVN versions of llvm and llvm-gcc-4.2.
> First, I compile example.cpp (attached; taken from the bug #1227)  
> with:
> $ llvm-g++ -c -emit-llvm -O3 -fdebug-pass-arguments example.cpp -o
> example1.bc

This looks about right, you can also try opt -debug-pass=Arguments - 
std-compile-opts foo.bc -o foo.out.bc

> Next, I run:
> $ llvm-g++ -c -emit-llvm -O0 example.cpp -o - | opt /switches copied
> from the above command debug output/ > example2.bc
> The minor issue is that opt doesn't know -strip-dead-prototypes  
> pass. Is
> it possible that this pass isn't linked into the opt tool because
> opt.cpp doesn't reference any symbol defined in  
> StripDeadPrototypes.cpp.

Yep, that pass is an internal llvm-gcc pass.

> After skipping -strip-dead-prototypes pass bitcode is produced.  
> However,
> the function assign() in example2.bc is much less optimized than in
> example1.bc. Is this the expected behavior? If it is, then, what is  
> the
> correct way to reproduce llvm-gcc -O3 output with the opt tool?

It's a bit complicated, because llvm-gcc runs a couple of local passes  
as it parses and builds the llvm code, then it runs the passes above  
on the whole module afterwards.  I don't know if there is a good way  
to get the prepasses, Devang, do you know?


More information about the llvm-dev mailing list