Daniele Cono D'Elia edited abstract.tex  over 8 years ago

Commit id: 97aa0967e9a08768ba39451e973c19c9930fad43

deletions | additions      

       

This On-Stack Replacement (OSR)  is a technique that allows to interrupt the execution of a function and continue from the same program state with a different version of the function. OSR is often used in virtual machines to interrupt a long-running function and recompile it at a higher optimization level, or to invalidate no longer holding speculative assumptions made during the compilation of that function.  In this paper we present a novel framework to perform OSR transitions. Compared to extant OSR techniques, our approach is platform-independent as transitions are encoded entirely at the Intermediate Representation (IR) level, it supports OSR-point insertion at arbitrary locations in a function, and it allows a function version reached via OSR to fire  an abstract OSR itself, either to a more optimized version or to a less optimized one from which it was derived.  We implement and evaluate our technique in the LLVM compiler infrastructure, which is nowadays being increasingly used as Just-In-Time (JIT) compiler in several virtual machines for dynamic languages such as Javascript, MATLAB, Python and Ruby. We thus present a case study on the integration of our technique in the McVM virtual machine for MATLAB, showing interesting speedups from the optimization of a popular construct of the language.