Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512...
-
Upload
sheryl-logan -
Category
Documents
-
view
212 -
download
0
Transcript of Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512...
![Page 1: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/1.jpg)
Building SSA Form(A mildly abridged account)
For the full story, see the lecture notes for COMP 512http://www.cs.rice.edu/~keith/512 (lecture 8) and read Chapter 9 of Engineering a Compiler.
Copyright 2003, Keith D. Cooper, Ken Kennedy & Linda Torczon, all rights reserved.Students enrolled in Comp 412 at Rice University have explicit permission to make copies of these materials for their personal use.
![Page 2: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/2.jpg)
Review
SSA-form• Each name is defined exactly once• Each use refers to exactly one name
What’s hard• Straight-line code is trivial• Splits in the CFG are trivial• Joins in the CFG are hard
Building SSA Form• Insert Ø-functions at birth points• Rename all values for uniqueness
*
x 17 - 4
x a + b
x y - z
x 13
z x * q
s w - x
?
![Page 3: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/3.jpg)
Birth Points (another notion due to Tarjan)
Consider the flow of values in this example
x 17 - 4
x a + b
x y - z
x 13
z x * q
s w - x
The value x appears everywhereIt takes on several values.• Here, x can be 13, y-z, or 17-4• Here, it can also be a+b
If each value has its own name …• Need a way to merge these distinct values• Values are “born” at merge points
*
![Page 4: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/4.jpg)
Birth Points (another notion due to Tarjan)
Consider the flow of values in this example
x 17 - 4
x a + b
x y - z
x 13
z x * q
s w - x
New value for x here17 - 4 or y - z
New value for x here13 or (17 - 4 or y - z)
New value for x herea+b or ((13 or (17-4 or y-z))
![Page 5: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/5.jpg)
Birth Points (another notion due to Tarjan)
Consider the flow of values in this example
x 17 - 4
x a + b
x y - z
x 13
z x * q
s w - x
These are all birth points for values
• All birth points are join points
• Not all join points are birth points
• Birth points are value-specific …
![Page 6: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/6.jpg)
Review
SSA-form• Each name is defined exactly once• Each use refers to exactly one name
What’s hard• Straight-line code is trivial• Splits in the CFG are trivial• Joins in the CFG are hard
Building SSA Form• Insert Ø-functions at birth points• Rename all values for uniqueness
A Ø-function is a special kind of copy that selects one of its parameters.
The choice of parameter is governed by the CFG edge along which control reached the current block.
Real machines do not implement a Ø-function directly in hardware.
y1 ... y2 ...
y3 Ø(y1,y2)
*
![Page 7: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/7.jpg)
SSA Construction Algorithm (High-level sketch)
1. Insert Ø-functions2. Rename values
… that’s all ...
… of course, there is some bookkeeping to be done ...
*
![Page 8: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/8.jpg)
SSA Construction Algorithm (Lower-level sketch)
1. Insert Ø-functions at every join for every name2. Solve reaching definitions3. Rename each use to the def that reaches (will be
unique)
![Page 9: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/9.jpg)
Reaching Definitions
The equationsREACHES(n0 ) = Ø
REACHES(n ) = ppreds(n) DEFOUT(p ) (REACHES(p ) SURVIVED(p))
• REACHES(n ) is the set of definitions that reach block n• DEFOUT(n) is the set of definitions in n that reach the end of n• SURVIVED(n) is the set of defs not obscured by a new def in n
Computing REACHES(n)
• Use any data-flow method (i.e., the iterative method)
• This particular problem has a very-fast solution (Zadeck)
F.K. Zadeck, “Incremental data-flow analysis in a structured program editor,” Proceedings of the SIGPLAN 84 Conf. on Compiler Construction, June, 1984, pages 132-143.ge
*
Domain is |DEFINITIONS|, same as number of operations
![Page 10: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/10.jpg)
SSA Construction Algorithm (Lower-level sketch)
1. Insert Ø-functions at every join for every name2. Solve reaching definitions3. Rename each use to the def that reaches (will be unique)
What’s wrong with this approach?• Too many Ø-functions (precision)• Too many Ø-functions (space)• Too many Ø-functions (time)• Need to relate edges to Ø-function parameters (bookkeeping)
To do better, we need a more complex approach
Builds “maximal” SSA
![Page 11: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/11.jpg)
SSA Construction Algorithm (Lower-level sketch)
1. Insert Ø-functions at every join for every name2. Solve reaching definitions3. Rename each use to the def that reaches (will be
unique)
What’s wrong with this approach?• A Ø-function may be useless
Value is never used Ø-function is extraneous
• A Ø-function may be pointless As in “ x17 Ø(x12, x12) ”
Can we get there by eliminating these?• Probably not• Can have Ø ’s that depend on themselves …
Builds “maximal” SSA
Someone always suggests this.
![Page 12: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/12.jpg)
SSA Construction Algorithm (Detailed sketch)
1. Insert Ø-functionsa.) calculate dominance frontiersb.) find global names
for each name, build a list of blocks that define it
c.) insert Ø-functions
global name n block b in which n is assigned
block d in b’s dominance frontierinsert a Ø-function for n in dadd d to n’s list of defining blocks{Creates the iterated
dominance frontier
This adds to the worklist !
Use a checklist to avoid putting blocks on the worklist twice; keep another checklist to avoid inserting the same Ø-function twice.
Compute list of blocks where each name is assigned & use as a worklist
Moderately complex
*
![Page 13: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/13.jpg)
SSA Construction Algorithm (Detailed sketch)
2. Rename variables in a pre-order walk over dominator tree(use an array of stacks, one stack per global name)
Staring with the root block, ba.) generate unique names for each Ø-function
and push them on the appropriate stacks
b.) rewrite each operation in the blocki. Rewrite uses of global names with the current version
(from the stack)ii. Rewrite definition by inventing & pushing new name
c.) fill in Ø-function parameters of successor blocksd.) recurse on b’s children in the dominator treee.) <on exit from b > pop names generated in b from stacks
1 counter per name for subscripts
Need the end-of-block name for this path
Reset the state
*
![Page 14: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/14.jpg)
SSA Construction Algorithm (Details)
Computing Dominance• First step in Ø-function insertion computes dominance• Recall that n dominates m iff n is on every path from n0
to m Every node dominates itself n’s immediate dominator is its closest dominator, IDOM(n)†
DOM(n0 ) = { n0 }
DOM(n) = { n } (ppreds(n) DOM(p))
Computing DOM• These equations form a rapid data-flow framework• Iterative algorithm will solve them in d(G) + 3 passes
Each pass does N unions & E intersections, E is worst case O(N 2), O(N 2) work
†IDOM(n ) ≠ n, unless n is n0, by convention.
Initially, DOM(n) = N, n≠n0
![Page 15: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/15.jpg)
Example
B1
B2 B3
B4 B5
B6
B7
B0
Flow Graph
Progress of iterative solution for DOM
Results of iterative solution for DOM
Figure 9.3, EaC *
Iter-ation 0 1 2 3 4 5 6 7
0 0 N N N N N N N1 0 0,1 0,1,2 0,1,3 0,1,3,4 0,1,3,5 0,1,3,6 0,1,72 0 0,1 0,1,2 0,1,3 0,1,3,4 0,1,3,5 0,1,3,6 0,1,7
DOM(n )
0 1 2 3 4 5 6 7DOM 0 0,1 0,1,2 0,1,3 0,1,3,4 0,1,3,5 0,1,3,6 0,1,7IDOM 0 0 1 1 3 3 3 1
![Page 16: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/16.jpg)
Example
Dominance Tree
Progress of iterative solution for DOM
Iter-ation 0 1 2 3 4 5 6 7
0 0 N N N N N N N1 0 0,1 0,1,2 0,1,3 0,1,3,4 0,1,3,5 0,1,3,6 0,1,72 0 0,1 0,1,2 0,1,3 0,1,3,4 0,1,3,5 0,1,3,6 0,1,7
DOM(n )
Results of iterative solution for DOM
B1
B2 B3
B4 B5
B6
B7
B0
0 1 2 3 4 5 6 7DOM 0 0,1 0,1,2 0,1,3 0,1,3,4 0,1,3,5 0,1,3,6 0,1,7IDOM 0 0 1 1 3 3 3 1
There are asymptotically faster algorithms.
With the right data structures, the iterative algorithm can be made faster than them.
Data structure in Chapter 9Cooper, Harvey, Kennedy; to appear
![Page 17: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/17.jpg)
Example
Dominance Frontiers
Dominance Frontiers & Ø-Function Insertion
• A definition at n forces a Ø-function at m iff n DOM(m) but n DOM(p) for some p preds(m)
• DF(n ) is fringe just beyond region n dominates
B1
B2 B3
B4 B5
B6
B7
B0
0 1 2 3 4 5 6 7DOM 0 0,1 0,1,2 0,1,3 0,1,3,4 0,1,3,5 0,1,3,6 0,1,7DF – – 7 7 6 6 7 1
*
in 1 forces Ø-function in DF(1) = Ø (halt )
x ...
x Ø(...)• DF(4) is {6}, so in 4 forces Ø-function in 6
x Ø(...) in 6 forces Ø-function in DF(6) = {7}
x Ø(...)
in 7 forces Ø-function in DF(7) = {1}
For each assignment, we insert the Ø-functions
![Page 18: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/18.jpg)
Example
Dominance Frontiers
Computing Dominance Frontiers
• Only join points are in DF(n) for some n
• Leads to a simple, intuitive algorithm for computing dominance frontiers
For each join point x (i.e., |preds(x)| > 1)
For each CFG predecessor of xRun up to IDOM(x ) in the dominator tree, addingx to DF(n) for each n between x and IDOM(x )
B1
B2 B3
B4 B5
B6
B7
B0
*
• For some applications, we need post-dominance, the post-dominator tree, and reverse dominance frontiers, RDF(n )
> Just dominance on the reverse CFG> Reverse the edges & add unique exit node
• We will use these in dead code elimination
0 1 2 3 4 5 6 7DOM 0 0,1 0,1,2 0,1,3 0,1,3,4 0,1,3,5 0,1,3,6 0,1,7DF – – 7 7 6 6 7 1
![Page 19: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/19.jpg)
SSA Construction Algorithm (Reminder)
1. Insert Ø-functions at every join for every namea.) calculate dominance frontiersb.) find global names
for each name, build a list of blocks that define it
c.) insert Ø-functions
global name n block b in which n is assigned
block d in b’s dominance frontierinsert a Ø-function for n in d
add d to n’s list of defining blocks
*
Needs a little more detail
![Page 20: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/20.jpg)
SSA Construction Algorithm
Finding global names• Different between two forms of SSA • Minimal uses all names• Semi-pruned uses names that are live on entry to some
block Shrinks name space & number of Ø-functions Pays for itself in compile-time speed
• For each “global name”, need a list of blocks where it is defined Drives Ø-function insertion b defines x implies a Ø-function for x in every c DF(b)
Pruned SSA adds a test to see if x is live at insertion point
Otherwise, cannot need a Ø-function
![Page 21: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/21.jpg)
a Ø(a,a)b Ø(b,b)c Ø(c,c)d Ø(d,d)y a+bz c+di i+1
B7
i > 100i •••B0
b •••c •••d •••
B2
a Ø(a,a)b Ø(b,b)c Ø(c,c)d Ø(d,d)i Ø(i,i) a •••c •••
B1
a •••d •••
B3
d •••B4 c •••
B5
d Ø(d,d)c Ø(c,c)b •••B6
i > 100
With all the Ø-functions
• Lots of new ops
• Renaming is next
Assume a, b, c, & d defined before B0
ExampleExcluding
local names avoids Ø’s for y & z
![Page 22: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/22.jpg)
SSA Construction Algorithm (Details)
2. Rename variables in a pre-order walk over dominator tree(use an array of stacks, one stack per global name)
Staring with the root block, ba.) generate unique names for each Ø-function
and push them on the appropriate stacks
b.) rewrite each operation in the blocki. Rewrite uses of global names with the current version
(from the stack)ii. Rewrite definition by inventing & pushing new name
c.) fill in Ø-function parameters of successor blocksd.) recurse on b’s children in the dominator treee.) <on exit from b > pop names generated in b from stacks
1 counter per name for subscripts
Need the end-of-block name for this path
Reset the state
![Page 23: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/23.jpg)
SSA Construction Algorithm (Details)
for each global name icounter[i] 0stack[i] Ø
call Rename(n0)
NewName(n)i counter[n]counter[n] counter[n] + 1push ni onto stack[n]
return ni
Rename(b)for each Ø-function in b, x Ø(…)
rename x as NewName(x)
for each operation “x y op z” in brewrite y as top(stack[y])rewrite z as top(stack[z])rewrite x as NewName(x)
for each successor of b in the CFGrewrite appropriate Ø parameters
for each successor s of b in dom. treeRename(s)
for each operation “x y op z” in bpop(stack[x])
Adding all the details ...
![Page 24: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/24.jpg)
a Ø(a,a)b Ø(b,b)c Ø(c,c)d Ø(d,d)y a+bz c+di i+1
B7
i > 100i •••B0
b •••c •••d •••
B2
a Ø(a,a)b Ø(b,b)c Ø(c,c)d Ø(d,d)i Ø(i,i) a •••c •••
B1
a •••d •••
B3
d •••B4 c •••
B5
d Ø(d,d)c Ø(c,c)b •••B6
i > 100
CountersStacks
1 1 1 1 0
a
a0 b0 c0 d0
Before processing B0
b c d i
Assume a, b, c, & d defined before B0
i has not been defined
Example
*
![Page 25: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/25.jpg)
a Ø(a,a)b Ø(b,b)c Ø(c,c)d Ø(d,d)y a+bz c+di i+1
B7
i > 100i0 •••B0
b •••c •••d •••
B2
a Ø(a0,a)
b Ø(b0,b)c Ø(c0,c)
d Ø(d0,d)
i Ø(i0,i) a •••c •••
B1
a •••d •••
B3
d •••B4 c •••
B5
d Ø(d,d)c Ø(c,c)b •••B6
i > 100
CountersStacks
1 1 1 1 1
a b c d i
a0 b0 c0 d0
End of B0
i0
Example
*
![Page 26: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/26.jpg)
a Ø(a,a)b Ø(b,b)c Ø(c,c)d Ø(d,d)y a+bz c+di i+1
B7
i > 100i0 •••B0
b •••c •••d •••
B2
a1 Ø(a0,a)
b1 Ø(b0,b)c1 Ø(c0,c)
d1 Ø(d0,d)
i1 Ø(i0,i) a2 •••c2 •••
B1
a •••d •••
B3
d •••B4 c •••
B5
d Ø(d,d)c Ø(c,c)b •••B6
i > 100
CountersStacks
3 2 3 2 2
a b c d i
a0 b0 c0 d0
End of B1
i0
a1 b1 c1 d1 i1
a2 c2
Example
*
![Page 27: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/27.jpg)
a Ø(a2,a)
b Ø(b2,b)c Ø(c3,c)
d Ø(d2,d)y a+bz c+di i+1
B7
i > 100i0 •••B0
b2 •••c3 •••d2 •••
B2
a1 Ø(a0,a)
b1 Ø(b0,b)c1 Ø(c0,c)
d1 Ø(d0,d)
i1 Ø(i0,i) a2 •••c2 •••
B1
a •••d •••
B3
d •••B4 c •••
B5
d Ø(d,d)c Ø(c,c)b •••B6
i > 100
CountersStacks
3 3 4 3 2
a b c d i
a0 b0 c0 d0
End of B2
i0
a1 b1 c1 d1 i1
a2 c2b2 d2
c3
Example
*
![Page 28: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/28.jpg)
a Ø(a2,a)
b Ø(b2,b)c Ø(c3,c)
d Ø(d2,d)y a+bz c+di i+1
B7
i > 100i0 •••B0
b2 •••c3 •••d2 •••
B2
a1 Ø(a0,a)
b1 Ø(b0,b)c1 Ø(c0,c)
d1 Ø(d0,d)
i1 Ø(i0,i) a2 •••c2 •••
B1
a •••d •••
B3
d •••B4 c •••
B5
d Ø(d,d)c Ø(c,c)b •••B6
i > 100
i ≤ 100
CountersStacks
3 3 4 3 2
a b c d i
a0 b0 c0 d0
Before starting B3
i0
a1 b1 c1 d1 i1
a2 c2
Example
*
![Page 29: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/29.jpg)
a Ø(a2,a)
b Ø(b2,b)c Ø(c3,c)
d Ø(d2,d)y a+bz c+di i+1
B7
i > 100i0 •••B0
b2 •••c3 •••d2 •••
B2
a1 Ø(a0,a)
b1 Ø(b0,b)c1 Ø(c0,c)
d1 Ø(d0,d)
i1 Ø(i0,i) a2 •••c2 •••
B1
a3 •••d3 •••
B3
d •••B4 c •••
B5
d Ø(d,d)c Ø(c,c)b •••B6
i > 100
CountersStacks
4 3 4 4 2
a b c d i
a0 b0 c0 d0
End of B3
i0
a1 b1 c1 d1 i1
a2 c2
a3
d3
Example
*
![Page 30: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/30.jpg)
a Ø(a2,a)
b Ø(b2,b)c Ø(c3,c)
d Ø(d2,d)y a+bz c+di i+1
B7
i > 100i0 •••B0
b2 •••c3 •••d2 •••
B2
a1 Ø(a0,a)
b1 Ø(b0,b)c1 Ø(c0,c)
d1 Ø(d0,d)
i1 Ø(i0,i) a2 •••c2 •••
B1
a3 •••d3 •••
B3
d4 •••B4 c •••
B5
d Ø(d4,d)c Ø(c2,c)b •••B6
i > 100
CountersStacks
4 3 4 5 2
a b c d i
a0 b0 c0 d0
End of B4
i0
a1 b1 c1 d1 i1
a2 c2
a3
d3
d4
Example
*
![Page 31: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/31.jpg)
a Ø(a2,a)
b Ø(b2,b)c Ø(c3,c)
d Ø(d2,d)y a+bz c+di i+1
B7
i > 100i0 •••B0
b2 •••c3 •••d2 •••
B2
a1 Ø(a0,a)
b1 Ø(b0,b)c1 Ø(c0,c)
d1 Ø(d0,d)
i1 Ø(i0,i) a2 •••c2 •••
B1
a3 •••d3 •••
B3
d4 •••B4 c4 •••
B5
d Ø(d4,d3)c Ø(c2,c4)
b •••B6
i > 100
CountersStacks
4 3 5 5 2
a b c d i
a0 b0 c0 d0
End of B5
i0
a1 b1 c1 d1 i1
a2 c2
a3
d3
c4
Example
*
![Page 32: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/32.jpg)
a Ø(a2,a3)
b Ø(b2,b3)c Ø(c3,c5)
d Ø(d2,d5)y a+bz c+di i+1
B7
i > 100i0 •••B0
b2 •••c3 •••d2 •••
B2
a1 Ø(a0,a)
b1 Ø(b0,b)c1 Ø(c0,c)
d1 Ø(d0,d)
i1 Ø(i0,i) a2 •••c2 •••
B1
a3 •••d3 •••
B3
d4 •••B4 c4 •••
B5
d5 Ø(d4,d3)c5 Ø(c2,c4)
b3 •••B6
i > 100
CountersStacks
4 4 6 6 2
a b c d i
a0 b0 c0 d0
End of B6
i0
a1 b1 c1 d1 i1
a2 c2
a3
d3
c5 d5
b3
Example
*
![Page 33: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/33.jpg)
a Ø(a2,a3)
b Ø(b2,b3)c Ø(c3,c5)
d Ø(d2,d5)y a+bz c+di i+1
B7
i > 100i0 •••B0
b2 •••c3 •••d2 •••
B2
a1 Ø(a0,a)
b1 Ø(b0,b)c1 Ø(c0,c)
d1 Ø(d0,d)
i1 Ø(i0,i) a2 •••c2 •••
B1
a3 •••d3 •••
B3
d4 •••B4 c4 •••
B5
d5 Ø(d4,d3)c5 Ø(c2,c4)
b3 •••B6
i > 100
CountersStacks
4 4 6 6 2
a b c d i
a0 b0 c0 d0
Before B7
i0
a1 b1 c1 d1 i1
a2 c2
Example
*
![Page 34: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/34.jpg)
a4 Ø(a2,a3)
b4 Ø(b2,b3)c6 Ø(c3,c5)
d6 Ø(d2,d5)y a4+b4
z c6+d6
i2 i1+1
B7
i > 100i0 •••B0
b2 •••c3 •••d2 •••
B2
a1 Ø(a0,a4)
b1 Ø(b0,b4)c1 Ø(c0,c6)
d1 Ø(d0,d6)
i1 Ø(i0,i2) a2 •••c2 •••
B1
a3 •••d3 •••
B3
d4 •••B4 c4 •••
B5
d5 Ø(d4,d3)c5 Ø(c2,c4)
b3 •••B6
i > 100
CountersStacks
5 5 7 7 3
a b c d i
a0 b0 c0 d0
End of B7
i0
a1 b1 c1 d1 i1
a2 c2
a4
b4
c6
d6 i2
Example
*
![Page 35: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/35.jpg)
a4 Ø(a2,a3)
b4 Ø(b2,b3)c6 Ø(c3,c5)
d6 Ø(d2,d5)y a4+b4
z c6+d6
i2 i1+1
B7
i > 100i0 •••B0
b2 •••c3 •••d2 •••
B2
a1 Ø(a0,a4)
b1 Ø(b0,b4)c1 Ø(c0,c6)
d1 Ø(d0,d6)
i1 Ø(i0,i2) a2 •••c2 •••
B1
a3 •••d3 •••
B3
d4 •••B4 c4 •••
B5
d5 Ø(d4,d3)c5 Ø(c2,c4)
b3 •••B6
i > 100
CountersStacks
Example
After renaming
• Semi-pruned SSA form
• We’re done …
Semi-pruned only names live in 2 or more blocks are “global names”.
![Page 36: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/36.jpg)
SSA Construction Algorithm (Pruned SSA)
What’s this “pruned SSA” stuff?• Minimal SSA still contains extraneous Ø-functions • Inserts some Ø-functions where they are dead• Would like to avoid inserting them
Two ideas• Semi-pruned SSA: discard names used in only one block
Significant reduction in total number of Ø-functions Needs only local Live information (cheap to
compute)
• Pruned SSA: only insert Ø-functions where their value is live Inserts even fewer Ø-functions, but costs more to do Requires global Live variable analysis (more expensive)
In practice, both are simple modifications to step 1.
![Page 37: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/37.jpg)
SSA Construction Algorithm
We can improve the stack management • Push at most one name per stack per block (save push
& pop)• Thread names together by block• To pop names for block b, use b’s thread
This is another good use for a scoped hash table• Significant reductions in pops and pushes• Makes a minor difference in SSA construction time• Scoped table is a clean, clear way to handle the
problem
![Page 38: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/38.jpg)
SSA Deconstruction
At some point, we need executable code• Few machines implement Ø operations• Need to fix up the flow of values
Basic idea• Insert copies Ø-function pred’s• Simple algorithm
Works in most cases
• Adds lots of copies Most of them coalesce away
X17 Ø(x10,x11)
... x17
... ...
... x17
X17 x10 X17 x11
*
![Page 39: Building SSA Form (A mildly abridged account) For the full story, see the lecture notes for COMP 512 keith/512 (lecture 8) and.](https://reader035.fdocuments.us/reader035/viewer/2022081603/5697c0011a28abf838cc2413/html5/thumbnails/39.jpg)
Extra Slides Start Here