Daniele Cono D'Elia edited case-study.tex  over 8 years ago

Commit id: 7ecba55ef2629d791549176da09fa0d269a40c9f

deletions | additions      

       

\end{enumerate}  \end{enumerate}  The analysis pass is integrated in McVM's analysis manager and identifies optimization opportunities for functions containing {\tt feval} instructions. A function becomes a candidate for optimization when at least one of its {\tt feval} calls is inside a loop. We then group {\tt feval} instructions whose first argument is reached by the same definition, using reaching definition information already computed by the analysis manager for previous optimizations. Grouping For each group we mark for instrumentation only those  instructions allows [...] that dominate the others, so that the function can be optimized as early as possible at run-time.  The analysis pass is also able to determine whether the value of the argument can change across two executions of the same {\tt feval} instruction,and  thus discriminate whether discriminating when  a run-time guard should must  be inserted during the run-time optimization phase. Compared to the OSR-based approach by Lameed and Hendren, our solution is cheaper because the types for the other arguments do not need to be cached or guarded: as we will see later, the type inference engine will compute the most accurate yetstill  sound type information in the analysis of the profile-driven generated optimized  IIR function. where direct calls are used.  When the IIR compiler processes an annotated {\tt feval} instruction, it will store in the metadata of the function version being compiled a copy of its variable map (i.e., a map between IIR and IR objects), the current {\tt llvm::BasicBlock*} created for the call and the {\tt llvm::Value*} object corresponding to the first argument for the {\tt feval}. This information is then used by the helper component for OSR point insertion.  The helper will process the metadata and insert an open OSR point [...]