]> gitweb.factorcode.org Git - factor.git/commitdiff
Scheduling uses sets where appropriate
authorDaniel Ehrenberg <littledan@Macintosh-122.local>
Wed, 24 Mar 2010 14:38:52 +0000 (10:38 -0400)
committerDaniel Ehrenberg <littledan@Macintosh-122.local>
Wed, 24 Mar 2010 14:38:52 +0000 (10:38 -0400)
basis/compiler/cfg/dependence/dependence.factor
basis/compiler/cfg/scheduling/scheduling.factor

index 947e9e3bd1a10df5d6db8069385db4e142b1e63d..d25f29cdbb8f31afcaaf1bb100709ca149deb0ee 100644 (file)
@@ -4,6 +4,7 @@ USING: accessors assocs combinators compiler.cfg.def-use
 compiler.cfg.instructions compiler.cfg.registers fry kernel
 locals namespaces sequences sets sorting math.vectors
 make math combinators.short-circuit vectors ;
+FROM: namespaces => set ;
 IN: compiler.cfg.dependence
 
 ! Dependence graph construction
@@ -32,15 +33,12 @@ M: node hashcode* nip number>> ;
         node-number counter >>number
         swap >>insn
         H{ } clone >>precedes
-        H{ } clone >>follows ;
+        V{ } clone >>follows ;
 
 : ready? ( node -- ? ) precedes>> assoc-empty? ;
 
-: spin ( a b c -- c b a )
-    [ 2nip ] [ drop nip ] [ 2drop ] 3tri ;
-
-: precedes ( first second how -- )
-    spin precedes>> set-at ;
+:: precedes ( first second how -- )
+    how second first precedes>> set-at ;
 
 :: add-data-edges ( nodes -- )
     ! This builds up def-use information on the fly, since
@@ -107,12 +105,12 @@ M: object add-control-edge 2drop ;
 : set-follows ( nodes -- )
     [
         dup precedes>> keys [
-            follows>> conjoin
+            follows>> push
         ] with each
     ] each ;
 
 : set-roots ( nodes -- )
-    [ ready? ] filter V{ } like roots set ;
+    [ ready? ] V{ } filter-as roots set ;
 
 : build-dependence-graph ( instructions -- )
     [ <node> ] map {
index 2f08ad96cf9fc090ad6cc6a91d183a03124875a3..816e333b9e6a0d22a9835cd0862f0b4fd7ef246d 100644 (file)
@@ -26,7 +26,7 @@ ERROR: bad-delete-at key assoc ;
     '[ _ >>parent-index drop ] each ;
 
 : remove-node ( node -- )
-    [ follows>> keys ] keep
+    [ follows>> members ] keep
     '[ [ precedes>> _ swap check-delete-at ] each ]
     [ [ ready? ] filter roots get push-all ] bi ;
 
@@ -84,12 +84,12 @@ t check-scheduling? set-global
 ERROR: definition-after-usage vreg old-bb new-bb ;
 
 :: check-usages ( new-bb old-bb -- )
-    H{ } clone :> useds
+    HS{ } clone :> useds
     new-bb instructions>> split-3-ways drop nip
     [| insn |
-        insn uses-vregs [ useds conjoin ] each
+        insn uses-vregs [ useds adjoin ] each
         insn defs-vreg :> def-reg
-        def-reg useds key?
+        def-reg useds in?
         [ def-reg old-bb new-bb definition-after-usage ] when
     ] each ;
 
@@ -132,7 +132,7 @@ ERROR: definition-after-usage vreg old-bb new-bb ;
 
 : schedule-instructions ( cfg -- cfg' )
     dup [
-    dup might-spill?
+        dup might-spill?
         [ schedule-block ]
         [ drop ] if
     ] each-basic-block ;