Verifying term graph optimizations using Isabelle/HOL
Abstract
Our objective is to formally verify the correctness of the hundreds of expression optimization rules used within the GraalVM compiler. When defining the semantics of a programming language, expressions naturally form abstract syntax trees, or, terms. However, in order to facilitate sharing of common subexpressions, modern compilers represent expressions as term graphs. Defining the semantics of term graphs is more complicated than defining the semantics of their equivalent term representations. More significantly, defining optimizations directly on term graphs and proving semantics preservation is considerably more complicated than on the equivalent term representations. On terms, optimizations can be expressed as conditional term rewriting rules, and proofs that the rewrites are semantics preserving are relatively straightforward. In this paper, we explore an approach to using term rewrites to verify term graph transformations of optimizations within the GraalVM compiler. This approach significantly reduces the overall verification effort and allows for simpler encoding of optimization rules.
Keywords
Cite
@article{arxiv.2212.06956,
title = {Verifying term graph optimizations using Isabelle/HOL},
author = {Brae J. Webb and Ian J. Hayes and Mark Utting},
journal= {arXiv preprint arXiv:2212.06956},
year = {2022}
}
Comments
14 pages, 7 figures, to be published in CPP2023