Compile C files to one .bc file

Hi

I’m trying to compile the “bh” C program from the Olden benchmark to one bc file.

compile source files into an LLVM bitcode file

llvm-gcc -emit-llvm -c args.c -o args.bc -w -DTORONTO
llvm-gcc -emit-llvm -c newbh.c -o newbh.bc -w -DTORONTO
llvm-gcc -emit-llvm -c util.c -o util.bc -w -DTORONTO
llvm-gcc -emit-llvm -c walksub.c -o walksub.bc -w -DTORONTO

To link files together using llvm-ld

llvm-ld -o bh.bc newbh.bc args.bc util.bc walksub.bc -lm

But when I try to run my pass over bh.bc file or just compile it to native code
llc bh.bc -o bh.s

I get the following error.
llc: bh.bc:1:1: error: expected top-level entity

Do you need to do some special stuff when you want to compile a C program with different files to one bc file.

Thx,
Vincent

Hi

I'm trying to compile the "bh" C program from the Olden benchmark to one
bc file.

# compile source files into an LLVM bitcode file
llvm-gcc -emit-llvm -c args.c -o args.bc -w -DTORONTO
llvm-gcc -emit-llvm -c newbh.c -o newbh.bc -w -DTORONTO
llvm-gcc -emit-llvm -c util.c -o util.bc -w -DTORONTO
llvm-gcc -emit-llvm -c walksub.c -o walksub.bc -w -DTORONTO

# To link files together using llvm-ld
llvm-ld -o bh.bc newbh.bc args.bc util.bc walksub.bc -lm

Check what is in bh.bc. If I remember correctly llvm-ld used to create a shell script that would run lli on the actual IL file.

But when I try to run my pass over bh.bc file or just compile it to
native code
llc bh.bc -o bh.s

I get the following error.
llc: bh.bc:1:1:*error: expected top-level entity*

Do you need to do some special stuff when you want to compile a C
program with different files to one bc file.

For large programs you will probably a system linker that supports llvm (the apple one) or plugin (gold and very recent versions of gnu ld).

For small programs using llvm-link or llvm-ld should be ok.

Thx,
Vincent

Cheers,
Rafael

Sorry, forgot to CC the list.

Hi

I’m trying to compile the “bh” C program from the Olden benchmark to one bc file.

compile source files into an LLVM bitcode file

llvm-gcc -emit-llvm -c args.c -o args.bc -w -DTORONTO
llvm-gcc -emit-llvm -c newbh.c -o newbh.bc -w -DTORONTO
llvm-gcc -emit-llvm -c util.c -o util.bc -w -DTORONTO
llvm-gcc -emit-llvm -c walksub.c -o walksub.bc -w -DTORONTO

To link files together using llvm-ld

llvm-ld -o bh.bc newbh.bc args.bc util.bc walksub.bc -lm

llvm-link would be better suited for this purpose. It takes in several byte-code files and combines them into a single byte-code file. Also, you do not need the -lm flag until you generate the final executable.