]> gitweb.factorcode.org Git - factor.git/commitdiff
compiler.cfg.linearization: number-blocks can set the number>> accessor
authorBjörn Lindqvist <bjourne@gmail.com>
Sun, 13 Sep 2015 05:14:46 +0000 (07:14 +0200)
committerBjörn Lindqvist <bjourne@gmail.com>
Tue, 22 Sep 2015 06:51:03 +0000 (08:51 +0200)
instead of using the numbers dynamic variable

basis/compiler/cfg/debugger/debugger.factor
basis/compiler/cfg/linearization/linearization-docs.factor
basis/compiler/cfg/linearization/linearization-tests.factor
basis/compiler/cfg/linearization/linearization.factor
basis/compiler/codegen/codegen.factor

index 9f62aa2ad2ebb517dd5f3999bd2071f50de2e2b4..0017c6156468c55dbec4e4e7404c7f3448223e13 100644 (file)
@@ -59,11 +59,11 @@ M: insn insn. tuple>array but-last [
     ] interleave nl ;
 
 : block. ( bb -- )
-    "=== Basic block #" write dup block-number . nl
+    "=== Basic block #" write dup number>> . nl
     dup instructions>> [ insn. ] each nl
     successors>> [
         "Successors: " write
-        [ block-number unparse ] map ", " join print nl
+        [ number>> unparse ] map ", " join print nl
     ] unless-empty ;
 
 : cfg. ( cfg -- )
index d6ba8017c0e3cf8550f75d31ac53d8552dde7242..de42ce9d1ce9dcc522729d84bc4673f118382e26 100644 (file)
@@ -10,10 +10,6 @@ HELP: linearization-order
 { $description "Lists the basic blocks in linearization order. That is, the order in which they will be written in the generated assembly code." }
 { $see-also generate reverse-post-order } ;
 
-HELP: block-number
-{ $values { "bb" basic-block } { "n" integer } }
-{ $description "Retrieves this blocks block number. Must not be called before " { $link number-blocks } "." } ;
-
 HELP: number-blocks
 { $values { "bbs" sequence } }
-{ $description "Associate each block with a block number and save the result in the " { $link numbers } " map." } ;
+{ $description "Assigns the " { $slot "number" } " slot of each " { $link basic-block } " given it's sequence index." } ;
index 674b7e0a40718260eef766b63924eb1bb3cf92f1..fb77d831cf7af5247d53b95d7a47cd5130b0db7e 100644 (file)
@@ -17,12 +17,15 @@ V{ } 2 test-bb
     0 get block>cfg linearization-order [ number>> ] map
 ] unit-test
 
-! (linearization-order)
-{ { 10 20 30 } } [
+: two-successors-cfg ( -- cfg )
     V{ } 10 insns>block
     [ V{ } 20 insns>block connect-bbs ] keep
     [ V{ } 30 insns>block connect-bbs ] keep
-    block>cfg (linearization-order) [ number>> ] map
+    block>cfg ;
+
+! (linearization-order)
+{ { 10 20 30 } } [
+    two-successors-cfg (linearization-order) [ number>> ] map
 ] unit-test
 
 { { 0 1 2 3 4 5 } } [
@@ -43,3 +46,8 @@ V{ } 2 test-bb
     V{ } 10 insns>block [ process-block ] V{ } make
     [ number>> ] map
 ] unit-test
+
+! number-blocks
+{ { 0 1 2 } } [
+    two-successors-cfg linearization-order dup number-blocks [ number>> ] map
+] unit-test
index b5abf84fedde7b9a121d29995ffd0b31d7fd934d..332c18bdcb99bddbc4b5b23028a68b9d57277a1f 100644 (file)
@@ -66,12 +66,8 @@ PRIVATE>
         ]
     } cleave ;
 
-SYMBOL: numbers
-
-: block-number ( bb -- n ) numbers get at ;
-
 : number-blocks ( bbs -- )
-    H{ } zip-index-as numbers set ;
+    [ >>number drop ] each-index ;
 
 : blocks>insns ( bbs -- insns )
     [ instructions>> ] map concat ;
index c48f3d5b941f766d14c1232d0868e0fc1b8cc7c9..27e1c1d1c9a41c8d28c7af74a79d9147a0e5a638 100755 (executable)
@@ -23,9 +23,7 @@ SYMBOL: labels
     labels get [ drop <label> ] cache ;
 
 : useless-branch? ( bb successor -- ? )
-    ! If our successor immediately follows us in linearization
-    ! order then we don't need to branch.
-    [ block-number ] bi@ 1 - = ; inline
+    [ number>> ] bi@ 1 - = ; inline
 
 : emit-branch ( bb successor -- )
     2dup useless-branch?