]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/compiler/cfg/linear-scan/linear-scan.factor
use reject instead of [ ... not ] filter.
[factor.git] / basis / compiler / cfg / linear-scan / linear-scan.factor
index e30f12fd0a943c7083479634d33ee0b3a96ffe0e..b159502cf10ac01ff188e0ba7d225247f28aa674 100644 (file)
@@ -4,37 +4,23 @@ USING: accessors assocs compiler.cfg.linear-scan.allocation
 compiler.cfg.linear-scan.assignment
 compiler.cfg.linear-scan.live-intervals
 compiler.cfg.linear-scan.numbering
-compiler.cfg.linear-scan.resolve cpu.architecture kernel locals
-sequences ;
+compiler.cfg.linear-scan.resolve compiler.cfg.utilities cpu.architecture
+kernel sequences ;
 IN: compiler.cfg.linear-scan
 
-! 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
-! and http://www.ssw.uni-linz.ac.at/Research/Papers/Wimmer04Master/
-
-! 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
-
-! SSA liveness must have been computed already
-
-:: (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 ;
-
 : admissible-registers ( cfg -- regs )
     machine-registers swap frame-pointer?>> [
-        [ [ frame-reg = not ] filter ] assoc-map
+        [ [ frame-reg = ] reject ] assoc-map
     ] when ;
 
+: allocate-and-assign-registers ( cfg -- )
+    [ ] [ compute-live-intervals ] [ admissible-registers ] tri
+    allocate-registers assign-registers ;
+
 : linear-scan ( cfg -- )
-    dup admissible-registers (linear-scan) ;
+    {
+        number-instructions
+        allocate-and-assign-registers
+        resolve-data-flow
+        check-numbering
+    } apply-passes ;