remove math.blas.syntax and merge parsing words into math.blas.vectors/matrices
[factor/jcg.git] / basis / compiler / cfg / rpo / rpo.factor
blob158903b4bf4be368cbcdc1044e2c48bb93a1716c
1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel accessors namespaces make math sequences sets
4 assocs fry compiler.cfg.instructions ;
5 IN: compiler.cfg.rpo
7 SYMBOL: visited
9 : post-order-traversal ( bb -- )
10     dup id>> visited get key? [ drop ] [
11         dup id>> visited get conjoin
12         [
13             successors>> <reversed>
14             [ post-order-traversal ] each
15         ] [ , ] bi
16     ] if ;
18 : post-order ( bb -- blocks )
19     [ post-order-traversal ] { } make ;
21 : number-blocks ( blocks -- )
22     [ >>number drop ] each-index ;
24 : reverse-post-order ( bb -- blocks )
25     H{ } clone visited [
26         post-order <reversed> dup number-blocks
27     ] with-variable ; inline
29 : each-basic-block ( cfg quot -- )
30     [ entry>> reverse-post-order ] dip each ; inline
32 : change-basic-blocks ( cfg quot -- cfg' )
33     [ '[ _ change-instructions drop ] each-basic-block ]
34     [ drop ]
35     2bi ; inline