Dependence analysis for pointer variables
Authors:
Open Access
- 21 June 1989
- journal article
- Published by Association for Computing Machinery (ACM) in ACM SIGPLAN Notices
- Vol. 24 (7) , 28-40
Abstract
Our concern is how to determine data dependencies between program constructs in programming languages with pointer variables. We are particularly interested in computing data dependencies for languages that manipulate heap-allocated storage, such as Lisp and Pascal. We have defined a family of algorithms that compute safe approximations to the flow, output, and anti-dependencies of a program written in such a language. Our algorithms account for destructive updates to fields of a structure and thus are not limited to the cases where all structures are trees or acyclic graphs; they are applicable to programs that build cyclic structures. Our technique extends an analysis method described by Jones and Muchnick that determines an approximation to the actual layouts of memory that can arise at each program point during execution. We extend the domain used in their abstract interpretation so that the (abstract) memory locations are labeled by the program points that set their contents. Data dependencies are then determined from these memory layouts according to the component labels found along the access paths that must be traversed during execution to evaluate the program's statements and predicates. For structured programming constructs, the technique can be extended to distinguish between loop-carried and loop-independent dependencies, as well as to determine lower bounds on minimum distances for loop-carried dependencies.Keywords
This publication has 11 references indexed in Scilit:
- Interprocedural slicing using dependence graphs1988
- Detecting conflicts between structure accesses1988
- Integrating non-intering versions of programs1988
- Lifetime analysis of dynamically allocated objects1988
- Restructuring Lisp programs for concurrent executionACM SIGPLAN Notices, 1988
- The program dependence graph and its use in optimizationACM Transactions on Programming Languages and Systems, 1987
- Program SlicingIEEE Transactions on Software Engineering, 1984
- The program dependence graph in a software development environment1984
- Dependence graphs and compiler optimizations1981
- Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints1977