Handbook
Glossary
backtracking-allocation ( intervals/syncs machine-regs -- intervals )
Vocabulary
compiler
.
cfg
.
register-allocation
.
backtracking
Inputs
intervals/syncs
an
object
machine-regs
an
object
Outputs
intervals
an
object
Definition
USING:
accessors
assocs
compiler.cfg.linear-scan.allocation.state
compiler.cfg.linear-scan.live-intervals
compiler.cfg.register-allocation.occupancy
compiler.cfg.register-allocation.spill-sites
heaps
kernel
namespaces
sequences
;
IN:
compiler.cfg.register-allocation.backtracking
::
backtracking-allocation
( intervals/syncs machine-regs -- intervals )
intervals/syncs
[
live-interval-state?
]
filter
[
clone
]
map
backtracking-original-intervals
set
intervals/syncs
prepare-cold-spills
machine-regs
registers
set
H{
}
clone
spill-slots
set
<max-heap>
bundle-queue
set
V{
}
clone
assigned-bundles
set
machine-regs
[
[
<register-occupancy>
]
H{
}
map>assoc
]
assoc-map
bundle-occupancy
set
0
backtracking-evictions
set
0
backtracking-splits
set
0
backtracking-merges
set
0
backtracking-shared-homes
set
0
backtracking-hint-hits
set
0
backtracking-directed-splits
set
0
backtracking-cluster-splits
set
0
backtracking-minimal-splits
set
0
backtracking-split-budget-exhaustions
set
0
backtracking-second-chance-attempts
set
0
backtracking-second-chance-assignments
set
0
backtracking-register-transitions
set
0
backtracking-edge-entry-reloads
set
0
backtracking-interior-gaps-skipped
set
intervals/syncs
[
live-interval-state?
]
filter
coalesce-bundle-groups
:>
groups groups
initialize-spillsets
intervals/syncs
[
live-interval-state?
not
]
filter
:>
syncs groups
[
syncs
append
prepare-bundles
dup
empty?
[
drop
]
[
<allocation-bundle>
enqueue-bundle
]
if
]
each
bundle-queue
get
[
drop
process-bundle
]
slurp-heap
assigned-bundles
get
[
intervals>>
]
map
concat
allocate-second-chance
finish-loop-spills
;