Handbook
Glossary
couple-spill-edge ( previous plan -- )
Vocabulary
compiler
.
cfg
.
register-allocation
.
chordal
.
spilling
Inputs
previous
an
object
plan
an
object
Outputs
None
Definition
USING:
accessors
assocs
compiler.cfg.instructions
compiler.cfg.utilities
kernel
namespaces
sequences
vectors
;
IN:
compiler.cfg.register-allocation.chordal.spilling
::
couple-spill-edge
( previous plan -- )
previous
bb>>
:>
from plan
bb>>
:>
to previous
exit-versions>>
clone
spill-W
set
previous
saved-exit>>
clone
spill-S
set
V{
}
clone
spill-output
set
plan
saved-entry>>
keys
[|
value
|
value plan from
predecessor-value
:>
source source
spill-W
get
key?
[
source
store-value
]
when
]
each
IH{
}
clone
:>
inputs plan
entry-phis>>
[|
value phi
|
value plan from
predecessor-value
previous
edge-register-version
phi inputs
set-at
]
assoc-each
plan
memory-phis>>
[|
value phi |
value plan from
predecessor-value
memory-name
phi inputs
set-at
]
assoc-each
from
:>
predecessor!
spill-output
get
empty?
[
]
[
##branch
new
spill-output
get
push
spill-output
get
f
insns>block
:>
edge from
1vector
edge
predecessors<<
to
1vector
edge
successors<<
from to edge
update-predecessors
from to edge
update-successors
edge predecessor!
"edge-blocks"
spill-stat
]
if
inputs
[|
phi version |
from phi
inputs>>
delete-at
version predecessor phi
inputs>>
set-at
]
assoc-each
;