1 ! Copyright (C) 2008, 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs compiler.cfg.rpo compiler.cfg.utilities
5 IN: compiler.cfg.predecessors
9 : update-predecessors ( bb -- )
10 dup successors>> [ predecessors>> push ] with each ;
12 : update-phi ( bb ##phi -- )
15 '[ drop _ member-eq? ] assoc-filter
16 ] change-inputs drop ;
18 : update-phis ( bb -- )
19 dup [ update-phi ] with each-phi ;
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 ;
28 : needs-predecessors ( cfg -- )
29 dup predecessors-valid?>> [ drop ]
30 [ t >>predecessors-valid? compute-predecessors ] if ;