[llvm-dev] How to recompile functions with ORC JIT?

Theodoros Theodoridis via llvm-dev llvm-dev at lists.llvm.org
Sat Jun 4 08:49:49 PDT 2016


Hello Lang, David,


I am just using an ObjectLinkingLayer  and an IRCompileLayer. I had a 
look at Chapter 4 of "Building A JIT" and I found exactly what I needed.

I have a working implementation.

Thanks a lot for the help,

Theodor


On 05/28/2016 12:15 AM, Lang Hames wrote:
> H Theodoros, David,
>
>     What I am trying to figure out is how the function pointer can be
>     updated to point to the newly compiled version.
>
>
> As Dave implied, it depends on how you've set up your ORC stack. These 
> days, the API directly responsible for this is the 
> IndirectStubsManager (see 
> llvm/include/llvm/ExecutionEngine/Orc/IndirectionUtils.h). If you have 
> access to the appropriate IndirectStubsManager you just need to call 
> the updatePointer method with the name of the function you want to 
> update and the new address.
>
> If you're using the CompileOnDemand layer to compile lazily from IR, 
> the problem is that that layer doesn't (currently) expose the 
> IndirectStubManager for each module. I think it would be reasonable to 
> add support for that if you need it though.
>
> So - what is your current setup?
>
> You may also be interested in the latest chapter of the Building A JIT 
> tutorial series that I'm working on. There's no chapter text yet, but 
> the code was just committed as r271054 and is (hopefully) fairly 
> readable if you're already familiar with Orc.
>
> Cheers,
> Lang.
>
>
> On Fri, May 27, 2016 at 10:38 AM, David Blaikie <dblaikie at gmail.com 
> <mailto:dblaikie at gmail.com>> wrote:
>
>     +Lang
>
>     Ultravague answer: There are a few different Orc layers for
>     different levels of indirection needed for different levels of
>     substitutability. One way is to indirect every call through global
>     function pointers - so when you want to replace the function you
>     write the new function pointer to the global variable. I forget
>     which layers do which kinds of indirection.
>
>     - Dave
>
>     On Thu, May 26, 2016 at 11:49 PM, Theodoros Theododiris via
>     llvm-dev <llvm-dev at lists.llvm.org
>     <mailto:llvm-dev at lists.llvm.org>> wrote:
>
>         Hello,
>
>         I am trying to figure out how to recompile functions multiple
>         times during run-time with ORC JIT
>
>         and I'd appreciate any help/advice.
>
>
>         My use case is t he following: every time a function of
>         interest (annotated) is called, profiling data
>
>         are gathered. Given enough data the function is recompiled
>         using different optimizations. This happens
>
>         repeatedly until the "best" optimization parameters are found.
>
>
>         A similar question was asked before and a solution was suggested:
>
>         http://lists.llvm.org/pipermail/llvm-dev/2015-July/088665.html
>
>
>         What I am trying to figure out is how the function pointer can
>         be updated to point to the newly
>
>         compiled version.
>
>
>         Thanks,
>
>         Theodor
>
>         _______________________________________________
>         LLVM Developers mailing list
>         llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>         http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160604/fd797ba0/attachment.html>


More information about the llvm-dev mailing list