<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Thank you Madhur! My intentions are to help the community, publishing the knowledge about this process that I have learned during my project.<br><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Actually, I'm keeping this document on GitHub (<a href="https://github.com/nael8r/How-To-Write-An-LLVM-Register-Allocator">https://github.com/nael8r/How-To-Write-An-LLVM-Register-Allocator</a>). If at some point this document gets merged in the LLVM documentation, I think I'll remove it from the repository.<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2016-02-10 3:26 GMT-02:00 Madhur Amilkanthwar <span dir="ltr"><<a href="mailto:madhur13490@gmail.com" target="_blank">madhur13490@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">+1 for such efforts!<div> It is of utter importance to have such things documented to avoid reinventing the wheel every time someone wants to work with LLVM.</div><div>I don't know if LLVM community archives such docs, but if not these should be kept somewhere safe.</div></div><div class="gmail_extra"><div><div class="h5"><br><div class="gmail_quote">On Wed, Feb 10, 2016 at 10:28 AM, Hal Finkel via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">----- Original Message -----<br>
<br>
> From: "Sean Silva via llvm-commits" <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>><br>
> To: "Matthias Braun" <<a href="mailto:matze@braunis.de" target="_blank">matze@braunis.de</a>><br>
> Cc: "Natanael Ramos" <<a href="mailto:naelr8@gmail.com" target="_blank">naelr8@gmail.com</a>>, "llvm-commits"<br>
> <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>><br>
> Sent: Tuesday, February 9, 2016 10:40:56 PM<br>
> Subject: Re: Tutorial: How To Write An LLVM Register Allocator<br>
<div><div><br>
> On Tue, Feb 9, 2016 at 6:56 PM, Matthias Braun < <a href="mailto:matze@braunis.de" target="_blank">matze@braunis.de</a> ><br>
> wrote:<br>
<br>
> > Interesting,<br>
><br>
<br>
> > I don't think the document is in a shape for documentation that<br>
> > ships<br>
> > with llvm. Just some points:<br>
><br>
<br>
> > - The document keeps jumping between general register allocation<br>
> > concepts, general llvm concepts and code snippets of llvms register<br>
> > allocators. It's hard to follow which is which.<br>
><br>
> I agree.<br>
<br>
> > - The basic concepts would need better and more in-depth<br>
> > descriptions, just to give some topics:<br>
><br>
> > - How does the basic program representation work, MachineInstr,<br>
> > MachineOperand (esp. the register kind with the undef, dead and<br>
> > kill<br>
> > flags), subregisters, subregisterindexes, register classes, how we<br>
> > express most constraints with register classes, virtual registers<br>
> > how register are encoded in unsigneds, a proper description of<br>
> > register units, what't does it mean if a register is reserved or<br>
> > allocatable, pristine registers, lanemasks, ...<br>
><br>
> Yeah, there needs to be some acknowledgement of the MI<br>
> representation.<br>
<br>
> > - How does the liveness representation work: What is a Segment, a<br>
> > VNInfo, a SlotIndex, how can we maintain SSA form in the liveness<br>
> > info (and why do we do that)<br>
><br>
> > - How do all the regalloc related passes in llvm play together:<br>
> > PhiElimination, TwoAddress, RegisterCoalescer, RegAllocXXX,<br>
> > VirtRegRewriter<br>
><br>
> Do you think all this needs to be covered in a HowTo? That seems like<br>
> an awful lot.<br>
<br>
</div></div>I agree. This one document is not going to solve our systemic problem of lack of documentation for the backend infrastructure. Nor should we make solving that problem a prerequisite for accepting this contribution.<br>
<br>
 -Hal<br>
<div><div><br>
> Which do you think are the essential content for a<br>
> HowTo? The goal isn't becoming an expert, but just wiring up the<br>
> boilerplate and getting an end-to-end experience writing something<br>
> simple (here's an example of another howto for reference:<br>
> <a href="http://llvm.org/docs/HowToSetUpLLVMStyleRTTI.html" rel="noreferrer" target="_blank">http://llvm.org/docs/HowToSetUpLLVMStyleRTTI.html</a> ).<br>
<br>
> We might be able to punt on a lot of the MI stuff for this document<br>
> (just state it as a prerequisite) and eventually link to a "How to<br>
> write a MachineFunctionPass" or something which can explain the MI<br>
> basics.<br>
<br>
> -- Sean Silva<br>
<br>
> > On the other hand I applaud going through the work and actually<br>
> > writing something down, this will surely help other people who just<br>
> > want to get started with the matter. Maybe there is a way to get<br>
> > this up onto the llvm blog (who maintains that)?<br>
><br>
<br>
> > - Matthias<br>
><br>
<br>
> > > On Feb 9, 2016, at 6:18 PM, Sean Silva via llvm-commits <<br>
> > > <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a> > wrote:<br>
> ><br>
><br>
<br>
> > > Matthias, it's rare that we get a substantial piece of<br>
> > > documentation<br>
> > > like this. Can you take a look at the content?<br>
> ><br>
><br>
<br>
> > > On Fri, Feb 5, 2016 at 3:50 PM, Natanael Ramos via llvm-commits <<br>
> > > <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a> > wrote:<br>
> ><br>
><br>
<br>
> > > > Hello<br>
> > ><br>
> ><br>
><br>
<br>
> > > > My name is Natanael Ramos, I'm a student of bachelor degree on<br>
> > > > Computer Science Course, here on Brazil.<br>
> > ><br>
> ><br>
><br>
<br>
> > > > Recently I have worked with LLVM for my undergraduate thesis (I<br>
> > > > don't<br>
> > > > really know how is called in other countries, here is called<br>
</div></div>> > > > Completion of course work ), in my work I have implemented an<br>
<span>> > > > register allocator using LLVM and have tested him with the<br>
> > > > built-in<br>
> > > > allocators in LLVM (Probably I'll publish a paper soon, if all<br>
> > > > goes<br>
> > > > as expected).<br>
> > ><br>
> ><br>
><br>
<br>
> > > > As another product of my work, I have created a tutorial of how<br>
> > > > to<br>
> > > > write an LLVM register allocator, extending the RegAllocBase<br>
> > > > interface, this tutorial is based on my understanding of the<br>
> > > > LLVM<br>
> > > > framework for working with the register allocation pass.<br>
> > ><br>
> ><br>
><br>
<br>
> > > > The tutorial have been written in reStructuredText following<br>
> > > > the<br>
> > > > LLVM<br>
> > > > instructions and orientations (<br>
</span>> > > > <a href="http://www.llvm.org/docs/SphinxQuickstartTemplate.html" rel="noreferrer" target="_blank">http://www.llvm.org/docs/SphinxQuickstartTemplate.html</a> ). As<br>
<span>> > > > it's<br>
> > > > suggested, I'm sending the tutorial to this mailing list in<br>
> > > > order<br>
> > > > to<br>
> > > > contribute to the community of developers, which use LLLVM.<br>
> > ><br>
> ><br>
><br>
<br>
> > > > Any suggestions, please let me know.<br>
> > ><br>
> ><br>
><br>
<br>
> > > > --<br>
> > ><br>
> ><br>
><br>
<br>
> > > > Natanael Ramos<br>
> > ><br>
> ><br>
><br>
> > > > Membro do corpo discente de Ciência da Computação pelo<br>
> > > > Instituto<br>
> > > > Federal de<br>
> > ><br>
> ><br>
><br>
> > > > Minas Gerais - Campus Formiga<br>
> > ><br>
> ><br>
><br>
<br>
> > > > _______________________________________________<br>
> > ><br>
> ><br>
><br>
> > > > llvm-commits mailing list<br>
> > ><br>
> ><br>
><br>
> > > > <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
> > ><br>
> ><br>
><br>
> > > > <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
> > ><br>
> ><br>
><br>
<br>
> > > _______________________________________________<br>
> ><br>
><br>
> > > llvm-commits mailing list<br>
> ><br>
><br>
> > > <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
> ><br>
><br>
> > > <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
> ><br>
><br>
<br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
<br>
</span><span><font color="#888888">--<br>
<br>
--<br>
Hal Finkel<br>
Assistant Computational Scientist<br>
Leadership Computing Facility<br>
Argonne National Laboratory<br>
</font></span><div><div>_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br></div></div><div>Thank You.<br>Madhur D. Amilkanthwar<br>RISE lab,<br>IIT Madras.<br></div>
</div>
</blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature">Natanael Ramos <br>Membro do corpo discente de Ciência da Computação pelo Instituto Federal de <br>Minas Gerais - Campus Formiga<br><br></div>
</div>