Tutorial: How To Write An LLVM Register Allocator

Natanael Ramos via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 10 11:37:45 PST 2016


2016-02-10 0:56 GMT-02:00 Matthias Braun <matze at braunis.de>:

> 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.
>

​I understand, the document needs improvement in the structure and
organization to facilitate the reader's understanding and keep the reading
flow concise.


> - 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
>

​In this case I agree with Sean and Hal, I think that such information will
fit better in the 'Register Allocation' section on the LLVM
'Target-Independent Code Generator' documentation​, in my opinion. I would
also need some help to document these more specific modules and structures
(like ​VNInfo for instance).

My focus in this tutorial was to document the steps to write a register
allocator, the specifics of each class should be known previously or by
reading the code of each class.


> 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)?
>

​This was the main purpose when I wrote the tutorial, help people who just want
to write an register allocation using LLVM and don't want to find
themselves digging deep in the LLVM source code to understand this process.​


​I think that the blog is maintained by ​Alex Bradbury (asb at asbradbury.org).

​Thank you for the feedback Matthias, it's nice to have some suggestions on
specific information ​about the register allocation pass also. Many of the
advances that I had in my project were due to your help and from other
developers on llvm-dev mailing list.


> - 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> 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). 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
>> 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
>
>
>


-- 
Natanael Ramos
Membro do corpo discente de Ciência da Computação pelo Instituto Federal de
Minas Gerais - Campus Formiga
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160210/67c9e809/attachment-0001.html>


More information about the llvm-commits mailing list