Iterative Chaitin-Briggs style spilling/coloring register allocation
* sb-regalloc:*register-allocation-method* determine which packing
algorithm is chosen.
- :adaptive, the default value, only executes the iterative algorithm
if some code block has (> speed compilation-speed) and (speed 3);
otherwise, the usual greedy algorithm is chosen.
- :greedy always chooses the old greedy algorithm.
- :iterative always chooses the new iterative algorithm.
Some references describing this family of register allocation, spilling
and coalescing algorithms are listed in the header of
src/compiler/pack-iterative.lisp.
This code is simply an optimised and cleaned up version of the awesome
work done by Alexandra Barchunova as part of Google Summer of Code '13.
It's difficult to overestimate the amount of earlier time and effort
that aren't visible but had to happen to fix bugs and document old code
in order to finally make this possible.
Hectokudos to abarch!