The target in this case is 8-bit, accumulator based, however it is Von Neumann; so - good to know it's not *quite* the "Trifecta of Doom".  LLVM offers some very attractive features for our usage, and it would be disappointing to abandon it as an option all together.  Faced with the alternative being to write the compiler from scratch, is the consensus that doing so will be a better path forward for us than a new LLVM backend?<br>
<div class="gmail_quote"><br>Matt<br><br>On Wed, Sep 21, 2011 at 6:05 PM, Jim Grosbach <span dir="ltr"><<a href="mailto:grosbach@apple.com">grosbach@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im"><br>
On Sep 21, 2011, at 2:53 PM, Dan Gohman wrote:<br>
<br>
> On Sep 20, 2011, at 10:59 PM, Matthew Hilt wrote:<br>
><br>
>> I've been looking closely at LLVM as a means to developing a new toolchain for an MCU core of very similar architecture.  To that end, the once included PIC16 backend might be a valuable reference.  I found a message in April of this year that indicated it had been dropped from new releases however, and that were it to be resumed "it will be largely a rewrite".<br>

>><br>
>> I'm wondering if I can get some details as to why it was dropped firstly and also, why would it be 'largely a rewrite' if it were resumed?  Thanks in advance.<br>
><br>
> LLVM is designed for "normal" architectures. The further from<br>
> approximately the intersection of x86 and ARM, the more it takes to<br>
> use LLVM effectively. PIC16, we learned, is well out there, from<br>
> LLVM's perspective.<br>
<br>
</div>An eight-bit, accumulator based, Harvard ISA is the Trifecta of Doom as far as LLVM is concerned, basically.<br>
<div class="im"><br>
> As one example, LLVM is built to optimize for machines with numerous<br>
> general-purpose registers. It's a stretch to even say that PIC16 has<br>
> a single general-purpose register. The PIC16 backend developers<br>
> asked for ways to prevent LLVM from promoting variables from memory<br>
> into registers, because it was pessimizing code for PIC16. However,<br>
> LLVM can't do that without also shutting down large parts of itself,<br>
> because of the pervasive assumption that registers are where the<br>
> action is.<br>
<br>
<br>
</div>To be fair, I don't think that was a good approach to that problem. Neither here nor there at this point, though.<br>
<font color="#888888"><br>
-Jim<br>
</font></blockquote></div><br>