Optimizing Compilers CISC 673 Spring 2009 Data flow analysis

Slides:



Advertisements
Similar presentations
Data-Flow Analysis II CS 671 March 13, CS 671 – Spring Data-Flow Analysis Gather conservative, approximate information about what a program.
Advertisements

School of EECS, Peking University “Advanced Compiler Techniques” (Fall 2011) SSA Guo, Yao.
Course Outline Traditional Static Program Analysis –Theory Compiler Optimizations; Control Flow Graphs Data-flow Analysis – today’s class –Classic analyses.
Lecture 11: Code Optimization CS 540 George Mason University.
Chapter 9 Code optimization Section 0 overview 1.Position of code optimizer 2.Purpose of code optimizer to get better efficiency –Run faster –Take less.
1 CS 201 Compiler Construction Lecture 3 Data Flow Analysis.
Course Outline Traditional Static Program Analysis –Theory Compiler Optimizations; Control Flow Graphs Data-flow Analysis – today’s class –Classic analyses.
SSA.
1 Introduction to Data Flow Analysis. 2 Data Flow Analysis Construct representations for the structure of flow-of-data of programs based on the structure.
School of EECS, Peking University “Advanced Compiler Techniques” (Fall 2011) Dataflow Analysis Introduction Guo, Yao Part of the slides are adapted from.
1 CS 201 Compiler Construction Lecture 7 Code Optimizations: Partial Redundancy Elimination.
School of EECS, Peking University “Advanced Compiler Techniques” (Fall 2011) Partial Redundancy Elimination Guo, Yao.
Partial Redundancy Elimination & Lazy Code Motion
Partial Redundancy Elimination. Partial-Redundancy Elimination Minimize the number of expression evaluations By moving around the places where an expression.
1 Data flow analysis Goal : collect information about how a procedure manipulates its data This information is used in various optimizations For example,
Introduction to Code Optimization Comp 412 Copyright 2010, Keith D. Cooper & Linda Torczon, all rights reserved. Students enrolled in Comp 412 at Rice.
1 CS 201 Compiler Construction Lecture 5 Code Optimizations: Copy Propagation & Elimination.
1 Data flow analysis Goal : –collect information about how a procedure manipulates its data This information is used in various optimizations –For example,
Global optimization. Data flow analysis To generate better code, need to examine definitions and uses of variables beyond basic blocks. With use- definition.
4/25/08Prof. Hilfinger CS164 Lecture 371 Global Optimization Lecture 37 (From notes by R. Bodik & G. Necula)
1 CS 201 Compiler Construction Lecture 3 Data Flow Analysis.
Data Flow Analysis Compiler Design October 5, 2004 These slides live on the Web. I obtained them from Jeff Foster and he said that he obtained.
Improving Code Generation Honors Compilers April 16 th 2002.
Introduction to Optimization Copyright 2003, Keith D. Cooper, Ken Kennedy & Linda Torczon, all rights reserved.
U NIVERSITY OF M ASSACHUSETTS, A MHERST D EPARTMENT OF C OMPUTER S CIENCE Advanced Compilers CMPSCI 710 Spring 2003 Data flow analysis Emery Berger University.
Machine-Independent Optimizations Ⅰ CS308 Compiler Theory1.
U NIVERSITY OF M ASSACHUSETTS, A MHERST Department of Computer Science Emery Berger University of Massachusetts, Amherst Advanced Compilers CMPSCI 710.
Data Flow Analysis Compiler Design Nov. 8, 2005.
PSUCS322 HM 1 Languages and Compiler Design II IR Code Optimization Material provided by Prof. Jingke Li Stolen with pride and modified by Herb Mayer PSU.
A UNIFIED APPROACH TO GLOBAL PROGRAM OPTIMIZATION Proseminar „Programmanalyse”, Prof. Dr. Heike Wehrheim Universität Paderborn, WS 2011/2012.
1 CS 201 Compiler Construction Data Flow Analysis.
Global Common Subexpression Elimination with Data-flow Analysis Copyright 2003, Keith D. Cooper, Ken Kennedy & Linda Torczon, all rights reserved. Students.
Introduction to Optimization, II Value Numbering & Larger Scopes Copyright 2003, Keith D. Cooper, Ken Kennedy & Linda Torczon, all rights reserved. Students.
First Principles (with examples from value numbering) C OMP 512 Rice University Houston, Texas Fall 2003 Copyright 2003, Keith D. Cooper & Linda Torczon,
U NIVERSITY OF D ELAWARE C OMPUTER & I NFORMATION S CIENCES D EPARTMENT Optimizing Compilers CISC 673 Spring 2009 Static Single Assignment John Cavazos.
Jeffrey D. Ullman Stanford University. 2 boolean x = true; while (x) {... // no change to x }  Doesn’t terminate.  Proof: only assignment to x is at.
12/5/2002© 2002 Hal Perkins & UW CSER-1 CSE 582 – Compilers Data-flow Analysis Hal Perkins Autumn 2002.
Global Redundancy Elimination: Computing Available Expressions Copyright 2011, Keith D. Cooper & Linda Torczon, all rights reserved. Students enrolled.
1 Data Flow Analysis Data flow analysis is used to collect information about the flow of data values across basic blocks. Dominator analysis collected.
CS412/413 Introduction to Compilers Radu Rugina Lecture 18: Control Flow Graphs 29 Feb 02.
1 Control Flow Graphs. 2 Optimizations Code transformations to improve program –Mainly: improve execution time –Also: reduce program size Can be done.
Terminology, Principles, and Concerns, II With examples from superlocal value numbering (Ch 8 in EaC2e) Copyright 2011, Keith D. Cooper & Linda Torczon,
1 CS 201 Compiler Construction Lecture 2 Control Flow Analysis.
U NIVERSITY OF D ELAWARE C OMPUTER & I NFORMATION S CIENCES D EPARTMENT Optimizing Compilers CISC 673 Spring 2011 Data flow analysis John Cavazos University.
Code Optimization Data Flow Analysis. Data Flow Analysis (DFA)  General framework  Can be used for various optimization goals  Some terms  Basic block.
Single Static Assignment Intermediate Representation (or SSA IR) Many examples and pictures taken from Wikipedia.
11/22/2016© Hal Perkins & UW CSER-1 CSE P 501 – Compilers Dataflow Analysis Hal Perkins Autumn 2009.
Copyright 2003, Keith D. Cooper & Linda Torczon, all rights reserved.
Introduction to Optimization
Data Flow Analysis Suman Jana
Lecture 5 Partial Redundancy Elimination
Finding Global Redundancies with Hopcroft’s DFA Minimization Algorithm
Global Redundancy Elimination: Computing Available Expressions COMP 512 Rice University Houston, Texas Fall 2003 Copyright 2003, Keith D. Cooper & Linda.
Machine-Independent Optimization
Dataflow Analysis Hal Perkins Autumn 2011
Topic 10: Dataflow Analysis
Introduction to Optimization
University Of Virginia
Unit IV Code Generation
1. Reaching Definitions Definition d of variable v: a statement d that assigns a value to v. Use of variable v: reference to value of v in an expression.
Optimization through Redundancy Elimination: Value Numbering at Different Scopes COMP 512 Rice University Houston, Texas Fall 2003 Copyright 2003, Keith.
Static Single Assignment Form (SSA)
Optimizations using SSA
Data Flow Analysis Compiler Design
Dataflow Analysis Hal Perkins Winter 2008
Introduction to Optimization
Static Single Assignment
Optimizing Compilers CISC 673 Spring 2011 Static Single Assignment II
Reference These slides, with minor modification and some deletion, come from U. of Delaware – and the web, of course. 4/17/2019 CPEG421-05S/Topic5.
The Partitioning Algorithm for Detecting Congruent Expressions COMP 512 Rice University Houston, Texas Fall 2003 Copyright 2003, Keith D. Cooper.
Presentation transcript:

Optimizing Compilers CISC 673 Spring 2009 Data flow analysis John Cavazos University of Delaware

Data flow analysis Solving set of equations posed over graph representation (e.g., CFG) Based on any or all paths through program “Any path” or “All path” problems

Includes Infeasible Paths if (a == 0) { } a = 2; Infeasible paths never actually taken by program, regardless of input Undecidable to distinguish from feasible

Data Flow-Based Optimizations Dead variable elimination a = 3; print a; x = 12; halt ) a = 3; print a; halt Copy propagation x = y; … use of x ) …use of y Partial redundancy a = 3*c + d; b = 3*c ) b = 3*c; a=b+d Constant propagation a = 3; b = 2; c = a+b ) a = 3; b = 2; c = 5

Example: Redundancy Elimination Expression e at point p redundant iff every path from procedure’s entry to p contains evaluation of e and value(s) of e’s operands do not change between those earlier evaluations and p Evaluating e at p always produces the same value as those earlier evaluations

Example m  a + b n  a + b A p  c + d r  c + d B q  a + b C

Redundancy Elimination If the compiler can prove expression redundant Replace redundant evaluation with reference Problem Proving x+y is redundant Eliminate redundant evaluation Can use value numbering

Value Numbering Key notion Assign a number, V(n), to each expression V(x+y) = V(j) iff x+y and j have same value  inputs Hash value numbers to make efficient Use numbers to improve the code

Local  one block at a time Local Value Numbering Local  one block at a time The algorithm For each expression e in the block Get value numbers for operands o1 and o2 from hash lookup Hash <operator,VN(o1),VN(o2)> to get value number for e If e already had a value number, replace e with a reference If o1 & o2 are constant, evaluate it & use a “load immediate”

Local Value Numbering Example Original Code a0  x0 + y0  b0  x0 + y0 a1  17  c0  x0 + y0 1. Renaming: Give each value a unique name While complex, the meaning is clear With VNs a03  x01 + y02  b03  x01 + y02 a14  17  c03  x01 + y02 Rewritten a03  x01 + y02  b03  a03 a14  17  c03  a03 2. Result: a03 is available rewriting works

Global Redundancy Elimination u  e + f D E x  e + f F e+f is redundant Find common subexpressions whose range spans basic blocks, and eliminate unnecessary re-evaluations

Expression “available” is as follows: Expression defined at point p if value computed at p Expression killed at point p if one or more operands defined at point p e available at p if every path leading to p contains a prior definition of e and e is not killed between definition and p

“Available” Expressions for GCSE Mechanism System of simultaneous equations over the CFG Solve the equations to produce a set for each CFG node Contains names of every expression available on entry Use these sets, AVAIL(n), for redundancy elimination Safety x+y  AVAIL(n) proves earlier value x+y is same Transformation provides name for each value Several schemes for this mapping

“Available” Expressions for GCSE Profitability Don’t add any evaluations Add some copy operations Copies are inexpensive Many copies coalesce away

Computing Available Expressions For each block b Let AVAIL(b) be the set of expressions available on entry to b AVAIL constructed from local sets Let EXPRKILL(b) be the set of expression killed in b Let DEEXPR(b) be the set of downward exposed expressions x  DEEXPR(b)  x defined in b & not subsequently killed in b EXPRKILL contains all those equations “killed” by a definition in b. An expression is killed if one or more of its operands are redefined in the block. If e is in DEEXPR(b) iff b evaluates e and none of e’s operands is defined between the last evaluation of e and the block’s end. DEEXPR contains those expressions that are downward exposed.

Computing Available Expressions Now, AVAIL(b) can be defined as: AVAIL(b) = ppred(b) (DEEXPR(p)  (AVAIL(p)  EXPRKILL(p) )) AVAIL(n0) = Ø where preds(b) is the set of b’s predecessors in the CFG This system of simultaneous equations forms a data-flow problem Solve it with a data-flow algorithm Entry node in CFG is n0

Computing Available Expressions AVAIL(b) = ppred(b) (DEEXPR(p)  (AVAIL(p)  EXPRKILL(p) )) Basic Block p … DEEXPR (p) Downward exposed expressions And not later killed

Computing Available Expressions AVAIL(b) = ppred(b) (DEEXPR(p)  (AVAIL(p)  EXPRKILL(p) )) AVAIL(p) Available upon entry Basic Block p … EXPRKILL(p) Any expresssions killed AVAIL(p)  EXPRKILL(p) Expressions that Pass through unscathed

Available Expressions for GCSE The Big Picture  block b, compute AVAIL(b) Assign unique global names to expressions in AVAIL(b)  block b, value number b starting with AVAIL(b)

Compute Local Sets for each Block b assume a block b with operations o1, o2, …, ok VARKILL  Ø DEEXPR(b)  Ø for i = k to 1 // from last to first insts assume oi is “x  y + z” add x to VARKILL if (y  VARKILL) and (z  VARKILL) then add “y + z” to DEEXPR(b) EXPRKILL(b)  Ø For each expression e in procedure for each variable v  e if v  VARKILL(b) then EXPRKILL(b)  EXPRKILL(b)  {e } } Compute DEExpr Compute ExprKill

Example v  a + b a  c + d x  e + f DEExpr = {c+d,e+f } VarKill = {y,a,x} ExprKill = {a+b}

Compute Available Expressions for all blocks b compute DEExpr(b) and EXPRKILL(b) Changed=true while (Changed) Changed=false OldValue = AVAIL(b) AVAIL(b) = ppred(b) (DEEXPR(p)  (AVAIL(p)  EXPRKILL(p) )) if AVAIL(b ) != OldValue Changed=true

Example: Compute DEEXPR m  a + b n  a + b A p  c + d r  c + d B y  a + b z  c + d G q  a + b C e  b + 18 s  a + b u  e + f D e  a + 17 t  c + d E v  a + b w  c + d x  e + f F assume a block b with operations o1, o2, …, ok VARKILL  Ø DEEXPR(b)  Ø for i = k to 1 // from last to first insts assume oi is “x  y + z” add x to VARKILL if (y  VARKILL) and (z  VARKILL) then add “y + z” to DEEXPR(b) =

Example: Compute EXPRKILL m  a + b n  a + b A p  c + d r  c + d B y  a + b z  c + d G q  a + b C e  b + 18 s  a + b u  e + f D e  a + 17 t  c + d E v  a + b w  c + d x  e + f F EXPRKILL(b)  Ø For each expression e in procedure for each variable v  e if v  VARKILL(b) then EXPRKILL(b)  EXPRKILL(b)  {e }

ppred(b) (DEEXPR(p)  (AVAIL(p)  EXPRKILL(p) )) Example ppred(b) (DEEXPR(p)  (AVAIL(p)  EXPRKILL(p) )) AVAIL(A) = Ø AVAIL(B) = {a+b}  (Ø  all) = {a+b} AVAIL(C) = {a+b} AVAIL(D) = {a+b,c+d}  ({a+b}  all) = {a+b,c+d} AVAIL(E) = {a+b,c+d} AVAIL(F) = [{b+18,a+b,e+f}  ({a+b,c+d}  {all - e+f})]  [{a+17,c+d,e+f}  = {a+b,c+d,e+f} AVAIL(G)= [ {c+d}  ({a+b}  all)]  [{a+b,c+d,e+f}  ({a+b,c+d,e+f}  all)] m  a + b n  a + b A p  c + d r  c + d B y  a + b z  c + d G q  a + b C e  b + 18 s  a + b u  e + f D e  a + 17 t  c + d E v  a + b w  c + d x  e + f F

Example  AVAIL sets in blue A B G C D E F { a+b } { a+b } { a+b,c+d } m  a + b n  a + b A p  c + d r  c + d B y  a + b z  c + d G q  a + b C e  b + 18 s  a + b u  e + f D e  a + 17 t  c + d E v  a + b w  c + d x  e + f F { a+b } { a+b } { a+b,c+d } { a+b,c+d } { a+b,c+d,e+f } { a+b,c+d }

Remember Big Picture The Big Picture  block b, compute AVAIL(b) Assign unique global names to expressions in AVAIL(b)  block b, value number b starting with AVAIL(b) We’ve done step 1.

Global CSE (replacement step) Compute a static mapping from expression to name After analysis & before transformation  b, e  AVAIL(b), assign e a global name by hashing on e

Assigning unique names to global CSEs Example  Assigning unique names to global CSEs a+b  t1 c+d  t2 e+f  t3 m  a + b n  a + b A p  c + d r  c + d B y  a + b z  c + d G q  a + b C e  b + 18 s  a + b u  e + f D e  a + 17 t  c + d E v  a + b w  c + d x  e + f F { a+b } { a+b } { a+b,c+d } { a+b,c+d } { a+b,c+d,e+f } { a+b,c+d }

Remember the Big Picture  block b, compute AVAIL(b) Assign unique global names to expressions in AVAIL(b)  block b, value number b starting with AVAIL(b) We’ve done steps 1 & 2.

Value Numbering To perform replacement, value numbering each block b Initialize hash table with AVAIL(b) Replace an expression in AVAIL(b) means copy from its name At each evaluation of a global name, copy new value to its name Otherwise, value number as in last lecture

Net Result Catches local redundancies with value numbering Catches nonlocal redundancies because of AVAIL sets Not quite same effect, but close Local redundancies found by value Global redundancies found by spelling

After replacement & local value numbering Example m  a + b t1  m n  t1 A p  c + d t2  p r  t2 B y  t1 z  t2 G q  t1 r  c + d t2  r C e  b + 18 s  t1 u  e + f t3  u D e  a + 17 t  t2 E v  t1 w  t2 x  t3 F After replacement & local value numbering

Example m  a + b t1  m n  t1 A p  c + d t2  p r  t2 B y  t1 z  t2 G q  t1 r  c + d t2  r C e  b + 18 s  t1 u  e + f t3  u D e  a + 17 t  t2 E v  t1 w  t2 x  t3 F In practice, most of these copies will be folded into subsequent uses… m m p m r m r u m r

Some Copies Serve a Purpose In the example, all the copies coalesce away. Sometimes, the copies are needed. Copies into t1 create a common name along two paths Makes the replacement possible w  a + b t1  w x  a + b t1  x y  t1 w  a + b x  a + b y  a + b  Cannot write “w or x”

Example A B G C D E F m  a + b n  a + b p  c + d r  c + d y  a + b z  c + d G q  a + b C e  b + 18 s  a + b u  e + f D e  a + 17 t  c + d E v  a + b w  c + d x  e + f F LVN GRE LVN GRE GRE GRE GRE GRE GRE GRE

Next Time More Data Flow