JIT bug?

Hi,

I see sth that to me looks like a JIT bug. The program is the KMeans benchmark
from the STAMP benchmark suite (http://stamp.stanford.edu).
Overwrite ./common/Defines.common.mk with the attached files to make CC/LD
customizable.

in ./kmeans, for
./kmeans -m40 -n40 -t0.00001 -i inputs/random-n65536-d32-c16.txt -p 1 :

make -f Makefile.seq clean

CC='llvm-gcc' LD='llvm-gcc -lm' make -f Makefile.seq
-->works, but is slower than gcc (35s vs 16s on my Intel 32b system)

CC='llvm-gcc -emit-llvm' LD='llvm-ld -lm' make -f Makefile.seq
--> does not work (lot's of NaN's in the output, and much faster (11s))

CC='llvm-gcc -emit-llvm' LD='llvm-ld -lm -disable-opt' make -f Makefile.seq
--> does not work either

CC='llvm-gcc -emit-llvm' LD='llvm-ld -lm -disable-opt -native' make -f -->
looks as if it would work (and is faster, 16s)

CC='llvm-gcc -emit-llvm' LD='llvm-ld -lm -native' make -f Makefile.seq
--> looks as if it would work (and is faster, 16s)

CC='llvm-gcc -emit-llvm' LD='llvm-ld -link-as-library' make -f Makefile.seq
llc -f -o kmeans.s kmeans
gcc -o kmeans kmeans.s -lm -lpthread
--> looks as if it would work (and is faster, 16s)

Any suggestions? Is this a known limitation? Is there more information
necessary (eg, for a bug report)?

thanks,
Torvald

Defines.common.mk (653 Bytes)

Are you really running the JIT? IT seems like you are just using the static compiler.

Unless the code is using some idiom that we happen to miss badly, it's uncommon to see this kind of performance issue. What's the optimization level you are building the benchmark at? Anyway, please file a bug about the performance issues. If the source code is freely available, someone can download it and try it out.

Thanks,

Evan

If the source code is freely available, someone can download it
and try it out.

The web site says the code is BSD, it's freely downloadable.

Are you really running the JIT? IT seems like you are just using the
static compiler.

When using llvm-ld without -native, yes, I'm pretty sure. Besides the lower
performance in only the first case, cases 2 and 3 also produce incorrect
output. When the program is llvm-ld'ed with -native or if llc is uses, it
seems to work fine.

I will check optz levels for the first case again, and file bug(s).

torvald