Pack (mostly) stack TNs according to lexical scope information
authorPaul Khuong <pvk@pvk.ca>
Tue, 25 Jun 2013 03:24:05 +0000 (23:24 -0400)
committerPaul Khuong <pvk@pvk.ca>
Thu, 18 Jul 2013 21:02:28 +0000 (17:02 -0400)
commitba39d165a0bb6fabba6d6feb9b6fb88ae4d544ff
tree1af88bc056b35f10c10cb9cbc1e6eb76a8e79799
parenta21899ff055c5c31184b277c01e52dafae4e5aa8
Pack (mostly) stack TNs according to lexical scope information

 Packing TNs from shallow scopes before more deeply nested one
 is a perfect elimination order when the live ranges span the
 full scope (the interference graph is a comparability graph).
 Use that as a heuristic, and do that for TNs that are known
 to have such simple live ranges before the rest: this ensures
 that bad TNs don't mess everything up.

 The result is much tighter stack allocation (most of the effect
 comes from initialising stack frames at a smaller size, and growing
 less aggressively), and fewer long-lived stray references.

 Incidentally: fix catch block packing on win32, solving lp#1072739
NEWS
src/compiler/pack.lisp
tests/compiler.pure.lisp