Code motion techniques are integrated in many optimizing production and
research compilers. They are still a major topic of ongoing research in
program optimization, but traditional methods are restricted by a narrow
focus on their immediate effects. A more ambitious approach is to
investigate the interdependencies between distinct component
transformations.
This monograph provides a comprehensive account of the methods most
accepted in practice for program analysis and program transformation for
imperative languages. It also develops a scenario, systematically and
step by step, which overcomes the structural restrictions that had
previously long resisted attack. The author presents formal proofs for
all the steps leading to this breakthrough, though the reader may skip
the proofs and consult the technical details as needed yet still enjoy a
smooth introduction to the central principles of code motion.