]> gitweb.factorcode.org Git - factor.git/blob - unfinished/compiler/cfg/live-ranges/live-ranges.factor
ogg plays but 1) sound is broken and 2) it doesn't recognize EOF anymore, so it hangs...
[factor.git] / unfinished / compiler / cfg / live-ranges / live-ranges.factor
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
4 compiler.vops ;
5 IN: compiler.cfg.live-ranges
6
7 TUPLE: live-range from to ;
8
9 ! Maps vregs to live ranges
10 SYMBOL: live-ranges
11
12 : def ( n vreg -- )
13     [ dup live-range boa ] dip live-ranges get set-at ;
14
15 : use ( n vreg -- )
16     live-ranges get at [ max ] change-to drop ;
17
18 GENERIC: compute-live-ranges* ( n insn -- )
19
20 M: nullary-op compute-live-ranges*
21     2drop ;
22
23 M: flushable-op compute-live-ranges*
24     out>> def ;
25
26 M: effect-op compute-live-ranges*
27     in>> use ;
28
29 M: unary-op compute-live-ranges*
30     [ out>> def ] [ in>> use ] 2bi ;
31
32 M: binary-op compute-live-ranges*
33     [ call-next-method ] [ in1>> use ] [ in2>> use ] 2tri ;
34
35 M: %store compute-live-ranges*
36     [ call-next-method ] [ addr>> use ] 2bi ;
37
38 : compute-live-ranges ( insns -- )
39     H{ } clone live-ranges set
40     [ swap compute-live-ranges* ] each-index ;