this is for holding javascript data
Camil Demetrescu
over 8 years ago
Commit id: eb55d46f501dacfd62f73fa5090d75d22a1f585d
deletions | additions
diff --git a/osr-llvm.tex b/osr-llvm.tex
index 9ccda80..f34c615 100644
--- a/osr-llvm.tex
+++ b/osr-llvm.tex
...
\label{se:ir-x86-lowering}
%The final step to be performed before execution is native code generation.
\myfigure\ref{fig:isordx86-64} shows the x86-64 code generated by the LLVM back-end for {\tt isordfrom} and {\tt isordto}. For the sake of comparison with the native code that would be generated for the original non-OSR versions, additions resulting from the IR instrumentation are in grey, while removals are struck-through. Notice that the OSR intrusiveness in {\tt isordfrom} is minimal, consisting of just two assembly instructions with register and immediate operands. As a result of induction variable canonicalization in the LLVM back-end, loop index {\tt i} and hotness counter {\tt p.osr} are fused in register {\tt\%r12}. We also note that tail call optimization is applied in the OSR-firing block, resulting in no stack growth during an OSR. The continuation function {\tt isordto} is identical to the
optimized specialized version of {\tt
isord}, isord} with inlined comparator, except that the loop index is passed as a parameter in {\tt \%rdx} and no
loop %loop pre-header
preamble is needed since OSR jumps directly in the loop body.
%\subsection{\osrkit\ Instrumentation API}
%\label{se:instrum-api}