compiler.cfg.linear-scan: more tests

char-rename
Björn Lindqvist 2016-11-14 03:21:34 +01:00
parent ffef75f8a7
commit b1ac5ae7ca
3 changed files with 128 additions and 6 deletions

View File

@ -65,11 +65,12 @@ IN: compiler.cfg.linear-scan.allocation.spilling.tests
! active-positions
{
V{ { RAX 23 } }
LH{ { RAX 23 } }
} [
f machine-registers init-allocator
H{ { 20 int-rep } } representations set
test-live-interval2 [ add-active ] keep active-positions2
test-live-interval2 [ add-active ] keep
<linked-hash> [ active-positions ] keep
] unit-test
! assign-spill
@ -84,9 +85,10 @@ IN: compiler.cfg.linear-scan.allocation.spilling.tests
! find-next-use
! inactive-positions
{ V{ } } [
{ LH{ } } [
H{ { 10 int-rep } } representations set
T{ live-interval-state { vreg 10 } } inactive-positions2
T{ live-interval-state { vreg 10 } } <linked-hash>
[ inactive-positions ] keep
] unit-test
! last-use-rep

View File

@ -1,4 +1,4 @@
USING: accessors arrays compiler.cfg.instructions
USING: accessors arrays compiler.cfg compiler.cfg.instructions
compiler.cfg.linear-scan.allocation.state
compiler.cfg.linear-scan.assignment
compiler.cfg.linear-scan.live-intervals compiler.cfg.registers
@ -125,6 +125,71 @@ IN: compiler.cfg.linear-scan.assignment.tests
] V{ } make
] unit-test
! spill/reloads-for-call-gc
! The interval should be spilled around the gc instruction at 128. And
! it's spill representation should be int-rep because on instruction
! 102 it was converted from a tagged-rep to an int-rep.
: test-call-gc ( -- ##call-gc )
T{ gc-map { gc-roots { 149 109 110 } } { derived-roots V{ } } } 128
##call-gc boa ;
: test-interval ( -- live-interval )
T{ live-interval-state
{ vreg 235 }
{ reg RDI }
{ ranges V{ { 88 94 } { 100 154 } } }
{ uses
V{
T{ vreg-use
{ n 88 }
{ def-rep tagged-rep }
}
T{ vreg-use
{ n 90 }
{ def-rep int-rep }
{ use-rep tagged-rep }
}
T{ vreg-use
{ n 100 }
{ def-rep tagged-rep }
}
T{ vreg-use
{ n 102 }
{ def-rep int-rep }
{ use-rep tagged-rep }
}
T{ vreg-use { n 144 } { use-rep int-rep } }
T{ vreg-use { n 146 } { use-rep int-rep } }
T{ vreg-use
{ n 148 }
{ def-rep int-rep }
{ use-rep int-rep }
}
T{ vreg-use
{ n 150 }
{ def-rep tagged-rep }
{ use-rep int-rep }
}
T{ vreg-use
{ n 154 }
{ use-rep tagged-rep }
}
} }
} ;
{
V{ { RDI float-rep T{ spill-slot } } }
} [
f f <basic-block> <cfg> cfg set
H{ } clone spill-slots set
H{ } clone pending-interval-assoc set
<min-heap> pending-interval-heap set
H{ { 235 float-rep } } representations set
test-interval add-pending
test-call-gc spill/reloads-for-call-gc
] unit-test
! vreg>spill-slot
{ T{ spill-slot { n 990 } } } [
{ { 10 int-rep 10 T{ spill-slot { n 990 } } } } setup-vreg-spills

View File

@ -3,7 +3,7 @@ compiler.cfg.linear-scan.live-intervals
compiler.cfg.linear-scan.numbering compiler.cfg.linear-scan.ranges
compiler.cfg.liveness compiler.cfg.registers
compiler.cfg.ssa.destruction.leaders compiler.cfg.utilities cpu.architecture
fry kernel namespaces sequences tools.test ;
cpu.x86.assembler.operands fry kernel namespaces sequences tools.test ;
IN: compiler.cfg.linear-scan.live-intervals.tests
: <live-interval-for-ranges> ( ranges -- live-interval )
@ -33,6 +33,61 @@ IN: compiler.cfg.linear-scan.live-intervals.tests
[ number-instructions ] [ cfg>sync-points ] bi
] unit-test
: test-interval ( -- live-interval )
T{ live-interval-state
{ vreg 235 }
{ reg RDI }
{ ranges V{ { 88 94 } { 100 154 } } }
{ uses
V{
T{ vreg-use
{ n 88 }
{ def-rep tagged-rep }
}
T{ vreg-use
{ n 90 }
{ def-rep int-rep }
{ use-rep tagged-rep }
}
T{ vreg-use
{ n 100 }
{ def-rep tagged-rep }
}
T{ vreg-use
{ n 102 }
{ def-rep int-rep }
{ use-rep tagged-rep }
}
T{ vreg-use { n 144 } { use-rep int-rep } }
T{ vreg-use { n 146 } { use-rep int-rep } }
T{ vreg-use
{ n 148 }
{ def-rep int-rep }
{ use-rep int-rep }
}
T{ vreg-use
{ n 150 }
{ def-rep tagged-rep }
{ use-rep int-rep }
}
T{ vreg-use
{ n 154 }
{ use-rep tagged-rep }
}
} }
} ;
! (find-use)
{
T{ vreg-use
{ n 102 }
{ def-rep int-rep }
{ use-rep tagged-rep }
}
} [
128 test-interval (find-use)
] unit-test
! find-use
{
f T{ vreg-use { n 25 } }