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

28 lines
800 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 ;
IN: compiler.cfg.predecessors
: update-predecessors ( bb -- )
dup successors>> [ predecessors>> push ] with each ;
: update-phi ( bb ##phi -- )
[
swap predecessors>>
'[ drop _ memq? ] assoc-filter
] change-inputs drop ;
: update-phis ( bb -- )
dup instructions>> [
dup ##phi? [ update-phi ] [ 2drop ] if
] with each ;
: compute-predecessors ( cfg -- cfg' )
{
[ [ V{ } clone >>predecessors drop ] each-basic-block ]
[ [ update-predecessors ] each-basic-block ]
[ [ update-phis ] each-basic-block ]
[ ]
} cleave ;