Dataflow Analysis Hal Perkins Spring 2018

Dataflow Analysis Hal Perkins Spring 2018

CSE P 501 – Compilers Dataflow Analysis Hal Perkins Spring 2018 UW CSE P 501 Spring 2018 T-1 Agenda • Dataflow analysis: a framework and algorithm for many common compiler analyses • Initial example: dataflow analysis for common subexpression elimination • Other analysis problems that work in the same framework • Some of these are optimizations we’ve seen, but now more formally and with details UW CSE P 501 Spring 2018 T-2 The Story So Far… • Redundant expression elimination – Local Value Numbering – Superlocal Value Numbering • Extends VN to EBBs • SSA-like namespace – Dominator VN Technique (DVNT) • All oF these propagate along Forward edges • None are global – In particular, can’t handle back edges (loops) UW CSE P 501 Spring 2018 T-3 Dominator Value Numbering A m = a + b • 0 0 0 Most sophisticated n = a + b algorithm so far 0 0 0 B C • Still misses some p = c + d 0 0 0 q0 = a0 + b0 opportunities r = c + d 0 0 0 r1 = c0 + d0 • Can’t handle loops D E e0 = b0 + 18 e1 = a0 + 17 s0 = a0 + b0 t0 = c0 + d0 u0 = e0 + f0 u1 = e1 + f0 F e2 = Φ(e0,e1) u2 = Φ(u0,u1) v0 = a0 + b0 G w = c + d r2 = Φ(r0,r1) 0 0 0 x = e + f y0 = a0 + b0 0 2 0 z0 = c0 + d0 UW CSE P 501 Spring 2018 T-4 Available Expressions • Goal: use dataflow analysis to find common subexpressions whose range spans basic blocks • Idea: calculate available expressions at beginning of each basic block • Avoid re-evaluation of an available expression – use a copy operation UW CSE P 501 Spring 2018 T-5 “Available” and Other Terms • An expression e is defined at point p in the CFG if its value a+b is computed at p defined t1 = a + b – Sometimes called definition site ... • An expression e is killed at point p if one of its operands a+b is defined at p available t10 = a + b – Sometimes called kill site … • An expression e is available at point p if every path a+b leading to p contains a prior killed b = 7 definition of e and e is not … killed between that definition and p UW CSE P 501 Spring 2018 T-6 Available Expression Sets • To compute available expressions, for each block b, define – AVAIL(b) – the set of expressions available on entry to b – NKILL(b) – the set of expressions not killed in b • i.e., all expressions in the program except for those killed in b – DEF(b) – the set of expressions defined in b and not subsequently killed in b UW CSE P 501 Spring 2018 T-7 Computing Available Expressions • AVAIL(b) is the set AVAIL(b) = ÇxÎpreds(b) (DEF(x) È (AVAIL(x) Ç NKILL(x))) – preds(b) is the set of b’s predecessors in the CFG – The set of expressions available on entry to b is the set of expressions that were available at the end of every predeCessor basiC bloCk x – The expressions available on exit from bloCk b are those defined in b or available on entry to b and not killed in b • This gives a system of simultaneous equations – a dataflow problem UW CSE P 501 Spring 2018 T-8 Name Space Issues • In previous value-numbering algorithms, we used a SSA-like renaming to keep track of versions • In global dataflow problems, we use the original namespace – we require a+b have the same value along all paths to its use – If a or b is updated along any path to its use, then a+b has the “wrong” value – so original names are exactly what we want • The KILL information captures when a value is no longer available UW CSE P 501 Spring 2018 T-9 Computing Available Expressions • Big Picture – Build control-flow graph – Calculate initial local data – DEF(b) and NKILL(b) • This only needs to be done once for each block b and depends only on the statements in b – Iteratively calculate AVAIL(b) by repeatedly evaluating equations until nothing changes • Another fixed-point algorithm UW CSE P 501 Spring 2018 T-10 Computing DEF and NKILL (1) • For each block b with operations o1, o2, …, ok KILLED = Æ // killed variables, not expressions DEF(b) = Æ for i = k to 1 // note: working back to Front assume oi is “x = y + z” add x to KILLED if (y Ï KILLED and z Ï KILLED) add “y + z” to DEF(b) … UW CSE P 501 Spring 2018 T-11 Computing DEF and NKILL (2) • After computing DEF and KILLED for a block b, compute set of all expressions in the program not killed in b NKILL(b) = { all expressions } for each expression e for each variable v Î e if v Î KILLED then NKILL(b) = NKILL(b) - e UW CSE P 501 Spring 2018 T-12 Example: Compute DEF and NKILL j = 2 * a k = 2 * b x = a + b c = 5 * n b = c + d m = 5 * n h = 2 * a UW CSE P 501 Spring 2018 T-14 Example: Compute DEF and NKILL j = 2 * a DEF = { 2*a, 2*b } k = 2 * b NKILL = exprs w/o j or k x = a + b c = 5 * n b = c + d m = 5 * n h = 2 * a UW CSE P 501 Spring 2018 T-15 Example: Compute DEF and NKILL j = 2 * a DEF = { 2*a, 2*b } k = 2 * b NKILL = exprs w/o j or k x = a + b c = 5 * n DEF = { 5*n } b = c + d NKILL = exprs w/o c m = 5 * n h = 2 * a UW CSE P 501 Spring 2018 T-16 Example: Compute DEF and NKILL j = 2 * a DEF = { 2*a, 2*b } k = 2 * b NKILL = exprs w/o j or k DEF = { 5*n, c+d } x = a + b c = 5 * n DEF = { 5*n } NKILL = exprs w/o b = c + d NKILL = exprs w/o c m, x, b m = 5 * n h = 2 * a UW CSE P 501 Spring 2018 T-17 Example: Compute DEF and NKILL j = 2 * a DEF = { 2*a, 2*b } k = 2 * b NKILL = exprs w/o j or k DEF = { 5*n, c+d } x = a + b c = 5 * n DEF = { 5*n } NKILL = exprs w/o b = c + d NKILL = exprs w/o c m, x, b m = 5 * n DEF = { 2*a } h = 2 * a NKILL = exprs w/o h UW CSE P 501 Spring 2018 T-18 Computing Available Expressions Once DEF(b) and NKILL(b) are computed for all blocks b Worklist = { all blocks bi } while (Worklist ¹ Æ) remove a block b from Worklist recompute AVAIL(b) if AVAIL(b) changed Worklist = Worklist È successors(b) UW CSE P 501 Spring 2018 T-19 Example: Find Available Expressions AVAIL(b) = ÇxÎpreds(b) (DEF(x) È (AVAIL(x) Ç NKILL(x))) j = 2 * a DEF = { 2*a, 2*b } k = 2 * b NKILL = exprs w/o j or k DEF = { 5*n, c+d } x = a + b c = 5 * n DEF = { 5*n } NKILL = exprs w/o b = c + d NKILL = exprs w/o c m, x, b m = 5 * n DEF = { 2*a } h = 2 * a NKILL = exprs w/o h = in worklist = processing UW CSE P 501 Spring 2018 T-20 Example: Find Available Expressions AVAIL(b) = ÇxÎpreds(b) (DEF(x) È (AVAIL(x) Ç NKILL(x))) AVAIL = { } j = 2 * a DEF = { 2*a, 2*b } k = 2 * b NKILL = exprs w/o j or k DEF = { 5*n, c+d } x = a + b c = 5 * n DEF = { 5*n } NKILL = exprs w/o b = c + d NKILL = exprs w/o c m, x, b m = 5 * n DEF = { 2*a } h = 2 * a NKILL = exprs w/o h = in worklist = processing UW CSE P 501 Spring 2018 T-21 Example: Find Available Expressions AVAIL(b) = ÇxÎpreds(b) (DEF(x) È (AVAIL(x) Ç NKILL(x))) AVAIL = { } j = 2 * a DEF = { 2*a, 2*b } k = 2 * b NKILL = exprs w/o j or k DEF = { 5*n, c+d } x = a + b c = 5 * n DEF = { 5*n } NKILL = exprs w/o b = c + d NKILL = exprs w/o c m, x, b m = 5 * n AVAIL = { 5*n } h = 2 * a DEF = { 2*a } NKILL = exprs w/o h = in worklist = processing UW CSE P 501 Spring 2018 T-22 Example: Find Available Expressions AVAIL(b) = ÇxÎpreds(b) (DEF(x) È (AVAIL(x) Ç NKILL(x))) AVAIL = { } j = 2 * a DEF = { 2*a, 2*b } k = 2 * b NKILL = exprs w/o j or k AVAIL = { 2*a, 2*b } x = a + b c = 5 * n DEF = { 5*n } DEF = { 5*n, c+d } NKILL = exprs w/o c NKILL = exprs w/o b = c + d m, x, b m = 5 * n AVAIL = { 5*n } h = 2 * a DEF = { 2*a } NKILL = exprs w/o h = in worklist = processing UW CSE P 501 Spring 2018 T-23 Example: Find Available Expressions AVAIL(b) = ÇxÎpreds(b) (DEF(x) È (AVAIL(x) Ç NKILL(x))) AVAIL = { } j = 2 * a DEF = { 2*a, 2*b } k = 2 * b NKILL = exprs w/o j or k AVAIL = { 2*a, 2*b } AVAIL = { 2*a, 2*b } DEF = { 5*n, c+d } x = a + b c = 5 * n DEF = { 5*n } NKILL = exprs w/o b = c + d NKILL = exprs w/o c m, x, b m = 5 * n AVAIL = { 5*n } h = 2 * a DEF = { 2*a } NKILL = exprs w/o h = in worklist = processing UW CSE P 501 Spring 2018 T-24 Example: Find Available Expressions AVAIL(b) = ÇxÎpreds(b) (DEF(x) È (AVAIL(x) Ç NKILL(x))) AVAIL = { } j = 2 * a DEF = { 2*a, 2*b } k = 2 * b NKILL = exprs w/o j or k AVAIL = { 2*a, 2*b } AVAIL = { 2*a, 2*b } DEF = { 5*n, c+d } x = a + b c = 5 * n DEF = { 5*n } NKILL = exprs w/o b = c + d NKILL = exprs w/o c m, x, b m = 5 * n AVAIL = { 5*n, 2*a } h = 2 * a DEF = { 2*a } NKILL = exprs w/o h = in worklist = processing UW CSE P 501 Spring 2018 T-25 Example: Find Available Expressions AVAIL(b) = ÇxÎpreds(b) (DEF(x) È (AVAIL(x) Ç NKILL(x))) AVAIL = { } j = 2 * a DEF = { 2*a, 2*b } k = 2 * b NKILL = exprs w/o j or k AVAIL = { 2*a, 2*b } AVAIL = { 2*a, 2*b } DEF = { 5*n, c+d } x = a + b c = 5 * n DEF = { 5*n } NKILL = exprs w/o b = c + d NKILL = exprs w/o c m, x, b m = 5 * n AVAIL = { 5*n, 2*a } h = 2 * a DEF = { 2*a } NKILL = exprs w/o h = in worklist = processing And The common subexpression is??? UW CSE P 501 Spring 2018 T-26 Example: Find Available Expressions AVAIL(b) = ÇxÎpreds(b) (DEF(x) È (AVAIL(x) Ç NKILL(x))) AVAIL = { } j = 2 * a DEF = { 2*a, 2*b } k = 2 * b NKILL = exprs w/o j or k AVAIL = { 2*a, 2*b } AVAIL = { 2*a, 2*b } DEF = { 5*n, c+d } x = a + b c = 5 * n DEF = { 5*n } NKILL = exprs w/o b = c + d NKILL = exprs w/o c m, x, b m = 5 * n AVAIL = { 5*n, 2*a } h = 2 * a DEF = { 2*a } NKILL = exprs w/o h = in worklist = processing UW CSE P 501 Spring 2018 T-27 Comparing Algorithms A • m = a + b LVN – Local Value n = a + b Numbering • SVN – Superlocal Value B C p = c + d q = a + b Numbering r = c + d r = c + d • DVN – DominatoT-based D E Value Numbering e = b + 18 e = a + 17 • GRE – Global Redundancy s = a + b t = c + d Elimination u = e + f u = e + f F v = a + b w = c + d x = e + f G y = a + b z = c + d UW CSE P 501 Spring 2018 T-28 Comparing Algorithms (2) • LVN => SVN => DVN form a strict hierarchy – later algorithms find a superset of previous information • Global RE finds a somewhat

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    72 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us