Abstract

This paper offers an introduction to the field of data dependence analysis in programs that handle pointers and dynamically allocated structures. We are principally concerned with methods that use monotone data flow systems, and in particular present in detail a one-pass approach we recently developed. The new method is appropriate for imperative languages such as C, Java, Fortran 90, Pascal, or Modula-2. We can perform an interprocedural analysis on recursive or nonrecursive programs, and deal with arbitrary acyclic data structures, covering any level of indirection; an extension to cyclic data structures is currently under development. Our method is based on storage representations called A/D graphs, that cover both reaching definitions and alias information simultaneously. May-alias information, as well as must-alias information, is implicitly kept in the graphs, allowing strong updates and thus leading to a high precision. Reaching definitions are represented in the graphs by means of an instrumented semantics. The new method is safe, accurate, fast, and storage-economical, and therefore promises to be a significant improvement over other known methods. A prototype implementation showed very encouraging results with regard to accuracy and analysis time.

Full Text
Published version (Free)

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call