factor/basis/compiler/cfg/value-numbering/propagate/propagate.factor

59 lines
1.2 KiB
Factor
Raw Normal View History

2008-10-19 02:10:21 -04:00
! Copyright (C) 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
IN: compiler.cfg.value-numbering.propagate
! If two vregs compute the same value, replace references to
! the latter with the former.
: resolve ( vreg -- vreg' ) vreg>vn vn>vreg ;
GENERIC: propogate ( insn -- insn )
2008-10-20 02:56:28 -04:00
M: ##unary-branch propagate [ resolve ] change-src ;
2008-10-19 02:10:21 -04:00
M: ##unary propogate [ resolve ] change-src ;
2008-10-20 02:56:28 -04:00
M: ##flushable propagate ;
2008-10-19 02:10:21 -04:00
M: ##replace propagate [ resolve ] change-src ;
M: ##inc-d propagate ;
M: ##inc-r propagate ;
M: ##stack-frame propagate ;
M: ##call propagate ;
M: ##jump propagate ;
M: ##return propagate ;
M: ##intrinsic propagate
[ [ resolve ] assoc-map ] change-defs-vregs
[ [ resolve ] assoc-map ] change-uses-vregs ;
M: ##dispatch propagate [ resolve ] change-src ;
M: ##dispatch-label propagate ;
M: ##write-barrier propagate [ resolve ] change-src ;
M: ##alien-invoke propagate ;
M: ##alien-indirect propagate ;
M: ##alien-callback propagate ;
M: ##callback-return propagate ;
M: ##prologue propagate ;
M: ##epilogue propagate ;
M: ##branch propagate ;
M: ##if-intrinsic propagate
[ [ resolve ] assoc-map ] change-defs-vregs
[ [ resolve ] assoc-map ] change-uses-vregs ;