]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/cfg/predecessors/predecessors.factor
Switch to https urls
[factor.git] / basis / compiler / cfg / predecessors / predecessors.factor
1 ! Copyright (C) 2008, 2009 Slava Pestov.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs compiler.cfg.rpo compiler.cfg.utilities
4 kernel sequences ;
5 IN: compiler.cfg.predecessors
6
7 <PRIVATE
8
9 : update-predecessors ( bb -- )
10     dup successors>> [ predecessors>> push ] with each ;
11
12 : update-phi ( bb ##phi -- )
13     [
14         swap predecessors>>
15         '[ drop _ member-eq? ] assoc-filter
16     ] change-inputs drop ;
17
18 : update-phis ( bb -- )
19     dup [ update-phi ] with each-phi ;
20
21 : compute-predecessors ( cfg -- )
22     [ [ V{ } clone >>predecessors drop ] each-basic-block ]
23     [ [ update-predecessors ] each-basic-block ]
24     [ [ update-phis ] each-basic-block ] tri ;
25
26 PRIVATE>
27
28 : needs-predecessors ( cfg -- )
29     dup predecessors-valid?>> [ drop ]
30     [ t >>predecessors-valid? compute-predecessors ] if ;