Parallel flow-sensitive pointer analysis by graph-rewriting

Precise pointer analysis is a problem of interest to both the compiler and the program verification community. Flow-sensitivity is an important dimension of pointer analysis that affects the precision of the final result computed. Scaling flow-sensitive pointer analysis to millions of lines of code is a major challenge. Recently, staged flow-sensitive pointer analysis has been proposed, which exploits a sparse representation of program code created by staged analysis. In this paper we formulate the staged flow-sensitive pointer analysis as a graph-rewriting problem. Graph-rewriting has already been used for flow-insensitive analysis. However, formulating flow-sensitive pointer analysis as a graph-rewriting problem adds additional challenges due to the nature of flow-sensitivity. We implement our parallel algorithm using Intel Threading Building Blocks and demonstrate considerable scaling (upto 2.6x) for 8 threads on a set of 10 benchmarks. Compared to the sequential implementation of staged flow-sensitive analysis, a single threaded execution of our implementation performs better in 8 of the benchmarks.

[1]  Lian Li,et al.  Boosting the performance of flow-sensitive points-to analysis using value flow , 2011, ESEC/FSE '11.

[2]  Lars Ole Andersen,et al.  Program Analysis and Specialization for the C Programming Language , 2005 .

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

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

[5]  Chris Lattner,et al.  LLVM: AN INFRASTRUCTURE FOR MULTI-STAGE OPTIMIZATION , 2000 .

[6]  Edward Angel,et al.  Interactive Computer Graphics: A Top-Down Approach Using OpenGL , 1997 .

[7]  Ben Hardekopf,et al.  Flow-sensitive pointer analysis for millions of lines of code , 2011, International Symposium on Code Generation and Optimization (CGO 2011).

[8]  Calvin Lin,et al.  Error checking with client-driven pointer analysis , 2005, Sci. Comput. Program..

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

[10]  Alan Mycroft,et al.  Liveness-Based Pointer Analysis , 2012, SAS.

[11]  Calvin Lin,et al.  Efficient and extensible security enforcement using dynamic data flow analysis , 2008, CCS.

[12]  Sven Verdoolaege,et al.  Polyhedral Extraction Tool , 2012 .

[13]  백낙훈 [서평]Interactive Computer Graphics : A top-down approach with OpenGL , 1999 .

[14]  Keshav Pingali,et al.  Parallel inclusion-based points-to analysis , 2010, OOPSLA.

[15]  Ondrej Lhoták,et al.  Context-Sensitive Points-to Analysis: Is It Worth It? , 2006, CC.

[16]  Keshav Pingali,et al.  A GPU implementation of inclusion-based points-to analysis , 2012, PPoPP '12.

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

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

[19]  Martin C. Rinard,et al.  Pointer and escape analysis for multithreaded programs , 2001, PPoPP '01.

[20]  Chris Hankin,et al.  Efficient field-sensitive pointer analysis of C , 2007, TOPL.

[21]  David R. Musser,et al.  STL tutorial and reference guide - C++ programming with the standard template library , 1996, Addison-Wesley professional computing series.

[22]  R. Govindarajan,et al.  Scalable Context-Sensitive Points-to Analysis Using Multi-dimensional Bloom Filters , 2009, APLAS.

[23]  Manuvir Das,et al.  Unification-based pointer analysis with directional assignments , 2000, PLDI '00.

[24]  Jong-Deok Choi,et al.  Interprocedural pointer alias analysis , 1999, TOPL.

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

[26]  Michael Hind,et al.  Which pointer analysis should I use? , 2000, ISSTA '00.

[27]  Michael Hind,et al.  Pointer analysis: haven't we solved this problem yet? , 2001, PASTE '01.

[28]  Keshav Pingali,et al.  The tao of parallelism in algorithms , 2011, PLDI '11.

[29]  Ben Hardekopf,et al.  Semi-sparse flow-sensitive pointer analysis , 2009, POPL '09.

[30]  Chuck Pheatt,et al.  Intel® threading building blocks , 2008 .

[31]  Alfred V. Aho,et al.  Compilers: Principles, Techniques, and Tools (2nd Edition) , 2006 .

[32]  Raymond Lo,et al.  Effective Representation of Aliases and Indirect Memory Operations in SSA Form , 1996, CC.

[33]  Diego Novillo Tree SSA A New Optimization Infrastructure for GCC , 2004 .

[34]  Welf Löwe,et al.  Parallel points-to analysis for multi-core machines , 2011, HiPEAC.

[35]  Amitabha Sanyal,et al.  Data Flow Analysis - Theory and Practice , 2009 .

[36]  John L. Henning SPEC CPU2006 benchmark descriptions , 2006, CARN.

[37]  Ben Hardekopf,et al.  The ant and the grasshopper: fast and accurate pointer analysis for millions of lines of code , 2007, PLDI '07.

[38]  Jan Willem Klop,et al.  Term Rewriting Systems: From Church-Rosser to Knuth-Bendix and Beyond , 1990, ICALP.