[LLVMdev] Caching ExecutionEngine / MCJIT

Charlie Turner charlesturner7c5 at gmail.com
Mon Dec 29 06:37:45 PST 2014


Hi Pawel,

I don't know much about MCJIT, but I did come across this blog post
http://blog.llvm.org/2013/08/object-caching-with-kaleidoscope.html
about caching the generated objects for subsequent execution, which
apparently is a big win for MCJIT over the old jit execution engine in
LLVM.

There's example code in the LLVM source distro
(examples/Kaleidoscope/MCJIT/
cached).

HTH,
Charlie.

On 29 December 2014 at 13:23, Paweł Bylica <chfast at gmail.com> wrote:
> Hello everyone,
>
> I need some advises about (re)using ExecutionEngine with MCJIT as a driver.
> I'm developing a service that receives a piece of high-level code, compiles
> it into LLVM IR function "main" and uses MCJIT to execute the function.
>
> It can happen that the same piece of code is sent to the service many times.
> I would like to cache the results (keep generated machine code alive) and do
> just the execution step. But I'm having problems with that.
>
> My first attempt was to cache ExecutionEngine instance and function address
> (from getFunctionAddress() method). Executing cached function second time
> crashes the process.
>
> I noticed that doing getFunctionAddress() each time helps a bit. There is no
> crash but results produced by executed function are incorrect and there are
> probably some memory access violations going on.
>
> Using the same function name for each code is probably a bad idea in case of
> MCJIT, so I changed the names to some random value. However, it did not help
> in any of previous problems.
>
> I thinking about using single instance of ExecutionEngine or share Memory
> Manager. Can I get any advice on that?
>
> Happy New Year,
> Paweł Bylica
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>




More information about the llvm-dev mailing list