An efficient method of computing static single assignment form
POPL '89 Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
The Omega test: a fast and practical integer programming algorithm for dependence analysis
Proceedings of the 1991 ACM/IEEE conference on Supercomputing
PLDI '92 Proceedings of the ACM SIGPLAN 1992 conference on Programming language design and implementation
Software—Practice & Experience
Proceedings of the 24th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
The design and implementation of a certifying compiler
PLDI '98 Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation
From system F to typed assembly language
ACM Transactions on Programming Languages and Systems (TOPLAS)
A certifying compiler for Java
PLDI '00 Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation
ABCD: eliminating array bounds checks on demand
PLDI '00 Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation
An efficient class and object encoding
OOPSLA '00 Proceedings of the 15th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Typed memory management via static capabilities
ACM Transactions on Programming Languages and Systems (TOPLAS)
Proceedings of the ACM SIGPLAN 2001 conference on Programming language design and implementation
A type system for certified binaries
POPL '02 Proceedings of the 29th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Featherweight Java: a minimal core calculus for Java and GJ
ACM Transactions on Programming Languages and Systems (TOPLAS)
ACM Transactions on Programming Languages and Systems (TOPLAS)
A dependently typed assembly language
Proceedings of the sixth ACM SIGPLAN international conference on Functional programming
An expressive, scalable type theory for certified code
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
Typed compilation of recursive datatypes
Proceedings of the 2003 ACM SIGPLAN international workshop on Types in languages design and implementation
Scalable Certification for Typed Assembly Language
TIC '00 Selected papers from the Third International Workshop on Types in Compilation
Algorithms for computing the static single assignment form
Journal of the ACM (JACM)
A simple typed intermediate language for object-oriented languages
Proceedings of the 32nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Compiler and runtime support for efficient software transactional memory
Proceedings of the 2006 ACM SIGPLAN conference on Programming language design and implementation
A type system equivalent to static single assignment
Proceedings of the 8th ACM SIGPLAN international conference on Principles and practice of declarative programming
SSA-based mobile code: Implementation and empirical evaluation
ACM Transactions on Architecture and Code Optimization (TACO)
Fault-safe code motion for type-safe languages
Proceedings of the 6th annual IEEE/ACM international symposium on Code generation and optimization
Type-preserving compilation for large-scale optimizing object-oriented compilers
Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation
Speculative improvements to verifiable bounds check elimination
Proceedings of the 6th international symposium on Principles and practice of programming in Java
From Contracts Towards Dependent Types: Proofs by Partial Evaluation
Implementation and Application of Functional Languages
A Verifiable, Control Flow Aware Constraint Analyzer for Bounds Check Elimination
SAS '09 Proceedings of the 16th International Symposium on Static Analysis
IFL'09 Proceedings of the 21st international conference on Implementation and application of functional languages
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
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
Formal verification of SSA-based optimizations for LLVM
Proceedings of the 34th ACM SIGPLAN conference on Programming language design and implementation
Formal Verification of an SSA-Based Middle-End for CompCert
ACM Transactions on Programming Languages and Systems (TOPLAS)
Hi-index | 0.00 |
We present a verifiable low-level program representation to embed, propagate, and preserve safety information in high perfor-mance compilers for safe languages such as Java and C#. Our representation precisely encodes safety information via static single-assignment (SSA) [11, 3] proof variables that are first-class constructs in the program.We argue that our representation allows a compiler to both (1) express aggressively optimized machine-independent code and (2) leverage existing compiler infrastructure to preserve safety information during optimization. We demonstrate that this approach supports standard compiler optimizations, requires minimal changes to the implementation of those optimizations, and does not artificially impede those optimizations to preserve safety. We also describe a simple type system that formalizes type safety in an SSA-style control-flow graph program representation. Through the types of proof variables, our system enables compositional verification of memory safety in optimized code. Finally, we discuss experiences integrating this representation into the machine-independent global optimizer of STARJIT, a high-performance just-in-time compiler that performs aggressive control-flow, data-flow, and algebraic optimizations and is competitive with top production systems.