[LLVMdev] Some questions about live intervals

Fernando Magno Quintao Pereira fernando at CS.UCLA.EDU
Thu Jan 31 15:16:50 PST 2008


Hi, Roman,

     we have an implementation of an allocator for LLVM that, like 
Sarkar's, allows to split live ranges at any program point. You can find 
its description here:

http://compilers.cs.ucla.edu/fernando/publications/drafts/long_PereiraPalsberg07.pdf

We handle register classes using an abstraction called puzzles. Also, we 
perform register allocation while the program is still in SSA-form. This 
requires breaking critical edges before RA, and removing phi-functions 
while taking register assignment in consideration, once RA is done. We 
have the code implemented in LLVM 2.1, and it passes all the tests that I 
have tried.
     If you need help testing and debugging your allocator, I can help you. 
We have a debugger that was very useful when trying to find errors in our 
implementation. Also, to implement Sarkar's ELS, you will need to swap 
live ranges at the boundaries of basic blocks. This is a little tricky 
once you have registers of different size, and I can help you with it.

all the best,

Fernando

>
> Yes. I plan to contribute it to the public LLVM repository. The
> skeleton implementation of this algorithm is alsmost done, though I
> still have some small problems mentioned in my original email. But to
> make the algorithm really usable, it should be extended to support
> register classes, since Sarkar's algorithm cannot handle it. I'm going
> to try out an approach based on Smith's paper about graph coloring
> register allocation. Hopefully this would solve this issue.
>
> - Roman



More information about the llvm-dev mailing list