Tutorial: How To Write An LLVM Register Allocator

Matthias Braun via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 9 18:56:42 PST 2016


Interesting,

I don't think the document is in a shape for documentation that ships with llvm. Just some points:

- The document keeps jumping between general register allocation concepts, general llvm concepts and code snippets of llvms register allocators. It's hard to follow which is which.
- The basic concepts would need better and more in-depth descriptions, just to give some topics:
   - How does the basic program representation work, MachineInstr, MachineOperand (esp. the register kind with the undef, dead and kill flags), subregisters, subregisterindexes, register classes, how we express most constraints with register classes, virtual registers how register are encoded in unsigneds, a proper description of register units, what't does it mean if a register is reserved or allocatable, pristine registers, lanemasks, ...
   - How does the liveness representation work: What is a Segment, a VNInfo, a SlotIndex, how can we maintain SSA form in the liveness info (and why do we do that)
   - How do all the regalloc related passes in llvm play together: PhiElimination, TwoAddress, RegisterCoalescer, RegAllocXXX, VirtRegRewriter

On the other hand I applaud going through the work and actually writing something down, this will surely help other people who just want to get started with the matter. Maybe there is a way to get this up onto the llvm blog (who maintains that)?

- Matthias

> On Feb 9, 2016, at 6:18 PM, Sean Silva via llvm-commits <llvm-commits at lists.llvm.org> wrote:
> 
> Matthias, it's rare that we get a substantial piece of documentation like this. Can you take a look at the content?
> 
> On Fri, Feb 5, 2016 at 3:50 PM, Natanael Ramos via llvm-commits <llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>> wrote:
> Hello
> 
> My name is Natanael Ramos, I'm a  student of bachelor degree on Computer Science Course, here on Brazil.
> 
> Recently I have worked with LLVM for my undergraduate thesis (I don't really know how is called in other countries, here is called Completion of course work), in my work I have implemented an register allocator using LLVM and have tested him with the built-in allocators in LLVM (Probably I'll publish a paper soon, if all goes as expected).
> 
> As another product of my work, I have created a tutorial of how to write an LLVM register allocator, extending the RegAllocBase interface, this tutorial is based on my understanding of the LLVM framework for working with the register allocation pass.
> 
> The tutorial have been written in reStructuredText following the LLVM instructions and orientations (http://www.llvm.org/docs/SphinxQuickstartTemplate.html <http://www.llvm.org/docs/SphinxQuickstartTemplate.html>). As it's suggested, I'm sending the tutorial to this mailing list in order to contribute to the community of developers, which use LLLVM.
> 
> Any suggestions, please let me know.
> 
> -- 
> Natanael Ramos 
> Membro do corpo discente de Ciência da Computação pelo Instituto Federal de 
> Minas Gerais - Campus Formiga
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits>
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160209/9c3d3015/attachment.html>


More information about the llvm-commits mailing list