Topic-IC Dataflow Analysis
Total Page:16
File Type:pdf, Size:1020Kb
Topic-I-C Dataflow Analysis 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 1 Global Dataflow Analysis Motivation We need to know variable def and use information between basic blocks for: • constant folding • dead-code elimination • redundant computation elimination • code motion • induction variable elimination • build data dependence graph (DDG) • etc. 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 2 Topics of DataFlow Analysis • Reaching definition • Live variable analysis • ud-chains and du-chains • Available expressions • Others .. 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 3 Definition and Use 1. Definition & Use 푆: 푣1 = … 푣2 푆 is a “definition” of 푣1 푆 is a “use” of 푣2 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 4 Compute Def and Use Information of a Program P? Case 1: P is a basic block ? Case 2: P contains more than one basic blocks ? 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 5 Points and Paths B1 points in a basic block: d1: i := m-1 - between statements d : j := n 2 - before the first statement d3: a := u1 - after the last statement B2 d4: i := i+1 B3 d5: j := j+1 In the example, how many points basic block B1, B2, B3, and B5 have? B4 B5 B6 B1 has four, B2, B3, and B5 d : a := u2 6 have two points each. 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 6 Points and Paths B1 d1: i := m-1 A path is a sequence of points d : j := n 2 p1, p2, …, pn such that either: d3: a := u1 (i) if pi immediately precedes S, B2 than pi+1 immediately follows S. d4: i := i+1 (ii) or pi is the end of a basic block and pi+1 is the beginning of a successor block B3 d : j := j+1 5 In the example, is there a path from B4 the beginning of block B5 to the beginning of block B6? B5 B6 Yes, it travels through the end point d : a := u2 6 of B5 and then through all the points in B2, B3, and B4. 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 7 Reach and Kill Kill a definition d1 of a variable v d : x := … 1 is killed between p1 and p2 if in every path from p1 to p2 there is another definition of v. Reach a definition d reaches a point p d2 : x := … if a path d p, and d is not killed along the path In the example, do d1 and d2 reach the both d1, d2 reach point points and ? but only d1 reaches point 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 8 Reach Example S0: PROGRAM S1: READ(L) 1 B1 S2: N = 0 S3: K = 0 S4: M = 1 S5: K = K + M B2 2 S6: C = K > L S7: IF C THEN GOTO S11 S8: N = N + 1 B3 S9: M = M + 2 S10: GOTO S5 3 4 B4 S11: WRITE(N) S12: END The set of defs reaching the use of N in S8: {S2, S8} def S2 reach S11 along statement path: (S2, S3, S4, S5, S6, S7, S11) S8 reach S11 along statement path: (S8, S9, S10, S5, S6, S7, S11) 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 9 Problem Formulation: Example 1 Can d1 reach point p1? d1 x := exp1 d1 x := exp1 s if p > 0 s1 if p > 0 1 s2 x := x + 1 p1 s3 a = b + c s2 x := x + 1 s4 e = x + 1 p1 s3 a = b + c It depends on what point p1 represents!!! s4 e = x + 1 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 10 Problem Formulation: Example 2 d1 x := exp1 Can d1 and d4 reach point p3? s2 if y > 0 d1 x := exp1 s2 while y > 0 do s3 a := b + 2 s3 a := b + 2 p3 p3 d4 x := exp2 d4 x = exp2 s5 c := a + 1 end while s5 c = a + 1 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 11 Data-Flow Analysis of Structured Programs Structured programs have an useful property: there is a single point of entrance and a single exit point for each statement. We will consider program statements that can be described by the following syntax: Statement id := Expression | Statement ; Statement | if Expression then Statement else Statement | do Statement while Expression Expression id + id | id 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 12 Structured Programs S ::= id := E | S ; S This restricted syntax results in the | if E then S else S forms depicted below for flowgraphs | do S while E E ::= id + id | id S1 S1 If E goto S1 S2 S1 S2 If E goto S1 S1 S2 if E then S1 else S2 do S1 while E 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 13 Data-Flow Values 1. Each program point associates with a data-flow value 2. A data-flow value represents the possible program states that can be observed for that program point. 3. The data-flow value depends on the goal of the analysis. Given a statement 푆, 푛(푆) and 표푢푡(푆) denote the data-flow values before and after 푆, respectively. 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 14 Data-Flow Values of Basic Block Assume basic block 푩 consists of statement 풔ퟏ, 풔ퟐ, … , 풔풏 (풔ퟏ is the first statement of 푩 and 풔풏 is the last statement of 푩), the data-flow values immediately before and after 푩 is denoted as: 풊풏 푩 = 풊풏 풔ퟏ 풐풖풕 푩 = 풐풖풕(풔풏) 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 15 Instances of Data-Flow Problems ● Reaching Definitions ● Live-Variable Analysis ● DU Chains and UD Chains ● Available Expressions To solve these problems we must take into consideration the data-flow and the control flow in the program. A common method to solve such problems is to create a set of data- flow equations. 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 16 Iterative Method for Dataflow Analysis Establish a set of dataflow relations for each basic block Establish a set dataflow equations between basic blocks Establish an initial solution Iteratively solve the dataflow equations, until a fixed point is reached. 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 17 Generate set: gen(S) In general, 푑 ∈ 푔푒푛(푆) if 푑 reaches the end of 푆 independent of whether it reaches the beginning of 푆. We restrict 푔푒푛(푆) contains only the definition in 푆. If 푆 is a basic block, gen(푆) contains all the definitions inside the basic block that are “visible” immediately after the block. 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 18 Kill Set: kill(S) 풅 ∈ 푘푙푙 푺 ⇒ 푑 never reaches the end of 푺. This is equivalent to say: reaches end of 풅 푺 풅 ∉ 푘푙푙(푆) d1 a := d2 a := ... dk a : dd a := S dd: a := b + c 푘푙푙(푠) = 퐷푎 − { 푑푑 } Of course the statements d1,d2, …, dk all get killed except dd itself. A basic block’s kill set is simply the union of all the definitions killed by its individual statements! 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 19 Reaching Definitions Problem Statement: Given a program and a program point determine the set of definitions reaching this point in a program. 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 20 Iterative Algorithm for Reaching Definitions dataflow equations The set of definitions reaching the entry of basic block B: 푛(푩) = 표푢푡(푷) 푷 ∈ 푝푟푒푑푒푐푒푠푠표푟(푩) The set of definitions reaching the exit of basic block B: 표푢푡 푩 = 푔푒푛 푩 ∪ { 푛 푩 − kill 퐁 } 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 21 (AhoSethiUllman, pp. 606) Iterative Algorithm for Reaching Definitions Algorithm 1) 풐풖풕(푬푵푻푹풀) = ; 2) for (each basic block 푩 other than 푬푵푻푹풀) 풐풖풕(푩) = ; Need a flag to test if a out 3) while ( changes to any out occur) is changed! The initial value of the flag is true. 4) for ( each 푩 other than 푬푵푻푹풀) { 풊풏 푩 = 푷 ∈풑풓풆풅풆풄풆풔풔풐풓풔 풐풇 푩 풐풖풕(푷) ; 풐풖풕 푩 = 품풆풏 푩 ∪ 풊풏 푩 − 풌풊풍풍 풃 ; } Dataflow Equations – a simple case 푔푒푛 푆 = 푑 Da is the set of all definitions in the S d : a := b + c 푘푙푙 (푆) = 퐷푎 − {푑} program for variable a! S 푔푒푛(푆) = 푔푒푛 (푆2) ∪ (푔푒푛(푆1) − 푘푙푙(푆2)) S 1 S 2 푘푙푙 푆 = 푘푙푙(푆2) ∪ (푘푙푙(푆1) − 푔푒푛(푆2)) 푔푒푛(푆) = 푔푒푛(푆1) ∪ 푔푒푛(푆2) S S1 S2 푘푙푙(푆) = 푘푙푙(푆1) ∩ 푘푙푙(푆2) flow equations for reaching definitions reaching for equations flow - 푔푒푛(푆) = 푔푒푛(푆1) S S1 푘푙푙(푆) = 푘푙푙(푆1) Date 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 23 Dataflow Equations S d : a := b + c 표푢푡(푆) = 푔푒푛(푆) ∪ (푛(푆) − 푘푙푙(푆)) S 푛(푆) = 푛(푆1) S 1 푛(푆2) = 표푢푡(푆1) S2 표푢푡(푆) = 표푢푡(푆2) S S1 S2 푛 푆 = 푛 푆1 = 푛 푆2 표푢푡(푆) = 표푢푡(푆1) ∪ 표푢푡(푆2) flow equations for reaching definitions reaching for equations flow - 푛(푆) = 푛(푆 ) ∪ 표푢푡(푆 ) S S1 1 1 Date 표푢푡(푆) = 표푢푡(푆1) 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 24 Dataflow Analysis: An Example Using RD (reaching def) as an example: d1 : i = 0 Question: in What is the set of reaching loop L . definitions at the exit of the loop L? . d2 : i = i + 1 푛 퐿 = 푑1 ∪ 표푢푡(퐿) out 푔푒푛 (퐿) = {푑2} 푘푙푙 (퐿) = {푑1} 표푢푡(퐿) = 푔푒푛(퐿) ∪ {푛(퐿) − 푘푙푙(퐿)} 푛(퐿) depends on 표푢푡(퐿), and 표푢푡(퐿) depends on 푛(퐿)!! 2012/3/2 \course\cpeg421-08s\Topic4-a.ppt 25 Initialization Solution? out[L] = First iteration d1 : i = 0 표푢푡 퐿 = 푔푒푛 퐿 ∪ ( 푛 (퐿) − 푘푙푙 퐿 ) in = {푑2} ∪ ({푑1} − {푑1}) = {푑2} loop L .