compiler.cfg.copy-prop: work in progress

db4
Slava Pestov 2009-07-24 19:56:21 -05:00
parent 8cebbde35c
commit 053de0af40
1 changed files with 21 additions and 3 deletions

View File

@ -10,25 +10,43 @@ SYMBOL: copies
: resolve ( vreg -- vreg ) : resolve ( vreg -- vreg )
[ copies get at ] keep or ; [ copies get at ] keep or ;
: record-copy ( insn -- ) : record-copy ( ##copy -- )
[ src>> resolve ] [ dst>> ] bi copies get set-at ; inline [ src>> resolve ] [ dst>> ] bi copies get set-at ; inline
<PRIVATE
GENERIC: visit-insn ( insn -- )
M: ##copy visit-insn record-copy ;
M: ##phi visit-insn inputs>> values [ resolve ] map all-equal? [ "BLAH!" print ] when ;
M: insn visit-insn drop ;
: collect-copies ( cfg -- ) : collect-copies ( cfg -- )
H{ } clone copies set H{ } clone copies set
[ [
instructions>> instructions>>
[ dup ##copy? [ record-copy ] [ drop ] if ] each [ visit-insn ] each
] each-basic-block ; ] each-basic-block ;
GENERIC: update-insn ( insn -- keep? )
M: ##copy update-insn drop f ;
M: insn update-insn rename-insn-uses t ;
: rename-copies ( cfg -- ) : rename-copies ( cfg -- )
copies get dup assoc-empty? [ 2drop ] [ copies get dup assoc-empty? [ 2drop ] [
renamings set renamings set
[ [
instructions>> instructions>>
[ dup ##copy? [ drop f ] [ rename-insn-uses t ] if ] filter-here [ update-insn ] filter-here
] each-basic-block ] each-basic-block
] if ; ] if ;
PRIVATE>
: copy-propagation ( cfg -- cfg' ) : copy-propagation ( cfg -- cfg' )
[ collect-copies ] [ collect-copies ]
[ rename-copies ] [ rename-copies ]