[llvm-dev] Register Allocation Graph Coloring algorithm and Others
Leslie Zhai via llvm-dev
llvm-dev at lists.llvm.org
Wed Dec 20 16:44:09 PST 2017
Hi Jakob,
Thanks for your kind response!
My usecase is for AVR and RISCV targets, and I just want to learn and
practice HEA in RA, thanks for your sharing.
在 2017年12月21日 01:25, Jakob Stoklund Olesen 写道:
>
>> On Dec 18, 2017, at 19:03, Leslie Zhai <lesliezhai at llvm.org.cn
>> <mailto:lesliezhai at llvm.org.cn>> wrote:
>
> Hi Leslie,
>
> As others have pointed out, the notion that register allocation is
> isomorphic to graph coloring is poppycock. There are other important
> aspects, in particular the placement of spill/fill/copy instructions.
> The importance of graph coloring relative to spill code placement
> depends on how many registers you have available. If you are
> generating code for 32-bit x86 which has only 6-7 general purpose
> registers, you will have so much spill code and short live ranges that
> graph coloring doesn’t matter much at all. On the other hand, if you
> have 32 registers like Chaitin did, you have much less spilling in
> typical code, and the graph coloring aspect becomes important.
>
> Early compilers would keep each local variable in a stack slot, and
> the register allocation optimization would literally allocate a whole
> local variable to a register. The C “register” keyword makes sense in
> that context. Later improvements like copy coalescing and live range
> splitting meant that multiple local variables could use the same
> register and a variable could live in different places at different
> times. It is sometimes useful to take this development to its logical
> extreme and look at register allocation as a caching problem: The
> register allocator’s job is to make sure that values are available to
> the instructions the need them, using the registers as a cache to get
> the values there in the most efficient way possible.
>
> Guo, J., Garzarán, M. J., & Padua, D. (2004). The Power of
> Belady’s Algorithm in Register Allocation for Long Basic Blocks.
> In Languages and Compilers for Parallel Computing (Vol. 2958, pp.
> 374–389). Berlin, Heidelberg: Springer Berlin Heidelberg.
> http://doi.org/10.1007/978-3-540-24644-2_24
>
> Braun, M., & Hack, S. (2009). Register spilling and live-range
> splitting for SSA-form programs. International Conference on
> Compiler Construction.
>
>
> When you look at register allocation that way, the graph coloring
> aspect almost disappears. The optimum approach is probably somewhere
> in the middle.
>
> A third important aspect is register constraints on individual
> instructions. Sometimes you almost need a little constraint solver
> just to figure out a valid register assignment for a single
> instruction. Preston Briggs dealt with this in his thesis, but it
> hasn’t gotten as much attention as graph coloring since.
>
> Pereira, F. Q., & Palsberg, J. (2008). Register allocation by
> puzzle solving.
>
>
> Regards,
> /jakob
>
--
Regards,
Leslie Zhai - https://reviews.llvm.org/p/xiangzhai/
More information about the llvm-dev
mailing list