1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: namespaces assocs sequences kernel accessors
5 compiler.cfg.vn.graph ;
6 IN: compiler.cfg.vn.propagate
8 ! If two vregs compute the same value, replace references to
9 ! the latter with the former.
11 : resolve ( vreg -- vreg' ) vreg>vn vn>vreg ;
13 GENERIC: propogate ( insn -- insn )
15 M: effect-op propogate
16 [ resolve ] change-in ;
19 [ resolve ] change-in ;
21 M: binary-op propogate
22 [ resolve ] change-in1
23 [ resolve ] change-in2 ;
26 [ [ resolve ] map ] change-in ;
29 [ resolve ] change-obj
30 [ resolve ] change-slot ;
32 M: %%set-slot propogate
34 [ resolve ] change-obj
35 [ resolve ] change-slot ;
39 [ resolve ] change-addr ;
41 M: nullary-op propogate ;
43 M: flushable-op propogate ;