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
7 ERROR: already-numbered insn ;
9 : number-instruction ( n insn -- n' )
10 [ nip dup insn#>> [ already-numbered ] [ drop ] if ]
15 : number-instructions ( cfg -- )
17 0 [ instructions>> [ number-instruction ] each ] reduce
20 SYMBOL: check-numbering?
22 ERROR: bad-numbering bb ;
24 : check-block-numbering ( bb -- )
25 dup instructions>> [ insn#>> ] map sift [ <= ] monotonic?
26 [ drop ] [ bad-numbering ] if ;
28 : check-numbering ( cfg -- )
30 [ linearization-order [ check-block-numbering ] each ] [ drop ] if ;