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.
|
2010-05-16 21:04:18 -04:00
|
|
|
USING: kernel accessors assocs sequences namespaces make locals
|
2008-10-07 21:00:38 -04:00
|
|
|
cpu.architecture
|
2008-09-15 05:22:12 -04:00
|
|
|
compiler.cfg
|
2009-05-29 14:11:34 -04:00
|
|
|
compiler.cfg.rpo
|
2009-08-08 05:02:18 -04:00
|
|
|
compiler.cfg.registers
|
2008-10-19 02:10:21 -04:00
|
|
|
compiler.cfg.instructions
|
2009-05-29 14:11:34 -04:00
|
|
|
compiler.cfg.linear-scan.numbering
|
2008-09-15 05:22:12 -04:00
|
|
|
compiler.cfg.linear-scan.live-intervals
|
|
|
|
compiler.cfg.linear-scan.allocation
|
2009-06-11 18:55:14 -04:00
|
|
|
compiler.cfg.linear-scan.allocation.state
|
2009-06-21 01:20:01 -04:00
|
|
|
compiler.cfg.linear-scan.assignment
|
2009-07-28 08:39:46 -04:00
|
|
|
compiler.cfg.linear-scan.resolve ;
|
2008-09-11 03:05:22 -04:00
|
|
|
IN: compiler.cfg.linear-scan
|
2008-09-10 23:11:03 -04:00
|
|
|
|
2008-09-17 01:46:38 -04:00
|
|
|
! References:
|
|
|
|
|
|
|
|
! Linear Scan Register Allocation
|
|
|
|
! by Massimiliano Poletto and Vivek Sarkar
|
|
|
|
! http://www.cs.ucla.edu/~palsberg/course/cs132/linearscan.pdf
|
|
|
|
|
|
|
|
! Linear Scan Register Allocation for the Java HotSpot Client Compiler
|
|
|
|
! by Christian Wimmer
|
2008-09-15 05:22:12 -04:00
|
|
|
! and http://www.ssw.uni-linz.ac.at/Research/Papers/Wimmer04Master/
|
2008-09-10 23:11:03 -04:00
|
|
|
|
2008-09-17 01:46:38 -04:00
|
|
|
! Quality and Speed in Linear-scan Register Allocation
|
|
|
|
! by Omri Traub, Glenn Holloway, Michael D. Smith
|
|
|
|
! http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.34.8435
|
|
|
|
|
2010-04-28 05:03:12 -04:00
|
|
|
! SSA liveness must have been computed already
|
|
|
|
|
2009-07-22 04:08:28 -04:00
|
|
|
:: (linear-scan) ( cfg machine-registers -- )
|
|
|
|
cfg number-instructions
|
|
|
|
cfg compute-live-intervals machine-registers allocate-registers
|
|
|
|
cfg assign-registers
|
|
|
|
cfg resolve-data-flow
|
|
|
|
cfg check-numbering ;
|
2008-10-09 00:42:53 -04:00
|
|
|
|
2010-05-16 21:04:18 -04:00
|
|
|
: admissible-registers ( cfg -- regs )
|
|
|
|
[ machine-registers ] dip
|
|
|
|
frame-pointer?>> [
|
2010-05-17 05:18:40 -04:00
|
|
|
[ int-regs ] dip [ clone ] map
|
2010-05-16 21:04:18 -04:00
|
|
|
[ [ [ frame-reg ] dip remove ] change-at ] keep
|
2010-05-17 05:18:40 -04:00
|
|
|
] when ;
|
2010-05-16 21:04:18 -04:00
|
|
|
|
2009-05-29 14:11:34 -04:00
|
|
|
: linear-scan ( cfg -- cfg' )
|
2010-05-16 21:04:18 -04:00
|
|
|
dup dup admissible-registers (linear-scan) ;
|