Register Allocation by Puzzle Solving

1 / 43

# Register Allocation by Puzzle Solving - PowerPoint PPT Presentation

Register Allocation by Puzzle Solving Jens Palsberg UCLA Computer Science Department University of California, Los Angeles palsberg@ucla.edu This talk Register allocation Aliased registers and pre-coloring Optimal live-range splitting produces elementary programs

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

## Register Allocation by Puzzle Solving

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

### Register Allocation by Puzzle Solving

Jens Palsberg

UCLA Computer Science Department

University of California, Los Angeles

palsberg@ucla.edu

This talk
• Register allocation
• Aliased registers and pre-coloring
• Optimal live-range splitting produces elementary programs
• Elementary programs have elementary interference graphs
• Coloring elementary graphs is the same as solving puzzles
• A linear-time puzzle solving algorithm
• Spilling
• Experimental results

A Compiler

source language

parser

intermediate representation

code generator

machine code

A Better Compiler

source language

parser

intermediate representation

code generator with a

register allocator

machine code

What is Register Allocation?

A = 10

B = 20

C = A + 30

Print C + 40 + B

Assume we have

two registers

Register allocation = liveness analysis + graph coloring

A = 10

B = 20

C = A + 30

Print C + 40 + B

A

Interference graph:

B,A

A

B

C

With colors:

B,C

A

B

C

After Register Allocation

A = 10

B = 20

C = A + 30

Print C + 40 + B

A

B

C

R1 = 10

R2 = 20

R1 = R1 + 30

Print R1 + 40 + R2

Core (Spill-free) Register Allocation Problem

Instance: a program P and

a number K of available registers.

Problem: can each variable of P be mapped to one of the K registers such that:

variables with interfering live ranges

are assigned to different registers?

Theorem (Chaitin et al., 1981): NP-complete

A program in SSA form has a chordal interference graph
• Proved by three groups independently in 2005:
• Bouchez (ENS Lyon)
• Brisk et al. (UCLA)
• Hack (U. Karlsruhe)
• A chordal graph can be colored in linear time

Aliased registers on the Pentium

32 bits

EAX

EBX

ECX

EDX

16 bits

AX

BX

CX

DX

8 bits

CH

CL

BH

BL

DH

DL

AH

AL

Pre-coloring

Weighted Graphs and Aligned 1-2-coloring
• Nodes have weight one or two
• Two numbers 2i and 2i+1 are aligned
• Aligned 1-2-coloring:
• assigns a color to every vertex of weight one
• assigns two aligned colors to every vertex of weight two
• Partial aligned 1-2-coloring: partial function
• models pre-coloring

Aligned 1-2-coloring Extension

Instance: a number 2K of colors,

a weighted graph G, and

a partial aligned 1-2-coloring C of G

Problem: Extend C to an aligned 1-2-coloring

of G.

Aligned 1-2-coloring:no vertex is pre-colored

Coloring Extension: all vertices have weight one

Coloring: no vertex is pre-colored; all weight one

Related work

This talk
• Register allocation
• Aliased registers and pre-coloring
• Optimal live-range splitting produces elementary programs
• Elementary programs have elementary interference graphs
• Coloring elementary graphs is the same as solving puzzles
• A linear-time puzzle solving algorithm
• Spilling
• Experimental results

From strict programs to elementary programs
• Optimal live range splitting : strict program  elementary program
• Used by Appel and George (PLDI 2001)

Basic block

Statement1

Parallel copy

Statement2

A program P is an elementary program if:
• P is strict
• P is in static single assignment form
• For any variable v of P, LR(v) contains at most one program point outside the basic block that contains def(v)
• If two variables u,v of P interfere, then either def(u) = def(v), or kill(u) = kill(v)
• If two variables u,v of P interfere, then either LR(u)  LR(v), or LR(v)  LR(u)

A clique substitution of P3
• P3 is a path with three vertices   

Elementary graphs
• Definition: G is an elementary graph if and only if every connected component of G is a clique substitution of P3
• Theorem: An elementary program has an elementary interference graph.

Six classes of graphs

This talk
• Register allocation
• Aliased registers and pre-coloring
• Optimal live-range splitting produces elementary programs
• Elementary programs have elementary interference graphs
• Coloring elementary graphs is the same as solving puzzles
• A linear-time puzzle solving algorithm
• Spilling
• Experimental results

A puzzle board

The six kinds of pieces

A puzzle and a solution

From graphs to puzzles
• Given PX,Y,Z we build a puzzle:
• Vertex  piece
• Color  column
• X-clique  upper row
• Y-clique  both rows
• Z-clique  lower row
• Precoloring  some pieces are on the board already
• Theorem: Aligned 1-2-coloring extension for clique substitutions of P3 and puzzle solving are equivalent under linear-time reductions

Example program

Counterexample 1

Lesson: use a size-2 piece before two size-1 pieces

Counterexample 2

Lesson: statements 7-10 must come before statements 11-14

Counterexample 3

Lesson: statement 15 must come before statements 11-14

Counterexample 4

Lesson: the order in statement 11-14 is crucial

From graph coloring to puzzle solving
• Theorem: A puzzle is solvable if and only if our program succeeds on the puzzle
• Our puzzle solving program runs in linear time

This talk
• Register allocation
• Aliased registers and pre-coloring
• Optimal live-range splitting produces elementary programs
• Elementary programs have elementary interference graphs
• Coloring elementary graphs is the same as solving puzzles
• A linear-time puzzle solving algorithm
• Spilling
• Experimental results

Spilling
• Visit each puzzle once
• If the puzzle is not solvable, then remove some pieces and try to solve again
• Each time we remove a piece, we also remove all other pieces that stem from the same variable in the original program