190 likes | 299 Vues
Building robust compilers is difficult due to complex interactions that resist testing. Compiler bugs can invalidate source-level guarantees, and few users extend their compiler leading to hand-optimized, unreadable code. Verified Compilers allow implementing compilers in a proof assistant and proving compiler correctness interactively. DSL-based compilers offer easier extensibility but with weaker guarantees. This contribution adds extensibility to DSL execution engines while maintaining correctness proof with a stronger guarantee than existing solutions like CompCert and PEC. The rewrite rules and main theorems are proved in Coq, ensuring local correctness. Challenges include evaluation and managing case explosion, but the execution engine supports CFG pattern matching and splicing. The evaluation shows 1,000 lines of Coq functional code and 3,000 lines of Coq proof script for a trusted computing base. Extensibility evaluation supports PEC optimizations without manual proof effort, maintaining end-to-end correctness of Compcert. The sample of optimizations includes the Extensible & Correct Compiler Rewrite Rule.
E N D
Have Your Verified CompilerAnd Extend It Too Zachary Tatlock Sorin Lerner UC San Diego
Compiler Correctness Building robust compilers is difficult complex interactions resist testing Compiler bugs are contagious invalidate source level guarantees Few users extend their compiler hand optimized, unreadable code
Verified Compilers • Implement compiler in proof assistant • Prove compiler correct interactively • CompCert [Leroy], Lambda Tamer [Chlipala] Strong Guarantee Difficult to Extend
DSL-based Compilers • Domain Specific Language for optimizations • DSL opts proven correct automatically • Rhodium [POPL 05], PEC [PLDI 09] Easier to Extend Weaker Guarantee
Contribution Add Extensibility DSL Execution Engine + Correctness Proof stronger guarantee CompCert XCert CompCert Reduce TCB weaker guarantee PEC PEC harder to extend easier to extend
Extensible & Correct Compiler Correct Compiler Rewrite Rule Main Theorem Proved in Coq : XCert Rules Locally Correct XCert Correct ? Rewrite PEC Locally Correct • Formal Correctness Proof in Coq • Bulk of the development effort ? [PLDI 09] CompCert CompCert ? XCert C Asm
Extensible & Correct Compiler Rewrite Rule 2 1 PEC 3 Challenges and Evaluation [PLDI 09] CompCert XCert C Asm
[PLDI 09] PEC • Rewrite Rule • Find & Replace • Match Pattern • Cx < 10 • Ix • Apply Subst while(C) I++ I++ while(C) I+= 2 x = 0 while(x < 10) x ++ x ++ return x x = 0 while(x < 10) x += 2 return x
[PLDI 09] PEC A PEC Checker Convert to CFG Guess Sync Points Check w/ SMT while(C) I++ I++ while(C) I+= 2 A C C C C !C !C I ++ I ++ I +=2 I +=2 I ++ I ++ B A
PEC XCert Module Rule in Coq SMT Checks A B
Extensible & Correct Compiler Rewrite Rule 2 1 PEC 3 Challenges and Evaluation [PLDI 09] XCert
XCert Correctness Proof • Small Step • Execute instruction • Step state S to S’ S S’
XCert Correctness Proof • Equivalent Executions • Initial Equiv • Prove Simulation Diagram • CompCert Small Step Library: • Sim Diagram Progs Equiv Final Equiv L R L’ R’ < L ~ R L L’ ? < R’ : R R’ L’ ~ R’
XCert Simulation Diagram XCert Module A A A B A B
Extensible & Correct Compiler Rewrite Rule 2 1 PEC 3 Challenges and Evaluation [PLDI 09] XCert
Challenges (see paper) XCert Execution Engine • CFG pattern matching • CFG splicing XCert Correctness Proof • Managing case explosion • Verified validation [Tristan and Leroy] • Preserving non-terminating behaviors
Evaluation Engine : 1,000 lines of Coq functional code Proof : 3,000 lines of Coq proof script Trusted Computing Base (TCB) • Compcert : Coq + Coq encoding of C sem • XCert adds : SMT + SMT encoding of C sem
Evaluation Extensibility: Support PEC Opts [PLDI 09] • No manual proof effort or TCB increase • Maintain Compcert end-to-end correctness Sample of Optimizations Run:
Extensible & Correct Compiler Rewrite Rule 2 1 PEC [PLDI 09] XCert Thank You!