Proceedings of the 34th ACM SIGPLAN Conference on Programming Language Design and Implementation 2013
DOI: 10.1145/2491956.2462164
|View full text |Cite
|
Sign up to set email alerts
|

Formal verification of SSA-based optimizations for LLVM

Abstract: Modern compilers, such as LLVM and GCC, use a static single assignment (SSA) intermediate representation (IR) to simplify and enable many advanced optimizations. However, formally verifying the correctness of SSA-based optimizations is challenging because SSA properties depend on a function's entire control-flow graph.This paper addresses this challenge by developing a proof technique for proving SSA-based program invariants and compiler optimizations. We use this technique in the Coq proof assistant to create… Show more

Help me understand this report

Search citation statements

Order By: Relevance

Paper Sections

Select...
3
1
1

Citation Types

0
15
0

Year Published

2014
2014
2024
2024

Publication Types

Select...
5
3
1

Relationship

1
8

Authors

Journals

citations
Cited by 57 publications
(15 citation statements)
references
References 19 publications
0
15
0
Order By: Relevance
“…As the compiler and the witness generator do not require formal verification, the size of the trusted code base shrinks substantially. Witnessing also requires much less effort than a full mathematical proof: as observed in [19], a mathematical correctness proof of SSA (Static Single Assignment) conversion in Coq is about 10,000 lines [29], while refinement checking can be implemented in around 1,500 lines of code, most of which comprises a witness validator which can be reused across different transformations. Our work shows how to extend this concept, originally developed for correctness checking, to the preservation of a large class of security properties, with the following important distinction.…”
Section: Discussion and Related Workmentioning
confidence: 99%
“…As the compiler and the witness generator do not require formal verification, the size of the trusted code base shrinks substantially. Witnessing also requires much less effort than a full mathematical proof: as observed in [19], a mathematical correctness proof of SSA (Static Single Assignment) conversion in Coq is about 10,000 lines [29], while refinement checking can be implemented in around 1,500 lines of code, most of which comprises a witness validator which can be reused across different transformations. Our work shows how to extend this concept, originally developed for correctness checking, to the preservation of a large class of security properties, with the following important distinction.…”
Section: Discussion and Related Workmentioning
confidence: 99%
“…We conjecture that our reinterpretation techniques can be generalized to most passes of CompCert down to assembly. While we leave such generalization as future work, some guarantees from C to assembly can be derived by instrumenting CompCert [Barthe et al 2014] and LLVM [Almeida et al 2016b;Zhao et al 2012Zhao et al , 2013 and turning them into certifying (rather than certified) compilers where security guarantees are statically rechecked on the compiled code through translation validation, thus re-establishing them independently of source-level security proofs. In this case, rather than being fully preserved down to the compiled code, Low * -level proofs are still useful to practically reduce the risk of failures in translation validation.…”
Section: From C * To Compcert Clight and Beyondmentioning
confidence: 99%
“…Compiler correctness. A compiler can be written in a mathematical theorem prover (e.g., CompCert [27], Vellvm [52,53]), which would require one to figure out the specification in such a setting [37,49]. Alternatively, various other DSLs have also been proposed for compiler construction [23,26].…”
Section: Related Workmentioning
confidence: 99%