Iterative Chaitin-Briggs style spilling/coloring register allocation
authorPaul Khuong <pvk@pvk.ca>
Tue, 12 Nov 2013 23:39:35 +0000 (18:39 -0500)
committerPaul Khuong <pvk@pvk.ca>
Mon, 2 Dec 2013 03:44:44 +0000 (22:44 -0500)
commitc295a1ec99a7316523e7674cec71da05da8fc072
tree76236701eb27eb83382e6940011aa2eb0ffc5aba
parent3d544b84f2b7ecd617d220145a775079df6c7919
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!
NEWS
build-order.lisp-expr
package-data-list.lisp-expr
src/compiler/pack-iterative.lisp [new file with mode: 0644]
src/compiler/pack.lisp