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

34 lines
927 B
Factor

! Copyright (C) 2008, 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: kernel accessors combinators 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 -- cfg' )
{
[ [ V{ } clone >>predecessors drop ] each-basic-block ]
[ [ update-predecessors ] each-basic-block ]
[ [ update-phis ] each-basic-block ]
[ ]
} cleave ;
PRIVATE>
: needs-predecessors ( cfg -- cfg' )
dup predecessors-valid?>>
[ compute-predecessors t >>predecessors-valid? ] unless ;