compiler.cfg.copy-prop: work in progress
parent
8cebbde35c
commit
053de0af40
|
@ -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 ]
|
||||||
|
|
Loading…
Reference in New Issue