1 USING: accessors compiler.cfg compiler.cfg.debugger
2 compiler.cfg.def-use compiler.cfg.dominance
3 compiler.cfg.instructions compiler.cfg.liveness
4 compiler.cfg.registers compiler.cfg.predecessors
5 compiler.cfg.comparisons compiler.cfg.ssa.interference
6 compiler.cfg.ssa.interference.private
7 compiler.cfg.ssa.interference.live-ranges
9 cpu.architecture kernel namespaces tools.test alien.c-types
10 arrays sequences slots ;
11 IN: compiler.cfg.ssa.interference.tests
13 : test-interference ( -- )
20 : <test-vreg-info> ( vreg -- info )
21 [ ] [ insn-of dup ##tagged>integer? [ src>> ] [ dst>> ] if ] [ def-of ] tri
24 : test-vregs-intersect? ( vreg1 vreg2 -- ? )
25 [ <test-vreg-info> ] bi@ vregs-intersect? ;
27 : test-vregs-interfere? ( vreg1 vreg2 -- ? )
28 [ <test-vreg-info> ] bi@
29 [ blue >>color ] [ red >>color ] bi*
32 : test-sets-interfere? ( seq1 seq2 -- merged ? )
33 [ [ <test-vreg-info> ] map ] bi@ sets-interfere? ;
46 T{ ##replace f 3 D 0 }
48 T{ ##replace f 5 D 0 }
54 { } [ test-interference ] unit-test
56 { f } [ 0 1 test-vregs-intersect? ] unit-test
57 { f } [ 1 0 test-vregs-intersect? ] unit-test
58 { f } [ 2 3 test-vregs-intersect? ] unit-test
59 { f } [ 3 2 test-vregs-intersect? ] unit-test
60 { t } [ 0 2 test-vregs-intersect? ] unit-test
61 { t } [ 2 0 test-vregs-intersect? ] unit-test
62 { f } [ 1 3 test-vregs-intersect? ] unit-test
63 { f } [ 3 1 test-vregs-intersect? ] unit-test
64 { t } [ 3 4 test-vregs-intersect? ] unit-test
65 { t } [ 4 3 test-vregs-intersect? ] unit-test
66 { t } [ 3 5 test-vregs-intersect? ] unit-test
67 { t } [ 5 3 test-vregs-intersect? ] unit-test
68 { f } [ 3 6 test-vregs-intersect? ] unit-test
69 { f } [ 6 3 test-vregs-intersect? ] unit-test
81 T{ ##sar-imm f 13 23 4 }
83 T{ ##sar-imm f 14 24 4 }
86 T{ ##tagged>integer f 17 12 }
87 T{ ##store-memory f 16 17 14 0 7 int-rep uchar }
99 { } [ test-interference ] unit-test
101 { t } [ { 15 } { 23 13 } test-sets-interfere? nip ] unit-test
111 T{ ##load-reference f 33 ##check-nursery-branch }
112 T{ ##load-integer f 34 11 }
113 T{ ##tagged>integer f 35 32 }
114 T{ ##and-imm f 36 35 15 }
115 T{ ##compare-integer-imm-branch f 36 7 cc= }
119 T{ ##slot-imm f 48 32 1 7 }
120 T{ ##slot-imm f 50 48 1 2 }
121 T{ ##sar-imm f 65 50 4 }
122 T{ ##compare-integer-branch f 34 65 cc<= }
127 T{ ##slot-imm f 57 48 11 2 }
128 T{ ##compare f 58 33 57 cc= 20 }
129 T{ ##replace f 58 D 0 }
140 T{ ##replace-imm f f D 0 }
151 T{ ##replace-imm f f D 0 }
167 { } [ test-interference ] unit-test
169 { f } [ { 48 } { 32 35 } test-sets-interfere? nip ] unit-test
172 TUPLE: gfg { x bab } ;
181 T{ ##check-nursery-branch f 16 cc<= 75 76 }
185 T{ ##save-context f 77 78 }
186 T{ ##call-gc f T{ gc-map } }
192 T{ ##load-reference f 37 T{ bab } }
193 T{ ##load-reference f 38 { gfg 1 1 tuple 57438726 gfg 7785907 } }
194 T{ ##allot f 40 12 tuple 4 }
195 T{ ##set-slot-imm f 38 40 1 7 }
196 T{ ##set-slot-imm f 37 40 2 7 }
197 T{ ##replace f 40 D 0 }
211 T{ ##tagged>integer f 45 43 }
212 T{ ##and-imm f 46 45 15 }
213 T{ ##compare-integer-imm-branch f 46 7 cc= }
218 T{ ##slot-imm f 58 43 1 7 }
219 T{ ##slot-imm f 60 58 7 2 }
220 T{ ##compare-imm-branch f 60 bab cc= }
230 T{ ##set-slot-imm f 43 44 2 7 }
231 T{ ##write-barrier-imm f 44 2 7 34 35 }
242 T{ ##replace f 44 R 0 }
243 T{ ##replace-imm f bab D 0 }
248 T{ ##call f bad-slot-value }
263 T{ ##replace f 44 R 0 }
264 T{ ##replace-imm f bab D 0 }
269 T{ ##call f bad-slot-value }
292 { } [ test-interference ] unit-test
294 { t } [ 43 45 test-vregs-intersect? ] unit-test
295 { f } [ 43 45 test-vregs-interfere? ] unit-test
297 { t } [ 43 46 test-vregs-intersect? ] unit-test
298 { t } [ 43 46 test-vregs-interfere? ] unit-test
300 { f } [ 45 46 test-vregs-intersect? ] unit-test
301 { f } [ 45 46 test-vregs-interfere? ] unit-test
303 { f } [ { 43 } { 45 } test-sets-interfere? nip ] unit-test
307 [ [ <test-vreg-info> ] map ] tri@
308 sets-interfere? [ sets-interfere? nip ] dip
320 T{ ##sar-imm f 16 31 4 }
321 T{ ##load-integer f 17 0 }
322 T{ ##copy f 33 17 int-rep }
327 T{ ##phi f 21 H{ { 1 33 } { 3 32 } } }
328 T{ ##compare-integer-branch f 21 16 cc< }
332 T{ ##add-imm f 27 21 1 }
333 T{ ##copy f 32 27 int-rep }
353 { } [ test-interference ] unit-test
357 [ [ <test-vreg-info> ] map ] tri@
358 sets-interfere? [ sets-interfere? nip ] dip
361 { f } [ 33 21 test-vregs-intersect? ] unit-test
362 { f } [ 32 21 test-vregs-intersect? ] unit-test
363 { f } [ 32 33 test-vregs-intersect? ] unit-test