compiler.cfg.linear-scan.allocation.spilling: fix stack effect

locals-and-roots
Björn Lindqvist 2016-04-03 15:36:39 +02:00
parent 89e98e96a4
commit 2cc8b5e7de
3 changed files with 9 additions and 5 deletions

View File

@ -32,8 +32,8 @@ HELP: split-for-spill
{ $values
{ "live-interval" live-interval-state }
{ "n" integer }
{ "before" live-interval-state }
{ "after" live-interval-state }
{ "before/f" $maybe live-interval-state }
{ "after/f" $maybe live-interval-state }
} { $description "During register allocation an interval needs to be split so that the 'after' part of it can be placed in a spill slot." } ;
HELP: spill-intersecting

View File

@ -36,6 +36,11 @@ IN: compiler.cfg.linear-scan.allocation.spilling.tests
test-live-interval last-use-rep
] unit-test
! spill-before
{ f } [
30 <live-interval> spill-before
] unit-test
! trim-after-ranges
{
T{ live-interval-state

View File

@ -61,7 +61,7 @@ ERROR: bad-live-ranges interval ;
} cleave
] if ;
: split-for-spill ( live-interval n -- before after )
: split-for-spill ( live-interval n -- before/f after/f )
split-interval [ spill-before ] [ spill-after ] bi* ;
: find-next-use ( live-interval new -- n )
@ -96,8 +96,7 @@ ERROR: bad-live-ranges interval ;
: spill ( live-interval n -- )
split-for-spill
[ [ add-handled ] when* ]
[ [ add-unhandled ] when* ] bi* ;
[ [ add-handled ] when* ] [ [ add-unhandled ] when* ] bi* ;
:: spill-intersecting-active ( new reg -- )
new active-intervals-for [ [ reg>> reg = ] find swap dup ] keep