2010-04-28 05:03:12 -04:00
|
|
|
! Copyright (C) 2008, 2010 Slava Pestov.
|
2008-09-10 23:11:03 -04:00
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2014-12-13 19:10:21 -05:00
|
|
|
USING: accessors assocs compiler.cfg.linear-scan.allocation
|
2009-06-21 01:20:01 -04:00
|
|
|
compiler.cfg.linear-scan.assignment
|
2014-12-13 19:10:21 -05:00
|
|
|
compiler.cfg.linear-scan.live-intervals
|
|
|
|
compiler.cfg.linear-scan.numbering
|
2015-04-12 00:00:06 -04:00
|
|
|
compiler.cfg.linear-scan.resolve compiler.cfg.utilities cpu.architecture
|
|
|
|
kernel sequences ;
|
2008-09-11 03:05:22 -04:00
|
|
|
IN: compiler.cfg.linear-scan
|
2008-09-10 23:11:03 -04:00
|
|
|
|
2010-05-16 21:04:18 -04:00
|
|
|
: admissible-registers ( cfg -- regs )
|
2014-10-14 07:41:14 -04:00
|
|
|
machine-registers swap frame-pointer?>> [
|
|
|
|
[ [ frame-reg = not ] filter ] assoc-map
|
2010-05-17 05:18:40 -04:00
|
|
|
] when ;
|
2010-05-16 21:04:18 -04:00
|
|
|
|
2015-04-12 00:00:06 -04:00
|
|
|
: allocate-and-assign-registers ( cfg -- )
|
|
|
|
[ ] [ compute-live-intervals ] [ admissible-registers ] tri
|
|
|
|
allocate-registers assign-registers ;
|
|
|
|
|
2014-12-11 15:48:43 -05:00
|
|
|
: linear-scan ( cfg -- )
|
2015-04-12 00:00:06 -04:00
|
|
|
{
|
|
|
|
number-instructions
|
|
|
|
allocate-and-assign-registers
|
|
|
|
resolve-data-flow
|
|
|
|
check-numbering
|
|
|
|
} apply-passes ;
|