this is for holding javascript data
Camil Demetrescu edited osr-llvm.tex
over 8 years ago
Commit id: 0d2230a10feda6836b8c046ae8a712afa5b0ce22
deletions | additions
diff --git a/osr-llvm.tex b/osr-llvm.tex
index 48114ac..491da66 100644
--- a/osr-llvm.tex
+++ b/osr-llvm.tex
...
\paragraph{OSR Instrumentation in IR.}
To defer the compilation of the continuation function until the comparator is known at run time, we used \osrkit\ to instrument {\tt isord} with an open OSR point at the beginning of the loop body, as shown in \myfigure\ref{fig:isordfrom}. Portions added to the original code by OSR istrumentation are highlighted in grey.
%The figure illustrates how the original {\tt isord} code is instrumented by \tinyvm, highlighting in grey the added portions.
A new basic block is placed at the beginning of the loop body, which increments a hotness counter {\tt p.osr} and jumps to an OSR-firing block if the counter reaches the threshold (1000 iterations in this example). The OSR block contains a tail call to the target generation stub, which receives as parameters the four live variables at the OSR point ({\tt v}, {\tt n}, {\tt i}, {\tt c}).
An additional user-defined pointer may be used to provide the stub with profile data collected in the base function. Notice that maintaining the SSA form requires \osrkit\ to adjust $\phi$-nodes. The stub (see
\myfigure[...]) \myfigure\ref{fig:isordstub}) calls a code generator that: 1) builds an optimized version of {\tt isord} by inlining the comparator (which is known when the OSR is fired), and 2) uses it to create the continuation function {\tt isordto} shown in \myfigure\ref{fig:isordascto}. The stub
passes to the code generator as built-in parameters: 1) a pointer to the {\tt isord} IR code, a pointer to basic block in {\tt isord} from which the OSR is fired, and 3) the LLVM context for code generation. The stub terminates with a tail call to {\tt isordto}. To generate the continuation function from the optimized version created by the inliner, \osrkit\ replaced the function entry point, removed dead code, replaced live variables with the function parameters, and fixed $\phi$-nodes accordingly. Additions resulting from the IR instrumentation are in grey, while removals are struck-through.
\ifdefined\noauthorea
\begin{figure}[t]