Compositional Dataflow Via Abstract Transition Systems

Despite decades of research and development of dataflow analyses within dozens of different compiler infrastructures, analysis of real programs is intractable in practice. The reason is that although a single research group is equipped to model a single well-defined aspect of application behavior, application developers use a very wide range of abstractions and coding techniques within a single application. Since to analyze even a single application all of its complexities must be modeled, researchers must combine analyses from multiple groups into comprehensive analysis frameworks such as OpenAnalysis or LLVM. Analysis composition is expensive in practice, requiring development effort that is quadratic in the number of analyses as well as tight inter-group coordination to maintain consistent APIs to each other’s symbolic abstractions. This paper proposes an approach to building compiler analysis frameworks that simplifies the composition of independently-developed analyses. It formalizes the operation of dataflow analyses in a way that simplifies reasoning about various types of analysis composition. Further, it defines a portable abstraction that can represent the results of many real analyses, making it possible for different analyses to leverage each other’s results with no knowledge of their APIs or internal abstractions and without any coordination between the groups that developed them. We have developed the Fuse compositional analysis framework based on this abstraction, and integrated it in the ROSE [15] compilation system. Our experience is that this approach greatly simplifies composition of program analyses, making it easy to tailor different combinations of program analyses to different input programs.

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

[2]  Patrick Cousot,et al.  Combination of Abstractions in the ASTRÉE Static Analyzer , 2006, ASIAN.

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

[4]  Simon Peyton Jones,et al.  Hoopl: a modular, reusable library for dataflow analysis and transformation , 2010 .

[5]  Patrick Cousot,et al.  A static analyzer for large safety-critical software , 2003, PLDI '03.

[6]  Ondrej Lhoták,et al.  Points-to analysis with efficient strong updates , 2011, POPL '11.

[7]  Mahlon Kelly,et al.  Forth, a Text and Reference , 1986 .

[8]  Sorin Lerner,et al.  Composing dataflow analyses and transformations , 2002, POPL '02.

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

[10]  Barbara G. Ryder,et al.  Properties of data flow frameworks , 1990, Acta Informatica.

[11]  Helmut Seidl,et al.  Precise interprocedural analysis through linear algebra , 2004, POPL.

[12]  D. Qainlant,et al.  ROSE: Compiler Support for Object-Oriented Frameworks , 1999 .

[13]  Greg Nelson,et al.  Simplification by Cooperating Decision Procedures , 1979, TOPL.

[14]  Xavier Rival,et al.  The trace partitioning abstract domain , 2007, TOPL.

[15]  Sumit Gulwani,et al.  Combining abstract interpreters , 2006, PLDI '06.

[16]  David A. Schmidt,et al.  Program Analysis as Model Checking of Abstract Interpretations , 1998, SAS.

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