1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel math accessors sequences namespaces
4 compiler.cfg compiler.vops compiler.lvops ;
5 IN: compiler.machine.builder
9 : number-basic-block ( basic-block -- )
10 #! Make this fancy later.
11 dup number>> [ drop ] [
12 block-counter [ dup 1+ ] change >>number
14 successors>> <reversed>
15 [ number-basic-block ] each
19 : flatten-basic-blocks ( procedure -- blocks )
22 [ number-basic-block ]
26 GENERIC: linearize-instruction ( basic-block insn -- )
28 M: object linearize-instruction
31 M: %b linearize-instruction
32 drop successors>> first number>> _b emit ;
34 : conditional-branch ( basic-block insn class -- )
36 [ [ first number>> ] [ [ in>> ] [ code>> ] bi ] [ ] tri* emit ]
37 [ 2drop second number>> _b emit ]
40 M: %bi linearize-instruction _bi conditional-branch ;
41 M: %bf linearize-instruction _bf conditional-branch ;
43 : build-mr ( procedure -- insns )
45 flatten-basic-blocks [
46 [ number>> _label emit ]
47 [ dup instructions>> [ linearize-instruction ] with each ]