May/must analysis and the DFAGen data-flow analysis generator

Data-flow analysis is a common technique for gathering program information for use in program transformations such as register allocation, dead-code elimination, common subexpression elimination, and scheduling. Current tools for generating data-flow analysis implementations enable analysis details to be specified orthogonally to the iterative analysis algorithm but still require implementation details regarding the may and must use and definition sets that occur due to the effects of pointers, side effects, arrays, and user-defined structures. This paper presents the Data-Flow Analysis Generator tool (DFAGen), which enables analysis writers to generate analyses for separable and nonseparable data-flow analyses that are pointer, aggregate, and side-effect cognizant from a specification that assumes only scalars. By hiding the compiler-specific details behind predefined set definitions, the analysis specifications for the DFAGen tool are typically less than ten lines long and similar to those in standard compiler textbooks. The main contribution of this work is the automatic determination of when to use the may or must variant of a predefined set usage in the analysis specification.

[1]  Paul D. Hovland,et al.  Representation-independent program analysis , 2005, PASTE '05.

[2]  Stephen A. Edwards,et al.  A Domain-Specific Language for Generating Dataflow Analyzers , 2006, LDTA@ETAPS.

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

[4]  Andrew W. Appel,et al.  Modern Compiler Implementation in Java, 2nd edition , 2002 .

[5]  Etienne Morel,et al.  Global optimization by suppression of partial redundancies , 1979, CACM.

[6]  Steven S. Muchnick,et al.  Advanced Compiler Design and Implementation , 1997 .

[7]  Dhananjay M. Dhamdhere,et al.  Bidirectional data flow analysis: myths and reality , 1999, SIGP.

[8]  Mark Stephenson,et al.  Bidwidth analysis with application to silicon compilation , 2000, PLDI '00.

[9]  Leon Moonen,et al.  A generic architecture for data flow analysis to support reverse engineering , 1997 .

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

[11]  Joe D. Warren,et al.  The program dependence graph and its use in optimization , 1987, TOPL.

[12]  Simon L. Peyton Jones,et al.  Imperative functional programming , 1993, POPL '93.

[13]  Calvin Lin,et al.  An annotation language for optimizing software libraries , 1999, DSL '99.

[14]  Martin Alt,et al.  Generation of Efficient Interprocedural Analyzers with PAG , 1995, SAS.

[15]  Calvin Lin,et al.  Optimizing the Use of High Performance Software Libraries , 2000, LCPC.

[16]  Thomas W. Reps,et al.  Precise interprocedural dataflow analysis via graph reachability , 1995, POPL '95.

[18]  H. Dieter Rombach Proceedings of the 18th international conference on Software engineering , 1996, ICSE 1996.

[19]  Lori A. Clarke,et al.  A flexible architecture for building data flow analyzers , 1995, Proceedings of IEEE 18th International Conference on Software Engineering.

[20]  Steven W. K. Tjiang,et al.  Sharlit—a tool for building optimizers , 1992, PLDI '92.

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

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

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

[24]  John M. Mellor-Crummey,et al.  FIAT: A Framework for Interprocedural Analysis and Transfomation , 1993, LCPC.

[25]  Matthias Felleisen,et al.  A call-by-need lambda calculus , 1995, POPL '95.

[26]  Markus Schordan,et al.  Treating a user-defined parallel library as a domain-specific language , 2002, Proceedings 16th International Parallel and Distributed Processing Symposium.

[27]  Andrew Stone,et al.  Automatic Determination of May/Must Set Usage in Data-Flow Analysis , 2008, 2008 Eighth IEEE International Working Conference on Source Code Analysis and Manipulation.

[28]  Andrew W. Appel,et al.  Modern Compiler Implementation in Java , 1997 .

[29]  Kwangkeun Yiy,et al.  Z1: a Data Flow Analyzer Generator , 2007 .

[30]  Paul D. Hovland,et al.  Hybrid Static/Dynamic Activity Analysis , 2006, International Conference on Computational Science.

[31]  Florian Martin,et al.  PAG – an efficient program analyzer generator , 1998, International Journal on Software Tools for Technology Transfer.

[32]  Uwe Naumann,et al.  "To be recorded" analysis in reverse-mode automatic differentiation , 2005, Future Gener. Comput. Syst..

[33]  Flemming Nielson,et al.  Principles of Program Analysis , 1999, Springer Berlin Heidelberg.

[34]  Keith D. Cooper,et al.  Engineering a Compiler , 2003 .