]> gitweb.factorcode.org Git - factor.git/commitdiff
compiler.cfg: change linear ordering to place GC call blocks at the end
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Tue, 27 Jul 2010 17:00:28 +0000 (13:00 -0400)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Tue, 27 Jul 2010 17:00:28 +0000 (13:00 -0400)
basis/compiler/cfg/block-joining/block-joining.factor
basis/compiler/cfg/finalization/finalization.factor
basis/compiler/cfg/linearization/linearization.factor

index 54cff306ed3c12f4a1ef996c87f71e44b0d42262..1005e35d0348bed922d166dfe2d0b06ec8da48c3 100644 (file)
@@ -1,7 +1,8 @@
-! Copyright (C) 2009 Slava Pestov.
+! Copyright (C) 2009, 2010 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors combinators.short-circuit kernel sequences math
-compiler.utilities compiler.cfg compiler.cfg.instructions compiler.cfg.rpo
+USING: accessors combinators.short-circuit kernel namespaces
+sequences math compiler.utilities compiler.cfg
+compiler.cfg.instructions compiler.cfg.rpo
 compiler.cfg.predecessors compiler.cfg.utilities ;
 IN: compiler.cfg.block-joining
 
@@ -23,15 +24,23 @@ IN: compiler.cfg.block-joining
 : update-successors ( bb pred -- )
     [ successors>> ] dip successors<< ;
 
+: join-unlikely ( bb pred -- )
+    over unlikely?>> [ t >>unlikely? ] when 2drop ;
+
 : join-block ( bb pred -- )
-    [ join-instructions ] [ update-successors ] 2bi ;
+    [ join-instructions ]
+    [ update-successors ]
+    [ join-unlikely ]
+    2tri ;
+
+SYMBOL: changed?
 
 : join-blocks ( cfg -- cfg' )
     needs-predecessors
 
     dup post-order [
         dup join-block?
-        [ dup predecessor join-block ] [ drop ] if
+        [ changed? on dup predecessor join-block ] [ drop ] if
     ] each
 
-    cfg-changed predecessors-changed ;
+    changed? get [ cfg-changed predecessors-changed ] when ;
index 2b731bdd904f49ae8994944872ec4c95366ba7b8..c07a30e5a093d11a268a0ee9aa500cfc6e968411 100644 (file)
@@ -4,7 +4,7 @@ USING: kernel compiler.cfg.representations
 compiler.cfg.scheduling compiler.cfg.gc-checks
 compiler.cfg.save-contexts compiler.cfg.ssa.destruction
 compiler.cfg.build-stack-frame compiler.cfg.linear-scan
-compiler.cfg.stacks.uninitialized ;
+compiler.cfg.stacks.uninitialized compiler.cfg.block-joining ;
 IN: compiler.cfg.finalization
 
 : finalize-cfg ( cfg -- cfg' )
@@ -15,4 +15,5 @@ IN: compiler.cfg.finalization
     insert-save-contexts
     destruct-ssa
     linear-scan
+    join-blocks
     build-stack-frame ;
index c44b29d27122dcbfb7df9075a9faa7e42d176973..9f607de70fc1ccce23e3bfe6aed615f0762ea4b2 100644 (file)
@@ -70,8 +70,7 @@ SYMBOLS: work-list loop-heads visited ;
     init-linearization-order
 
     [ work-list get [ process-block ] slurp-deque ] { } make
-    ! [ unlikely?>> not ] partition append
-    ;
+    [ unlikely?>> not ] partition append ;
 
 PRIVATE>