Supplementary Lecture – Register Allocation EECS 483 University of Michigan.

Slides:



Advertisements
Similar presentations
Register Allocation COS 320 David Walker (with thanks to Andrew Myers for many of these slides)
Advertisements

Register Allocation Consists of two parts: Goal : minimize spills
Register Usage Keep as many values in registers as possible Register assignment Register allocation Popular techniques – Local vs. global – Graph coloring.
P3 / 2004 Register Allocation. Kostis Sagonas 2 Spring 2004 Outline What is register allocation Webs Interference Graphs Graph coloring Spilling Live-Range.
Register allocation Morgensen, Torben. "Register Allocation." Basics of Compiler Design. pp from (
Register Allocation Zach Ma.
Register Allocation CS 320 David Walker (with thanks to Andrew Myers for most of the content of these slides)
Idea of Register Allocation x = m[0]; y = m[1]; xy = x*y; z = m[2]; yz = y*z; xz = x*z; r = xy + yz; m[3] = r + xz x y z xy yz xz r {} {x} {x,y} {y,x,xy}
Coalescing Register Allocation CS153: Compilers Greg Morrisett.
Register Allocation Mooly Sagiv Schrierber Wed 10:00-12:00 html://
COMPILERS Register Allocation hussein suleman uct csc305w 2004.
Graph-Coloring Register Allocation CS153: Compilers Greg Morrisett.
Stanford University CS243 Winter 2006 Wei Li 1 Register Allocation.
Register Allocation CS 671 March 27, CS 671 – Spring Register Allocation - Motivation Consider adding two numbers together: Advantages: Fewer.
Program Representations. Representing programs Goals.
Carnegie Mellon Lecture 6 Register Allocation I. Introduction II. Abstraction and the Problem III. Algorithm Reading: Chapter Before next class:
Last time: terminology reminder w Simple graph Vertex = node Edge Degree Weight Neighbours Complete Dual Bipartite Planar Cycle Tree Path Circuit Components.
1 CS 201 Compiler Construction Lecture 12 Global Register Allocation.
Improving code generation. Better code generation requires greater context Over expressions: optimal ordering of subtrees Over basic blocks: Common subexpression.
Register Allocation (Slides from Andrew Myers). Main idea Want to replace temporary variables with some fixed set of registers First: need to know which.
Constraint Satisfaction Problems
1 Register Allocation Consists of two parts: –register allocation What will be stored in registers –Only unambiguous values –register assignment Which.
Prof. Bodik CS 164 Lecture 171 Register Allocation Lecture 19.
Code Generation for Basic Blocks Introduction Mooly Sagiv html:// Chapter
Register Allocation (via graph coloring)
CMPUT Compiler Design and Optimization1 CMPUT680 - Fall 2003 Topic 7: Register Allocation and Instruction Scheduling José Nelson Amaral
U NIVERSITY OF M ASSACHUSETTS, A MHERST Department of Computer Science Emery Berger University of Massachusetts, Amherst Advanced Compilers CMPSCI 710.
Register Allocation (via graph coloring). Lecture Outline Memory Hierarchy Management Register Allocation –Register interference graph –Graph coloring.
1 Liveness analysis and Register Allocation Cheng-Chia Chen.
Improving Code Generation Honors Compilers April 16 th 2002.
Improving code generation. Better code generation requires greater context Over expressions: optimal ordering of subtrees Over basic blocks: Common subexpression.
Chapter 5 Outline Formal definition of CSP CSP Examples
4/29/09Prof. Hilfinger CS164 Lecture 381 Register Allocation Lecture 28 (from notes by G. Necula and R. Bodik)
Register Allocation and Spilling via Graph Coloring G. J. Chaitin IBM Research, 1982.
CS745: Register Allocation© Seth Copen Goldstein & Todd C. Mowry Register Allocation.
Precision Going back to constant prop, in what cases would we lose precision?
Spring 2014Jim Hogg - UW - CSE - P501P-1 CSE P501 – Compiler Construction Register allocation constraints Local allocation Fast, but poorer code Global.
1 October 18, October 18, 2015October 18, 2015October 18, 2015 Azusa, CA Sheldon X. Liang Ph. D. Azusa Pacific University, Azusa, CA 91702, Tel:
U NIVERSITY OF D ELAWARE C OMPUTER & I NFORMATION S CIENCES D EPARTMENT Optimizing Compilers CISC 673 Spring 2009 Register Allocation John Cavazos University.
CMPE 511 Computer Architecture A Faster Optimal Register Allocator Betül Demiröz.
CSCI-256 Data Structures & Algorithm Analysis Lecture Note: Some slides by Kevin Wayne. Copyright © 2005 Pearson-Addison Wesley. All rights reserved. 33.
ANALYSIS AND IMPLEMENTATION OF GRAPH COLORING ALGORITHMS FOR REGISTER ALLOCATION By, Sumeeth K. C Vasanth K.
Graph Colouring L09: Oct 10. This Lecture Graph coloring is another important problem in graph theory. It also has many applications, including the famous.
Global Register Allocation via Graph Coloring Copyright 2003, Keith D. Cooper, Ken Kennedy & Linda Torczon, all rights reserved. Students enrolled in Comp.
EECS 583 – Class 15 Register Allocation University of Michigan November 2, 2011.
Final Code Generation and Code Optimization.
Register Usage Keep as many values in registers as possible Keep as many values in registers as possible Register assignment Register assignment Register.
Register Allocation CS 471 November 12, CS 471 – Fall 2007 Register Allocation - Motivation Consider adding two numbers together: Advantages: Fewer.
2/22/2016© Hal Perkins & UW CSEP-1 CSE P 501 – Compilers Register Allocation Hal Perkins Winter 2008.
1 Liveness analysis and Register Allocation Cheng-Chia Chen.
More Code Generation and Optimization Pat Morin COMP 3002.
Global Register Allocation Based on
Topic Register Allocation
Mooly Sagiv html://
Register Allocation Hal Perkins Autumn 2009
Constraint Satisfaction Problems vs. Finite State Problems
Register Allocation Noam Rinetzky Text book:
Topic 12: Register Allocation
CSC D70: Compiler Optimization Register Allocation
Register Allocation Hal Perkins Autumn 2011
EECS 583 – Class 15 Register Allocation
Lecture 16: Register Allocation
Chapter 12 Pipelining and RISC
EECS 583 – Class 15 Register Allocation
Compiler Construction
Lecture 17: Register Allocation via Graph Colouring
Fall Compiler Principles Lecture 13: Summary
(via graph coloring and spilling)
CS 201 Compiler Construction
Presentation transcript:

Supplementary Lecture – Register Allocation EECS 483 University of Michigan

- 1 - Register Allocation v Through optimization, assume an infinite number of virtual registers »Now, must allocate these infinite virtual registers to a limited supply of hardware registers »Want most frequently accessed variables in registers  Speed, registers much faster than memory  Direct access as an operand »Any VR that cannot be mapped into a physical register is said to be spilled »If there are not enough physical registers, which virtual registers get spilled?

- 2 - Questions to Answer v What is the minimum number of registers needed to avoid spilling? v Given n registers, is spilling necessary? v Find an assignment of virtual registers to physical registers v If there are not enough physical registers, which virtual registers get spilled?

- 3 - Live Range of a Virtual Register v Value = defn of a register v Live range = Set of operations »1 more or values connected by common uses »A single VR may have several live ranges v Live ranges are constructed by taking the intersection of reaching defs and liveness »Initially, a live range consists of a single definition and all ops in a function in which that definition is live

- 4 - Example – Constructing Live Ranges 1: x = 2: x =3: 4: = x 5: x = 6: x = 7: = x 8: = x {x}, {5,6} {x}, {6} {}, {5} {x}, {5} {}, {1,2} {}, {1} {x}, {2} {x}, {1} {}, {5,6} Notation {liveness}, {rdefs} LR1 for def 1 = {1,3,4} LR2 for def 2 = {2,4} LR3 for def 5 = {5,7,8} LR4 for def 6 = {6,7,8} Each definition is the seed of a live range. Ops are added to the LR where both the defn reaches and the variable is live

- 5 - Merging Live Ranges v If 2 live ranges for the same VR overlap, they must be merged to ensure correctness »LRs replaced by a new LR that is the union of the LRs »Multiple defs reaching a common use »Conservatively, all LRs for the same VR could be merged  Makes LRs larger than need be, but done for simplicity  We will not assume this! 1: r1 =2: r1 = 3: = r1 r1 LR = {1,2,3}

- 6 - Example – Merging Live Ranges 1: x = 2: x =3: 4: = x 5: x = 6: x = 7: = x 8: = x {x}, {5,6} {x}, {6} {}, {5} {x}, {5} {}, {1,2} {}, {1} {x}, {2} {x}, {1} {}, {5,6} Notation {liveness}, {rdefs} LR1 for def 1 = {1,3,4} LR2 for def 2 = {2,4} LR3 for def 5 = {5,7,8} LR4 for def 6 = {6,7,8} Merge LR1 and LR2, LR3 and LR4 LR5 = {1,2,3,4} LR6 = {5,6,7,8}

- 7 - Class Problem 1: y = 2: x = y 3: = x 6: y = 7: z = 8: x = 9: = y 10: = z 4: y = 5: = y Compute the LRs a)for each def b)merge overlapping

- 8 - Interference v Two live ranges interfere if they share one or more operations in common »Thus, they cannot occupy the same physical register »Or a live value would be lost v Interference graph »Undirected graph where  Nodes are live ranges  There is an edge between 2 nodes if the live ranges interfere »What’s not represented by this graph  Extent of interference between the LRs  Where in the program is the interference

- 9 - Example – Interference Graph 1: a = load() 2: b = load() 3: c = load() 4: d = b + c 5: e = d - 3 6: f = a * b 7: e = f + c 8: g = a + e 9: store(g) a g c f d b e lr(a) = {1,2,3,4,5,6,7,8} lr(b) = {2,3,4,6} lr(c) = {1,2,3,4,5,6,7,8,9} lr(d) = {4,5} lr(e) = {5,7,8} lr(f) = {6,7} lr{g} = {8,9}

Graph Coloring v A graph is n-colorable if every node in the graph can be colored with one of the n colors such that 2 adjacent nodes do not have the same color »Model register allocation as graph coloring »Use the fewest colors (physical registers) »Spilling is necessary if the graph is not n-colorable where n is the number of physical registers v Optimal graph coloring is NP-complete for n > 2 »Use heuristics proposed by compiler developers »Observation – a node with degree < n in the interference graph can always be successfully colored given its neighbors colors

Coloring Algorithm (1) v 1. While any node, x, has < n neighbors »Remove x and its edges from the graph »Push x onto a stack v 2. If the remaining graph is non-empty »Compute cost of spilling each node (live range)  For each reference to the register in the live range u Cost += (execution frequency * spill cost) »Let NB(x) = number of neighbors of x »Remove node x that has the smallest cost(x) / NB(x)  Push x onto a stack (mark as spilled) »Go back to step 1

Coloring Algorithm (2) v While stack is non-empty »Pop x from the stack »If x’s neighbors are assigned fewer than R colors, then assign x any unsigned color, else leave x uncolored

Example – Do a 3-coloring 1: a = load() 2: b = load() 3: c = load() 4: d = b + c 5: e = d - 3 6: f = a * b 7: e = f + c 8: g = a + e 9: store(g) a g c f d b e lr(a) = {1,2,3,4,5,6,7,8} lr(b) = {2,3,4,6} lr(c) = {1,2,3,4,5,6,7,8,9} lr(d) = {4,5} lr(e) = {5,7,8} lr(f) = {6,7} lr{g} = {8,9}

Example – Do a 3-Coloring (2) a g c f d b e abcdefg cost neighbors cost/n lr(a) = {1,2,3,4,5,6,7,8} refs(a) = {1,6,8} lr(b) = {2,3,4,6} refs(b) = {2,4,6} lr(c) = {1,2,3,4,5,6,7,8,9} refs(c) = {3,4,7} lr(d) = {4,5} refs(d) = {4,5} lr(e) = {5,7,8} refs(e) = {5,7,8} lr(f) = {6,7} refs(f) = {6,7} lr{g} = {8,9} refs(g) = {8,9} Profile frequencies of operations 1,2 = 100 3,4,5 = 75 6,7 = 25 8,9 = 100 Assume each spill requires 1 operation cost = sum of frequencies of references to variable cost(a) = Sum(refs(a)) = Sum({1,6,8}) = = 225

Example – Do a 3-Coloring (3) a g c f d b e Remove all nodes < 3 neighbors So, g can be removed a c f d b e Stack g

Example – Do a 3-Coloring (4) Now must spill a node Choose one with the smallest cost/NB  f is chosen a c d b e Stack f (spilled) g a c f d b e

Example – Do a 3-Coloring (5) a c d b Stack e f (spilled) g a c d b e Remove all nodes < 3 neighbors So, e can be removed

Example – Do a 3-Coloring (6) a d b Stack c (spilled) e f (spilled) g Now must spill another node Choose one with the smallest cost/NB  c is chosen a c d b

Example – Do a 3-Coloring (7) Stack d b a c (spilled) e f (spilled) g Remove all nodes < 3 neighbors So, a, b, d can be removed a d b Null

Example – Do a 3-Coloring (8) Stack d b a c (spilled) e f (spilled) g a g c f d b e Have 3 colors: red, green, blue, pop off the stack assigning colors only consider conflicts with non-spilled nodes already popped off stack d  red b  green (cannot choose red) a  blue (cannot choose red or green) c  no color (spilled) e  green (cannot choose red or blue) f  no color (spilled) g  red (cannot choose blue)

Example – Do a 3-Coloring (9) 1: blue = load() 2: green = load() 3: spill1 = load() 4: red = green + spill1 5: green = red - 3 6: spill2 = blue * green 7: green = spill2 + spill1 8: red = blue + green 9: store(red) d  red b  green a  blue c  no color e  green f  no color g  red Notes: no spills in the blocks executed 100 times. Most spills in the block executed 25 times. Longest lifetime (c) also spilled

Caller/Callee Save Preference v Processors generally divide regs, ½ caller, ½ callee »Caller/callee save is a programming convention »Not part of architecture or microarchitecture v When you are assigning colors, need to choose caller/callee v Using a register may have save/restore overhead

Caller/Callee Cost Calculation v Caller save/restore cost »For each subroutine call a live range spans  Cost += (save_cost + restore_cost) * frequency »Variable not live across a subroutine call, has 0 caller cost  Leaf routines are ideal place to use caller save registers! v Callee save/restore cost »Cost += (save_cost + restore_cost) * procedure_entry_freq »When subroutine calls are in the live range, callee usually better v Compare these costs with just spilling the variable »If cheaper to spill, then just spill it

Alternate Priority Scheme v Chaitin priority (what we have used) »priority = spill cost / number of neighbors v Hennessy and Chow priority »priority = spill cost / size of live range »Intuition  Small live ranges with high spill cost are ideal candidates to be allocated a register  As the size of a live range grows, it becomes less attractive for register allocation u Ties up a register for a long time!