Camil Demetrescu edited osr-llvm.tex  over 8 years ago

Commit id: 4d3428177d0ac93c633d097b5a6fd45db4d43685

deletions | additions      

       

\paragraph{OSR Instrumentation.}  We use deferred compilation by instrumenting {\tt isord} in \tinyvm\ with an open OSR 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, incrementing the hotness counter {\tt p.osr} and jumping 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}). Notice that maintaining the SSA form requires adjusting phi nodes. The stub (see \myfigure[...]) calls a code generator that 1) builds an optimized version of {\tt isord} by inlining the comparator and 2) uses it to create the continuation function {\tt isordto}. The stub is shown in \myfigure[...].  as isordto}  shown in \myfigure\ref{fig:isordascto}. \paragraph{Generation of the Continuation Function.}  [...]