[llvm-dev] re-compile a function

Lang Hames via llvm-dev llvm-dev at lists.llvm.org
Wed Dec 2 13:29:34 PST 2015

Hi Marwa,

MCJIT doesn't provide any support for recompilation. The best you can do is
use multiple MCJIT instances and destroy whichever one contains the
function "foo" that you want to recompile. MCJIT does not do any dependence
tracking either, so you'll also need to destroy and recompile any direct
callers of "foo" (and their direct callers, and so on). If you know you
want to be able to recompile a function it may be best to only call it
indirectly - that way all you have to do is delete the containing MCJIT
instance, create a new MCJIT instance, and update your function pointer.

You may find the Orc APIs a better fit for what you're doing: they at least
support removing individual modules from the JIT session, so you don't have
to maintain multiple JIT instances yourself. You'll still need to manage
the invalidation and/or function pointer update. If you come up with a
scheme for that though we could look at adding it in-tree. You might also
be able to make some use of the utilities in

In case it's useful, I've attached an example that uses the Orc APIs to do
recompilation at higher optimization levels, based on the Kaleidoscope
tutorials. This was motivated by the following mailing list discussion:
http://lists.llvm.org/pipermail/llvm-dev/2015-July/087776.html, which may
also be related to what you want to do.


On Sat, Nov 21, 2015 at 11:05 AM, marwayusuf at feng.bu.edu.eg via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> Dear All
> Is there is a way to recompile a function at runtime?
> It seems that I need to -like - invalidate the recompiled function to
> force the MCJIT to recompile it, cause when I just call runFunction, it
> neglects any modifications in the function code.
> Thanks in advance.
> Regards,
> Marwa Yusuf
> Teaching Assistant - Computer Engineering Department
> Faculty of Engineering - Benha University
> E-JUST PhD Student
> Computer Science & Engineering Dept.
> _______________________________________________
> LLVM Developers mailing list
> 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/20151202/938e2fc8/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fully_lazy_with_recompile.tar.gz
Type: application/x-gzip
Size: 27662 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20151202/938e2fc8/attachment.bin>

More information about the llvm-dev mailing list