COMPILATION DEPENDENCES IN AN AMBITIOUS OPTIMIZING COMPILER (INTERPROCEDURAL, RECOMPILATION)
TORCZON, LINDA MARIE
Doctor of Philosophy
When interprocedural analysis and optimization are employed in an optimizing compiler based in a software development environment, cooperation between the components of the environment is essential. Many components in such a software development environment are involved in the computation of either interprocedural information or the initial information from which the interprocedural information is derived. These components must be capable of both recording the information that they produce in the environment's database and interpreting information left in the database by other components. To ensure that the components effectively cooperate, the impact of collecting interprocedural information and performing interprocedural optimizations must be carefully considered in the design of the environment. This dissertation presents an overview of the impact of interprocedural analysis and optimization on a software development environment designed to aid numerical programmers and an examination of the problems that arise in an ambitious optimizing compiler which introduces compilation dependences between the procedures of a program. The concept of a program compiler encapsulates the analysis required to collect interprocedural information, track compilation dependences, and make smart recompilation decisions. A program compiler is responsible for analyzing a program that has been altered and determining a course of action that will return the executable image of that program to a state that is consistent with its source. The design presented for a program compiler incorporates passes that perform the necessary interprocedural analysis. Interprocedural summary and aliasing information is collected using methods presented in the literature. Techniques for detecting interprocedural constants are presented. These methods range from expensive algorithms that detect most of the interprocedural constants to cheaper algorithms that detect fewer constants. Recompilation algorithms that detect the subtle dependences introduced between the procedures of a program when interprocedural information is used by the optimizer are described.