Affiliation:
1. Tweag, France / Tufts University, USA
Abstract
In many compilers, control flow is represented using an arbitrary
directed graph. But in some interesting target languages, including
JavaScript and WebAssembly, intraprocedural control flow can be
expressed only in structured ways, using loops, conditionals, and
multilevel breaks or exits. As was shown by Peterson, Kasami, and
Tokura in 1973, such structured control flow can be obtained by
translating arbitrary control flow. The translation uses two standard
analyses, but as published, it takes three passes—which may explain
why it was overlooked by Emscripten, a popular compiler from C to
JavaScript. By tweaking the analyses and by applying fundamental ideas
from functional programming (recursive functions and immutable
abstract-syntax trees), the translation, along with a couple of code
improvements, can be implemented in a single pass. This new
implementation is slated to be added to the Glasgow Haskell
Compiler. Its single-pass translation, its immutable representation,
and its use of dominator trees make it much easier to reason about
than the original translation.
Publisher
Association for Computing Machinery (ACM)
Subject
Safety, Risk, Reliability and Quality,Software
Reference22 articles.
1. Alfred V. Aho , Monica S. Lam , Ravi Sethi , and Jeffrey D . Ullman . 2007 . Compilers : Principles, Techniques, and Tools. Pearson, Boston , 2 nd edition. Alfred V. Aho, Monica S. Lam, Ravi Sethi, and Jeffrey D. Ullman. 2007. Compilers: Principles, Techniques, and Tools. Pearson, Boston, 2nd edition.
2. Control flow analysis
3. An Algorithm for Structuring Flowgraphs
4. Bytecode Alliance. 2022. Cranelift code generator. URL https://github.com/bytecodealliance/wasmtime/tree/main/cranelift. Bytecode Alliance. 2022. Cranelift code generator. URL https://github.com/bytecodealliance/wasmtime/tree/main/cranelift.
5. Code selection through object code optimization