[LLVMdev] llvmc for PIC16

Mikhail Glushenkov foldr at codedgers.com
Sun Jun 7 00:19:40 PDT 2009


Hi Sanjiv,

Sanjiv Gupta <sanjiv.gupta <at> microchip.com> writes:

> The salient features that we want to have in the driver are:
> [...]

As promised, I've implemented a basic compiler driver for the
PIC16 toolchain. It's under tools/llvmc/examples/mcc16.

Some examples illustrating the features you requested:  

> 2. If the user has specified to generate the final executable, then 
> llvm-ld should run on all the .bc files generated by clang and create a 
> single optimized .bc file for further tools.

$ mcc16 -dry-run foo.c bar.c
clang-cc foo.c -o /tmp/llvm_6ibgr9/foo.bc 
clang-cc bar.c -o /tmp/llvm_6ibgr9/bar.bc 
llvm-ld /tmp/llvm_6ibgr9/foo.bc /tmp/llvm_6ibgr9/bar.bc \
    -o /tmp/llvm_6ibgr9/tmp.bc 
llc -f /tmp/llvm_6ibgr9/tmp.bc -o /tmp/llvm_6ibgr9/tmp.s 
native-as /tmp/llvm_6ibgr9/tmp.s -o /tmp/llvm_6ibgr9/tmp.o 
native-ld /tmp/llvm_6ibgr9/tmp.o -o a.out 

> 3. -Wo <options> - pass optimizations to the llvm-ld
> 4. mcc16 -Wl <options> - pass options to native linker.
> 5. mcc16 -Wa <options> - pass options to native assembler.

$ mcc16 -dry-run -Wo,-opt1 -Wllc,-opt2 -Wa,-opt3 -Wl,-opt4 foo.c
clang-cc foo.c -o /tmp/llvm_92HLCj/foo.bc 
llvm-ld -opt1 /tmp/llvm_92HLCj/foo.bc -o /tmp/llvm_92HLCj/tmp.bc 
llc -opt2 -f /tmp/llvm_92HLCj/tmp.bc -o /tmp/llvm_92HLCj/tmp.s 
native-as -opt3 /tmp/llvm_92HLCj/tmp.s -o /tmp/llvm_92HLCj/tmp.o 
native-ld -opt4 /tmp/llvm_92HLCj/tmp.o -o a.out 
 
> $ mcc16 -S foo.c

$ mcc16 -dry-run -S foo.c
clang-cc foo.c -o /tmp/llvm_0uiDCR/foo.bc 
llvm-ld /tmp/llvm_0uiDCR/foo.bc -o /tmp/llvm_0uiDCR/foo.bc 
llc -f /tmp/llvm_0uiDCR/foo.bc -o foo.s 

> $ mcc16 -S foo.c bar.c

$ mcc16 -dry-run -S foo.c bar.c
clang-cc foo.c -o /tmp/llvm_1zAqik/foo.bc 
llvm-ld /tmp/llvm_1zAqik/foo.bc -o /tmp/llvm_1zAqik/foo.bc 
llc -f /tmp/llvm_1zAqik/foo.bc -o foo.s 
clang-cc bar.c -o /tmp/llvm_1zAqik/bar.bc 
llvm-ld /tmp/llvm_1zAqik/bar.bc -o /tmp/llvm_1zAqik/bar.bc 
llc -f /tmp/llvm_1zAqik/bar.bc -o bar.s 

> ** Use of -g causes llvm-ld to run with -disable-opt
> $ mcc16 -S -g foo.c

$ mcc16 -dry-run -S -g foo.c   
clang-cc foo.c -o /tmp/llvm_oQFmVn/foo.bc 
llvm-ld -disable-opt /tmp/llvm_oQFmVn/foo.bc -o /tmp/llvm_oQFmVn/foo.bc 
llc -f /tmp/llvm_oQFmVn/foo.bc -o foo.s 

> ** -I is passed to clang-cc, -pre-RA-sched=list-burr to llc.
> $ mcc16 -S -g -I ../include -pre-RA-sched=list-burr foo.c

$ mcc16 -dry-run -S -g -I ../include -pre-RA-sched=list-burr foo.c
clang-cc -I ../include foo.c -o /tmp/llvm_5VxNFQ/foo.bc 
llvm-ld -disable-opt /tmp/llvm_5VxNFQ/foo.bc -o /tmp/llvm_5VxNFQ/foo.bc 
llc -pre-RA-sched list-burr -f /tmp/llvm_5VxNFQ/foo.bc -o foo.s 

This should be enough to get you started. 

I'm always happy to answer any further questions you may have. If
you want to e-mail me privately, please use the.dead.shall.rise
<at_sign> gmail dot com for now (our provider problems weren't
resolved yet).




More information about the llvm-dev mailing list