[LLVMdev] Re: Patches and some potential bugs
sabre at nondot.org
Mon May 1 21:35:15 PDT 2006
On Sat, 29 Apr 2006, Domagoj Babic wrote:
> These should add xIDs for several passes. Please let me know if there're
> any problems with the code. I'm a very novice C++ and LLVM programmer,
> so please bear with me.
The patches look great, applied:
> I ran into something suspicious:
> carrot:~/tmp> llvm-dis test5.c -o test5.ll
> llvm-dis: Invalid bytecode signature: 636E6923 (Vers=0, Pos=4)
llvm-dis does not disassemble .c files, it disassembles .bc files.
"llvm-gcc" is what turns .c files into LLVM code.
> carrot:~/tmp> which llvm-dis
> carrot:~/tmp> which llvm-gcc
> carrot:~/tmp> llvm-dis --version
> Low Level Virtual Machine (llvm) 1.7 (see http://llvm.org/) DEBUG BUILD
> carrot:~/tmp> llvm-gcc --version
> llvm-gcc (GCC) 4.0.1 LLVM (Apple Computer, Inc. build 5400)
> Copyright (C) 2005 Free Software Foundation, Inc.
> This is free software; see the source for copying conditions. There is
> It seems that debug build of llvm-dis incorrectly complains about the
> bytecode signature (regular build disassembles it fine).
I don't think the regular build does. Did you forget a 'b'?
> Second, -W[al],-disable-opt don't work with the new frontend for some
> carrot:~/tmp/hsat> llvm-gcc -lm -Wl,-disable-opt hsat.c -o
> /usr/bin/ld: bad -rpath option
> collect2: ld returned 1 exit status
> carrot:~/tmp/hsat> llvm-gcc -lm -Wa,-disable-opt hsat.c -o
> as: unrecognized option `-disable-opt'
Right. The old front-end uses a hack to run the LLVM optimizers, where it
replaces the 'as' and 'ld' tools with the LLVM "gccas" and "gccld" tools.
Because of this, there was no clean way to pass -O options down to these
tools and we end up with really horrible and ugly options like
The new front-end is a step in a much better direction. :) The
$ llvm-gcc3 -Wa,-disable-opt hsat.c -o hsat.bc -c
$ llvm-gcc4 -O0 hsat.c -o hsat.bc -c -emit-llvm
To turn on (some) optimizations, you can pass -O to llvmgcc4.
Beware that I haven't gotten around to installing the full optimization
pipeline in llvm-gcc4 though, so to get the equivalent of:
$ llvm-gcc3 hsat.c -o hsat.bc -c
I suggest using:
$ llvm-gcc4 -O3 hsat.c -o - -S -emit-llvm | gccas > hsat.bc
This will run exactly the same set of optimizations as the llvm-gcc3 does
(literally, by using the same tool :).
Note that llvmgcc4 does not currently have any wrapper to run the
link-time optimizer (gccld) yet. As such, you'll have to run it manually
if you are interested.
At some point in the future, when I (or someone else) gets around to
plumbing up the optimization options better, it is likely that -emit-llvm
will continue to work as it does now (it outputs LLVM code at any
optimization level), but that the common way of using llvm-gcc4 in IPO
mode will be to pass -O4. Thus, if you compile and link your program with
"llvm-gcc -O4 ..." you will get transparent IPO support.
I have many other projects to tackle, before this is a priority, but I'll
file a bugzilla bug to track this if someone is interested in helping out.
More information about the llvm-dev