this is for holding javascript data
Camil Demetrescu edited osr-llvm.tex
over 8 years ago
Commit id: 12a2a6d14b8182b7444fae651acece21d5ea21ff
deletions | additions
diff --git a/osr-llvm.tex b/osr-llvm.tex
index fcd66d7..427def6 100644
--- a/osr-llvm.tex
+++ b/osr-llvm.tex
...
In this section we discuss our implementation of the approach described in \mysection\ref{se:overview} in \tinyvm, a proof-of-concept virtual machine we developed as a playground to exercise our OSR techniques. TinyVM is based on LLVM's MCJIT compiler and supports interactive invocation of LLVM IR functions either generated at run-time or loaded from disk. The main design goal behind TinyVM is the creation of an interactive environment for IR manipulation and JIT-compilation of functions: for instance, it allows the user to insert OSR points in loaded functions, run optimization passes on them or display their CFGs, repeatedly invoke a function for a specified amount of times and so on. TinyVM supports dynamic library loading and linking, and comes with a helper component for MCJIT that simplifies tasks such as handling multiple IR modules, symbol resolution in presence of multiple versions of a function, and tracking native code and other machine-level generated object such as Stackmaps.
To explain how OSR can be encoded in IR, we consider the toy example of \myfigure\ref{fi:isord-example}. Function {\tt isord} checks whether an array of numbers is sorted according to some ordering given by a comparator. The scenario we explore is profile-driven optimization, where we dynamically divert control to a faster version if the number of iterations exceeds a certain threshold. To achieve this goal, we use deferred compilation by instrumenting {\tt isord} in \tinyvm\ with an open
OSR, OSR at the beginning of the loop body, as shown in \myfigure\ref{fig:isordfrom}.
The %To place an open OSR, \tinyvm\ requires the following pieces of information: 1) a pointer to the
%LLVMContext& Context, OSRLibrary::OpenOSRInfo& info,
% OSRLibrary::OSRCond& cond, Value* profDataVal, OSRLibrary::DestFunGenerator destFunGenerator,
% std::vector *valuesToTransfer, OSRLibrary::OSRPointConfig &config
%Function* src, BasicBlock* src_bb, std::string* F1NewName, OSRLibrary::OSRCond &cond, int branchTakenProb
%OSR instrumentation produces function {\tt isordfrom} obtained from {\tt isord} by including
%includes extra code (in grey) that increments a counter ,
%The generated stub calls a function inliner that generates a version of {\tt isord} where the comparator's body, pointed to by live variable {\tt c_osr}, is inlined in the loop body. The optimized version {\tt isordto} is shown in \myfigure\ref{fig:isordascto}.
\ifdefined\noauthorea
\begin{figure}[t]