  Mainstream compilers perform a multitude of analyses and optimizations on the
given input program. Each analysis (such as points-to analysis) may generate a
program-abstraction (such as points-to graph). Each optimization is typically
composed of multiple alternating phases of inspection of such
program-abstractions and transformations of the program. Upon transformation of
a program, the program-abstractions generated by various analyses may become
inconsistent with the modified program. Consequently, the correctness of the
downstream inspection (and consequent transformation) phases cannot be ensured
until the relevant program-abstractions are stabilized; that is, the
program-abstractions are either invalidated or made consistent with the
modified program. In general, the existing compiler frameworks do not perform
automated stabilization of the program-abstractions and instead leave it to the
compiler pass writers to deal with the complex task of identifying the relevant
program-abstractions to be stabilized, the points where the stabilization is to
be performed, and the exact procedure of stabilization. In this paper, we
address these challenges by providing the design and implementation of a novel
compiler-design framework called Homeostasis. Homeostasis automatically
captures all the program changes performed by each transformation phase, and
later, triggers the required stabilization using the captured information, if
needed. We also provide a formal description of Homeostasis and a correctness
proof thereof. To assess the feasibility of using Homeostasis in compilers of
parallel programs, we have implemented our proposed idea in IMOP, a compiler
framework for OpenMP C programs. We present an evaluation which demonstrates
that Homeostasis is efficient and easy to use.
