Description |
A major source of complexity in static analysis arises from application developers use of a wide range of programming constructs within a single application. This makes it important to combine multiple analyses that focus on di↵erent classes of programming constructs (e.g., control flow, data flow, aliasing, and interprocedural constructs) when analyzing real-world programs. Analysis composition is challenging in general, due to the need for repeated iterations of multiple analyses and/or tight coordination among the Application Programming Interfaces (APIs) and symbolic abstractions used by di↵erent analyses. In this dissertation, we propose an approach for building static analysis frameworks with the goal of transparently composing dataflow analyses. Our compositional framework is based on two key principles. First, we introduce a transition system model for uniformly representing the results of a dataflow analysis. Second, we introduce a portable communication mechanism via a query interface whereby the analyses interact with each other without knowing the details of their internal abstractions. Our approach simplifies analysis composition, allowing us to modularly compose dataflow analyses focusing on abstractions for di↵erent programming constructs such as arrays, pointers, values etc. Our approach provides a unique opportunity to deploy an analysis composition targeting the demands of the program. We implemented the Fuse framework based on these ideas and integrated it in the ROSE compiler framework. We evaluated the generality of our compositional principles by applying it to parallel message passing programs written using the Message Passing Interface (MPI) standard. A sound and efficient analysis of MPI programs is challenging where the analysis must account for message passing behaviors between a statically unknown number of processes. We developed a suite of MPI-specific analyses focusing on di↵erent MPI constructs. The compositional approach allowed standard dataflow analyses to be transparently added into the analysis composition with the MPI analyses allowing standard dataflow analyses to be MPI aware and compute more precise dataflow constraints. We evaluated our framework by applying it on nontrivial MPI programs requiring a composition of multiple abstractions for interprocedural control-flow, array, pointers, constants and MPI communication. Our static analysis for MPI programs runs in parallel on di↵erent nodes, exchanging data-flow facts in lieu of MPI messages - the first of its kind. We implemented ParFuse framework for compositional analysis of MPI programs and integrated it within the ROSE compiler framework. iv |