[LLVMdev] Caching ExecutionEngine / MCJIT

Paweł Bylica chfast at gmail.com
Mon Dec 29 05:23:49 PST 2014

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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141229/a04d37ef/attachment.html>

More information about the llvm-dev mailing list