Construc)on of Sta)c Single- Assignment Form

Similar documents
Overview Of Op*miza*on, 2

Operator Strength Reduc1on

Loop Invariant Code Mo0on

Combining Optimizations: Sparse Conditional Constant Propagation

Static Single Assignment (SSA) Form

Welcome to COMP 512. COMP 512 Rice University Spring 2015

Dynamic Compila-on in Smalltalk- 80

Computing Static Single Assignment (SSA) Form. Control Flow Analysis. Overview. Last Time. Constant propagation Dominator relationships

Instruction Scheduling Beyond Basic Blocks Extended Basic Blocks, Superblock Cloning, & Traces, with a quick introduction to Dominators.

Sta$c Single Assignment (SSA) Form

An Overview of GCC Architecture (source: wikipedia) Control-Flow Analysis and Loop Detection

Introduction to Optimization. CS434 Compiler Construction Joel Jones Department of Computer Science University of Alabama

The Big Picture. The Programming Assignment & A Taxonomy of Op6miza6ons. COMP 512 Rice University Spring 2015

Intermediate Representations

CSE P 501 Compilers. SSA Hal Perkins Spring UW CSE P 501 Spring 2018 V-1

Transla'on Out of SSA Form

What If. Static Single Assignment Form. Phi Functions. What does φ(v i,v j ) Mean?

Intermediate Representations Part II

Control-Flow Analysis

Data Structures and Algorithms in Compiler Optimization. Comp314 Lecture Dave Peixotto

Introduction to Optimization Local Value Numbering

Syntax Analysis, V Bottom-up Parsing & The Magic of Handles Comp 412

ECE 5775 High-Level Digital Design Automation Fall More CFG Static Single Assignment

Register Alloca.on via Graph Coloring

Global Register Allocation via Graph Coloring

Data Flow Analysis and Computation of SSA

Instruction Selection: Preliminaries. Comp 412

Syntax Analysis, III Comp 412

Intermediate representation

Register Allocation. Note by Baris Aktemur: Our slides are adapted from Cooper and Torczon s slides that they prepared for COMP 412 at Rice.

Introduction to Machine-Independent Optimizations - 6

Fortran H and PL.8. Papers about Great Op.mizing Compilers. COMP 512 Rice University Spring 2015

Syntax Analysis, III Comp 412

Parsing II Top-down parsing. Comp 412

Procedure and Function Calls, Part II. Comp 412 COMP 412 FALL Chapter 6 in EaC2e. target code. source code Front End Optimizer Back End

Compiler Construction 2009/2010 SSA Static Single Assignment Form

Example. Example. Constant Propagation in SSA

Introduction to Parsing. Comp 412

CS 406/534 Compiler Construction Putting It All Together

Compiler Optimisation

Topic I (d): Static Single Assignment Form (SSA)

Local Optimization: Value Numbering The Desert Island Optimization. Comp 412 COMP 412 FALL Chapter 8 in EaC2e. target code

Parsing III. CS434 Lecture 8 Spring 2005 Department of Computer Science University of Alabama Joel Jones

Copyright 2003, Keith D. Cooper, Ken Kennedy & Linda Torczon, all rights reserved. Students enrolled in Comp 412 at Rice University have explicit

Code Shape Comp 412 COMP 412 FALL Chapters 4, 5, 6 & 7 in EaC2e. source code. IR IR target. code. Front End Optimizer Back End

Control Flow Analysis & Def-Use. Hwansoo Han

Lecture 3 Local Optimizations, Intro to SSA

Calvin Lin The University of Texas at Austin

ECE 5775 (Fall 17) High-Level Digital Design Automation. Static Single Assignment

Implementing Control Flow Constructs Comp 412

The Software Stack: From Assembly Language to Machine Code

Parsing. Note by Baris Aktemur: Our slides are adapted from Cooper and Torczon s slides that they prepared for COMP 412 at Rice.

SSA Construction. Daniel Grund & Sebastian Hack. CC Winter Term 09/10. Saarland University

Register Allocation. Global Register Allocation Webs and Graph Coloring Node Splitting and Other Transformations

The Processor Memory Hierarchy

Computing Inside The Parser Syntax-Directed Translation. Comp 412 COMP 412 FALL Chapter 4 in EaC2e. source code. IR IR target.

Intermediate Representation (IR)

The Static Single Assignment Form:

Lessons from Fi,een Years of Adap2ve Compila2on

Middle End. Code Improvement (or Optimization) Analyzes IR and rewrites (or transforms) IR Primary goal is to reduce running time of the compiled code

Syntax Analysis, VI Examples from LR Parsing. Comp 412

Lecture 23 CIS 341: COMPILERS

Control flow and loop detection. TDT4205 Lecture 29

CONTROL FLOW ANALYSIS. The slides adapted from Vikram Adve

Intermediate Representations

Live Variable Analysis. Work List Iterative Algorithm Rehashed

Code generation for modern processors

Code generation for modern processors

Building a Parser Part III

Control Flow Analysis

Goals of Program Optimization (1 of 2)

Induction Variable Identification (cont)

The ILOC Virtual Machine (Lab 1 Background Material) Comp 412

Runtime Support for Algol-Like Languages Comp 412

Just-In-Time Compilers & Runtime Optimizers

Compiler Design. Register Allocation. Hwansoo Han

Sustainable Memory Use Allocation & (Implicit) Deallocation (mostly in Java)

Optimizer. Defining and preserving the meaning of the program

The View from 35,000 Feet

SSA. Stanford University CS243 Winter 2006 Wei Li 1

Advanced Compilers CMPSCI 710 Spring 2003 Computing SSA

Static single assignment

CS415 Compilers. Intermediate Represeation & Code Generation

Introduction to Optimization, Instruction Selection and Scheduling, and Register Allocation

Lab 3, Tutorial 1 Comp 412

Control Flow Analysis

Syntax Analysis, VII One more LR(1) example, plus some more stuff. Comp 412 COMP 412 FALL Chapter 3 in EaC2e. target code.

Advanced Compilers CMPSCI 710 Spring 2003 Dominators, etc.

Compiler Passes. Optimization. The Role of the Optimizer. Optimizations. The Optimizer (or Middle End) Traditional Three-pass Compiler

Lexical Analysis, V Implemen'ng Scanners. Comp 412 COMP 412 FALL Sec0on 2.5 in EaC2e. target code. source code Front End OpMmizer Back End

Loops and Locality. with an introduc-on to the memory hierarchy. COMP 506 Rice University Spring target code. source code OpJmizer

Computing Inside The Parser Syntax-Directed Translation. Comp 412

Engineering a Compiler

CS577 Modern Language Processors. Spring 2018 Lecture Optimization

Loop Optimizations. Outline. Loop Invariant Code Motion. Induction Variables. Loop Invariant Code Motion. Loop Invariant Code Motion

Generating Code for Assignment Statements back to work. Comp 412 COMP 412 FALL Chapters 4, 6 & 7 in EaC2e. source code. IR IR target.

Naming in OOLs and Storage Layout Comp 412

CS415 Compilers. Procedure Abstractions. These slides are based on slides copyrighted by Keith Cooper, Ken Kennedy & Linda Torczon at Rice University

Topic 9: Control Flow

CS153: Compilers Lecture 23: Static Single Assignment Form

Transcription:

COMP 512 Rice University Spring 2015 Construc)on of Sta)c Single- Assignment Form Copyright 2015, Keith D. Cooper & Linda Torczon, all rights reserved. Students enrolled in Comp 512 at Rice University have explicit permission to make copies of these materials for their personal use. Faculty from other educahonal inshtuhons may use these materials for nonprofit educahonal purposes, provided this copyright nohce is preserved CitaHon numbers refer to entries in the EaC2e bibliography.

DEF- USE Chains (see last lecture) Example x 17-4! x a + b! x y - z! x 13! z x * q! s w - x! Figure shows only those DEF- USE chains that involve x Figure ignores other variables NoHce that mulhple DEFs can reach a given USE & each USE can reach mulhple DEFs Some authors call a connected set of DEFs & USEs as a web DEF- USE webs are live ranges in global register allocahon [75,74] COMP 512, Rice University 2

Review from prior lectures Constant Propaga<on, The Old Way CONSTANTS = variables Transforma<on: Global Constant Folding Along every path to p, v has same known value Specialize computahon at p based on v s value c - 2 c - 1 c 0 c 1 c 2... Data- flow problem: Constant PropagaHon Domain is the set of pairs <v i,c i > where v i is a variable and c i C CONSTANTS(b) = p preds(b) f p (CONSTANTS(p)) performs a pairwise meet on two sets of pairs f p (x) is a block specific funchon that models the effects of block p on the <v i,c i > pairs in x Constant propagahon is a forward flow problem The Lacce C Form of f is quite different than in the other GDFAPs that we have seen COMP 512, Rice University 3

Review from prior lectures Constant Propaga<on, The Old Way Meet opera<on requires more explana<on c 1 c 2 = c 1 if c 1 = c 2, else (bofom & top as expected) What about f p? If p has one statement then x y with CONSTANTS(p) = { <x,l 1 >, <y,l 2 > } then f p (CONSTANTS(p)) = CONSTANTS(p) - <x,l 1 > + <x,l 2 > X y op z with CONSTANTS(p) = { <x,l 1 >, <y,l 2 > >, <z,l 3 > } then f p (CONSTANTS(p)) = CONSTANTS(p) - <x,l 1 > + <x,l 2 op l 3 > If p has n statements then f p (CONSTANTS(p)) = f n (f n- 1 (f n- 2 ( f 2 (f 1 (CONSTANTS(p))) ))) where f i is the funchon generated by the i th statement in p f p does not fit into the mold of the funchons in our Kam- Ullman rapid frameworks. COMP 512, Rice University 4

Constant Propaga<on over DEF- USE Chains Worklist Ø for i 1 to number of operahons if in 1 of operahon i is a constant c i then Value(in 1,i ) c i else Value(in 1,i ) T if in 2 of operahon i is a constant c j then Value(in 2,i ) c j else Value(in 2,i ) T if (Value(in 1,i ) is a constant & Value(in 2,i ) is a constant) then Value(out,i ) evaluate op i Worklist Worklist {i } else Value(out,i ) T Ini<aliza<on Step while ( Worklist Ø) remove a definihon i from WorkList for each j USES(out,i ) let x be operand where j occurs Value(in x,j ) Value(in x,j ) Value(out,i ) if (Value(in 1,j ) is a constant & Value(in 2,j ) is a constant) then Value(out,j ) evaluate op j Worklist Worklist {j } else if (Value(in 1,j ) is or Value(in 2,j ) is ) then Value(out,j ) Worklist Worklist {j } Propaga<on Step COMP Any T 512, ler Rice arer University fixed point derives from an uninihalized value. What should we do? 5

DEF- USE Chains Example x 17-4! x a + b! x y - z! x 13! Applying the algorithm involves: IniHalizaHon step at each operahon Two DEFs go on the worklist Others are not constant valued A mulh- way meet at each use of x z x * q! s w - x! COMP 512, Rice University 6

Constant Propaga<on over DEF- USE Chains Back to the Example x 17-4! x a + b! x y - z! At each USE that can refer to mulhple definihons, the analysis takes the meet of the incoming definihons. No work in blocks where info just passes through x 13! z x * q! Computes of three values here s w - x! Computes of four values here COMP 512, Rice University 7

Constant Propaga<on over DEF- USE Chains Complexity IniHal step takes O(1) Hme per operahon PropagaHon takes USES(v,i ) for each i pulled from Worklist Summing over all ops, becomes edges in DEF- USE graph A definihon can be on the worklist twice O( operahons + edges in DEF- USE graph ) (lagce height) This sparse- graph 1 approach is faster than the straightorward iterahve approach in the Kildall style both in asymptohc complexity and in prachcal implementahon. SHll, the number of meets is O( definihons 2 ) in the worst case. We can do befer. 1 We think of the DEF- USE graph as sparse because it connects the COMP DEF directly 512, to Rice the University USE without touching blocks in between them. 8

DEF- USE Chains and Birth Points Birth Points Of Values x 17-4! Value is born here 17-4 y - z x a + b! x y - z! Value is born here 17-4 y - z 13 x 13! z x * q! Value is born 17-4 y - z 13 a+b s w - x! COMP 512, Rice University 9

DEF- USE Chains and Birth Points Birth Points Of Values x 17-4! x a + b! x y - z! x 13! z x * q! s w - x! We should be able to compute the values that we need with fewer meet operahons, if only we can find these birth points. Need to idenhfy birth points Need to insert some arhfact to force the evaluahon to follow the birth points Enter StaHc Single Assignment form, or SSA EssenHally, we want a DEF- USE graph that has fewer edges. COMP 512, Rice University 10

DEF- USE Chains and Birth Points Making Birth Points Explicit x 5 a + b! x 0 17-4! There are three birth points for x x 1 y - z! x 3 13! z x 4 * q! s w - x 6! * COMP 512, Rice University 11

DEF- USE Chains and Birth Points Making Birth Points Explicit x 0 17-4! x 5 a + b! x 1 y - z! x 2 Ø(x 1,x 0 )! x 3 13! x 4 Ø(x 3,x 2 )! z x 4 * q! x 6 Ø(x 5,x 4 )! s w - x 6! Each birth point needs a definihon to reconcile the values of x Insert a ø- funchon at each birth point Rename values so each name is defined once Now, each use refers to one definihon StaHc Single- Assignment Form COMP 512, Rice University * 12

Building Sta<c Single- Assignment Form 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 ϕ- funchons at birth points of values Rename all values for uniqueness A ϕ- funchon 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. y 1...! y 2...! y 3 Ø(y 1,y 2 )! I know of no machine that implements a ϕ- funchon directly in hardware. COMP 512, Rice University 13

SSA Construc<on Algorithm (High- level sketch) 1. Insert ϕ- funchons 2. Rename values that s all... of course, there is some bookkeeping to be done... COMP 512, Rice University 14

SSA Construc<on Algorithm (The naïve algorithm) 1. Insert ϕ- funchons at every join 1 for every name 2. Solve reaching defininons 3. Rename each use to the def that reaches it (will be unique) What s wrong with this approach Too many ϕ- funchons (precision) Too many ϕ- funchons (space) Too many ϕ- funchons (Nme) Need to relate edges to ϕ- funchons parameters (bookkeeping) To do befer, we need a more complex approach Builds a version of SSA with the maximal number of ϕ- funchons COMP 1 Every 512, birth Rice point University occurs at a definihon or a join point in the CFG. 15

Back to the Example and Birth Points x 0 17-4! x 5 a + b! x 1 y - z! x 2 Ø(x 1,x 0 )! x 3 13! x 4 Ø(x 3,x 2 )! z x 4 * q! x 6 Ø(x 5,x 4 )! s w - x 6! The naïve algorithm inserts too many ø funchons Our goal was a ø- funchon at each birth point Naïve algorithm inserts a ø for each name at each merge in the CFG The naïve algorithm produces Correct SSA form More ø s than any other known algorithm for SSA construchon The rest is ophmizahon (!) Key Point: number of meet operahons that constant propagahon performs is now a property of both placement of definihons & CFG structure. In prachce, we expect to COMP perform 512, many Rice fewer University meets & to see that the number of meets grows more slowly. 16

SSA Construc<on Algorithm (Detailed sketch for pruned SSA) 1. Insert ϕ- funchons a. calculate dominance fronhers b. find global names for each name, build a list of blocks that define it c. insert ϕ- funchons Creates the iterated dominance fronher global name n block b in which n is assigned block d in b s dominance fronher insert a ϕ- funchon for n in d add d to n s list of defining blocks CriHcal, but moderately complex; DFs guide ϕ- funchon inserhon Compute list of blocks where each name is assigned & use as a worklist This adds to the worklist! Use a checklist to avoid pucng blocks on the worklist twice; keep another checklist to avoid inserhng the same ϕ- funchon twice. COMP 512, Fall 2013 17 *

SSA Construc<on 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, b a. generate unique names for result of each ϕ- funchon and push them on the appropriate stacks b. rewrite each operahon in the block i. Rewrite uses of global names with the current version (from the stack) ii. Rewrite definihon by invenhng & pushing new name c. fill in ϕ- funchon parameters of successor blocks d. recurse on b s children in the dominator tree 1 counter per name for subscripts e. <on exit from block b > pop names generated in b from stacks Reset the state Need the end- of- block name for this path COMP 512, Fall 2013 18 *

Dominance Fron<ers & Inser<ng ϕ- func<ons Where does an assignment in block n induce a ϕ func<on? n DOM m no need for a ϕ funchon in m DefiniHon in n blocks any previous definihon from reaching m If m has mulhple predecessors, and n dominates one of them, but not all of them, then m needs a ϕ funchon for each definihon in n More formally, m is in the dominance fronher of n if and only if 1. p preds(m) such that n DOM(p), and 2. n does not strictly dominate m (n DOM(m) { m }) This dominance fronher is precisely what we need to insert ϕ funchons: A def in block n induces a ϕ funcnon in each block in DF(n). Strict dominance allows a ϕ funchon at the head of a single- block loop. COMP 512, Fall 2013 19

DOM Example B 0 B 1 Results of itera<ve solu<on for DOM 0 1 2 3 4 5 6 7 DOM 0 0,1 0,1,2 0,1,3 0,1,3,4 0,1,3,5 0,1,3,6 0,1,7 IDOM 0 0 1 1 3 3 3 1 B 2 B 3 B 4 B 5 B 6 B 7 Flow Graph COMP 512, Rice University 20 *

Example B 0 B 1 Results of itera<ve solu<on for DOM 0 1 2 3 4 5 6 7 DOM 0 0,1 0,1,2 0,1,3 0,1,3,4 0,1,3,5 0,1,3,6 0,1,7 IDOM 0 0 1 1 3 3 3 1 B 2 B 3 B 4 B 5 B 6 B 7 Dominance Tree COMP 512, Fall 2013 21

Example Dominance Fron<ers & ϕ- Func<on Inser<on B 0 x B ϕ(...) 1 A definihon at n forces a ϕ- funchon at m iff n DOM(m) but n DOM(p) for some p preds(m) DF(n ) is fringe just beyond region n dominates B 2 B 3 x B... 4 B 5 x B ϕ(...) 6 0 1 2 3 4 5 6 7 DOM 0 0,1 0,1,2 0,1,3 0,1,3,4 0,1,3,5 0,1,3,6 0,1,7 Strict DF 1 1 7 7 6 6 7 1 DF(4) is {6}, so in 4 forces ϕ- funchon in 6 B 7 x ϕ(...) in 6 forces ϕ- funchon in DF(6) = {7} Dominance FronHers in 7 forces ϕ- funchon in DF(7) = {1} in 1 forces ϕ- funchon in DF(1) = {1} (halt the ϕ is already there ) For each assignment, we insert the ϕ- funchons COMP 512, Fall 2013 22 *

Example B 0 B 1 B 2 B 3 B 4 B 5 B 7 B 6 Dominance FronHers 0 1 2 3 4 5 6 7 DOM 0 0,1 0,1,2 0,1,3 0,1,3,4 0,1,3,5 0,1,3,6 0,1,7 Strict DF 1 1 7 7 6 6 7 1 Compu<ng Dominance Fron<ers Only join points are in DF(n) for some n Leads to a simple, intuihve algorithm for compuhng dominance fronhers For each join point x (i.e., preds(x) > 1) For each CFG predecessor p of x Run from p to IDOM(x) in the dominator tree, & add x to DF(n) for each n from p up to but not IDOM(x) For some applicahons (other than building SSA), we need post- dominance, the post- dominator tree, and reverse dominance fronhers, RDF(n) u Just dominance on the reverse CFG u Reverse the edges & add unique exit node We will use these ideas in dead code eliminahon COMP 512, Fall 2013 23 *

SSA Construc<on Algorithm (Reminder) 1. Insert ϕ- funchons at every join for every name a. calculate dominance fronhers b. find global names for each name, build a list of blocks that define it c. insert ϕ- funchons global name n block b in which n is assigned block d in b s dominance fronher insert a ϕ- funchon for n in d add d to n s list of defining blocks A global is LIVE on input to some block x is global iff b x UEVAR(b) Step 1.b is not in the CFRWZ [110] algorithms It produces an SSA form with fewer ϕ- func<ons [50] COMP 512, Fall 2013 24 *

SSA Construc<on Algorithm Finding global names Difference between different forms of SSA Minimal SSA uses all names [CFRWZ, 110] Semi- pruned uses names that are live on entry to some block [50] Shrinks name space & number of ϕ- funchons Pays for itself in compile- Hme speed For each global name, need a list of blocks where it is defined Drives ϕ- funchon inserhon b defines x implies a ϕ- funchon for x in every c DF(b) Pruned SSA adds a test to see if x is live at inserhon point Otherwise, needs no ϕ- funchon. Can use local nohon of live. Occasionally, building pruned is faster than building semi- pruned. Any algorithm that has non- linear behavior in the number of ϕ- funchons will have a size where pruned is the SSA flavor of choice. COMP 512, Fall 2013 25

B 0! B 1! i! a! c! Example B 2! b! c! d! B 4! B 3! d! a! d! B 5! c! Example CFG Lots of assignments Expression details ellided B 6! b! B 7! y a+b! z c+d! i i+1! Assume a, b, c, & d defined before B 0 COMP 512, Fall 2013 26

Excluding local names avoids Ø s for y & z B 2! b! c! d! B 0! B 1! i! a Ø(a,a)! b Ø(b,b)! c Ø(c,c)! d Ø(d,d)! i Ø(i,i)! a! c! B 4! B 3! d! a! d! B 5! c! Example Aeer Ø inser<on Lots of new ops Renaming is next B 6! d Ø(d,d)! c Ø(c,c)! b! Assume a, b, c, & d defined before B 0 B 7! a Ø(a,a)! b Ø(b,b)! c Ø(c,c)! d Ø(d,d)! y a+b! z c+d! i i+1! COMP 512, Fall 2013 27

SSA Construc<on Algorithm One Final Point About Φ- func<on Inser<on Φ- funchons have an unusual semanhcs When execuhon enters a block, all Φ- funchons evaluate their arguments, in parallel, and then perform their assignments, in parallel This behavior allows the compiler to manipulate Φ- funchons without worrying about the order in which they appear at the head of a block The parallel semanhcs of Φ- funchons will introduce complicahons when the compiler tries to translate code in SSA form back into executable code COMP 512, Fall 2013 28

SSA Construc<on Algorithm (Detailed sketch) 2. Rename variables in a pre- order walk over dominator tree (use an array of stacks, one stack per global name) StarHng with the root block, b a. generate unique names for each ϕ- funchon and push them on the appropriate stacks b. rewrite each operahon in the block i. Rewrite uses of global names with the current version (from the stack) ii. Rewrite definihon by invenhng & pushing new name c. fill in ϕ- funchon parameters of successor blocks d. recurse on b s children in the dominator tree 1 counter per name for subscripts e. <on exit from block b > pop names generated in b from stacks Reset the state Need the end- of- block name for this path COMP 512, Fall 2013 29 *

SSA Construc<on Algorithm (Less high- level sketch) Adding the details... for each global name i counter[i] 0 stack[i] Ø call Rename(n 0 ) NewName(n) i counter[n] counter[n] counter[n] + 1 push n i onto stack[n] return n i Rename(b) for each ϕ- funchon in b, x ϕ ( ) rename x as NewName(x) for each operahon x y op z in b rewrite y as top(stack[y]) rewrite z as top(stack[z]) rewrite x as NewName(x) for each successor of b in the CFG rewrite appropriate ϕ parameters for each successor s of b in dom. tree Rename(s) for each operahon x y op z in b or each phi- funchon pop(stack[x]) Minor engineering nit: assume, up front, that we COMP convert 512, all Fall names 2013 into unique small integers 30

B 0! B 1! i! a Ø(a,a)! b Ø(b,b)! c Ø(c,c)! d Ø(d,d)! i Ø(i,i)! a! c! Example Before processing B 0 B 2! b! c! d! B 4! B 3! d! a! d! B 5! c! Assume a, b, c, & d defined before B 0 B 7! B 6! a Ø(a,a)! b Ø(b,b)! c Ø(c,c)! d Ø(d,d)! y a+b! z c+d! i i+1! d Ø(d,d)! c Ø(c,c)! b! Counters Stacks a b c d i 1 1 1 1 0 a 0 b 0 c 0 d 0 i has not been defined COMP 512, Fall 2013 31

B 0! B 1! i 0! a Ø(a 0,a)! b Ø(b 0,b)! c Ø(c 0,c)! d Ø(d 0,d)! i Ø(i 0,i)! a! c! Example End of B 0 B 2! b! c! d! B 4! B 3! d! a! d! B 5! c! B 7! B 6! a Ø(a,a)! b Ø(b,b)! c Ø(c,c)! d Ø(d,d)! y a+b! z c+d! i i+1! d Ø(d,d)! c Ø(c,c)! b! Counters Stacks a b c d i 1 1 1 1 1 a 0 b 0 c 0 d 0 i 0 COMP 512, Fall 2013 32

B 0! B 1! i 0! a 1 Ø(a 0,a)! b 1 Ø(b 0,b)! c 1 Ø(c 0,c)! d 1 Ø(d 0,d)! i 1 Ø(i 0,i)! a 2! c 2! Example End of B 1 B 2! b! c! d! B 4! B 3! d! a! d! B 5! c! B 7! B 6! a Ø(a,a)! b Ø(b,b)! c Ø(c,c)! d Ø(d,d)! y a+b! z c+d! i i+1! d Ø(d,d)! c Ø(c,c)! b! Counters Stacks a b c d i 3 2 3 2 2 a 0 b 0 c 0 d 0 i 0 a 1! b 1! c 1! d 1! i 1! a 2! c 2! COMP 512, Fall 2013 33

B 0! B 1! i 0! a 1 Ø(a 0,a)! b 1 Ø(b 0,b)! c 1 Ø(c 0,c)! d 1 Ø(d 0,d)! i 1 Ø(i 0,i)! a 2! c 2! Example End of B 2 B 2! b 2! c 3! d 2! B 4! B 3! d! a! d! B 5! c! B 7! B 6! a Ø(a 2,a)! b Ø(b 2,b)! c Ø(c 3,c)! d Ø(d 2,d)! y a+b! z c+d! i i+1! d Ø(d,d)! c Ø(c,c)! b! Counters Stacks a b c d i 3 3 4 3 2 a 0 b 0 c 0 d 0 i 0 a 1! b 1! c 1! d 1! i 1! a 2! b 2! c 2! d 2! c 3! COMP 512, Fall 2013 34

B 0! B 1! i 0! a 1 Ø(a 0,a)! b 1 Ø(b 0,b)! c 1 Ø(c 0,c)! d 1 Ø(d 0,d)! i 1 Ø(i 0,i)! a 2! c 2! Example Before star<ng B 3 B 2! b 2! c 3! d 2! B 4! B 3! d! a! d! B 5! c! B 7! B 6! a Ø(a 2,a)! b Ø(b 2,b)! c Ø(c 3,c)! d Ø(d 2,d)! y a+b! z c+d! i i+1! d Ø(d,d)! c Ø(c,c)! b! i 100 Counters Stacks a b c d i 3 3 4 3 2 a 0 b 0 c 0 d 0 i 0 a 1! b 1! c 1! d 1! i 1! a 2! c 2! COMP 512, Fall 2013 35

B 0! B 1! i 0! a 1 Ø(a 0,a)! b 1 Ø(b 0,b)! c 1 Ø(c 0,c)! d 1 Ø(d 0,d)! i 1 Ø(i 0,i)! a 2! c 2! Example End of B 3 B 2! b 2! c 3! d 2! B 4! B 3! d! a 3! d 3! B 5! c! B 7! B 6! a Ø(a 2,a)! b Ø(b 2,b)! c Ø(c 3,c)! d Ø(d 2,d)! y a+b! z c+d! i i+1! d Ø(d,d)! c Ø(c,c)! b! Counters Stacks a b c d i 4 3 4 4 2 a 0 b 0 c 0 d 0 i 0 a 1! b 1! c 1! d 1! i 1! a 2! c 2! a 3! d 3! COMP 512, Fall 2013 36

B 0! B 1! i 0! a 1 Ø(a 0,a)! b 1 Ø(b 0,b)! c 1 Ø(c 0,c)! d 1 Ø(d 0,d)! i 1 Ø(i 0,i)! a 2! c 2! Example End of B 4 B 2! b 2! c 3! d 2! B 4! B 3! d 4! a 3! d 3! B 5! c! B 7! B 6! a Ø(a 2,a)! b Ø(b 2,b)! c Ø(c 3,c)! d Ø(d 2,d)! y a+b! z c+d! i i+1! d Ø(d 4,d)! c Ø(c 2,c)! b! Counters Stacks a b c d i 4 3 4 5 2 a 0 b 0 c 0 d 0 i 0 a 1! b 1! c 1! d 1! i 1! a 2! c 2! a 3! d 3! d 4! COMP 512, Fall 2013 37

B 0! B 1! i 0! a 1 Ø(a 0,a)! b 1 Ø(b 0,b)! c 1 Ø(c 0,c)! d 1 Ø(d 0,d)! i 1 Ø(i 0,i)! a 2! c 2! Example End of B 5 B 2! b 2! c 3! d 2! B 4! B 3! d 4! a 3! d 3! B 5! c 4! B 7! B 6! a Ø(a 2,a)! b Ø(b 2,b)! c Ø(c 3,c)! d Ø(d 2,d)! y a+b! z c+d! i i+1! d Ø(d 4,d 3 )! c Ø(c 2,c 4 )! b! Counters Stacks a b c d i 4 3 5 5 2 a 0 b 0 c 0 d 0 i 0 a 1! b 1! c 1! d 1! i 1! a 2! c 2! d 3! a 3! c 4! COMP 512, Fall 2013 38

B 0! B 1! i 0! a 1 Ø(a 0,a)! b 1 Ø(b 0,b)! c 1 Ø(c 0,c)! d 1 Ø(d 0,d)! i 1 Ø(i 0,i)! a 2! c 2! Example End of B 6 B 2! b 2! c 3! d 2! B 4! B 3! d 4! a 3! d 3! B 5! c 4! B 7! B 6! a Ø(a 2,a 3 )! b Ø(b 2,b 3 )! c Ø(c 3,c 5 )! d Ø(d 2,d 5 )! y a+b! z c+d! i i+1! d 5 Ø(d 4,d 3 )! c 5 Ø(c 2,c 4 )! b 3! Counters Stacks a b c d i 4 4 6 6 2 a 0 b 0 c 0 d 0 i 0 a 1! b 1! c 1! d 1! i 1! a 2! b 3! c 2! d 3! a 3! c 5! d 5! COMP 512, Fall 2013 39

B 0! B 1! i 0! a 1 Ø(a 0,a)! b 1 Ø(b 0,b)! c 1 Ø(c 0,c)! d 1 Ø(d 0,d)! i 1 Ø(i 0,i)! a 2! c 2! Example Before B 7 B 2! b 2! c 3! d 2! B 4! B 3! d 4! a 3! d 3! B 5! c 4! B 7! B 6! a Ø(a 2,a 3 )! b Ø(b 2,b 3 )! c Ø(c 3,c 5 )! d Ø(d 2,d 5 )! y a+b! z c+d! i i+1! d 5 Ø(d 4,d 3 )! c 5 Ø(c 2,c 4 )! b 3! Counters Stacks a b c d i 4 4 6 6 2 a 0 b 0 c 0 d 0 i 0 a 1! b 1! c 1! d 1! i 1! a 2! c 2! COMP 512, Fall 2013 40

B 0! B 1! i 0! a 1 Ø(a 0,a 4 )! b 1 Ø(b 0,b 4 )! c 1 Ø(c 0,c 6 )! d 1 Ø(d 0,d 6 )! i 1 Ø(i 0,i 2 )! a 2! c 2! Example End of B 7 B 2! b 2! c 3! d 2! B 4! B 3! d 4! a 3! d 3! B 5! c 4! B 7! B 6! a 4 Ø(a 2,a 3 )! b 4 Ø(b 2,b 3 )! c 6 Ø(c 3,c 5 )! d 6 Ø(d 2,d 5 )! y a 4 +b 4! z c 6 +d 6! i 2 i 1 +1! d 5 Ø(d 4,d 3 )! c 5 Ø(c 2,c 4 )! b 3! Counters Stacks a b c d i 5 5 7 7 3 a 0 b 0 c 0 d 0 i 0 a 1! b 1! c 1! d 1! i 1! a 2! c 2! a 4! b 4! c 6! d 6! i 2! COMP 512, Fall 2013 41

B 0! B 1! i 0! a 1 Ø(a 0,a 4 )! b 1 Ø(b 0,b 4 )! c 1 Ø(c 0,c 6 )! d 1 Ø(d 0,d 6 )! i 1 Ø(i 0,i 2 )! a 2! c 2! Example Aeer renaming Semi- pruned SSA form We re done B 2! b 2! c 3! d 2! B 4! B 3! d 4! a 3! d 3! B 5! c 4! B 6! d 5 Ø(d 4,d 3 )! c 5 Ø(c 2,c 4 )! b 3! B 7! a 4 Ø(a 2,a 3 )! b 4 Ø(b 2,b 3 )! c 6 Ø(c 3,c 5 )! d 6 Ø(d 2,d 5 )! y a 4 +b 4! z c 6 +d 6! i 2 i 1 +1! Semi- pruned only names live in 2 or more blocks are global names. COMP 512, Fall 2013 42

SSA Construc<on Algorithm (Pruned SSA) What s this pruned SSA stuff? Minimal SSA shll contains extraneous ϕ- funchons Inserts some ϕ- funchons where they are dead Would like to avoid inserhng them Two ideas Semi- pruned SSA: discard names used in only one block [50] Significant reduchon in total number of ϕ- funchons Needs only local Live informahon (cheap to compute) Pruned SSA: only insert ϕ- funchons where their value is live 1 Inserts even fewer ϕ- funchons, but costs more to do Requires computahon of LIVE sets In prachce, both are simple modificahons to step 1. (more expensive) 1 J.D. Choi, R. Cytron, & J. Ferrante, AutomaHc construchon of COMP sparse 512, data Fall flow 2013 evaluahon graphs, POPL 91, pages 55-66. 43

SSA Construc<on Algorithm We can improve the stack management Push at most one name per stack per block Thread names together by block To pop names for block b, use b s thread (save push & pop) This is another good use for a scoped hash table Significant reduchons in pops and pushes Makes a minor difference in SSA construchon Hme Scoped table is a clean, clear way to handle the problem COMP 512, Fall 2013 44