1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel namespaces assocs accessors math.order sequences
5 IN: compiler.cfg.live-ranges
7 TUPLE: live-range from to ;
9 ! Maps vregs to live ranges
13 [ dup live-range boa ] dip live-ranges get set-at ;
16 live-ranges get at [ max ] change-to drop ;
18 GENERIC: compute-live-ranges* ( n insn -- )
20 M: nullary-op compute-live-ranges*
23 M: flushable-op compute-live-ranges*
26 M: effect-op compute-live-ranges*
29 M: unary-op compute-live-ranges*
30 [ out>> def ] [ in>> use ] 2bi ;
32 M: binary-op compute-live-ranges*
33 [ call-next-method ] [ in1>> use ] [ in2>> use ] 2tri ;
35 M: %store compute-live-ranges*
36 [ call-next-method ] [ addr>> use ] 2bi ;
38 : compute-live-ranges ( insns -- )
39 H{ } clone live-ranges set
40 [ swap compute-live-ranges* ] each-index ;