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