Interprocedural pointer alias analysis

We present practical approximation methods for computing and representing interprocedural aliases for a program written in a language that includes pointers, reference parameters, and recursion. We present the following contributions: (1) a framework for interprocedural pointer alias analysis that handles function pointers by constructing the program call graph while alias analysis is being performed; (2) a flow-sensitive interprocedural pointer alias analysis algorithm; (3) a flow-insensitive interprocedural pointer alias analysis algorithm; (4) a flow-insensitive interprocedural pointer alias analysis algorithm that incorporates kill information to improve precision; (5) empirical measurements of the efficiency and precision of the three interprocedural alias analysis algorithms.

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

[2]  Erik Ruf,et al.  Context-insensitive alias analysis reconsidered , 1995, PLDI '95.

[3]  Olin Shivers,et al.  Control flow analysis in scheme , 1988, PLDI '88.

[4]  Danny Soroker,et al.  Extension mechanisms in Montana , 1997, Proceedings of the Eighth Israeli Conference on Computer Systems and Software Engineering.

[5]  Ken Kennedy,et al.  Constructing the Procedure Call Multigraph , 1990, IEEE Trans. Software Eng..

[6]  Anthony Pioli,et al.  Conditional Pointer Aliasing and Constant Propagation , 1999 .

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

[8]  Ron Cytron,et al.  Efficiently computing Φ-nodes on-the-fly , 1993, TOPL.

[9]  Dhananjay M. Dhamdhere,et al.  Complexity of bi-directional data flow analysis , 1993, POPL '93.

[10]  Deepak Goyal An Improved Intra-procedural May-alias Analysis Algorithm , 1999 .

[11]  Mark N. Wegman,et al.  A Fast and Usually Linear Algorithm for Global Flow Analysis , 1976, J. ACM.

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

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

[14]  Barbara G. Ryder,et al.  Constructing the Call Graph of a Program , 1979, IEEE Transactions on Software Engineering.

[15]  Susan Horwitz,et al.  Using static single assignment form to improve flow-insensitive pointer analysis , 1998, PLDI '98.

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

[17]  Barbara G. Ryder,et al.  Interprocedural modification side effect analysis with pointer aliasing , 1993, PLDI '93.

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

[19]  Reinhard Wilhelm,et al.  Solving shape-analysis problems in languages with destructive updating , 1998, TOPL.

[20]  Barbara G. Ryder,et al.  Relevant context inference , 1999, POPL '99.

[21]  Barbara G. Ryder,et al.  Defining flow sensitivity in data flow problems , 1995 .

[22]  Amer Diwan,et al.  Type-based alias analysis , 1998, PLDI.

[23]  Ron Cytron,et al.  Efficient accommodation of may-alias information in SSA form , 1993, PLDI '93.

[24]  Michael G. Burke An interval-based approach to exhaustive and incremental interprocedural data-flow analysis , 1990, TOPL.

[25]  Jenq Kuen Lee,et al.  Static analysis and runtime support for parallel execution of C , 1990 .

[26]  Jyh-Herng Chow,et al.  State space reduction in abstract interpretation of parallel programs , 1994, Proceedings of 1994 IEEE International Conference on Computer Languages (ICCL'94).

[27]  Jong-Deok Choi,et al.  Flow-Insensitive Interprocedural Alias Analysis in the Presence of Pointers , 1994, LCPC.

[28]  Barbara G. Ryder,et al.  Program decomposition for pointer aliasing: a step toward practical analyses , 1996, SIGSOFT '96.

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

[30]  Torben Æ. Mogensen Binding Time Analysis for Polymorphically Typed Higher Order Languages , 1989, TAPSOFT, Vol.2.

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

[32]  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.

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

[34]  Barbara G. Ryder,et al.  Experiments with combined analysis for pointer aliasing , 1998, PASTE '98.

[35]  Peter Sestoft,et al.  Replacing function parameters by global variables , 1989, FPCA.

[36]  Ken Kennedy,et al.  Interactive Parallel Programming using the ParaScope Editor , 1991, IEEE Trans. Parallel Distributed Syst..

[37]  Jyh-Herng Chow,et al.  Compile-time analysis of parallel programs that share memory , 1992, POPL '92.

[38]  Susan Horwitz,et al.  The Effects of the Precision of Pointer Analysis , 1997, SAS.

[39]  Jong-Deok Choi,et al.  Static slicing in the presence of goto statements , 1994, TOPL.

[40]  Laurie J. Hendren,et al.  Context-sensitive interprocedural points-to analysis in the presence of function pointers , 1994, PLDI '94.

[41]  James R. Larus,et al.  Restructuring symbolic programs for concurrent execution on multiprocessors , 1989 .

[42]  Bjarne Steensgaard,et al.  Points-to analysis in almost linear time , 1996, POPL '96.

[43]  Erik Ruf Partitioning dataflow analyses using types , 1997, POPL '97.

[44]  Ken Kennedy,et al.  Automatic decomposition of scientific programs for parallel execution , 1987, POPL '87.

[45]  Michael Hind,et al.  Evaluating the effectiveness of pointer alias analyses , 2001, Sci. Comput. Program..

[46]  Jeffrey D. Ullman,et al.  Global Data Flow Analysis and Iterative Algorithms , 1976, J. ACM.

[47]  Barbara G. Ryder,et al.  Comparing flow and context sensitivity on the modification-side-effects problem , 1998, ISSTA '98.

[48]  Arun Lakhotia Constructing call multigraphs using dependence graphs , 1993, POPL '93.

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

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

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

[52]  Susan Horwitz,et al.  Precise flow-insensitive may-alias analysis is NP-hard , 1997, TOPL.

[53]  Michael Hind,et al.  An Empirical Comparison of Interprocedural Pointer Alias Analyses , 1997 .

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

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

[56]  Susan Horwitz,et al.  Fast and accurate flow-insensitive points-to analysis , 1997, POPL '97.

[57]  Ron Cytron,et al.  Efficiently Computing phi-Nodes On-The-Fly (Extended Abstract) , 1993, LCPC.

[58]  G. Ramalingam,et al.  The undecidability of aliasing , 1994, TOPL.

[59]  Guang R. Gao,et al.  A linear time algorithm for placing φ-nodes , 1995, POPL '95.

[60]  Alain Deutsch,et al.  Interprocedural may-alias analysis for pointers: beyond k-limiting , 1994, PLDI '94.

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

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

[63]  Laurie J. Hendren,et al.  Is it a tree, a DAG, or a cyclic graph? A shape analysis for heap-directed pointers in C , 1996, POPL '96.

[64]  ChoiJong-Deok,et al.  Interprocedural pointer alias analysis , 1999 .

[65]  D UllmanJeffrey,et al.  Global Data Flow Analysis and Iterative Algorithms , 1976 .

[66]  Michael Hind,et al.  Assessing the Effects of Flow-Sensitivity on Pointer Alias Analyses , 1998, SAS.

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

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

[69]  LandiWilliam,et al.  Program decomposition for pointer aliasing , 1996 .

[70]  Robert E. Tarjan,et al.  Fast Algorithms for Solving Path Problems , 1981, JACM.

[71]  Mark N. Wegman,et al.  Efficiently computing static single assignment form and the control dependence graph , 1991, TOPL.

[72]  Robert E. Tarjan,et al.  Depth-First Search and Linear Graph Algorithms , 1972, SIAM J. Comput..

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

[74]  Barry K. Rosen Data Flow Analysis for Procedural Languages , 1979, JACM.

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

[76]  Barbara G. Ryder,et al.  A schema for interprocedural modification side-effect analysis with pointer aliasing , 2001, TOPL.

[77]  Alfred V. Aho,et al.  The Transitive Reduction of a Directed Graph , 1972, SIAM J. Comput..

[78]  Mark N. Wegman,et al.  Constant propagation with conditional branches , 1985, POPL.

[79]  Monica S. Lam,et al.  Efficient context-sensitive pointer analysis for C programs , 1995, PLDI '95.

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

[81]  Ken Kennedy,et al.  Efficient call graph analysis , 1992, LOPL.

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