Optimization of Straight-Line Code Revisited
Thomas Noll, Stefan Rieger
In this report we study the effect of an optimizing algorithm for
straight-line code which first constructs a directed acyclic graph
representing the given program and then generates code from it. We
show that this algorithm produces optimal code with respect to the
classical transformations such as Constant Folding, Common Subexpression
Elimination, and Dead Code Elimination. In contrast to the former,
the latter are also applicable to iterative code containing loops. We
can show that the graph-based algorithm essentially corresponds to a
combination of the three classical optimizations in conjunction with Copy
Propagation. Thus, apart from its theoretical importance, this result
is relevant for practical compiler design as it allows to exploit the
optimization potential of the graph-based algorithm for non--linear code
as well.