article Open access

Beyond Relooper: recursive translation of unstructured control flow to structured control flow (functional pearl)

  • Proceedings of the ACM on Programming Languages
  • Association for Computing Machinery
Research footprint

At a glance

Citations
5
References
16
Comments
0
Paper overview

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.

Record transparency

Publication details

DOI
10.1145/3547621
OpenAlex
W4293812621
Document type
article
Language
EN
Source
Proceedings of the ACM on Programming Languages
Last metadata update
Community

Comments

Log in to join the discussion.

  1. No comments yet. Start the discussion.