]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/cfg/linear-scan/numbering/numbering.factor
Language change: tuple slot setter words with stack effect ( value object -- ) are...
[factor.git] / basis / compiler / cfg / linear-scan / numbering / numbering.factor
1 ! Copyright (C) 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel accessors math sequences grouping namespaces
4 compiler.cfg.linearization ;
5 IN: compiler.cfg.linear-scan.numbering
6
7 ERROR: already-numbered insn ;
8
9 : number-instruction ( n insn -- n' )
10     [ nip dup insn#>> [ already-numbered ] [ drop ] if ]
11     [ insn#<< ]
12     [ drop 2 + ]
13     2tri ;
14
15 : number-instructions ( cfg -- )
16     linearization-order
17     0 [ instructions>> [ number-instruction ] each ] reduce
18     drop ;
19
20 SYMBOL: check-numbering?
21
22 ERROR: bad-numbering bb ;
23
24 : check-block-numbering ( bb -- )
25     dup instructions>> [ insn#>> ] map sift [ <= ] monotonic?
26     [ drop ] [ bad-numbering ] if ;
27
28 : check-numbering ( cfg -- )
29     check-numbering? get
30     [ linearization-order [ check-block-numbering ] each ] [ drop ] if ;