compiler.cfg.linear-scan: more tests
parent
ffef75f8a7
commit
b1ac5ae7ca
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 } }
|
||||
|
|
Loading…
Reference in New Issue