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
7 TUPLE: basic-block < identity-tuple
9 { instructions vector }
11 { predecessors vector }
12 { kill-block? boolean }
18 : <basic-block> ( -- bb )
20 V{ } clone >>instructions
21 V{ } clone >>successors
22 V{ } clone >>predecessors ;
30 post-order linear-order
31 predecessors-valid? dominance-valid? loops-valid? ;
33 : <cfg> ( word label entry -- cfg )
38 stack-frame new cell >>spill-area-align >>stack-frame ;
40 : cfg-changed ( cfg -- )
44 f >>loops-valid? drop ; inline
46 : predecessors-changed ( cfg -- )
47 f >>predecessors-valid? drop ;
49 : with-cfg ( ..a cfg quot: ( ..a cfg -- ..b ) -- ..b )
50 [ dup cfg ] dip with-variable ; inline
52 : local-allot-offset ( n -- offset )
53 cfg get stack-frame>> allot-area-base>> + ;
55 : spill-offset ( n -- offset )
56 cfg get stack-frame>> spill-area-base>> + ;