1 ! Copyright (C) 2009 Slava Pestov.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: accessors compiler.cfg.linearization grouping kernel math
5 IN: compiler.cfg.linear-scan.numbering
7 : number-instruction ( n insn -- n' )
8 [ insn#<< ] [ drop 2 + ] 2bi ;
10 : number-instructions ( cfg -- )
12 0 [ instructions>> [ number-instruction ] each ] reduce
15 SYMBOL: check-numbering?
17 ERROR: bad-numbering bb ;
19 : check-block-numbering ( bb -- )
20 dup instructions>> [ insn#>> ] map sift [ <= ] monotonic?
21 [ drop ] [ bad-numbering ] if ;
23 : check-numbering ( cfg -- )
25 [ linearization-order [ check-block-numbering ] each ] [ drop ] if ;