]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/cfg/linear-scan/numbering/numbering.factor
scryfall: parse mtga deck format
[factor.git] / basis / compiler / cfg / linear-scan / numbering / numbering.factor
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
4 namespaces sequences ;
5 IN: compiler.cfg.linear-scan.numbering
6
7 : number-instruction ( n insn -- n' )
8     [ insn#<< ] [ drop 2 + ] 2bi ;
9
10 : number-instructions ( cfg -- )
11     linearization-order
12     0 [ instructions>> [ number-instruction ] each ] reduce
13     drop ;
14
15 SYMBOL: check-numbering?
16
17 ERROR: bad-numbering bb ;
18
19 : check-block-numbering ( bb -- )
20     dup instructions>> [ insn#>> ] map sift [ <= ] monotonic?
21     [ drop ] [ bad-numbering ] if ;
22
23 : check-numbering ( cfg -- )
24     check-numbering? get
25     [ linearization-order [ check-block-numbering ] each ] [ drop ] if ;