factor/basis/compiler/cfg/optimizer/optimizer.factor

57 lines
1.5 KiB
Factor
Raw Normal View History

! Copyright (C) 2008, 2009 Slava Pestov.
2008-10-22 19:41:37 -04:00
! See http://factorcode.org/license.txt for BSD license.
2009-05-27 19:58:01 -04:00
USING: kernel sequences accessors combinators namespaces
compiler.cfg.tco
2008-11-03 00:09:31 -05:00
compiler.cfg.predecessors
compiler.cfg.useless-conditionals
compiler.cfg.stack-analysis
compiler.cfg.dcn
compiler.cfg.dominance
compiler.cfg.ssa
compiler.cfg.branch-splitting
compiler.cfg.block-joining
2008-10-22 22:59:07 -04:00
compiler.cfg.alias-analysis
compiler.cfg.value-numbering
compiler.cfg.dce
compiler.cfg.write-barrier
compiler.cfg.liveness
2009-05-27 19:58:01 -04:00
compiler.cfg.rpo
compiler.cfg.phi-elimination
compiler.cfg.checker ;
2008-10-22 19:41:37 -04:00
IN: compiler.cfg.optimizer
SYMBOL: check-optimizer?
: ?check ( cfg -- cfg' )
check-optimizer? get [
dup check-cfg
] when ;
SYMBOL: new-optimizer?
: optimize-cfg ( cfg -- cfg' )
! Note that compute-predecessors has to be called several times.
! The passes that need this document it.
2008-10-22 19:41:37 -04:00
[
optimize-tail-calls
new-optimizer? get [ delete-useless-conditionals ] unless
compute-predecessors
new-optimizer? get [ split-branches ] unless
new-optimizer? get [
deconcatenatize
compute-dominance
construct-ssa
] when
join-blocks
compute-predecessors
new-optimizer? get [ stack-analysis ] unless
compute-liveness
alias-analysis
value-numbering
compute-predecessors
eliminate-dead-code
eliminate-write-barriers
eliminate-phis
?check
2009-05-27 19:58:01 -04:00
] with-scope ;