47 lines
1.8 KiB
Factor
47 lines
1.8 KiB
Factor
|
! Copyright (C) 2008 Slava Pestov.
|
||
|
! See http://factorcode.org/license.txt for BSD license.
|
||
|
IN: compiler.cfg.value-numbering
|
||
|
|
||
|
: insn>vn ( insn -- vn ) >expr simplify ; inline
|
||
|
|
||
|
GENERIC: make-value-node ( insn -- )
|
||
|
|
||
|
M: ##cond-branch make-value-node src>> live-vreg ;
|
||
|
M: ##unary make-value-node [ insn>vn ] [ dst>> ] bi set-vn ;
|
||
|
M: ##nullary make-value-node drop ;
|
||
|
M: ##load-literal make-value-node [ insn>vn ] [ dst>> ] bi set-vn ;
|
||
|
M: ##peek make-value-node [ insn>vn ] [ dst>> ] bi set-vn ;
|
||
|
M: ##replace make-value-node reset-value-graph ;
|
||
|
M: ##inc-d make-value-node reset-value-graph ;
|
||
|
M: ##inc-r make-value-node reset-value-graph ;
|
||
|
M: ##stack-frame make-value-node reset-value-graph ;
|
||
|
M: ##call make-value-node reset-value-graph ;
|
||
|
M: ##jump make-value-node reset-value-graph ;
|
||
|
M: ##return make-value-node reset-value-graph ;
|
||
|
M: ##intrinsic make-value-node uses-vregs [ live-vreg ] each ;
|
||
|
M: ##dispatch make-value-node reset-value-graph ;
|
||
|
M: ##dispatch-label make-value-node reset-value-graph ;
|
||
|
M: ##allot make-value-node drop ;
|
||
|
M: ##write-barrier make-value-node drop ;
|
||
|
M: ##gc make-value-node reset-value-graph ;
|
||
|
M: ##replace make-value-node reset-value-graph ;
|
||
|
M: ##alien-invoke make-value-node reset-value-graph ;
|
||
|
M: ##alien-indirect make-value-node reset-value-graph ;
|
||
|
M: ##alien-callback make-value-node reset-value-graph ;
|
||
|
M: ##callback-return make-value-node reset-value-graph ;
|
||
|
M: ##prologue make-value-node reset-value-graph ;
|
||
|
M: ##epilogue make-value-node reset-value-graph ;
|
||
|
M: ##branch make-value-node reset-value-graph ;
|
||
|
M: ##if-intrinsic make-value-node uses-vregs [ live-vreg ] each ;
|
||
|
|
||
|
: init-value-numbering ( -- )
|
||
|
init-value-graph
|
||
|
init-expressions
|
||
|
init-liveness ;
|
||
|
|
||
|
: value-numbering ( instructions -- instructions )
|
||
|
init-value-numbering
|
||
|
[ [ make-value-node ] [ propagate ] bi ] map
|
||
|
[ eliminate ] map
|
||
|
sift ;
|