Interprocedural may-alias analysis for pointers: beyond k-limiting

Existing methods for alias analysis of recursive pointer data structures are based on two approximation techniques: k-limiting, and store-based (or equivalently location or region-based) approximations, which blur distinction between elements of recursive data structures. Although notable progress in inter-procedural alias analysis has been recently accomplished, very little progress in the precision of analysis of recursive pointer data structures has been seen since the inception of these approximation techniques by Jones and Muchnick a decade ago. As a result, optimizing, verifying and parallelizing programs with pointers has remained difficult. We present a new parametric framework for analyzing recursive pointer data structures which can express a new natural class of alias information not accessible to existing methods. The key idea is to represent alias information by pairs of symbolic access paths which are qualified by symbolic descriptions of the positions for which the alias pair holds. Based on this result, we present an algorithm for interprocedural may-alias analysis with pointers which on numerous examples that occur in practice is much more precise than recently published algorithms [CWZ90, He90, LR92, CBC93].

[1]  Barbara G. Ryder,et al.  Pointer-induced aliasing: a problem classification , 1991, POPL '91.

[2]  Alain Deutsch,et al.  On determining lifetime and aliasing of dynamically allocated data in higher-order functional specifications , 1989, POPL '90.

[3]  J. Berstel,et al.  Context-free languages , 1993, SIGA.

[4]  Jong-Deok Choi,et al.  Automatic construction of sparse data flow evaluation graphs , 1991, POPL '91.

[5]  Jong-Deok Choi,et al.  Pointer-induced aliasing: a clarification , 1993, SIGP.

[6]  Patrick Cousot,et al.  Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints , 1977, POPL.

[7]  M. Burke,et al.  Eecient Flow-sensitive Interprocedural Computation of Pointer-induced Aliases and Side Eeects , 1993 .

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

[9]  Alexandru Nicolau,et al.  Parallelizing Programs with Recursive Data Structures , 1989, IEEE Trans. Parallel Distributed Syst..

[10]  Patrick Cousot,et al.  Semantic foundations of program analysis , 1981 .

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

[12]  Patrick Cousot,et al.  Comparing the Galois Connection and Widening/Narrowing Approaches to Abstract Interpretation , 1992, PLILP.

[13]  A. Deutsch,et al.  A storeless model of aliasing and its abstractions using finite representations of right-regular equivalence relations , 1992, Proceedings of the 1992 International Conference on Computer Languages.

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

[15]  Neil D. Jones,et al.  Flow Analysis of Lambda Expressions (Preliminary Version) , 1981, ICALP.

[16]  Jan Stransky,et al.  A Lattice for Abstract Interpretation of Dynamic (LISP-Like) Structures , 1992, Inf. Comput..

[17]  J A Fisher,et al.  Instruction-Level Parallel Processing , 1991, Science.

[18]  Williams Ludwell HarrisonIII The interprocedural analysis and automatic parallelization of Scheme programs , 1989 .

[19]  Jong-Deok Choi,et al.  Efficient flow-sensitive interprocedural computation of pointer-induced aliases and side effects , 1993, POPL '93.

[20]  Paul Hudak A semantic model of reference counting and its abstraction (detailed summary) , 1986, LFP '86.

[21]  Nicolas Halbwachs,et al.  Détermination automatique de relations linéaires vérifiées par les variables d'un programme , 1979 .

[22]  Nicolas Halbwachs,et al.  Automatic discovery of linear restraints among variables of a program , 1978, POPL.

[23]  Philippe Granger,et al.  Improving the Results of Static Analyses Programs by Local Decreasing Iteration , 1992, FSTTCS.

[24]  Barbara G. Ryder,et al.  Hybrid incremental alias algorithms , 1991, Proceedings of the Twenty-Fourth Annual Hawaii International Conference on System Sciences.

[25]  William Landi,et al.  Undecidability of static analysis , 1992, LOPL.

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

[27]  Ken Kennedy,et al.  A technique for summarizing data access and its use in parallelism enhancing transformations , 1989, PLDI '89.

[28]  Philippe Granger,et al.  Static Analysis of Linear Congruence Equalities among Variables of a Program , 1991, TAPSOFT, Vol.1.

[29]  ChoiJong-Deok,et al.  Pointer-induced aliasing , 1993 .

[30]  Janusz A. Brzozowski,et al.  Derivatives of Regular Expressions , 1964, JACM.

[31]  James R. Larus,et al.  Restructuring Lisp programs for concurrent execution , 1988, PPoPP 1988.

[32]  Neil D. Jones,et al.  Flow analysis and optimization of LISP-like structures , 1979, POPL.

[33]  Olin Shivers,et al.  Control-flow analysis of higher-order languages of taming lambda , 1991 .

[34]  Rajiv Gupta,et al.  Reducing the Cost of Data Flow Analysis By Congruence Partitioning , 1994, CC.

[35]  Alexandru Nicolau,et al.  Abstractions for recursive pointer data structures: improving the analysis and transformation of imperative programs , 1992, PLDI '92.

[36]  Patrick Cousot,et al.  Static determination of dynamic properties of generalized type unions , 1977, Language Design for Reliable Software.

[37]  Barbara G. Ryder,et al.  A safe approximate algorithm for interprocedural aliasing , 1992, PLDI '92.

[38]  Rohit Parikh,et al.  On Context-Free Languages , 1966, JACM.

[39]  William Landi,et al.  Interprocedural aliasing in the presence of pointers , 1992 .

[40]  William E. Weihl,et al.  Interprocedural data flow analysis in the presence of pointers, procedure variables, and label variables , 1980, POPL '80.

[41]  James R. Larus,et al.  Restructuring Lisp programs for concurrent execution , 1988, PPEALS '88.

[42]  Thomas P. Murtagh,et al.  Lifetime analysis of dynamically allocated objects , 1988, POPL '88.

[43]  Gary A. Kildall,et al.  A unified approach to global program optimization , 1973, POPL.

[44]  Reinhard Wilhelm,et al.  A Logic-Based Approach to Data Flow Analysis Problem , 1990, PLILP.

[45]  Philippe Granger Static analysis of arithmetical congruences , 1989 .

[46]  David W. Wall,et al.  Limits of instruction-level parallelism , 1991, ASPLOS IV.

[47]  Patrick Cousot,et al.  Static determination of dynamic properties of generalized type unions , 1977 .

[48]  N. Jones Flow Analysis of Lambda Expressions , 1981 .

[49]  Williams Ludwell Harrison,et al.  The interprocedural analysis and automatic parallelization of Scheme programs , 1990, LISP Symb. Comput..

[50]  Prakash Panangaden,et al.  Computation of aliases and support sets , 1987, POPL '87.

[51]  Guang R. Gao,et al.  Designing programming languages for analyzability: a fresh look at pointer data structures , 1992, Proceedings of the 1992 International Conference on Computer Languages.

[52]  Patrick Cousot,et al.  Systematic design of program analysis frameworks , 1979, POPL.

[53]  Neil D. Jones,et al.  A flexible approach to interprocedural data flow analysis and programs with recursive data structures , 1982, POPL '82.