]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/cfg/linear-scan/linear-scan.factor
d444427a67949152f33b1b6b911380d87a406879
[factor.git] / basis / compiler / cfg / linear-scan / linear-scan.factor
1 ! Copyright (C) 2008, 2010 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs compiler.cfg.linear-scan.allocation
4 compiler.cfg.linear-scan.assignment
5 compiler.cfg.linear-scan.live-intervals
6 compiler.cfg.linear-scan.numbering
7 compiler.cfg.linear-scan.resolve compiler.cfg.utilities cpu.architecture
8 kernel sequences ;
9 IN: compiler.cfg.linear-scan
10
11 : admissible-registers ( cfg -- regs )
12     machine-registers swap frame-pointer?>> [
13         [ [ frame-reg = not ] filter ] assoc-map
14     ] when ;
15
16 : allocate-and-assign-registers ( cfg -- )
17     [ ] [ compute-live-intervals ] [ admissible-registers ] tri
18     allocate-registers assign-registers ;
19
20 : linear-scan ( cfg -- )
21     {
22         number-instructions
23         allocate-and-assign-registers
24         resolve-data-flow
25         check-numbering
26     } apply-passes ;