factor/basis/compiler/cfg/rpo/rpo.factor

36 lines
957 B
Factor
Raw Normal View History

2008-09-11 03:05:22 -04:00
! Copyright (C) 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
2008-10-22 19:39:41 -04:00
USING: kernel accessors namespaces make math sequences sets
assocs fry compiler.cfg.instructions ;
2008-09-11 03:05:22 -04:00
IN: compiler.cfg.rpo
2008-10-22 19:39:41 -04:00
SYMBOL: visited
: post-order-traversal ( bb -- )
dup id>> visited get key? [ drop ] [
dup id>> visited get conjoin
[
successors>> <reversed>
[ post-order-traversal ] each
] [ , ] bi
2008-09-11 03:05:22 -04:00
] if ;
2008-10-22 19:39:41 -04:00
: post-order ( bb -- blocks )
2008-09-11 03:05:22 -04:00
[ post-order-traversal ] { } make ;
: number-blocks ( blocks -- )
[ >>number drop ] each-index ;
2008-10-22 19:39:41 -04:00
: reverse-post-order ( bb -- blocks )
H{ } clone visited [
post-order <reversed> dup number-blocks
] with-variable ; inline
: each-basic-block ( cfg quot -- )
[ entry>> reverse-post-order ] dip each ; inline
: change-basic-blocks ( cfg quot -- cfg' )
[ '[ _ change-instructions drop ] each-basic-block ]
[ drop ]
2bi ; inline