Alias analysis of executable code

Recent years have seen increasing interest in systems that reason about and manipulate executable code. Such systems can generally benefit from information about aliasing. Unfortunately, most existing alias analyses are formulated in terms of high-level language features, and are unable to cope with features, such as pointer arithmetic, that pervade executable programs. This paper describes a simple algorithm that can be used to obtain aliasing information for executabie code. In order to be practical, the algorithm is carefut to keep its memory requirements low, sacrificing precision where necessary to achieve this goal. Experimental results indicate that it is nevertheless able to provide a reasonable amount of information about memory references across a variety of benchmark programs.

[1]  Mark Scott Johnson,et al.  Effectiveness of a machine-level, global optimizer , 1986, SIGPLAN '86.

[2]  Barbara M. Chapman,et al.  Supercompilers for parallel and vector computers , 1990, ACM Press frontier series.

[3]  James R. Larus,et al.  EEL: machine-independent executable editing , 1995, PLDI '95.

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

[5]  David W. Wall,et al.  Link-time optimization of address calculation on a 64-bit architecture , 1994, PLDI '94.

[6]  Piet Hut,et al.  A hierarchical O(N log N) force-calculation algorithm , 1986, Nature.

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

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

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

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

[11]  Keith D. Cooper,et al.  Register promotion in C programs , 1997, PLDI '97.

[12]  Mary F. Fernández,et al.  Simple and effective link-time optimization of Modula-3 programs , 1995, PLDI '95.

[13]  Udi Manber,et al.  A FAST APPROXIMATE PATTERN-MATCHING TOOL ( Preliminary version ) , 1992 .

[14]  Alec Wolman,et al.  Instrumentation and optimization of Win32/intel executables using Etch , 1997 .

[15]  Ken Kennedy,et al.  Fast interprocedual alias analysis , 1989, POPL '89.

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

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

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

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

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

[21]  David W. Wall,et al.  Global register allocation at link time , 1986, SIGPLAN '86.

[22]  Alexandru Nicolau,et al.  A general data dependence test for dynamic, pointer-based data structures , 1994, PLDI '94.

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

[24]  David W. Wall,et al.  A practical system fljr intermodule code optimization at link-time , 1993 .

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

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

[27]  Deborah S. Coutant Retargetable high-level alias analysis , 1986, POPL '86.

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

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

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

[31]  Saumya K. Debray,et al.  alto: A Link-Time Optimizer for the DEC Alpha , 1996 .

[32]  S LamMonica,et al.  Efficient context-sensitive pointer analysis for C programs , 1995 .

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

[34]  Norman Rubin,et al.  Spike: an optimizer for alpha/NT executables , 1997 .

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

[36]  David W. Goodwin,et al.  Interprocedural dataflow analysis in an executable optimizer , 1997, PLDI '97.

[37]  GhiyaRakesh,et al.  Context-sensitive interprocedural points-to analysis in the presence of function pointers , 1994 .

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

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