Semantics preservation between source and target program is the commonly accepted minimum requirement to be ensured by compilers. It is the key term compiler verification and optimization are centered around. The precise meaning, however, is often only implicit, e.g.~when tacitly exploiting the scope provided by often in part loose specifications of the semantics of the considered languages. As a rule of thumb, verification tends to interpret semantics preservation in a very tight sense, not only but also to simplify the verification task. Optimization generally prefers a more liberal view in order to enable more powerful transformations otherwise excluded. In each case the semantics of the underlying languages and the preservation of the semantics of the considered programs are the surveyor's rod of admissibility. While undisputed on the level of these abstract terms, the adequate perception of preservation is still an issue of scientific research, which, e.g., depends and varies fluently with the application context (compiling and optimizing “stand-alone” applications, communicating systems, reactive systems, etc.).The aim of the workshop is to bring together researchers and practitioners working on optimizing and verifying compilation as well as on related fields such as programming language design and semantics in order to plumb the mutual impact of these fields on each other, the degrees of freedom optimizers and verifiers have, to bridge the gap between the communities, and to stimulate synergies.The contributed papers accepted for presentation at the workshop and an invited presentation by Gerhard Goos discuss topics such as certifying compilation, verifying compilation, translation validation, and optimization showing both the breadth of research in the fields of optimizing and verifying compilation and their interdependencies as well as the diversity of approaches for addressing and handling them. In the invited keynote speech, Gerhard Goos emphasizes that it is not the compiler but the code generated by it which must be correct. He points out that this subtle difference provides the key for reusing standard compiler architecture, tools and methods in a verifying compiler. In the first contributed paper, Lenore Zuck et al. demonstrate how the correctness of optimizing loop transformations can be checked without proving the correctness of the compiler itself. This technique is called translation validation. Glesner et al. show how to construct correct code-generators for embedded systems. They use a similar technology as Zuck et al. Frederiksen subsequently discusses correctness proofs of global optimizations. These optimizations are modeled as conditional graph-rewrite rules. Nguyen and Irigoin discuss in their paper how to verify aliases in FORTRAN. The non-presence of aliases is an important pre-condition of many optimizations. Shashidar et al. also discuss correctness of loop transformations. In contrast to the approach of Zuck et al.~they distinguish the correctness proof for transformations and their implementation. Jamarillo et al. use translation validation for checking the correctness of some transformations at lower levels of compilers such as register allocation. Goerigk, finally, discusses notions of compiler correctness and shows how they apply to optimizations.The papers in this volume were reviewed by the members of the program committee consisting, besides the editors, of •Rajiv Gupta, University of Arizona, Tucson, AZ, USA, gupta@cs.arizona.edu•James R. Larus, Microsoft Research, Redmond, WA, USA, larus@microsoft.com•Robert Morgan, Compaq Computer Corporation, Nashua, NH, USA, bob.morgan@compaq.com•J Strother Moore, University of Texas at Austin, TX, USA, Moore@cs.utexas.edu•Markus Müller-Olm, Universität Dortmund, Germany, mmo@ls5.cs.uni-dortmund.de•George C. Necula, University of California at Berkely, CA, USA, necula@cs.berkeley.edu•John Whaley, IBM Tokyo Research Laboratory, Tokyo, Japan, jwhaley@alum.mit.edu•Jim Woodcock, Oxford University, UK, Jim.Woodcock@comlab.ox.ac.ukIn closing, we would like to thank the many persons, whose help has been crucial for the success of COCV 2002. First of all, we would like to thank the organizers of ETAPS 2002, in particular, Rachid Echahed, the workshop chair of ETAPS 2002, for their help with the organization of the workshop as satellite event of ETAPS 2002. We are also grateful to Axel Dold, Werner Gabrisch, and Michael Schaarschmidt for their help as external reviewers, and to Michael Mislove, one of the Managing Editors of the ENTCS series, for his assistance with the use of the ENTCS style files. Furthermore, we would like to thank the participants of the Dagstuhl Seminar 00381: Code Optimisation: Trends, Challenges and Perspectives for their discussions. These discussions led to the idea of this workshop. Last but not least, we would like to thank the authors who submitted a contribution.
Read full abstract