compiler.cfg.copy-prop: Global copy propagation

db4
Slava Pestov 2009-07-24 05:30:46 -05:00
parent e0f6d89ff1
commit 7068de6cd3
3 changed files with 35 additions and 5 deletions

View File

@ -1,8 +1,10 @@
! Copyright (C) 2008 Slava Pestov. ! Copyright (C) 2008, 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel namespaces assocs accessors ; USING: kernel namespaces assocs accessors sequences
compiler.cfg.rpo compiler.cfg.renaming compiler.cfg.instructions ;
IN: compiler.cfg.copy-prop IN: compiler.cfg.copy-prop
! The first three definitions are also used in compiler.cfg.alias-analysis.
SYMBOL: copies SYMBOL: copies
: resolve ( vreg -- vreg ) : resolve ( vreg -- vreg )
@ -10,3 +12,25 @@ SYMBOL: copies
: record-copy ( insn -- ) : record-copy ( insn -- )
[ src>> resolve ] [ dst>> ] bi copies get set-at ; inline [ src>> resolve ] [ dst>> ] bi copies get set-at ; inline
: collect-copies ( cfg -- )
H{ } clone copies set
[
instructions>>
[ dup ##copy? [ record-copy ] [ drop ] if ] each
] each-basic-block ;
: rename-copies ( cfg -- )
copies get dup assoc-empty? [ 2drop ] [
renamings set
[
instructions>>
[ dup ##copy? [ drop f ] [ rename-insn-uses t ] if ] filter-here
] each-basic-block
] if ;
: copy-propagation ( cfg -- cfg' )
[ collect-copies ]
[ rename-copies ]
[ ]
tri ;

View File

@ -2,18 +2,19 @@
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel sequences accessors combinators namespaces USING: kernel sequences accessors combinators namespaces
compiler.cfg.tco compiler.cfg.tco
compiler.cfg.predecessors
compiler.cfg.useless-conditionals compiler.cfg.useless-conditionals
compiler.cfg.ssa
compiler.cfg.branch-splitting compiler.cfg.branch-splitting
compiler.cfg.block-joining compiler.cfg.block-joining
compiler.cfg.ssa
compiler.cfg.alias-analysis compiler.cfg.alias-analysis
compiler.cfg.value-numbering compiler.cfg.value-numbering
compiler.cfg.copy-prop
compiler.cfg.dce compiler.cfg.dce
compiler.cfg.write-barrier compiler.cfg.write-barrier
compiler.cfg.rpo
compiler.cfg.phi-elimination compiler.cfg.phi-elimination
compiler.cfg.empty-blocks compiler.cfg.empty-blocks
compiler.cfg.predecessors
compiler.cfg.rpo
compiler.cfg.checker ; compiler.cfg.checker ;
IN: compiler.cfg.optimizer IN: compiler.cfg.optimizer
@ -38,6 +39,7 @@ SYMBOL: check-optimizer?
alias-analysis alias-analysis
value-numbering value-numbering
compute-predecessors compute-predecessors
copy-propagation
eliminate-dead-code eliminate-dead-code
eliminate-write-barriers eliminate-write-barriers
eliminate-phis eliminate-phis

View File

@ -102,6 +102,10 @@ M: ##fixnum-overflow rename-insn-uses
[ rename-value ] change-src2 [ rename-value ] change-src2
drop ; drop ;
M: ##phi rename-insn-uses
[ [ rename-value ] assoc-map ] change-inputs
drop ;
M: insn rename-insn-uses drop ; M: insn rename-insn-uses drop ;
: fresh-vreg ( vreg -- vreg' ) : fresh-vreg ( vreg -- vreg' )