Camil Demetrescu edited intro.tex  over 8 years ago

Commit id: 8e7cc76d3f645afb90f8189e655f55a21dc03be0

deletions | additions      

       

  In a 2013 paper Lameed and Hendren propose McOSR~\cite{lameed2013modular}, a technique for OSR that essentially stores the live values in a global buffer, recompiles the current function and then loads in it the saved state when the execution is resumed. Their approach shows a few limitations that we discuss later in this paper, and because of some relevant design choices it can work only with the legacy JIT which has been dropped from recent LLVM releases.  \paragraph{Contributions of this Paper}  In this paper we present our novel, platform-independent framework for LLVM to enable switching between different versions of a function at run-time. Specific goals include:  \begin{itemize}  \item The ability for a function reached via OSR to fire an OSR itself: this would allow switching from a base function $f_0$ to an optimized function $f_1$, and later on to a further optimized version $f_2$, etc. 

The remainder of this paper is organized as follows. In Section~\ref{se:approach}, we present our OSR technique and outline its implementation and Application Program Interface (API) for VM builders. Section~\ref{case-study} illustrates a case study in McVM. In Section~\ref{se:experiments}, we present the experimental study in TinyVM and discuss implications of inserting OSR points in a LLVM function, while in In Section~\ref{se:related} we discuss the state of the art of OSR in the literature and discuss related work. Section~\ref{se:conclusions} concludes the paper and presents some ideas for future research directions.