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
6 IN: compiler.cfg.ssa.tests
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 ;
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 }
23 T{ ##load-immediate f V int-regs 3 3 }
28 T{ ##load-immediate f V int-regs 3 4 }
33 T{ ##replace f V int-regs 3 D 0 }
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
47 [ ] [ test-ssa ] unit-test
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 }
56 ] [ 0 get instructions>> ] unit-test
60 T{ ##load-immediate f V int-regs 4 3 }
63 ] [ 1 get instructions>> ] unit-test
67 T{ ##load-immediate f V int-regs 5 4 }
70 ] [ 2 get instructions>> ] unit-test
72 : clean-up-phis ( insns -- insns' )
73 [ dup ##phi? [ [ [ [ number>> ] dip ] assoc-map ] change-inputs ] when ] map ;
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 }
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
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
103 [ ] [ test-ssa ] unit-test
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 }