On the adequacy of program dependence graphs for representing programs
POPL '88 Proceedings of the 15th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A mechanically verified language implementation
Journal of Automated Reasoning
A mechanically verified code generator
Journal of Automated Reasoning
A program integration algorithm that accommodates semantics-preserving transformations
ACM Transactions on Software Engineering and Methodology (TOSEM)
Proving the correctness of storage representations
LFP '92 Proceedings of the 1992 ACM conference on LISP and functional programming
Value dependence graphs: representation without taxation
POPL '94 Proceedings of the 21st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
TIL: a type-directed optimizing compiler for ML
PLDI '96 Proceedings of the ACM SIGPLAN 1996 conference on Programming language design and implementation
The design and implementation of a certifying compiler
PLDI '98 Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation
A certifying compiler for Java
PLDI '00 Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation
Advice on structuring compilers and proving them correct
POPL '73 Proceedings of the 1st annual ACM SIGACT-SIGPLAN symposium on Principles of programming languages
A Discipline of Programming
TACAS '98 Proceedings of the 4th International Conference on Tools and Algorithms for Construction and Analysis of Systems
A Provably Correct Embedded Verifier for the Certification of Safety Critical Software
CAV '97 Proceedings of the 9th International Conference on Computer Aided Verification
An approach to compiler correctness
Proceedings of the international conference on Reliable software
Efficient Code Certification
Credible Compilers
Compiling with proofs
Avoiding exponential explosion: generating compact verification conditions
POPL '01 Proceedings of the 28th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Impact of economics on compiler optimization
Proceedings of the 2001 joint ACM-ISCOPE conference on Java Grande
Automatic formal verification for scheduled VLIW code
Proceedings of the joint conference on Languages, compilers and tools for embedded systems: software and compilers for embedded systems
Validating software pipelining optimizations
CASES '02 Proceedings of the 2002 international conference on Compilers, architecture, and synthesis for embedded systems
Discovering affine equalities using random interpretation
POPL '03 Proceedings of the 30th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Abstract Interpretation-Based Certification of Assembly Code
VMCAI 2003 Proceedings of the 4th International Conference on Verification, Model Checking, and Abstract Interpretation
Automatically proving the correctness of compiler optimizations
PLDI '03 Proceedings of the ACM SIGPLAN 2003 conference on Programming language design and implementation
Predicting problems caused by component upgrades
Proceedings of the 9th European software engineering conference held jointly with 11th ACM SIGSOFT international symposium on Foundations of software engineering
Validation of code-improving transformations for embeded systems
Proceedings of the 2003 ACM symposium on Applied computing
Symbolic transfer function-based approaches to certified compilation
Proceedings of the 31st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Simple relational correctness proofs for static analyses and program transformations
Proceedings of the 31st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Global value numbering using random interpretation
Proceedings of the 31st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Compiler verification: a bibliography
ACM SIGSOFT Software Engineering Notes
Compiler implementation in a formal logical framework
MERLIN '03 Proceedings of the 2003 ACM SIGPLAN workshop on Mechanized reasoning about languages with variable binding
The design and implementation of a certifying compiler
ACM SIGPLAN Notices - Best of PLDI 1979-1999
Automatic validation of code-improving transformations on low-level program representations
Science of Computer Programming - Special issue on program transformation
Type-based verification of sssembly language for compiler debugging
TLDI '05 Proceedings of the 2005 ACM SIGPLAN international workshop on Types in languages design and implementation
Automated soundness proofs for dataflow analyses and transformations via local rules
Proceedings of the 32nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A Model-Based Framework: An Approach for Profit-Driven Optimization
Proceedings of the international symposium on Code generation and optimization
Proceedings of the conference on Design, Automation and Test in Europe - Volume 2
Cutpoints for formal equivalence verification of embedded software
Proceedings of the 5th ACM international conference on Embedded software
Translation and Run-Time Validation of Loop Transformations
Formal Methods in System Design
Formal certification of a compiler back-end or: programming a compiler with a proof assistant
Conference record of the 33rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Automatic functional verification of memory oriented global source code transformations
HLDVT '03 Proceedings of the Eighth IEEE International Workshop on High-Level Design Validation and Test Workshop
Context-sensitive domain-independent algorithm composition and selection
Proceedings of the 2006 ACM SIGPLAN conference on Programming language design and implementation
Program element matching for multi-version program analyses
Proceedings of the 2006 international workshop on Mining software repositories
Refinement calculus: a basis for translation validation, debugging and certification
Theoretical Computer Science - Algebraic methods in language processing
Cones and foci: A mechanical framework for protocol verification
Formal Methods in System Design
Formal compiler construction in a logical framework
Higher-Order and Symbolic Computation
An approach toward profit-driven optimization
ACM Transactions on Architecture and Code Optimization (TACO)
Embedded software verification using symbolic execution and uninterpreted functions
International Journal of Parallel Programming
On approximate matching of programs for protecting libre software
CASCON '06 Proceedings of the 2006 conference of the Center for Advanced Studies on Collaborative research
A polynomial-time algorithm for global value numbering
Science of Computer Programming
Static analysis of executables to detect malicious patterns
SSYM'03 Proceedings of the 12th conference on USENIX Security Symposium - Volume 12
Journal of Integrated Design & Process Science
Improved Invariant Generation for Tvoc
Electronic Notes in Theoretical Computer Science (ENTCS)
Electronic Notes in Theoretical Computer Science (ENTCS)
Structuring Optimizing Transformations and Proving Them Sound
Electronic Notes in Theoretical Computer Science (ENTCS)
SCCP/x: a compilation profile to support testing and verification of optimized code
CASES '07 Proceedings of the 2007 international conference on Compilers, architecture, and synthesis for embedded systems
Systematic Testing of Model-Based Code Generators
IEEE Transactions on Software Engineering
A Certifying Code Generation Phase
Electronic Notes in Theoretical Computer Science (ENTCS)
Automated refinement checking of concurrent systems
Proceedings of the 2007 IEEE/ACM international conference on Computer-aided design
Formal verification of translation validators: a case study on instruction scheduling optimizations
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
CVM -- A Verified Framework for Microkernel Programmers
Electronic Notes in Theoretical Computer Science (ENTCS)
WYSINWYX: What You See Is Not What You eXecute
Verified Software: Theories, Tools, Experiments
CoVaC: Compiler Validation by Program Analysis of the Cross-Product
FM '08 Proceedings of the 15th international symposium on Formal Methods
Validating High-Level Synthesis
CAV '08 Proceedings of the 20th international conference on Computer Aided Verification
Code Graph Transformations for Verifiable Generation of SIMD-Parallel Assembly Code
Applications of Graph Transformations with Industrial Relevance
Equality saturation: a new approach to optimization
Proceedings of the 36th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
SOFSEM '09 Proceedings of the 35th Conference on Current Trends in Theory and Practice of Computer Science
Program analysis for compiler validation
Proceedings of the 8th ACM SIGPLAN-SIGSOFT workshop on Program analysis for software tools and engineering
Validation of GCC optimizers through trace generation
Software—Practice & Experience
Extensible Proof-Producing Compilation
CC '09 Proceedings of the 18th International Conference on Compiler Construction: Held as Part of the Joint European Conferences on Theory and Practice of Software, ETAPS 2009
A Framework for Exploring Optimization Properties
CC '09 Proceedings of the 18th International Conference on Compiler Construction: Held as Part of the Joint European Conferences on Theory and Practice of Software, ETAPS 2009
Formal verification of a realistic compiler
Communications of the ACM - Barbara Liskov: ACM's A.M. Turing Award Winner
Certificate translation for optimizing compilers
ACM Transactions on Programming Languages and Systems (TOPLAS)
Verified validation of lazy code motion
Proceedings of the 2009 ACM SIGPLAN conference on Programming language design and implementation
Proving optimizations correct using parameterized program equivalence
Proceedings of the 2009 ACM SIGPLAN conference on Programming language design and implementation
Certifying deadlock-freedom for BIP models
Proceedings of th 12th International Workshop on Software and Compilers for Embedded Systems
Equivalence Checking of Static Affine Programs Using Widening to Handle Recurrences
CAV '09 Proceedings of the 21st International Conference on Computer Aided Verification
Translation Validation: From Simulink to C
CAV '09 Proceedings of the 21st International Conference on Computer Aided Verification
Validating the Oracle SQL engine
Proceedings of the Second International Workshop on Testing Database Systems
Automatic Parallelization and Optimization of Programs by Proof Rewriting
SAS '09 Proceedings of the 16th International Symposium on Static Analysis
SAS '09 Proceedings of the 16th International Symposium on Static Analysis
Formal Certification of a Resource-Aware Language Implementation
TPHOLs '09 Proceedings of the 22nd International Conference on Theorem Proving in Higher Order Logics
A Formally Verified Compiler Back-end
Journal of Automated Reasoning
A Certified Implementation on Top of the Java Virtual Machine
FMICS '09 Proceedings of the 14th International Workshop on Formal Methods for Industrial Critical Systems
Integrated Formal Approach for Qualified Critical Embedded Code Generator
FMICS '09 Proceedings of the 14th International Workshop on Formal Methods for Industrial Critical Systems
Machine-Checked Sequencer for Critical Embedded Code Generator
ICFEM '09 Proceedings of the 11th International Conference on Formal Engineering Methods: Formal Methods and Software Engineering
What Level of Mathematical Reasoning can Computer Science Demand of a Software Implementer?
Electronic Notes in Theoretical Computer Science (ENTCS)
Electronic Notes in Theoretical Computer Science (ENTCS)
Machine-Checkable Correctness Proofs for Intra-procedural Dataflow Analyses
Electronic Notes in Theoretical Computer Science (ENTCS)
Validating More Loop Optimizations
Electronic Notes in Theoretical Computer Science (ENTCS)
Cobalt: A Language for Writing Provably-Sound Compiler Optimizations
Electronic Notes in Theoretical Computer Science (ENTCS)
A Program Result Checker for the Lexical Analysis of the GNU C Compiler
Electronic Notes in Theoretical Computer Science (ENTCS)
Towards Proof Generating Compilers
Electronic Notes in Theoretical Computer Science (ENTCS)
Into the Loops: Practical Issues in Translation Validation for Optimizing Compilers
Electronic Notes in Theoretical Computer Science (ENTCS)
A simple, verified validator for software pipelining
Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Filet-o-fish: practical and dependable domain-specific languages for OS development
ACM SIGOPS Operating Systems Review
Detecting bugs in register allocation
ACM Transactions on Programming Languages and Systems (TOPLAS)
A verified framework for higher-order uncurrying optimizations
Higher-Order and Symbolic Computation
Filet-o-Fish: practical and dependable domain-specific languages for OS development
Proceedings of the Fifth Workshop on Programming Languages and Operating Systems
Cones and foci for protocol verification revisited
FOSSACS'03/ETAPS'03 Proceedings of the 6th International conference on Foundations of Software Science and Computation Structures and joint European conference on Theory and practice of software
An intermediate representation approach to reducing test suites for retargeted compilers
Ada-Europe'07 Proceedings of the 12th international conference on Reliable software technologies
Use of formal methods for building qualified code generator for safer automotive systems
Proceedings of the 1st Workshop on Critical Automotive applications: Robustness & Safety
An efficient SSA-based algorithm for complete global value numbering
APLAS'07 Proceedings of the 5th Asian conference on Programming languages and systems
Formal verification with Isabelle/HOL in practice: finding a bug in the GCC scheduler
FMICS'07 Proceedings of the 12th international conference on Formal methods for industrial critical systems
Bringing extensibility to verified compilers
PLDI '10 Proceedings of the 2010 ACM SIGPLAN conference on Programming language design and implementation
Translation validation of high-level synthesis
IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems
SAS'10 Proceedings of the 17th international conference on Static analysis
Perspectives in certificate translation
TGC'10 Proceedings of the 5th international conference on Trustworthly global computing
Verified squared: does critical software deserve verified tools?
Proceedings of the 38th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Showing full semantics preservation in model transformation: a comparison of techniques
IFM'10 Proceedings of the 8th international conference on Integrated formal methods
Building code generators with genesys: a tutorial introduction
GTTSE'09 Proceedings of the 3rd international summer school conference on Generative and transformational techniques in software engineering III
Certifying compilers using higher-order theorem provers as certificate checkers
Formal Methods in System Design
Evaluating value-graph translation validation for LLVM
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
Relational verification using product programs
FM'11 Proceedings of the 17th international conference on Formal methods
ITP'11 Proceedings of the Second international conference on Interactive theorem proving
Journal of Systems and Software
On the correctness of transformations in compiler back-ends
ISoLA'04 Proceedings of the First international conference on Leveraging Applications of Formal Methods
Catching and identifying bugs in register allocation
SAS'06 Proceedings of the 13th international conference on Static Analysis
Formal verification of a memory model for C-like imperative languages
ICFEM'05 Proceedings of the 7th international conference on Formal Methods and Software Engineering
Formalizing the LLVM intermediate representation for verified program transformations
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Verification of source code transformations by program equivalence checking
CC'05 Proceedings of the 14th international conference on Compiler Construction
SDL versus c equivalence checking
SDL'05 Proceedings of the 12th international conference on Model Driven
Science of Computer Programming
Formal verification of backward compatibility of microcode
CAV'05 Proceedings of the 17th international conference on Computer Aided Verification
TVOC: a translation validator for optimizing compilers
CAV'05 Proceedings of the 17th international conference on Computer Aided Verification
Finding basic block and variable correspondence
SAS'05 Proceedings of the 12th international conference on Static Analysis
JReq: database queries in imperative languages
CC'10/ETAPS'10 Proceedings of the 19th joint European conference on Theory and Practice of Software, international conference on Compiler Construction
Validating register allocation and spilling
CC'10/ETAPS'10 Proceedings of the 19th joint European conference on Theory and Practice of Software, international conference on Compiler Construction
Formal verification of coalescing graph-coloring register allocation
ESOP'10 Proceedings of the 19th European conference on Programming Languages and Systems
G2C: cryptographic protocols from goal-driven specifications
TOSCA'11 Proceedings of the 2011 international conference on Theory of Security and Applications
Generating Invariant-Based Certificates for Embedded Systems
ACM Transactions on Embedded Computing Systems (TECS)
A formally verified SSA-Based middle-end: Static single assignment meets compcert
ESOP'12 Proceedings of the 21st European conference on Programming Languages and Systems
ESOP'12 Proceedings of the 21st European conference on Programming Languages and Systems
Equivalence checking of static affine programs using widening to handle recurrences
ACM Transactions on Programming Languages and Systems (TOPLAS)
Frankenstein: stitching malware from benign binaries
WOOT'12 Proceedings of the 6th USENIX conference on Offensive Technologies
Model-based testing of optimizing compilers
TestCom'07/FATES'07 Proceedings of the 19th IFIP TC6/WG6.1 international conference, and 7th international conference on Testing of Software and Communicating Systems
A framework for end-to-end verification and evaluation of register allocators
SAS'07 Proceedings of the 14th international conference on Static Analysis
Symbolic testing of OpenCL code
HVC'11 Proceedings of the 7th international Haifa Verification conference on Hardware and Software: verification and testing
Translation validation for a verified OS kernel
Proceedings of the 34th ACM SIGPLAN conference on Programming language design and implementation
Combined WCET analysis of bitcode and machine code using control-flow relation graphs
Proceedings of the 14th ACM SIGPLAN/SIGBED conference on Languages, compilers and tools for embedded systems
Will you still compile me tomorrow? static cross-version compiler validation
Proceedings of the 2013 9th Joint Meeting on Foundations of Software Engineering
Differential assertion checking
Proceedings of the 2013 9th Joint Meeting on Foundations of Software Engineering
Data-driven equivalence checking
Proceedings of the 2013 ACM SIGPLAN international conference on Object oriented programming systems languages & applications
Towards modularly comparing programs using automated theorem provers
CADE'13 Proceedings of the 24th international conference on Automated Deduction
Towards a verified component platform
Proceedings of the Seventh Workshop on Programming Languages and Operating Systems
Validating library usage interactively
CAV'13 Proceedings of the 25th international conference on Computer Aided Verification
Formal verification of synchronous data-flow program transformations toward certified compilers
Frontiers of Computer Science: Selected Publications from Chinese Universities
Formal Verification of an SSA-Based Middle-End for CompCert
ACM Transactions on Programming Languages and Systems (TOPLAS)
Hi-index | 0.00 |
We describe a translation validation infrastructure for the GNU C compiler. During the compilation the infrastructure compares the intermediate form of the program before and after each compiler pass and verifies the preservation of semantics. We discuss a general framework that the optimizer can use to communicate to the validator what transformations were performed. Our implementation however does not rely on help from the optimizer and it is quite successful by using instead a few heuristics to detect the transformations that take place.The main message of this paper is that a practical translation validation infrastructure, able to check the correctness of many of the transformations performed by a realistic compiler, can be implemented with about the effort typically required to implement one compiler pass. We demonstrate this in the context of the GNU C compiler for a number of its optimizations while compiling realistic programs such as the compiler itself or the Linux kernel. We believe that the price of such an infrastructure is small considering the qualitative increase in the ability to isolate compilation errors during compiler testing and maintenance.