Handbook
Glossary
rewrite-clobber-insn ( insn distances -- )
Vocabulary
compiler
.
cfg
.
register-allocation
.
chordal
.
spilling
Inputs
insn
an
object
distances
an
object
Outputs
None
Definition
USING:
assocs
compiler.cfg.def-use
compiler.cfg.linear-scan.live-intervals
compiler.cfg.register-allocation.chordal.spilling.next-use
compiler.utilities
kernel
namespaces
sequences
;
IN:
compiler.cfg.register-allocation.chordal.spilling
::
rewrite-clobber-insn
( insn distances -- )
insn
spill-insn-uses
:>
uses uses
[|
value |
value
spill-W
get
key?
[
value
store-value
]
when
]
each
spill-W
get
keys
distances
evict-values
uses
[
dup
memory-name
]
H{
}
map>assoc
spill-use-renaming
set
insn
defs-vregs
:>
defs insn
hairy-clobber-insn?
[
insn
temp-vregs
distances
limit-residents
defs
[
dup
memory-name
]
H{
}
map>assoc
spill-def-renaming
set
insn
spill-rename-insn-defs
defs
[
spill-S
get
conjoin
]
each
]
[
defs insn
temp-vregs
append
distances
limit-residents
defs
[
dup
spill-W
get
set-at
]
each
]
if
insn
spill-rename-insn-uses
insn
rewrite-gc-map
insn
spill-output
get
push
distances
forget-dead-residents
;