factor/basis/compiler/cfg/predecessors/predecessors.factor

31 lines
871 B
Factor

! Copyright (C) 2008, 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: kernel accessors fry sequences assocs compiler.cfg.rpo
compiler.cfg.instructions compiler.cfg.utilities ;
IN: compiler.cfg.predecessors
<PRIVATE
: update-predecessors ( bb -- )
dup successors>> [ predecessors>> push ] with each ;
: update-phi ( bb ##phi -- )
[
swap predecessors>>
'[ drop _ member-eq? ] assoc-filter
] change-inputs drop ;
: update-phis ( bb -- )
dup [ update-phi ] with each-phi ;
: compute-predecessors ( cfg -- )
[ [ V{ } clone >>predecessors drop ] each-basic-block ]
[ [ update-predecessors ] each-basic-block ]
[ [ update-phis ] each-basic-block ] tri ;
PRIVATE>
: needs-predecessors ( cfg -- )
dup predecessors-valid?>> [ drop ]
[ t >>predecessors-valid? compute-predecessors ] if ;