[LLVMdev] LLVM JIT Questions

Dmitri Rubinstein dmitri.rubinstein at googlemail.com
Tue Apr 23 16:37:37 PDT 2013


This sounds great, but will it work on Windows as well ?

I considered MCJIT for my work, but was not sure if there are any features
supported by old JIT but missing in MCJIT.

Thanks,

Dmitri
 Am 23.04.2013 20:26 schrieb "Kaylor, Andrew" <andrew.kaylor at intel.com>:

>  Yes, exactly.  My patch adds a new ObjectCache class which can be
> registered with MCJIT.  MCJIT will then call this component before
> attempting to generate code to see if it has a cached object image for a
> given module.  If the ObjectCache has a cached object, MCJIT will skip the
> code generation step and just perform linking and loading.  If the
> ObjectCache does not have a cached version MCJIT will generate code as
> usual and then pass the generated object image to the ObjectCache to be
> cached before MCJIT performs its linking and loading.****
>
> ** **
>
> The ObjectCache is going to be offered as an abstract base class only.
> Clients will need to implement their own mechanism for identifying modules
> and storing cached images, though I do have a unit test which provides a
> very simple reference implementation.****
>
> ** **
>
> This mechanism is not coupled directly with the ELF format.  It will work
> with MachO objects as well, to the extent that MachO is supported by MCJIT.
> ****
>
> ** **
>
> -Andy****
>
> ** **
>
> ** **
>
> *From:* Eli Bendersky [mailto:eliben at google.com]
> *Sent:* Tuesday, April 23, 2013 11:13 AM
> *To:* Kaylor, Andrew
> *Cc:* Dmitri Rubinstein; LLVM Dev
> *Subject:* Re: [LLVMdev] LLVM JIT Questions****
>
> ** **
>
> ** **
>
> ** **
>
> On Tue, Apr 23, 2013 at 10:39 AM, Kaylor, Andrew <andrew.kaylor at intel.com>
> wrote:****
>
> Hi Dmitri,
>
> Regarding your first question, if you can use the MCJIT engine a caching
> mechanism will be available very soon.  I'm preparing to commit a patch
> today to add this capability.  I'm not sure what it would take to get
> something similar working with the older JIT engine.  I expect it would
> take a fair amount of work because the older JIT engine isn't designed
> around object loading as the MCJIT engine is.****
>
> ** **
>
> I would expect it to be very hard to do with the old JIT, because it JITs
> the machine code in a "loaded" form (absolute addresses put into the needed
> places). This is tightly coupled with the current execution and does not
> apply to other executions. MCJIT allows this by virtue of having a
> not-yet-loaded ELF object which can be cached for later use. I imagine this
> is what you do in your patch, Andy.****
>
> ** **
>
> Eli****
>
> ** **
>
> ** **
>
> ** **
>
> ** **
>
>  ****
>
> Regarding your second question, there might be more than one way to do
> this, but once you have an llvm::Function (but before you JIT the code) you
> should be able to use llvm::Function::setCallingConv().
>
> -Andy****
>
>
> -----Original Message-----
> From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On
> Behalf Of Dmitri Rubinstein
> Sent: Tuesday, April 23, 2013 5:25 AM
> To: LLVM Dev
> Subject: [LLVMdev] LLVM JIT Questions
>
> Hi all,
>
> For my current project I need a couple of informations about JIT. I seen
> similar questions already, but the answers are a bit older and I hope
> somebody can provide me a recent information.
>
> 1. In my project I frequently construct LLVM IR, compile it and execute
> with JIT. Because the constructed IR is often the same (but can vary
> depending on input data) I would like to cache produced machine code on the
> disk. There is no JIT API for dumping and loading of compiled code.
>
> Are there any plans to add this feature in the near future ?
>
> How complex would it be to implement this for somebody who has only
> experience with LLVM code generation, but no deep knowledge of JIT
> internals ?
>
> 2. I also need to interface with C-libraries which are either loaded as a
> shared library or pre-compiled with clang and loaded as BC file.
> However, LLVM does not provide a way how to construct function signature
> compatible with the C-ABI of the specific platform. I know that clang
> library has internally this information, but I need this functionality
> without clang.
>
> Is there any documentation which describes how to do generate C-ABI
> compatible LLVM functions or code that implements this functionality ?
>
> Thanks,
>
> Dmitri
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev****
>
>  ** **
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130424/dbd47a43/attachment.html>


More information about the llvm-dev mailing list