Øyvind Harboe
2008-Jun-19 21:30 UTC
[LLVMdev] Backend for the ZPU - a stack based / zero operand CPU
Hi all, Zylin has implemented the world smallest 32 bit CPU with a GCC backend. (I shall stand corrected if anyone claims & proves otherwise :-) Implementing a GCC backend for a zero operand/stack based architecture proved pretty tricky, but I'm quite pleased with the resulting code. I did make alterations to the architecture to make it fit GCC without sacrificing CPU size. I have been following llvm.org from a distance, since I finished the GCC backend a couple of years back and there has not really been a reason to build a new compiler for the ZPU. My llvm.org knowledge is ... shallow ... but I'm hoping that someone would find the time & pity to answer my questions: Q: Is a stack based / zero operand CPU and llvm a good match? (GCC wasn't) Q: Should I expect better code density / performance from llvm than GCC for said architecture? Q: Can llvm help move global data into flash(i.e. determine that global C variables are in fact constants)? The ZPU would probably be most effective in highly space constrained applications(kBytes of code/data), such that it would fit entirely onto an FPGA/CPLD. It has very high code density (~80% of ARM Thumb) Overview of architecture(documentation is definitely the weak side of the ZPU): http://www.zylin.com/zpu_arch.html The ZPU is now hosted at: http://www.opencores.org/projects.cgi/web/zpu/overview -- Øyvind Harboe http://www.zylin.com/zy1000.html ARM7 ARM9 XScale Cortex JTAG debugger and flash programmer
Chris Lattner
2008-Jun-20 04:57 UTC
[LLVMdev] Backend for the ZPU - a stack based / zero operand CPU
On Jun 19, 2008, at 2:30 PM, Øyvind Harboe wrote:> My llvm.org knowledge is ... shallow ... but I'm hoping that > someone would find the time & pity to answer my questions: > > Q: Is a stack based / zero operand CPU and llvm a good match? (GCC > wasn't)I'm not really sure, I'm not too familiar with these architectures. One advantage of llvm is that it is relatively easy to do custom code generation phases. For example, you probably don't want to run the register allocator at all.> Q: Should I expect better code density / performance from llvm than > GCC for > said architecture?Hard to say. In general, LLVM has better high level optimizations than GCC, so if that is a factor, yes.> Q: Can llvm help move global data into flash(i.e. determine that > global C > variables are in fact constants)?LLVM does aggressively mark globals as const when there are no stores to them. -Chris
Owen Anderson
2008-Jun-20 20:01 UTC
[LLVMdev] Backend for the ZPU - a stack based / zero operand CPU
You might try looking at the recent work on PIC16. If you look through the list archives, one of the developers wrote about his experiences using LLVM for such a constrained architecture. To summarize: while LLVM didn't offhand support the oddities of his architecture, it was easier to modifying to work with them than other compilers he had worked with. --Owen On Jun 19, 2008, at 2:30 PM, Øyvind Harboe wrote:> Hi all, > > Zylin has implemented the world smallest 32 bit CPU with > a GCC backend. (I shall stand corrected if anyone claims > & proves otherwise :-) > > Implementing a GCC backend for a zero operand/stack based > architecture proved pretty tricky, but I'm quite pleased with > the resulting code. I did make alterations to the architecture > to make it fit GCC without sacrificing CPU size. > > I have been following llvm.org from a distance, since I finished > the GCC backend a couple of years back and there has not > really been a reason to build a new compiler for the ZPU. > > My llvm.org knowledge is ... shallow ... but I'm hoping that > someone would find the time & pity to answer my questions: > > Q: Is a stack based / zero operand CPU and llvm a good match? (GCC > wasn't) > > Q: Should I expect better code density / performance from llvm than > GCC for > said architecture? > > Q: Can llvm help move global data into flash(i.e. determine that > global C > variables are in fact constants)? > > > The ZPU would probably be most effective in highly space constrained > applications(kBytes of code/data), such that it would fit entirely > onto > an FPGA/CPLD. It has very high code density (~80% of ARM Thumb) > > Overview of architecture(documentation is definitely the weak side of > the ZPU): > > http://www.zylin.com/zpu_arch.html > > The ZPU is now hosted at: > > http://www.opencores.org/projects.cgi/web/zpu/overview > > -- > Øyvind Harboe > http://www.zylin.com/zy1000.html > ARM7 ARM9 XScale Cortex > JTAG debugger and flash programmer > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev