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 ;
9 : post-order-traversal ( bb -- )
10 dup id>> visited get key? [ drop ] [
11 dup id>> visited get conjoin
13 successors>> <reversed>
14 [ post-order-traversal ] each
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 )
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 ]