]> gitweb.factorcode.org Git - factor.git/commitdiff
compiler.cfg.loop-detection: more use of hash-sets.
authorJohn Benediktsson <mrjbq7@gmail.com>
Sun, 10 Mar 2013 17:06:48 +0000 (10:06 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sun, 10 Mar 2013 17:06:48 +0000 (10:06 -0700)
basis/compiler/cfg/loop-detection/loop-detection.factor

index 46fb643651cf1cee1fd7c547c5200ed12741b79c..7c01e4444ad2603d00215e71e9f5119ddc3ff87f 100644 (file)
@@ -12,12 +12,10 @@ SYMBOL: loops
 <PRIVATE
 
 : <natural-loop> ( header index -- loop )
-    HS{ } clone H{ } clone natural-loop boa ;
+    HS{ } clone HS{ } clone natural-loop boa ;
 
 : lookup-header ( header -- loop )
-    loops get [
-        loops get assoc-size <natural-loop>
-    ] cache ;
+    loops get dup '[ _ assoc-size <natural-loop> ] cache ;
 
 SYMBOLS: visited active ;
 
@@ -45,8 +43,8 @@ DEFER: find-loop-headers
 SYMBOL: work-list
 
 : process-loop-block ( bb loop -- )
-    2dup blocks>> key? [ 2drop ] [
-        [ blocks>> conjoin ] [
+    2dup blocks>> in? [ 2drop ] [
+        [ blocks>> adjoin ] [
             2dup header>> eq? [ 2drop ] [
                 drop predecessors>> work-list get push-all-front
             ] if
@@ -64,7 +62,7 @@ SYMBOL: loop-nesting
 
 : compute-loop-nesting ( -- )
     loops get H{ } clone [
-        [ values ] dip '[ blocks>> values [ _ inc-at ] each ] each
+        [ values ] dip '[ blocks>> members [ _ inc-at ] each ] each
     ] keep loop-nesting set ;
 
 : detect-loops ( cfg -- cfg' )