VOC: A Methodology for the Translation Validation of OptimizingCompilers

There is a growing awareness, both in industry and academia, of the crucial role of formally verifying the translation from high-level source-code into low-level ob- ject code that is typically performed by an optimizing compiler. Formally verifying an optimizing compiler, as one would verify any other large program, is not feasible due to its size, ongoing evolution and modification, and, possibly, proprietary considerations. Translation validation is a novel approach that offers an alternative to the verification of translators in general and compilers in particular: Rather than verifying the compiler itself, one constructs a validation tool which, after every run of the compiler, formally confirms that the target code produced in the run is a correct translation of the source program. The paper presents voc, a methodology for the translation validation of optimizing compilers. We distinguish between structure preserving optimizations, for which we establish a simulation relation between the source and target code based on computational induction, and structure modifying optimizations, for which we develop specialized "permutation rules". The paper also describes voc-64—a prototype trans- lation validator tool that automatically produces verification conditions for the global optimizations of the SGI Pro-64 compiler.

[1]  Amir Pnueli,et al.  Deciding Equality Formulas by Small Domains Instantiations , 1999, CAV.

[2]  Edward Y. Chang,et al.  STeP: The Stanford Temporal Prover , 1995, TAPSOFT.

[3]  Gerhard Goos,et al.  Verification of Compilers , 1999, Correct System Design.

[4]  Amir Pnueli,et al.  Translation Validation , 1998, TACAS.

[5]  Robert W. Floyd,et al.  Assigning Meanings to Programs , 1993 .

[6]  Allen,et al.  Optimizing Compilers for Modern Architectures , 2004 .

[7]  Martin Rinard,et al.  Credible Compilation with Pointers , 1999 .

[8]  David L. Dill,et al.  CVC: A Cooperating Validity Checker , 2002, CAV.

[9]  Gerda Janssens,et al.  Geometric Model Checking: An Automatic Verification Technique for Loop and Data Reuse Transformations , 2002, COCV@ETAPS.

[10]  Carl Christian Frederiksen Correctness of Classical Compiler Optimizations using CTL , 2002, COCV@ETAPS.

[11]  Barbara M. Chapman,et al.  Supercompilers for parallel and vector computers , 1990, ACM Press frontier series.

[12]  Natarajan Shankar,et al.  ICS: Integrated Canonizer and Solver , 2001, CAV.

[13]  Stephen Wolfram,et al.  The Mathematica Book , 1996 .

[14]  George C. Necula,et al.  Proof-carrying code , 1997, POPL '97.

[15]  Xavier Rival Interpretation-based certification of assembly code , 2003 .

[16]  Amir Pnueli,et al.  The Code Validation Tool (CVT) , 1998, International Journal on Software Tools for Technology Transfer (STTT).

[17]  George C. Necula,et al.  Translation validation for an optimizing compiler , 2000, PLDI '00.

[18]  Amir Pnueli,et al.  Validation of Optimizing Compilers , 2001 .

[19]  Sabine Glesner,et al.  Verified Code Generation for Embedded Systems , 2002, COCV@ETAPS.

[20]  Alfred V. Aho,et al.  Compilers: Principles, Techniques, and Tools , 1986, Addison-Wesley series in computer science / World student series edition.

[21]  George C. Necula,et al.  The design and implementation of a certifying compiler , 1998, PLDI.