1 / 14

Generating SSA Form (mostly from Morgan)

Generating SSA Form (mostly from Morgan). Why is SSA form useful?. For many dataflow problems, SSA form enables sparse dataflow analysis that yields the same precision as bit-vector CFG-based dataflow analysis but is asymptotically faster since it permits the exploitation of sparsity

deepak
Download Presentation

Generating SSA Form (mostly from Morgan)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Generating SSA Form(mostly from Morgan)

  2. Why is SSA form useful? • For many dataflow problems, SSA form enables sparse dataflow analysis that • yields the same precision as bit-vector CFG-based dataflow analysis • but is asymptotically faster since it permits the exploitation of sparsity • SSA has two distinct features • factored def-use chains • renaming • you do not have to perform renaming to get advantage of SSA for many dataflow problems

  3. Summary of dependences • Dependence • Data-dependence: relation between nodes • Flow- or read-after-write (RAW) • Anti- or write-after-read (WAR) • Output- or write-after-write (WAW) • Control-dependence: relation between nodes and edges (of CFG)

  4. Postdominators • Given a CFG G, node bpostdominates node a each path (a … END) contains b. b pdom a => b postdominates a • Postdominance is dominance in “reverse CFG” (reverse direction of all CFG edges). • Immediate Postdominator (ipdom) of B is the parent of B in the postdominator tree.

  5. Dominance Frontier(from Morgan p. 75) • “Just beyond” nodes dominated by block • Dominance Frontier DF(B), set of blocks C • B dominates predecessor of C, but • B == C, OR, B does not dominate C • Used to find “merge” points for -nodes

  6. Dominance frontier • Dominance frontier of node w • Node u is in dominance frontier of node w if w • dominates a CFG predecessor v of u, but • does not strictly dominate u • Dominance frontier = control dependence in reverse graph!

  7. FindDominanceFrontier (B:Block)(from Morgan p. 76) foreach C  children(B) do FindDominanceFrontier(C) endfor DF(B) = Ø foreach X  SUCC(B) do if idom(X)  B then add X to DF(B) endif endfor foreach C  children(B) do foreach X  DF(C) do if idom(X)  B then add X to DF(B) endif endfor endfor Succ(B) is a CFG successor of B children(B) are dominator tree children of B.

  8. Iterated Dominance Frontier(from Morgan p. 171) Input: Set of blocks, S Ouput: The set DF+(S) Worklist = Ø DF+ = Ø foreach B  S do DF+(S) = DF+(S)  {B} Worklist = Worklist  {B} endfor while Worklist Ø remove B from Worklist foreach C  DF(B) do if C  DF+ (S) then DF+(S) = DF+(S)  {C} Worklist = Worklist  {C} endif endfor endwhile

  9. Algorithm to Insert -nodes1Morgan, p. 172 foreach T  Variables do S = (B | B contains definition of T)  {Entry} Compute DF+(S) foreach B  DF+(S) n = |pred(B)| Insert an n-operand -node, T = (Ti, …, Ti+n-1) in B endfor endfor

  10. Algorithm to Insert -nodes2Morgan, p. 173 foreach T  Variables do if T  Globals then S = (B | B contains definition of T)  {Entry} Compute DF+(S) foreach B  DF+(S) n = |pred(B)| Insert an n-operand -node, T = (Ti, …, Ti+n-1) in B endfor endif endfor

  11. Algorithm for Minimum -nodes3Morgan, p. 173 foreach T  Variables do if T  Globals then S = (B | B contains definition of T)  {Entry} Compute DF+(S) foreach B  DF+(S) if T  LiveIn(B) n = |pred(B)| Insert an n-operand -node, T = (Ti, …, Ti+n-1) in B endif endfor endif endfor

  12. Renaming Variables • After inserting -nodes • Match each use with the “new” name for definition • Requires walk of the Dominator Tree • Each def of V, in block B, gets new “name” Vi • V => Vi for all blocks dominated by B • See handout for algorithm, page 175 of Morgan for details

  13. Computing SSA form • Cytron et al algorithm • compute DF relation (see slides on computing control-dependence relation) • find irreflexive transitive closure of DF relation for set of assignments for each variable • Computing full DF relation • Cytron et al algorithm takes O(|V| +|DF|) time • |DF| can be quadratic in size of CFG • Faster algorithms • O(|V|+|E|) time per variable: see Bilardi and Pingali

  14. What’s Next? • So, we’ve converted CFG to SSA form • Coming Attractions • Optimizations on SSA • Converting SSA back to CFG

More Related