]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/cfg/ssa/ssa-tests.factor
db configurations factored out through db.info
[factor.git] / basis / compiler / cfg / ssa / ssa-tests.factor
1 USING: accessors compiler.cfg compiler.cfg.debugger
2 compiler.cfg.dominance compiler.cfg.instructions
3 compiler.cfg.predecessors compiler.cfg.ssa assocs
4 compiler.cfg.registers cpu.architecture kernel namespaces sequences
5 tools.test vectors ;
6 IN: compiler.cfg.ssa.tests
7
8 : reset-counters ( -- )
9     ! Reset counters so that results are deterministic w.r.t. hash order
10     0 vreg-counter set-global
11     0 basic-block set-global ;
12
13 reset-counters
14
15 V{
16     T{ ##load-immediate f V int-regs 1 100 }
17     T{ ##add-imm f V int-regs 2 V int-regs 1 50 }
18     T{ ##add-imm f V int-regs 2 V int-regs 2 10 }
19     T{ ##branch }
20 } 0 test-bb
21
22 V{
23     T{ ##load-immediate f V int-regs 3 3 }
24     T{ ##branch }
25 } 1 test-bb
26
27 V{
28     T{ ##load-immediate f V int-regs 3 4 }
29     T{ ##branch }
30 } 2 test-bb
31
32 V{
33     T{ ##replace f V int-regs 3 D 0 }
34     T{ ##return }
35 } 3 test-bb
36
37 0 get 1 get 2 get V{ } 2sequence >>successors drop
38 1 get 3 get 1vector >>successors drop
39 2 get 3 get 1vector >>successors drop
40
41 : test-ssa ( -- )
42     cfg new 0 get >>entry
43     compute-predecessors
44     construct-ssa
45     drop ;
46
47 [ ] [ test-ssa ] unit-test
48
49 [
50     V{
51         T{ ##load-immediate f V int-regs 1 100 }
52         T{ ##add-imm f V int-regs 2 V int-regs 1 50 }
53         T{ ##add-imm f V int-regs 3 V int-regs 2 10 }
54         T{ ##branch }
55     }
56 ] [ 0 get instructions>> ] unit-test
57
58 [
59     V{
60         T{ ##load-immediate f V int-regs 4 3 }
61         T{ ##branch }
62     }
63 ] [ 1 get instructions>> ] unit-test
64
65 [
66     V{
67         T{ ##load-immediate f V int-regs 5 4 }
68         T{ ##branch }
69     }
70 ] [ 2 get instructions>> ] unit-test
71
72 : clean-up-phis ( insns -- insns' )
73     [ dup ##phi? [ [ [ [ number>> ] dip ] assoc-map ] change-inputs ] when ] map ;
74
75 [
76     V{
77         T{ ##phi f V int-regs 6 H{ { 1 V int-regs 4 } { 2 V int-regs 5 } } }
78         T{ ##replace f V int-regs 6 D 0 }
79         T{ ##return }
80     }
81 ] [
82     3 get instructions>>
83     clean-up-phis
84 ] unit-test
85
86 reset-counters
87
88 V{ } 0 test-bb
89 V{ } 1 test-bb
90 V{ T{ ##peek f V int-regs 0 D 0 } } 2 test-bb
91 V{ T{ ##peek f V int-regs 0 D 0 } } 3 test-bb
92 V{ T{ ##replace f V int-regs 0 D 0 } } 4 test-bb
93 V{ } 5 test-bb
94 V{ } 6 test-bb
95
96 0 get 1 get 5 get V{ } 2sequence >>successors drop
97 1 get 2 get 3 get V{ } 2sequence >>successors drop
98 2 get 4 get 1vector >>successors drop
99 3 get 4 get 1vector >>successors drop
100 4 get 6 get 1vector >>successors drop
101 5 get 6 get 1vector >>successors drop
102
103 [ ] [ test-ssa ] unit-test
104
105 [
106     V{
107         T{ ##phi f V int-regs 3 H{ { 2 V int-regs 1 } { 3 V int-regs 2 } } }
108         T{ ##replace f V int-regs 3 D 0 }
109     }
110 ] [
111     4 get instructions>>
112     clean-up-phis
113 ] unit-test