The notes for each lecture summarize the topics covered in that lecture and give pointers to the literature. They do not constitute a complete treatment of the topics, nor do they reflect everything that was said in class. Establishes the environment in which an optimizer works, and illustrates the kinds of inefficiencies an optimizer might address.
Values Explains how to characterize a program in terms of the values it computes.
Shows how redundant computations arise from constructs over which the programmer has no control. Defines different kinds of regions within a program, settling on the complete procedure as the region of interest. Introduces the static single-assignment form of the program, shows how to construct it, and illustrates the removal of common subexpressions. Code Motion Introduces the concept of redundancy in time, and shows how this redundancy can be reduced by moving computations within the program. Describes constraints on such movements, and considers the effect of code motion on the number of registers required by a program.