register allocationcons.mit.edu/fa18/slides/f18-lecture-23.pdf · • decide which webs get a...
TRANSCRIPT
![Page 1: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/1.jpg)
Register Allocation
![Page 2: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/2.jpg)
Outline • What is register allocation • Webs • Interference Graphs • Graph coloring • Spilling • Splitting • More optimizations
5
![Page 3: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/3.jpg)
Storing values between def and use • Program computes with values
– value definitions (where computed) – value uses (where read to compute new values)
• Values must be stored between def and use – First Option
• store each value in memory at definition • retrieve from memory at each use
– Second Option • store each value in register at definition • retrieve value from register at each use
![Page 4: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/4.jpg)
Register Allocation • Deciding which values to store in limited
number of registers
• Register allocation has a direct impact on performance – Affects almost every statement of the program – Eliminates expensive memory instructions – # of instructions goes down due to direct
manipulation of registers • Limited mem-to-mem ALU ops, may need two instructions
– Probably is the optimization with the most impact!
![Page 5: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/5.jpg)
What can be put in a register? • Values stored in compiler-generated temps
• Language-level values – Values stored in local scalar variables – Big constants – Values stored in array elements and object fields
• Issue: alias analysis
• Register set depends on the data-type – floating-point values in floating point registers – integer and pointer values in integer registers
![Page 6: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/6.jpg)
Issues • Fewer instructions when using registers
– Additional instructions when using memory accesses
• Registers are faster than memory – wider gap in faster, newer processors – Factor of about 4 bandwidth, factor of about 3 latency – Could be bigger if program characteristics were different
• But only a small number of registers available – Usually 16 integer and 16 floating-point registers – Some of those registers have fixed users (ex: RSP, RBP)
![Page 7: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/7.jpg)
Outline • What is register allocation • Key ideas in register allocation • Webs • Interference Graphs • Graph coloring • Splitting • More optimizations
15
![Page 8: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/8.jpg)
Summary of Register Allocation • You want to put each temporary in a register
– But, you don’t have enough registers.
• Key Ideas: – When a temporary goes dead, its register can be reused – Two live temporaries can’t use the same register at the same time
![Page 9: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/9.jpg)
Summary of Register Allocation • When a temporary goes dead, its register can be reused • Example:
a := c + d e := a + b f := e - 1
(assume that a and e die after use) • temporaries a, e and f can go in the same register
r1 := c + d r1 := r1 + b r1:= r1 – 1
![Page 10: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/10.jpg)
Summary of Register Allocation • Two live temporaries can’t use the same register at the
same time
• Example 2: a := c + d e := a + b f := e - a
• temporaries e and a can not go in the same register r1 := c + d r2 := r1 + b r1 := r2 – r1
![Page 11: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/11.jpg)
• Sometimes more live variables than registers a := c + d e := c + b f := e – c g := e + f h := a + g
(assume only g and h live at the end) • You can split a live range by storing to memory
a := c + d store a e := c + b f := e – c g := e + f load a h := a + g
When things don’t work out
Won’t work for 2 registers
![Page 12: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/12.jpg)
Web-Based Register Allocation • Determine live ranges for each value (web) • Determine overlapping ranges (interference) • Compute the benefit of keeping each web in a
register (spill cost) • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard registers to webs (assignment) • Generate code including spills (code gen)
![Page 13: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/13.jpg)
Outline • What is register allocation • Key ideas in register allocation • Webs • Interference Graphs • Graph coloring • Splitting • More optimizations
25
![Page 14: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/14.jpg)
Webs • Starting Point: def-use chains (DU chains)
– Connects definition to all reachable uses
• Conditions for putting defs and uses into same web – Def and all reachable uses must be in same web – All defs that reach same use must be in same web
• Use a union-find algorithm
![Page 15: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/15.jpg)
Example
def y
def x use y
def x def y
use x def x
use x
use x use y
![Page 16: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/16.jpg)
Example
def y
def x use y
def x def y
use x def x
use x
use x use y
![Page 17: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/17.jpg)
Example
def y
def x use y
def x def y
use x def x
use x
use x use y
![Page 18: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/18.jpg)
Example
def y
def x use y
def x def y
use x def x
use x
use x use y
![Page 19: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/19.jpg)
Example
def y
def x use y
def x def y
use x def x
use x
use x use y
![Page 20: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/20.jpg)
Example
def y
def x use y
def x def y
use x def x
use x
use x use y
![Page 21: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/21.jpg)
Example
def y
def x use y
def x def y
use x def x
use x
use x use y
![Page 22: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/22.jpg)
Example
def y
def x use y
def x def y
use x def x
use x
use x use y
s1
s2
s3
s4
![Page 23: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/23.jpg)
Webs • Web is unit of register allocation
• If web allocated to a given register R – All definitions computed into R – All uses read from R
• If web allocated to a memory location M – All definitions computed into M – All uses read from M
![Page 24: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/24.jpg)
Outline • What is register allocation • Webs • Interference Graphs • Graph coloring • Splitting • More optimizations
31
![Page 25: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/25.jpg)
Convex Sets and Live Ranges • Concept of convex set
• A set S is convex if – A, B in S and C is on a path from A to B implies – C is in S
• Concept of live range of a web – Minimal convex set of instructions that includes all defs
and uses in web – Intuitively, region in which web’s value is live
![Page 26: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/26.jpg)
Interference • Two webs interfere if their live ranges overlap
(have a nonemtpy intersection)
• If two webs interfere, values must be stored in different registers or memory locations
• If two webs do not interfere, can store values in same register or memory location
![Page 27: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/27.jpg)
Example
def y
def x use y
def x def y
use x def x
use x
use x use y
s1
s2
s3
s4
![Page 28: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/28.jpg)
Example
def y
def x use y
use x def x
use x
s1
s2
s3
s4
def x def y
use x use y
![Page 29: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/29.jpg)
Example
def y
def x use y
use x def x
use x
s1
s2
s3
s4
def x def y
use x use y
Webs s1 and s2 interfere Webs s2 and s3 interfere
![Page 30: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/30.jpg)
Interference Graph • Representation of webs and their interference
– Nodes are the webs – An edge exists between two nodes if they interfere
s1 s2
s3 s4
![Page 31: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/31.jpg)
Example
def y
def x use y
use x def x
use x
s1
s2
s3
s4
def x def y
use x use y
s1 s2
s3 s4
![Page 32: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/32.jpg)
Example
def y
def x use y
use x def x
use x
s1
s2
s3
s4
def x def y
use x use y
Webs s1 and s2 interfere Webs s2 and s3 interfere
s1 s2
s3 s4
![Page 33: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/33.jpg)
Outline • Overview of procedure optimizations • What is register allocation • A simple register allocator • Webs • Interference Graphs • Graph coloring • Splitting • More optimizations
37
![Page 34: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/34.jpg)
Register Allocation Using Graph Coloring
• Each web is allocated a register – each node gets a register (color)
• If two webs interfere they cannot use the same register – if two nodes have an edge between them, they cannot
have the same color
s1 s2
s3 s4
![Page 35: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/35.jpg)
Graph Coloring • Assign a color to each node in graph
• Two nodes connected to same edge must have different colors
• Classic problem in graph theory
• NP complete – But good heuristics exist for register allocation
![Page 36: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/36.jpg)
Graph Coloring Example
![Page 37: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/37.jpg)
Graph Coloring Example
• 1 Color
![Page 38: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/38.jpg)
Graph Coloring Example
![Page 39: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/39.jpg)
Graph Coloring Example
• 2 Colors
![Page 40: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/40.jpg)
Graph Coloring Example
![Page 41: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/41.jpg)
Graph Coloring Example
• Still 2 Colors
![Page 42: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/42.jpg)
Graph Coloring Example
![Page 43: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/43.jpg)
Graph Coloring Example
• 3 Colors
![Page 44: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/44.jpg)
Heuristics for Register Coloring • Coloring a graph with N colors • If degree < N (degree of a node = # of edges)
– Node can always be colored – After coloring the rest of the nodes, you’ll have at least
one color left to color the current node • If degree >= N
– still may be colorable with N colors
![Page 45: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/45.jpg)
Heuristics for Register Coloring • Remove nodes that have degree < N
– push the removed nodes onto a stack
• When all the nodes have degree >= N – Find a node to spill (no color for that node) – Remove that node
• When empty, start to color – pop a node from stack back – Assign it a color that is different from its connected
nodes (since degree < N, a color should exist)
![Page 46: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/46.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
![Page 47: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/47.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
![Page 48: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/48.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4
![Page 49: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/49.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4 s2
![Page 50: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/50.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4 s2 s1
![Page 51: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/51.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4 s2 s1 s3
![Page 52: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/52.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4 s2 s1 s3
![Page 53: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/53.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4 s2 s1 s3
![Page 54: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/54.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4 s2 s1
![Page 55: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/55.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4 s2 s1
![Page 56: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/56.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4 s2
![Page 57: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/57.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4 s2
![Page 58: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/58.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4
![Page 59: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/59.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4
![Page 60: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/60.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
![Page 61: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/61.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
![Page 62: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/62.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
![Page 63: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/63.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
s4
![Page 64: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/64.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
s4
![Page 65: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/65.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
s4 s3
![Page 66: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/66.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
s4 s3 s2
![Page 67: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/67.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
s4 s3 s2
![Page 68: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/68.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
s4 s3 s2
![Page 69: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/69.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
s4 s3
![Page 70: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/70.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
s4 s3
![Page 71: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/71.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
s4
![Page 72: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/72.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
s4
![Page 73: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/73.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
![Page 74: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/74.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
![Page 75: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/75.jpg)
What Now? • Option 1
– Pick a web and allocate value in memory – All defs go to memory, all uses come from memory
• Option 2 – Split the web into multiple webs
• In either case, will retry the coloring
![Page 76: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/76.jpg)
Which web to pick? • One with interference degree >= N • One with minimal spill cost (cost of placing value
in memory rather than in register) • What is spill cost?
– Cost of extra load and store instructions
![Page 77: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/77.jpg)
Ideal and Useful Spill Costs • Ideal spill cost - dynamic cost of extra load and
store instructions. Can’t expect to compute this. – Don’t know which way branches resolve – Don’t know how many times loops execute – Actual cost may be different for different executions
• Solution: Use a static approximation – profiling can give instruction execution frequencies – or use heuristics based on structure of control flow
graph
![Page 78: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/78.jpg)
One Way to Compute Spill Cost • Goal: give priority to values used in loops • So assume loops execute 10 or 100 times • Spill cost =
– sum over all def sites of cost of a store instruction times 10 to the loop nesting depth power, plus
– sum over all use sites of cost of a load instruction times 10 to the loop nesting depth power
• Choose the web with the lowest spill cost
![Page 79: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/79.jpg)
Spill Cost Example
def x def y
use y def y
use x use y
Spill Cost For x storeCost+loadCost
Spill Cost For y 9*storeCost+9*loadCost
With 1 Register, Which Variable Gets Spilled?
![Page 80: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/80.jpg)
Outline • Overview of procedure optimizations • What is register allocation • A simple register allocator • Webs • Interference Graphs • Graph coloring • Splitting • More optimizations
47
![Page 81: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/81.jpg)
Splitting Rather Than Spilling • Split the web
– Split a web into multiple webs so that there will be less interference in the interference graph making it N-colorable
– Spill the value to memory and load it back at the points where the web is split
![Page 82: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/82.jpg)
Splitting Example def z use z
def x def y use x use x use y
use z
x y z
![Page 83: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/83.jpg)
Splitting Example def z use z
def x def y use x use x use y
use z
x y z
x y
z
![Page 84: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/84.jpg)
Splitting Example def z use z
def x def y use x use x use y
use z
x y z
x y
z
2 colorable?
![Page 85: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/85.jpg)
Splitting Example def z use z
def x def y use x use x use y
use z
x y z
x y
z
2 colorable? NO!
![Page 86: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/86.jpg)
Splitting Example def z use z
def x def y use x use x use y
use z
x y z
![Page 87: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/87.jpg)
Splitting Example def z use z
def x def y use x use x use y
use z
x y z
![Page 88: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/88.jpg)
Splitting Example def z use z
def x def y use x use x use y
use z
x y z
x y
z2
z1
![Page 89: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/89.jpg)
Splitting Example def z use z
def x def y use x use x use y
use z
x y z
x y
z2
z1
2 colorable?
![Page 90: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/90.jpg)
Splitting Example def z use z
def x def y use x use x use y
use z
x y z
x y
z2
z1
2 colorable? YES!
![Page 91: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/91.jpg)
Splitting Example def z use z
def x def y use x use x use y
use z
x y z
r1 r2
r1
r1
x y
z2
z1
2 colorable? YES!
![Page 92: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/92.jpg)
Splitting Example def z use z str z
def x def y use x use x use y
ld z use z
x y z
r1 r2
r1
r1
x y
z2
z1
2 colorable? YES!
![Page 93: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/93.jpg)
Splitting Heuristic • Identify a program point where the graph is not R-
colorable (point where # of webs > N) – Pick a web that is not used for the largest enclosing
block around that point of the program – Split that web at the corresponding edge – Redo the interference graph – Try to re-color the graph
![Page 94: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/94.jpg)
Cost and benefit of splitting • Cost of splitting a node
– Proportional to number of times splitted edge has to be crossed dynamically
– Estimate by its loop nesting • Benefit
– Increase colorability of the nodes the splitted web interferes with
– Can approximate by its degree in the interference graph • Greedy heuristic
– pick the live-range with the highest benefit-to-cost ration to spill
![Page 95: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/95.jpg)
Outline • Overview of procedure optimizations • What is register allocation • A simple register allocator • Webs • Interference Graphs • Graph coloring • Splitting • More optimizations
52
![Page 96: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/96.jpg)
Further Optimizations • Register coalescing • Register targeting (pre-coloring) • Presplitting of webs • Interprocedural register allocation
![Page 97: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/97.jpg)
Register Coalescing • Find register copy instructions sj = si
• If sj and si do not interfere, combine their webs
• Pros – similar to copy propagation – reduce the number of instructions
• Cons – may increase the degree of the combined node – a colorable graph may become non-colorable
![Page 98: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/98.jpg)
Register Targeting (pre-coloring) • Some variables need to be in special registers at
a given time – fist 6 arguments to a function – return value
• Pre-color those webs and bind them to the right register
• Will eliminate unnecessary copy instructions
![Page 99: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/99.jpg)
Pre-splitting of the webs • Some live ranges have very large “dead” regions.
– Large region where the variable is unused
• Break up the live ranges – need to pay a small cost in spilling – but the graph will be very easy to color
• Can find strategic locations to break-up – at a call site (need to spill anyway) – around a large loop nest (reserve registers for values
used in the loop)
![Page 100: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/100.jpg)
Interprocedural register allocation
• saving registers across procedure boundaries is expensive – especially for programs with many small functions
• Calling convention is too general and inefficient
• Customize calling convention per function by doing interprocedural register allocation
![Page 101: Register Allocationcons.mit.edu/fa18/slides/F18-lecture-23.pdf · • Decide which webs get a register (allocation) • Split webs if needed (spilling and splitting) • Assign hard](https://reader035.vdocuments.mx/reader035/viewer/2022071109/5fe4981ff00793387c1a9c19/html5/thumbnails/101.jpg)
Summary • Register Allocation
– Store values in registers between def and use – Can improve performance substantially
• Key concepts – Webs – Interference graphs – Colorability – Splitting