Compilers (CS362 2001S)

Class 33: Register Allocation

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

Register Allocation

A Basic Algorithm

Detour: NP-completeness

Optimistic Graph Coloring

An Example

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.)

Coalescing

The Algorithm

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

 

History

Monday, 22 January 2001

Friday, 20 April 2001

 

Back to An Abstract Assembly Language. On to Pause for Breath.

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.