<p dir="ltr">This sounds great, but will it work on Windows as well ?</p>
<p dir="ltr">I considered MCJIT for my work, but was not sure if there are any features supported by old JIT but missing in MCJIT. </p>
<p dir="ltr">Thanks,</p>
<p dir="ltr">Dmitri<br>
</p>
<div class="gmail_quote">Am 23.04.2013 20:26 schrieb "Kaylor, Andrew" <<a href="mailto:andrew.kaylor@intel.com">andrew.kaylor@intel.com</a>>:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">






<div lang="EN-US" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">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.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">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.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">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.<u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">-Andy<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Eli Bendersky [mailto:<a href="mailto:eliben@google.com" target="_blank">eliben@google.com</a>]
<br>
<b>Sent:</b> Tuesday, April 23, 2013 11:13 AM<br>
<b>To:</b> Kaylor, Andrew<br>
<b>Cc:</b> Dmitri Rubinstein; LLVM Dev<br>
<b>Subject:</b> Re: [LLVMdev] LLVM JIT Questions<u></u><u></u></span></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><u></u> <u></u></p>
<div>
<p class="MsoNormal">On Tue, Apr 23, 2013 at 10:39 AM, Kaylor, Andrew <<a href="mailto:andrew.kaylor@intel.com" target="_blank">andrew.kaylor@intel.com</a>> wrote:<u></u><u></u></p>
<p class="MsoNormal" style="margin-bottom:12.0pt">Hi Dmitri,<br>
<br>
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.<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">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.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Eli<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<p class="MsoNormal">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().<br>

<br>
-Andy<u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"><br>
-----Original Message-----<br>
From: <a href="mailto:llvmdev-bounces@cs.uiuc.edu" target="_blank">llvmdev-bounces@cs.uiuc.edu</a> [mailto:<a href="mailto:llvmdev-bounces@cs.uiuc.edu" target="_blank">llvmdev-bounces@cs.uiuc.edu</a>] On Behalf Of Dmitri Rubinstein<br>

Sent: Tuesday, April 23, 2013 5:25 AM<br>
To: LLVM Dev<br>
Subject: [LLVMdev] LLVM JIT Questions<br>
<br>
Hi all,<br>
<br>
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.<br>
<br>
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.<br>
<br>
Are there any plans to add this feature in the near future ?<br>
<br>
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 ?<br>
<br>
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.<br>
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.<br>

<br>
Is there any documentation which describes how to do generate C-ABI compatible LLVM functions or code that implements this functionality ?<br>
<br>
Thanks,<br>
<br>
Dmitri<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">
http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">
http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><u></u><u></u></p>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
</div>
</div>

</blockquote></div>