Tune coalescing in non-iterative register allocator
authorBen.Lippmeier@anu.edu.au <unknown>
Mon, 17 Sep 2007 13:26:14 +0000 (13:26 +0000)
committerBen.Lippmeier@anu.edu.au <unknown>
Mon, 17 Sep 2007 13:26:14 +0000 (13:26 +0000)
commitfff4dee0483eda0b675057f8259a161ff16467f4
treef2a37928031332c382965a1c1fa5d40b5ad6ab74
parent6a347ffc34c0ded44c213e2a0217477f7b8196b9
Tune coalescing in non-iterative register allocator

If iterative coalescing isn't turned on, then do a single aggressive
coalescing pass for the first build/color cycle and then back off to
conservative coalescing for subseqent passes.

Aggressive coalescing is a cheap way to eliminate lots of the reg-reg
moves, but it can make the graph less colorable - if we turn it on
for every pass then allocation for code with a large amount of register
pressure (ie SHA1) doesn't converge in a sensible number of cycles.
compiler/nativeGen/RegAllocColor.hs
compiler/utils/GraphColor.hs
compiler/utils/GraphOps.hs