]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/cfg/linear-scan/numbering/numbering.factor
Fixing failing unit tests in compiler.tree.propagation due to constraints
[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.order ;
5 IN: compiler.cfg.linear-scan.numbering
6
7 : number-instructions ( rpo -- )
8     linearization-order 0 [
9         instructions>> [
10             [ (>>insn#) ] [ drop 2 + ] 2bi
11         ] each
12     ] reduce drop ;
13
14 SYMBOL: check-numbering?
15
16 ERROR: bad-numbering bb ;
17
18 : check-block-numbering ( bb -- )
19     dup instructions>> [ insn#>> ] map sift [ <= ] monotonic?
20     [ drop ] [ bad-numbering ] if ;
21
22 : check-numbering ( cfg -- )
23     check-numbering? get
24     [ linearization-order [ check-block-numbering ] each ] [ drop ] if ;