Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation:...

26
Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745: Register Spilling 1

Transcript of Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation:...

Page 1: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

Lecture 16

Register Allocation:

Coalescing

(Slides courtesy of Seth Goldstein and David Koes.)

Todd C. Mowry 15-745: Register Spilling 1

Page 2: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

Todd C. Mowry 15-745: Register Spilling 2

Review: An Example, k=4 v <- 1

w <- v + 3

x <- w + v

u <- v

t <- u + x

<- w

<- t

<- u

Page 3: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

Todd C. Mowry 15-745: Register Spilling 3

Review: An Example, k=4

v

w

x

u t

Compute live ranges

v <- 1

w <- v + 3

x <- w + v

u <- v

t <- u + x

<- w

<- t

<- u

Page 4: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

Todd C. Mowry 15-745: Register Spilling 4

Review: An Example, k=4

v

w

x

u t

Construct the interference graph

v

x w

u

t

v <- 1

w <- v + 3

x <- w + v

u <- v

t <- u + x

<- w

<- t

<- u

Page 5: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

Todd C. Mowry 15-745: Register Spilling 5

Review: An Example, k=4

Color the graph

v

x w

u

t

v

x

t

u

w

Voila, registers are assigned!

But, can we do better?

v <- 1

w <- v + 3

x <- w + v

u <- v

t <- u + x

<- w

<- t

<- u

Page 6: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

Todd C. Mowry 15-745: Register Spilling 6

An Example, k=4

v

x w

u

t

v

x

t

u

w

v

w

x

u t

u & v are special. They interfere, but only through a move!

v <- 1

w <- v + 3

x <- w + v

u <- v

t <- u + x

<- w

<- t

<- u

Page 7: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

Todd C. Mowry 15-745: Register Spilling 7

An Example, k=4 uv <- 1

w <- uv + 3

x <- w + uv

u <- v

t <- uv + x

<- w

<- t

<- uv

v

x w

u

t

v

x

t

u

w

uv

w

x

uv t

Rewrite the code to coalesce u & v

uv uv

Page 8: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

Todd C. Mowry 15-745: Register Spilling 8

Is Coalescing Always Good?

y

u x

b

a v

uv

Was 2-colorable, now it needs 3 colors

So, we treat moves specially.

Page 9: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

uv

Todd C. Mowry 15-745: Register Spilling 9

An Example, k=4

v

x w

u

t

v

x

t

u

w

v

w

x

u t

Interference from moves become “move edges.”

uv

v <- 1

w <- v + 3

x <- w + v

u <- v

t <- u + x

<- w

<- t

<- u

Page 10: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

Todd C. Mowry 15-745: Register Spilling 10

An Example, k=3

v

w

x

u t

Compute live ranges

v <- 1

w <- v + 3

x <- w + v

u <- v

t <- u + x

<- w

<- t

<- u

Page 11: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

Todd C. Mowry 15-745: Register Spilling 11

An Example, k=3

v

w

x

u t

Construct the interference graph

v

x w

u

t

v <- 1

w <- v + 3

x <- w + v

u <- v

t <- u + x

<- w

<- t

<- u

Page 12: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

Todd C. Mowry 15-745: Register Spilling 12

An Example, k=3

v

x w

u

t

x

t We need to spill

w

v <- 1

w <- v + 3

x <- w + v

u <- v

t <- u + x

<- w

<- t

<- u

Color the interference graph

Page 13: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

Todd C. Mowry 15-745: Register Spilling 13

An Example, k=3 v <- 1

w <- v + 3

M[]<- w

w’ <- M[]

x <- w’ + v

u <- v

t <- u + x

w’’ <- M[]

<- w’’

<- t

<- u

Rewrite program

Page 14: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

Todd C. Mowry 15-745: Register Spilling 14

An Example, k=3

Spilling reduces live ranges, which decreases register pressure.

Recalculate live ranges

v

w

x

u

t

w’

w’’

v <- 1

w <- v + 3

M[]<- w

w’ <- M[]

x <- w’ + v

u <- v

t <- u + x

w’’ <- M[]

<- w’’

<- t

<- u

v

w

x

u t

(Old)

Page 15: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

Todd C. Mowry 15-745: Register Spilling 15

An Example, k=3

Recalculate interference graph

v <- 1

w <- v + 3

M[]<- w

w’ <- M[]

x <- w’ + v

u <- v

t <- u + x

w’’ <- M[]

<- w’’

<- t

<- u

v

w

x

u

t

w’

w’’

v

x

u

t

w w’ w’’

Page 16: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

Todd C. Mowry 15-745: Register Spilling 16

uv uv

An Example, k=3

Recolor the graph

v

x

u

t

x

t

w w’ w’’ w w’ w’’

v <- 1

w <- v + 3

M[]<- w

w’ <- M[]

x <- w’ + v

u <- v

t <- u + x

w’’ <- M[]

<- w’’

<- t

<- u

v

w

x

u

t

w’

w’’

Page 17: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon Todd C. Mowry 15-745: Register Spilling 17

General Plan

•  Construct an interference graph •  Respect special registers:

–  avoid reserved registers –  use registers properly –  respect distinction between callee/caller save registers

•  Map temporaries to registers •  Generate code to save & restore •  Deal with spills

Page 18: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

Special Registers

•  Which registers can be used? –  Some registers have special uses.

•  Register 0 or 31 is often hardwired to contain 0. •  Special registers to hold return address, stack pointer, frame pointer,

global area, etc. •  Reserved registers for operating system.

–  Typically, leaves about 20 or so registers for other general uses.

•  Impact on register allocation: –  Temps should be assigned only to the non-reserved registers. –  Hard registers are pre-colored in the interference graph.

Todd C. Mowry 15-745: Register Spilling 18

Page 19: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

Register Usage Conventions

•  Certain registers are used for specific purposes by standard calling convention. –  4-6 argument registers.

•  The first 4-6 arguments to procedures/functions are always passed in these registers.

–  ~8 callee-save registers. •  These registers must be preserved across procedure calls. Thus, if a

procedure wants to use a callee-save register, it must first save the old value and then restore it before returning.

–  The remainder are caller-save registers. •  These are not preserved across procedure calls. Thus, a procedure is

free to use them without saving first. •  Includes the argument registers.

Todd C. Mowry 15-745: Register Spilling 19

Page 20: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

Todd C. Mowry 15-745: Register Spilling 20

The Big Picture

Build

Simplify

Potential Spill

Select

Actual Spill

Page 21: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

Todd C. Mowry 15-745: Register Spilling 21

Coalescing

v

x w

u

t

w’ w’’

Can u & v be coalesced? Should u & v be coalesced?

v <- 1

w <- v + 3

M[]<- w

w’ <- M[]

x <- w’ + v

u <- v

t <- u + x

w’’ <- M[]

<- w’’

<- t

<- u

Page 22: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

Briggs: Conservative Coalescing

•  Can coalesce u and v if: –  (# of neighbors of uv with degree ≥ k) < k

•  Why? –  Simplify pass removes all nodes with degree < k –  # of remaining nodes < k –  Thus, uv can be simplified

Todd C. Mowry 15-745: Register Spilling 22

v

x w

u

t

w’ w’’

uv

Page 23: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

George: Iterated Coalescing

•  Can coalesce u and v if: –  foreach neighbor t of u, either:

•  t interferes with v, or, •  degree of t < k

•  Why? –  let S be set of neighbors of u with degree < k –  If no coalescing, simplify removes all nodes in S; call that graph G1

–  If we coalesce, we can still remove all nodes in S; call that graph G2

–  G2 is a subgraph of G1

Todd C. Mowry 15-745: Register Spilling 23

Page 24: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon Todd C. Mowry 15-745: Register Spilling 24

George

u

v

S1

S2 S3

S4

x1 x2

u

u x1

x2

No coalescing, after simplification

uv x1

x2

After coalescing and simplification

Page 25: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

Why Two Methods?

•  With Briggs, one needs to look at all neighbors of a & b •  With George, only need to look at neighbors of a. •  We need to insert hard registers in graph and they will have LARGE

adjacency lists. •  Hence:

–  Precolored nodes have infinite degree –  No other precolored nodes in adjacency list –  Use George if one of a & b is precolored –  Use Briggs if both are temps

Todd C. Mowry 15-745: Register Spilling 25

Page 26: Lecture 16 Register Allocation: Coalescing · Carnegie Mellon Lecture 16 Register Allocation: Coalescing (Slides courtesy of Seth Goldstein and David Koes.) Todd C. Mowry 15-745:

Carnegie Mellon

Todd C. Mowry 15-745: Register Spilling 26

Where We Are

Build

Simplify

Potential Spill

Select

Actual Spill

Coalesce