[LLVMdev] llvmc for PIC16

Sanjiv.Gupta at microchip.com
Sun, 07 Jun 2009 18:13:51 -0000

Thanks a lot.
This is a great help.

- Sanjiv


-----Original Message-----
From: llvmdev-bounces at cs.uiuc.edu on behalf of Mikhail Glushenkov
Sent: Sun 6/7/2009 12:49 PM
To: llvmdev at cs.uiuc.edu
Subject: Re: [LLVMdev] llvmc for PIC16

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).

_______________________________________________
LLVM Developers mailing list
LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20090607/c0dac46e/attachment.html>