Supporting On-Stack Replacement in Unstructured Languages by Loop Reconstruction and Extraction

09/19/2019
by   Raphael Mosaner, et al.
0

On-stack replacement (OSR) is a common technique employed by dynamic compilers to reduce program warm-up time. OSR allows switching from interpreted to compiled code during the execution of this code. The main targets are long running loops, which need to be represented explicitly, with dedicated information about condition and body, to be optimized at run time. Bytecode interpreters, however, represent control flow implicitly via unstructured jumps and thus do not exhibit the required high-level loop representation. To enable OSR also for jump-based - often called unstructured - languages, we propose the partial reconstruction of loops in order to explicitly represent them in a bytecode interpreter. Besides an outline of the general idea, we implemented our approach in Sulong, a bytecode interpreter for LLVM bitcode, which allows the execution of C/C++. We conducted an evaluation with a set of C benchmarks, which showed speed-ups in warm-up of up to 9x for certain benchmarks. This facilitates execution of programs with long-running loops in rarely called functions, which would yield significant slowdown without OSR. While shown with a prototype implementation, the overall idea of our approach is generalizable for all bytecode interpreters.

READ FULL TEXT

page 10

page 11

research
04/29/2020

Analyzing Smart Contracts: From EVM to a sound Control-Flow Graph

The EVM language is a simple stack-based language with words of 256 bits...
research
08/08/2017

On-Stack Replacement à la Carte

On-stack replacement (OSR) dynamically transfers execution between diffe...
research
03/04/2022

Deoptless: Speculation with Dispatched On-Stack Replacement and Specialized Continuations

Just-in-time compilation provides significant performance improvements f...
research
01/08/2018

Tamarin: Concolic Disequivalence for MIPS

Given two MIPS programs, when are they equivalent? At first glance, this...
research
02/08/2018

Putting in All the Stops: Execution Control for JavaScript

Scores of compilers produce JavaScript, enabling programmers to use many...
research
09/09/2019

Proconda – Protected Control Data

Memory corruption vulnerabilities often enable attackers to take control...
research
02/22/2019

On Transforming Functions Accessing Global Variables into Logically Constrained Term Rewriting Systems

In this paper, we show a new approach to transformations of an imperativ...

Please sign up or login with your details

Forgot password? Click here to reset