Back to An Abstract Assembly Language. On to Pause for Breath.
Held Friday, April 20, 2001
Summary
Today we consider how to assign registers to temporaries.
Overview
MOVE
in the same register, so that the MOVE can be
eliminated.
MOVE
instructions. In these cases, the values in the registers may need
to spill to memory (requiring a change in the program so that
the stack we write them to the stack whenever we change them and read
them from whenever we need them).
t10 is assigned a value
in the first statement and that value is not used again until the
hundredth statement. t10 is live for all 100 statements.
allocateRegisters(program p, regcount k) {
compute g, an interference graph for the program
while g cannot be colored with k colors
remove a node from g, spilling it to memory
rewrite the program and recompute g
end while
color g with k colors
replace each color by a register
end allocateRegisters
Here's a graph (a list of edges) to try the algorithm on. We'll try to four-color it. Note that this is a modified version of a graph that I took from Appel's book (a book we no longer use for reasons that the old CS362 students will be happy to tell you).
(A,B), (A,F), (A,G), (B,C), (B,D), (B,E), (B,K), (B,M), (C,M), (D,J), (D,K), (D,M), (E,F), (E,J), (E,M), (F,J), (F,M), (G,H), (G,I), (G,J), (G,K), (H,I), (H,J), (J,K), (J,L), (L,M)
(I haven't given the underlying program. I don't think we'll need to rewrite the program, but it may depend on choices we make.)
MOVE when it
is ``safe'' to do so.
function allocReg(program p, regcount k)
build the interference graph for p
build the list of move-pairs
create an empty stack
while p is nonempty
repeat
simplify:
remove nodes of arity < k not in move pairs,
pushing them on the stack
coalesce:
join nodes in any move pairs if safe to do so
if (we neither simplified nor coalesced)
freeze:
pick some move-pair node with arity < k, and
remove all move-pairs with that node
until no changes can be made
if there are nodes of arity >= k
spill:
remove some node of arity >= k,
pushing it on the stack
end if
end while
select:
while there are nodes on the stack
if some color can be assigned to the top node on
the stack then assign that color
otherwise, note that the top node must be spilled
recover:
if some node was spilled during the select phase,
then update the program and call allocReg again.
end allocReg
Monday, 22 January 2001
Friday, 20 April 2001
Back to An Abstract Assembly Language. On to Pause for Breath.
[Current]
[Discussions]
[Glance]
[Honesty]
[Instructions]
[Links]
[Search]
[Syllabus]
Primary
[Examples]
[Exams]
[Handouts]
[Homework]
[Labs]
[Outlines]
[Project]
[Quizzes]
[Readings]
[Reference]
Sets
[Blackboard]
[98F]
Links
Disclaimer: I usually create these pages on the fly. This means that they are rarely proofread and may contain bad grammar and incorrect details. It also means that I may update them regularly (see the history for more details). Feel free to contact me with any suggestions for changes.
This page was generated by Siteweaver on Mon Apr 30 10:52:11 2001.
This page may be found at http://www.cs.grinnell.edu/~rebelsky/Courses/CS362/2001S/outline.33.html.
You may validate
this page's HTML.
The source was last modified Fri Apr 20 10:43:13 2001.