1 USING: accessors assocs compiler.cfg compiler.cfg.instructions
2 compiler.cfg.registers compiler.cfg.ssa.construction
3 compiler.cfg.ssa.construction.private compiler.cfg.utilities
4 compiler.test kernel namespaces sequences tools.test ;
5 IN: compiler.cfg.ssa.construction.tests
9 { V{ T{ ##phi { dst 789 } { inputs H{ } } } } }
11 H{ } clone inserting-phis set
12 789 { } 0 insns>block insert-phi-later
13 inserting-phis get values
17 H{ } clone inserting-phis set
18 { } 55 insns>block { } 1 insns>block [ connect-bbs ] keep
19 99 swap insert-phi-later
20 inserting-phis get values first first
21 [ dst>> ] [ inputs>> keys first number>> ] bi
26 HS{ 68 } live-phis set
28 T{ ##phi { dst 68 } } live-phi?
32 : reset-counters ( -- )
33 ! Reset counters so that results are deterministic w.r.t. hash order
34 reset-vreg-counter 0 basic-block set-global ;
41 : clean-up-phis ( insns -- insns' )
42 [ dup ##phi? [ [ [ [ number>> ] dip ] assoc-map ] change-inputs ] when ] map ;
48 T{ ##load-integer f 1 100 }
49 T{ ##add-imm f 2 1 50 }
50 T{ ##add-imm f 2 2 10 }
55 T{ ##load-integer f 3 3 }
60 T{ ##load-integer f 3 4 }
65 T{ ##replace f 3 D: 0 }
73 { } [ test-ssa ] unit-test
77 T{ ##load-integer f 1 100 }
78 T{ ##add-imm f 2 1 50 }
79 T{ ##add-imm f 3 2 10 }
82 } [ 0 get instructions>> ] unit-test
86 T{ ##load-integer f 4 3 }
89 } [ 1 get instructions>> ] unit-test
93 T{ ##load-integer f 5 4 }
96 } [ 2 get instructions>> ] unit-test
100 T{ ##phi f 6 H{ { 1 4 } { 2 5 } } }
101 T{ ##replace f 6 D: 0 }
114 V{ T{ ##peek f 0 D: 0 } } 2 test-bb
115 V{ T{ ##peek f 0 D: 0 } } 3 test-bb
116 V{ T{ ##replace f 0 D: 0 } } 4 test-bb
127 { } [ test-ssa ] unit-test
131 T{ ##phi f 3 H{ { 2 1 } { 3 2 } } }
132 T{ ##replace f 3 D: 0 }
147 T{ ##load-integer f 3 3 }
152 T{ ##load-integer f 3 4 }
169 { } [ test-ssa ] unit-test
171 { V{ } } [ 4 get instructions>> [ ##phi? ] filter ] unit-test
185 T{ ##load-integer f 0 4 }
190 T{ ##load-integer f 0 4 }
218 { } [ test-ssa ] unit-test
220 { V{ } } [ 5 get instructions>> [ ##phi? ] filter ] unit-test
222 { V{ } } [ 7 get instructions>> [ ##phi? ] filter ] unit-test