1 USING: accessors compiler.cfg compiler.cfg.debugger
2 compiler.cfg.dominance compiler.cfg.instructions
3 compiler.cfg.predecessors compiler.cfg.ssa.construction assocs
4 compiler.cfg.registers compiler.cfg.ssa.construction.private
5 compiler.cfg.utilities cpu.architecture kernel namespaces sequences tools.test
7 IN: compiler.cfg.ssa.construction.tests
11 { V{ T{ ##phi { dst 789 } { inputs H{ } } } } }
13 H{ } clone inserting-phis set
14 789 { } 0 insns>block insert-phi-later
15 inserting-phis get values
19 H{ } clone inserting-phis set
20 { } 55 insns>block { } 1 insns>block [ connect-bbs ] keep
21 99 swap insert-phi-later
22 inserting-phis get values first first
23 [ dst>> ] [ inputs>> keys first number>> ] bi
28 HS{ 68 } live-phis set
30 T{ ##phi { dst 68 } } live-phi?
34 : reset-counters ( -- )
35 ! Reset counters so that results are deterministic w.r.t. hash order
36 reset-vreg-counter 0 basic-block set-global ;
43 : clean-up-phis ( insns -- insns' )
44 [ dup ##phi? [ [ [ [ number>> ] dip ] assoc-map ] change-inputs ] when ] map ;
50 T{ ##load-integer f 1 100 }
51 T{ ##add-imm f 2 1 50 }
52 T{ ##add-imm f 2 2 10 }
57 T{ ##load-integer f 3 3 }
62 T{ ##load-integer f 3 4 }
67 T{ ##replace f 3 D 0 }
75 [ ] [ test-ssa ] unit-test
79 T{ ##load-integer f 1 100 }
80 T{ ##add-imm f 2 1 50 }
81 T{ ##add-imm f 3 2 10 }
84 ] [ 0 get instructions>> ] unit-test
88 T{ ##load-integer f 4 3 }
91 ] [ 1 get instructions>> ] unit-test
95 T{ ##load-integer f 5 4 }
98 ] [ 2 get instructions>> ] unit-test
102 T{ ##phi f 6 H{ { 1 4 } { 2 5 } } }
103 T{ ##replace f 6 D 0 }
116 V{ T{ ##peek f 0 D 0 } } 2 test-bb
117 V{ T{ ##peek f 0 D 0 } } 3 test-bb
118 V{ T{ ##replace f 0 D 0 } } 4 test-bb
129 [ ] [ test-ssa ] unit-test
133 T{ ##phi f 3 H{ { 2 1 } { 3 2 } } }
134 T{ ##replace f 3 D 0 }
149 T{ ##load-integer f 3 3 }
154 T{ ##load-integer f 3 4 }
171 [ ] [ test-ssa ] unit-test
173 [ V{ } ] [ 4 get instructions>> [ ##phi? ] filter ] unit-test
187 T{ ##load-integer f 0 4 }
192 T{ ##load-integer f 0 4 }
220 [ ] [ test-ssa ] unit-test
222 [ V{ } ] [ 5 get instructions>> [ ##phi? ] filter ] unit-test
224 [ V{ } ] [ 7 get instructions>> [ ##phi? ] filter ] unit-test