]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/cfg/cfg.factor
Switch to https urls
[factor.git] / basis / compiler / cfg / cfg.factor
1 ! Copyright (C) 2008, 2010 Slava Pestov.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: accessors compiler.cfg.stack-frame kernel layouts math
4 namespaces vectors ;
5 IN: compiler.cfg
6
7 TUPLE: basic-block < identity-tuple
8     number
9     { instructions vector }
10     { successors vector }
11     { predecessors vector }
12     { kill-block? boolean }
13     height
14     replaces
15     peeks
16     kills ;
17
18 : <basic-block> ( -- bb )
19     basic-block new
20         V{ } clone >>instructions
21         V{ } clone >>successors
22         V{ } clone >>predecessors ;
23
24 TUPLE: cfg
25     { entry basic-block }
26     word
27     label
28     stack-frame
29     frame-pointer?
30     post-order linear-order
31     predecessors-valid? dominance-valid? loops-valid? ;
32
33 : <cfg> ( word label entry -- cfg )
34     cfg new
35         swap >>entry
36         swap >>label
37         swap >>word
38         stack-frame new cell >>spill-area-align >>stack-frame ;
39
40 : cfg-changed ( cfg -- )
41     f >>post-order
42     f >>linear-order
43     f >>dominance-valid?
44     f >>loops-valid? drop ; inline
45
46 : predecessors-changed ( cfg -- )
47     f >>predecessors-valid? drop ;
48
49 : with-cfg ( ..a cfg quot: ( ..a cfg -- ..b ) -- ..b )
50     [ dup cfg ] dip with-variable ; inline
51
52 : local-allot-offset ( n -- offset )
53     cfg get stack-frame>> allot-area-base>> + ;
54
55 : spill-offset ( n -- offset )
56     cfg get stack-frame>> spill-area-base>> + ;