Graph Rewriting and Automatic, Machine-Independent Program Optimization

Classical automatic optimization is starting with linearized intermediate code and builds up graph-like data structures (flow graph, DAGs, data flow analysis information). Most of the information which was already known by the upper part of the compiler now has to be recovered again. We start with a graph-like intermediate code in which all structural information of the source code is still present. Optimization is then carried out by graph manipulations. This is sketched by some examples, namely local common subexpression elimination, motion of loop invariant computations, and induction variable elimination.