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

Commit id: 93088d6edb33e59e329c911ff3ac05af523c87fd

deletions | additions      

       

%\subsection{Example}  In this section we discuss how to implement the OSR approach of \mysection\ref{se:overview} in LLVM. Our discussion is based on a simple example that illustrates a profile-driven optimization scenario. We start from a simple base function ({\tt isord}) that checks whether an array of numbers is ordered according to some criterion specified by a comparator, as shown in \myfigure\ref{fi:isord-example}. Our goal is to instrument {\tt isort} so that, whenever the number of iterations of {\tt isord} exceeds a certain threshold, control is dynamically diverted to a faster version generated on the fly by inlining the comparator.   The IR code shown in this section has been generated with \clang\ and instrumented  \osrkit, an LLVM-based library we prototyped. \osrkit\ was designed prototyped  to support help  VM builders in performing implement  OSR instrumentation of IR code\footnote{Virtual in LLVM\footnote{Virtual  register names and labels in the LLVM-produced IR code shown in this paper have been refactored to make the code more readable.}. %To explain how the OSR approach of \mysection\ref{se:overview} can be implemented in LLVM, we consider the simple example of \myfigure\ref{fi:isord-example}. Function {\tt isord} checks whether an array of numbers is ordered according to some criterion specified by a comparator.