Register Allocation
description
Transcript of Register Allocation
![Page 1: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/1.jpg)
Register Allocation
寄存器分配
![Page 2: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/2.jpg)
Outline
• What is register allocation• Webs网• Interference Graphs(冲突图)• Graph coloring(图染色分配法)• Spilling(溢出)• Splitting(分割)• More optimizations
5
![Page 3: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/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 Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/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 Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/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 Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/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(X64结
构 )– Some of those registers have fixed users (ex: RSP, RBP)
![Page 7: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/7.jpg)
Outline
• What is register allocation• Webs( 网)• Interference Graphs• Graph coloring• Splitting• More optimizations
15
![Page 8: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/8.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 9: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/9.jpg)
Outline
• What is register allocation• Webs(网)• Interference Graphs• Graph coloring• Splitting• More optimizations
25
![Page 10: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/10.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 11: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/11.jpg)
Example
def y
def xuse y
def xdef y
use xdef x
use x
use xuse y
![Page 12: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/12.jpg)
Example
def y
def xuse y
def xdef y
use xdef x
use x
use xuse y
![Page 13: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/13.jpg)
Example
def y
def xuse y
def xdef y
use xdef x
use x
use xuse y
![Page 14: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/14.jpg)
Example
def y
def xuse y
def xdef y
use xdef x
use x
use xuse y
![Page 15: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/15.jpg)
Example
def y
def xuse y
def xdef y
use xdef x
use x
use xuse y
![Page 16: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/16.jpg)
Example
def y
def xuse y
def xdef y
use xdef x
use x
use xuse y
![Page 17: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/17.jpg)
Example
def y
def xuse y
def xdef y
use xdef x
use x
use xuse y
![Page 18: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/18.jpg)
Example
def y
def xuse y
def xdef y
use xdef x
use x
use xuse y
s1
s2
s3
s4
![Page 19: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/19.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 20: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/20.jpg)
Outline
• What is register allocation• Webs• Interference Graphs(冲突图)• Graph coloring• Splitting• More optimizations
31
![Page 21: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/21.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 22: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/22.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 23: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/23.jpg)
Example
def y
def xuse y
def xdef y
use xdef x
use x
use xuse y
s1
s2
s3
s4
![Page 24: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/24.jpg)
Example
def y
def xuse y
use xdef x
use x
s1
s2
s3
s4
def xdef y
use xuse y
![Page 25: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/25.jpg)
Example
def y
def xuse y
use xdef x
use x
s1
s2
s3
s4
def xdef y
use xuse y
Webs s1 and s2 interfereWebs s2 and s3 interfere
![Page 26: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/26.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 27: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/27.jpg)
Example
def y
def xuse y
use xdef x
use x
s1
s2
s3
s4
def xdef y
use xuse y
s1 s2
s3 s4
![Page 28: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/28.jpg)
Example
def y
def xuse y
use xdef x
use x
s1
s2
s3
s4
def xdef y
use xuse y
Webs s1 and s2 interfereWebs s2 and s3 interfere
s1 s2
s3 s4
![Page 29: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/29.jpg)
Outline
• Overview of procedure optimizations• What is register allocation• A simple register allocator• Webs• Interference Graphs• Graph coloring• Splitting• More optimizations
37
![Page 30: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/30.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 31: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/31.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 32: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/32.jpg)
Graph Coloring Example
![Page 33: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/33.jpg)
Graph Coloring Example
• 1 Color
![Page 34: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/34.jpg)
Graph Coloring Example
![Page 35: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/35.jpg)
Graph Coloring Example
• 2 Colors
![Page 36: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/36.jpg)
Graph Coloring Example
![Page 37: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/37.jpg)
Graph Coloring Example
• Still 2 Colors
![Page 38: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/38.jpg)
Graph Coloring Example
![Page 39: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/39.jpg)
Graph Coloring Example
• 3 Colors
![Page 40: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/40.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 41: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/41.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 42: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/42.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
![Page 43: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/43.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
![Page 44: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/44.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4
![Page 45: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/45.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4s2
![Page 46: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/46.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4s2s1
![Page 47: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/47.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4s2s1s3
![Page 48: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/48.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4s2s1s3
![Page 49: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/49.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4s2s1s3
![Page 50: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/50.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4s2s1
![Page 51: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/51.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4s2s1
![Page 52: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/52.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4s2
![Page 53: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/53.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4s2
![Page 54: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/54.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4
![Page 55: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/55.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
s4
![Page 56: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/56.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
![Page 57: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/57.jpg)
Coloring Example
s1 s2
s3 s4
s0
N = 3
![Page 58: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/58.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
![Page 59: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/59.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
s4
![Page 60: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/60.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
s4
![Page 61: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/61.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
s4s3
![Page 62: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/62.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
s4s3s2
![Page 63: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/63.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
s4s3s2
![Page 64: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/64.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
s4s3s2
![Page 65: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/65.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
s4s3
![Page 66: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/66.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
s4s3
![Page 67: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/67.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
s4
![Page 68: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/68.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
s4
![Page 69: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/69.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
![Page 70: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/70.jpg)
Another Coloring Example
s1 s2
s3 s4
s0
N = 3
![Page 71: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/71.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 72: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/72.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 73: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/73.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 74: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/74.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 75: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/75.jpg)
Spill Cost Example
def xdef y
use ydef y
use xuse y
Spill Cost For xstoreCost+loadCost
Spill Cost For y9*storeCost+9*loadCost
With 1 Register, WhichVariable Gets Spilled?
![Page 76: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/76.jpg)
Outline
• Overview of procedure optimizations• What is register allocation• A simple register allocator• Webs• Interference Graphs• Graph coloring• Splitting• More optimizations
47
![Page 77: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/77.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 78: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/78.jpg)
Splitting Example
def zuse z
def xdef yuse xuse xuse y
use z
x y z
![Page 79: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/79.jpg)
Splitting Example
def zuse z
def xdef yuse xuse xuse y
use z
x y z
x y
z
![Page 80: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/80.jpg)
Splitting Example
def zuse z
def xdef yuse xuse xuse y
use z
x y z
x y
z
2 colorable?
![Page 81: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/81.jpg)
Splitting Example
def zuse z
def xdef yuse xuse xuse y
use z
x y z
x y
z
2 colorable?NO!
![Page 82: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/82.jpg)
Splitting Example
def zuse z
def xdef yuse xuse xuse y
use z
x y z
![Page 83: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/83.jpg)
Splitting Example
def zuse z
def xdef yuse xuse xuse y
use z
x y z
![Page 84: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/84.jpg)
Splitting Example
def zuse z
def xdef yuse xuse xuse y
use z
x y z
x y
z2
z1
![Page 85: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/85.jpg)
Splitting Example
def zuse z
def xdef yuse xuse xuse y
use z
x y z
x y
z2
z1
2 colorable?
![Page 86: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/86.jpg)
Splitting Example
def zuse z
def xdef yuse xuse xuse y
use z
x y z
x y
z2
z1
2 colorable?YES!
![Page 87: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/87.jpg)
Splitting Example
def zuse z
def xdef yuse xuse xuse y
use z
x y z
r1r2
r1
r1
x y
z2
z1
2 colorable?YES!
![Page 88: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/88.jpg)
Splitting Exampledef zuse zstr z
def xdef yuse xuse xuse y
ld zuse z
x y z
r1r2
r1
r1
x y
z2
z1
2 colorable?YES!
![Page 89: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/89.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 90: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/90.jpg)
Cost and benefit of splitting
• Cost of splitting a node– Proportion 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 91: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/91.jpg)
Outline
• Overview of procedure optimizations• What is register allocation• A simple register allocator• Webs• Interference Graphs• Graph coloring• Splitting• More optimizations
52
![Page 92: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/92.jpg)
Further Optimizations
• Register coalescing合并• Register targeting (pre-coloring)• Presplitting of webs• Interprocedural register allocation
![Page 93: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/93.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 94: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/94.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 95: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/95.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 96: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/96.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 97: Register Allocation](https://reader038.fdocuments.net/reader038/viewer/2022103101/56814f0e550346895dbca1df/html5/thumbnails/97.jpg)
Summary
• Register Allocation– Store values in registers between def and use– Can improve performance substantially
• Key concepts– Webs– Interference graphs– Colorability– Splitting