E. Duesterwald (Ed.): CC 2004, LNCS 2985, pp. 1-4, 2004.
© Springer-Verlag Berlin Heidelberg 2004
Developing a Foundation for Code Optimization
Mary Lou Soffa
Department of Computer Science
University of Pittsburgh,
Pittsburgh, PA
soffa@cs.pitt.edu
www.cs.pitt.edu/~soffa
Abstract. Although optimization technology has been successful over the past
40 years, recent trends are emerging that demand we reconsider the paradigm
that we are using for code optimization. In particular, the trends toward dy-
namic optimization, writing embedded system software in high level languages
and the lack of significant performance improvement from current optimization
research are forcing us to rethink what we know and do not know about opti-
mization. A number of problems dealing with both semantic and application
properties of optimizations have always existed but have been mostly ignored.
The challenge in optimization today is to explore properties of optimizations
and develop a framework for better understanding and use of optimizations.
Fortunately, research is starting to explore properties, including proving the
soundness of optimizations, proving the correctness of optimizations, specifica-
tions of optimizations, and the predictability of profits of optimizations. Not
only must we understand the properties, but we also need to integrate the prop-
erties into a framework. Only then can we address the problems of the develop-
ing trends.
1 Introduction
The field of optimization has been extremely successful over the past 40+ years. As
new languages and new architectures have been introduced, new and effective op-
timizations have been developed to target and exploit both the software and hardware
innovations. Various reports from both research and commercial projects have indi-
cated that the performance of software can be improved by 20% to 40% by applying
levels of aggressive optimizations.
Most of the success in the field has come from the development of particular op-
timizations, such as partial redundancy elimination, speculation, and path sensitive
optimization. Although we knew that there were various problems with optimization
that were not well understood, they were mostly ignored. Thus instead of trying to
understand and solve the problems, we avoided them for the most part because we
were getting performance improvements. These problems included knowing when,
where and what optimizations to apply for the best improvement. Other problems