1 ! Copyright (C) 2008, 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel accessors sequences combinators combinators.short-circuit
4 classes vectors compiler.cfg compiler.cfg.instructions compiler.cfg.rpo ;
5 IN: compiler.cfg.empty-blocks
7 : update-predecessor ( bb -- )
8 ! We have to replace occurrences of bb with bb's successor
9 ! in bb's predecessor's list of successors.
10 dup predecessors>> first [
12 2dup eq? [ drop successors>> first ] [ nip ] if
14 ] change-successors drop ;
16 : update-successor ( bb -- )
17 ! We have to replace occurrences of bb with bb's predecessor
18 ! in bb's sucessor's list of predecessors.
19 dup successors>> first [
21 2dup eq? [ drop predecessors>> first ] [ nip ] if
23 ] change-predecessors drop ;
25 : delete-basic-block ( bb -- )
26 [ update-predecessor ] [ update-successor ] bi ;
28 : delete-basic-block? ( bb -- ? )
30 [ instructions>> length 1 = ]
31 [ predecessors>> length 1 = ]
32 [ successors>> length 1 = ]
33 [ instructions>> first ##branch? ]
36 : delete-empty-blocks ( cfg -- cfg' )
37 dup [ dup delete-basic-block? [ delete-basic-block ] [ drop ] if ] each-basic-block