-! 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
: 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 ;
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' )
insert-save-contexts
destruct-ssa
linear-scan
+ join-blocks
build-stack-frame ;