Interprocedural Slicing Using Dependence Graphs

A slice of a program with respect to a program point p and variable x consists of all statements of the program that might affect the value of x at point p. This paper concerns the problem of interprocedural slicing — generating a slice of an entire program, where the slice crosses the boundaries of procedure calls. To solve this problem, we introduce a new kind of graph to represent programs, called a system dependence graph, which extends previous dependence representations to incorporate collections of procedures (with procedure calls) rather than just monolithic programs. Our main result is an algorithm for interprocedural slicing that uses the new representation. The chief difficulty in interprocedural slicing is correctly accounting for the calling context of a called procedure. To handle this problem, system dependence graphs include some data-dependence edges that represent transitive dependencies due to the effects of procedure calls, in addition to the conventional direct-dependence edges. These edges are constructed with the aid of an auxiliary structure that represents calling and parameter-linkage relationships. This structure takes the form of an attribute grammar. The step of computing the required transitive-dependence edges is reduced to the construction of the subordinate characteristic graphs for the grammar's nonterminals.

[1]  Lawrence T. Kou,et al.  On Live-Dead Analysis for Global Data Flow Problems , 1977, JACM.

[2]  Thomas W. Reps,et al.  On the adequacy of program dependence graphs for representing programs , 1988, POPL '88.

[3]  Yoichi Muraoka,et al.  On the Number of Operations Simultaneously Executable in Fortran-Like Programs and Their Resulting Speedup , 1972, IEEE Transactions on Computers.

[4]  Phil Pfeiffer,et al.  Dependence analysis for pointer variables , 1989, PLDI '89.

[5]  Joe D. Warren,et al.  The program dependence graph and its use in optimization , 1987, TOPL.

[6]  Wuu Yang,et al.  The Semantics of Program Slicing , 1988 .

[7]  John Banning,et al.  : An Efficient , 2022 .

[8]  Karl J. Ottenstein,et al.  The program dependence graph in a software development environment , 1984, SDE 1.

[9]  Mihalis Yannakakis,et al.  Graph-theoretic methods in database theory , 1990, PODS.

[10]  Utpal Banerjee,et al.  Speedup of ordinary programs , 1979 .

[11]  Eugene W. Myers,et al.  A precise inter-procedural data flow algorithm , 1981, POPL '81.

[12]  James R. Larus,et al.  Detecting conflicts between structure accesses , 1988, PLDI '88.

[13]  Alfred V. Aho,et al.  Compilers: Principles, Techniques, and Tools , 1986, Addison-Wesley series in computer science / World student series edition.

[14]  Patrick Cousot,et al.  Static Determination of Dynamic Properties of Recursive Procedures , 1977, Formal Description of Programming Concepts.

[15]  Mark Weiser,et al.  Reconstructing Sequential Behavior from Parallel Behavior Projections , 1983, Inf. Process. Lett..

[16]  David Callahan,et al.  The program summary graph and flow-sensitive interprocedual data flow analysis , 1988, PLDI '88.

[17]  Mark Weiser,et al.  Minimizing Communication for Synchronizing Parallel Dataflow Programs , 1988, International Conference on Parallel Processing.

[18]  David W. Binkley,et al.  Interprocedural slicing using dependence graphs , 1990, TOPL.

[19]  M. W. Du,et al.  Finding program slices for recursive procedures , 1988, Proceedings COMPSAC 88: The Twelfth Annual International Computer Software & Applications Conference.

[20]  FerranteJeanne,et al.  The program dependence graph and its use in optimization , 1987 .