<div class="gmail_quote">On Sat, Jul 21, 2012 at 8:08 PM, Chris Lattner <span dir="ltr"><<a href="mailto:clattner@apple.com" target="_blank">clattner@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">On Jul 20, 2012, at 8:51 AM, Tom Stellard wrote:<br>
> The goals of the staging area will be:<br>
>  1. Facilitate communication between the LLVM project and backend<br>
>     developers<br>
>  2. Ensure that new backends meet LLVM standards<br>
>  3. Give the backend more exposure to users and prospective developers<br>
<br>
</div>FWIW, I really like this idea or concept, but we have to be careful for it to be done right. This is also more general than just backends: experimental optimizers and runtime libraries can also benefit from something like this.<br>

<div class="im"><br>
> ++ Staging Area:<br>
><br>
> Similar to the Linux kernel, the staging area for new backends will<br>
> be in the main LLVM tree, with building of the backend being disabled<br>
> by default.<br>
<br>
</div>Makes sense.  Them being in the main tree isn't a problem as long as they aren't built by default, tested in buildbots, etc.<br></blockquote><div><br>So will new back-ends be allowed to begin development in the "staging area?"  Let's say I want to develop a new back-end.  Would I be able to start writing it in the LLVM main tree, or does it need to progress to a certain point in an external repository first?<br>
 </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
> 1. It will be easier for LLVM developers to become familiar with the<br>
>   new backend and identify areas for improvement.<br>
><br>
>  If the new backend is in the main tree, LLVM developers are more<br>
>  likely to encounter it in their day to day development.  Imagine a<br>
>  scenario where a developer makes a change to LLVM core that impacts<br>
>  several backends.  The developer may grep the code looking for<br>
>  backends that make use of the feature that they have added or<br>
>  changed.<br>
<br>
</div>This makes sense, but it should not be a *requirement* that API changes don't break experimental backends.  This would be the responsibility of the contributors/owner of that backend and/or steward to make sure it keeps building.  Of course it's great for someone to update all the experimental backends if they want, but it shouldn't be a requirement.<br>

<div class="im"><br>
>  If the backend were staged in a separate tree, this kind of<br>
>  simple review would not be possible, and I would be concerned that<br>
>  developers would be too busy to ever get around to checking out<br>
>  the staging tree.<br>
<br>
</div>Yep.<br>
<div class="im"><br>
> 2. It will allow the backend developers to always develop against TOT.<br>
><br>
>  Developing against TOT is the recommended development procedure for<br>
>  anyone working on LLVM, and this is regularly reiterated on the<br>
>  mailing list.  If the new backend is included in the main tree,<br>
>  the backend developers will have no choice but to work against TOT.<br>
<br>
</div>+1!!!<br>
<div class="im"><br>
> 3. It will make it easier for end users and distributions to test and<br>
>   also make it easier for new contributors.<br>
><br>
>  New backends will be more visible to the public if they are in the<br>
>  main tree.  This will mean more users, an expanded testing base, and<br>
>  more potential developers which will lead to a higher quality backend.<br>
<br>
</div>I'd also add:<br>
<br>
4. Infrastructure enhancements that are only required for an experimental backend can be implemented in the main tree, even if that infrastructure isn't needed by other targets.  Of course, these changes need to meet the standard quality bar for general code in the compiler.<br>

<br>
In the past, we've had some general infrastructure features get denied because they didn't relate to any targets in-tree.<br></blockquote><div><br>This is definitely a great point.  Part of the problem we had with the NVPTX back-end was that we needed some LLVM core changes, but only the NVPTX back-end would use these changes.  It was a chicken-and-egg problem; this would solve that problem.<br>
 </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
> ++ What is needed from the LLVM developers:<br>
><br>
>  In order to make this staging program successful, the LLVM project<br>
>  will need to appoint a "code owner" for the staging process, who<br>
>  backend developers can contact when they are interested in getting<br>
>  the backend included in the main tree.  An LLVM developer will also<br>
>  be needed to act as a steward for the new backend and help guide<br>
>  the backend developers through the process.<br>
<br>
</div>I think we also need to define the minimum quality bar for a backend to be included.<br></blockquote><div><br>This could be the trickiest part overall. In this sense, X86 and ARM are easy because reference assemblers/hardware/simulators are so easily available.  These back-ends can also be verified through the LLVM test suite.  My understanding of Tom's R600 back-end is that it only works in conjunction with Mesa/Gallium, so verification on real hardware cannot easily be done (please correct me if I am wrong here).<br>
<br>On one hand, we could establish a minimum set of LLVM IR or SDAG that must be handled by the back-end and verified through unit test cases.  Having 100% LLVM IR/SDAG coverage is not reasonable simply because some concepts (e.g. exception handling, all intrinsics, etc.) are not present in the target hardware, VM, etc..<br>
<br>My feeling is that this should remain somewhat generic and be established on a back-end by back-end basis, based on the target hardware and what can feasibly be supported.<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<br>
Also, if we do this, can we demote CellSPU? :)<br>
<span class="HOEnZb"><font color="#888888"><br>
-Chris<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><br><div>Thanks,</div><div><br></div><div>Justin Holewinski</div><br>