Top Banner
Interprocedural Slicing Using Dependence Graphs Susan Horwitz, Thomas Reps, and David Binkley Presented by Daniel DeFreez ECS 289C, Winter 2015
34

Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Jun 18, 2019

Download

Documents

lynhu
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Interprocedural Slicing Using DependenceGraphs

Susan Horwitz, Thomas Reps, and David BinkleyPresented by Daniel DeFreez

ECS 289C, Winter 2015

Page 2: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Slicing

The slice of a program with respect to program point p andvariable x consists of all statements and predicates of theprogram that might affect the value of x at point p.

• Backward slicing• Forward slicing• Chop

Page 3: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Slicing Example

1 program Main2 sum := 03 i := 14 while i < 11 do5 sum := sum + i6 i := i + 17 od8 end

Slice at line 6, variable i

1 program Main2 i := 13 while i < 11 do4 i := i + 15 od6 end

Page 4: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Slicing

Why?• Debugging• Parallelization• Pre-processing for further analysis• ...

Page 5: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Program Dependence Graph

Used for intraprocedural slicingThe PDG for program P is a directed graph with the followingVertices:

1 Assignment statements2 Control predicates3 Entry vertex4 Other special cases, see paper

Edges:1 Control Dependence2 Data Dependence

Page 6: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

CFG vs. Control Dependence

start

1

2 3

4 5

6

7

stop

• Differs from Control FlowGraph (CFG)

• CFG is unnecessarilyimperative

start

1

2 3

4 5 6

7

Page 7: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

PDG Example

Page 8: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

PDG Slice

(from backward reachability in PDG)

Page 9: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Interprocedural Slicing

1 program Main2 i := 13 while i < 11 do4 call A(sum, i)5 od6 end

1 procedure A(x, y)2 call Add(x, y);3 call Inc(y);4 return

1 procedure Add(a, b)2 a := a + b3 return

1 procedure Inc(z)2 call Add(z, 1)

3 return // slicerespect to z

(procedures are call by value-result)

Page 10: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Interprocedural Slicing

1 program Main2 i := 13 while i < 11 do4 call A(sum, i)5 od6 end

1 procedure A(x, y)2 call Add(x, y);3 call Inc(y);4 return

1 procedure Add(a, b)

2 a := a + b

3 return

1 procedure Inc(z)

2 call Add(z, 1)

3 return // slicerespect to z

(procedures are call by value-result)

Page 11: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Interprocedural Slicing

1 program Main2 i := 13 while i < 11 do4 call A(sum, i)5 od6 end

1 procedure A(x, y)

2 call Add(x, y);

3 call Inc(y);4 return

1 procedure Add(a, b)

2 a := a + b

3 return

1 procedure Inc(z)

2 call Add(z, 1)

3 return // slicerespect to z

(procedures are call by value-result)

Page 12: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Contributions

• Introduce a new kind of graph - system dependence graph• Show how to track transitive data dependences across

procedures• Give algorithm for interprocedural slicing over SDG

Page 13: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Overview of Steps

Construct program dependence graph for each procedure2 Add call edges from call-site vertices to procedure-entry

vertices3 Add parameter-in edges from actual-in to formal-in vertices4 Add parameter-out edges from formal-out to actual-out

vertices5 Construct linkage grammar6 Compute subordinate characteristic graphs of linkage

grammar nonterminals7 Add transitive flow dependence edges

Page 14: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

System Dependence Graph

• Program Dependence Graph for main procedure• Procedure Dependence Graphs for each procedure• New edges between call sites and procedure entries• New edges for transitive dependencies due to calls

Page 15: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Procedure Dependence Graphs

• Vertex for procedure entry point• Entry point is control dependent on call site• Formal in, formal out, actual in, actual out vertices• Parameter vertices control dependent on entry point• Formal in data dependent on actual in, and actual out data

dependent on formal out

Page 16: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Procedure Dependence Graphs

1 program Main2 sum := 03 i := 14 while i < 11 do5 call A(sum, i)6 od7 end

Page 17: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Procedure Dependence Graphs

1 program Main2 sum := 03 i := 14 while i < 11 do5 call A(sum, i)6 od7 end

Page 18: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Procedure Dependence Graphs

1 program Main2 sum := 03 i := 14 while i < 11 do5 call A(sum, i)6 od7 end

Page 19: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Procedure Dependence Graphs

1 program Main2 sum := 03 i := 14 while i < 11 do5 call A(sum, i)6 od7 end

Page 20: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Procedure Dependence Graphs

1 program Main2 sum := 03 i := 14 while i < 11 do5 call A(sum, i)6 od7 end

Page 21: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Procedure Dependence Graphs

Page 22: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Procedure Dependence Graphs

Page 23: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

System Dependence Graph

• Stitch together individual procedure dependence graphs• See paper for full example

Page 24: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Overview of Steps

Construct program dependence graph for each procedureAdd call edges from call-site vertices to procedure-entryverticesAdd parameter-in edges from actual-in to formal-in verticesAdd parameter-out edges from formal-out to actual-outvertices

5 Construct linkage grammar6 Compute subordinate characteristic graphs of linkage

grammar nonterminals7 Add transitive flow dependence edges

Page 25: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Attribute Grammars

• dependence graph between attributes• Linkage grammar is generated so that attribute

dependences model flows between procedures• We don’t care about the language the grammar accepts, or

the actual values of the attributes

Page 26: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Subordinate characteristic graphs

x_in y_in A x_out y_out

Page 27: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Context-free portion

Nonterminal for each procedure Add occurrence of nonterminalon RHS for each call to procedure

Main→ AA→ Add Inc

Add→ εInc→ Add

Page 28: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Attributes

• Attribute dependences are result of intraprocedural slicing.• Procedures are sliced with respect to parameter vertices to

procedure calls• Dummy attribute functions added to model parameter

dependence

1 program Main2 sum := 03 i := 14 while i < 11 do5 call A(sum, i)6 od7 end

A.x_in = f1(A.x_out ,A.y_out)A.y_in = f2(A.y_out)A.x_out = f3(A.y_out)A.y_out = f4(A.y_out)

Page 29: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

• Need to compute transitive attribute dependences• Termed the subordinate characteristic graph• See paper for examples of attribute dependences in

linkage grammar

x_in y_in A x_out y_out

Incz_in z_out

Addb_ina_in a_out b_out

Page 30: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Overview of Steps

Construct program dependence graph for each procedureAdd call edges from call-site vertices to procedure-entryverticesAdd parameter-in edges from actual-in to formal-in verticesAdd parameter-out edges from formal-out to actual-outverticesConstruct linkage grammarCompute subordinate characteristic graphs of linkagegrammar nonterminalsAdd transitive flow dependence edges

Page 31: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Interprocedural Slicing with SDG

Two phases

1 Phase 1 does not follow parameter out edges (noprocedures called by P).

2 Phase 2 does not follow call edges or parameter in edges

Page 32: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Is it slow?

• Building SDG: O(N4) with respect to size of input,particularly number of procedure calls

• Slicing is fast after SDG is built

Page 33: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Questions?

Page 34: Interprocedural Slicing Using Dependence Graphsrubio/289c/presentations/defreez.pdf · Overview of Steps Construct program dependence graph for each procedure 2 Add call edges from

Attribute Grammars

• Originally described by Knuth• Attributes are attached to terminal and nonterminal

symbols• Attribute equations define attribute values for each attribute

in a production, defined in terms of other attributes

B → 0 v(B) = 0

B → 1 v(B) = 2s(B)

L→ B v(L) = v(B), s(B) = s(L)L1 → L2B v(L1) = v(L2) + v(B), s(B) = s(L1)

s(L2) = s(L1) + 1N → L v(N) = v(L), s(L) = 0