<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
p.msochpdefault, li.msochpdefault, div.msochpdefault
        {mso-style-name:msochpdefault;
        margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Calibri","sans-serif";}
span.emailstyle17
        {mso-style-name:emailstyle17;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";}
span.EmailStyle22
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Hi Manny,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">What exactly do you need from the JITEventListener API?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">The latest MCJIT code has a listener interface that will notify you when an object image is emitted.  I recently committed changes to DebugInfo and the IntelJITEventListener
 that demonstrate a way to deconstruct the emitted object into function and line number information.  However, there is no clean way to get back to the original llvm::Function that corresponds to any given machine code function.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">As for your problem with re-jitting modules, I think it should be possible to use a second instance of MCJIT to emit code for a second module that contains
 just the function with new parameters and link that against the previously emitted module.  I haven’t tried this, so I don’t know what pitfalls may be there, but I don’t see an obvious reason that it couldn’t work.  You would probably need a custom memory
 manager to handle the function address resolution.  I realize this isn’t an ideal solution.  I’m hoping that in the near future a single instance of MCJIT will support multiple modules and be able to do this kind of cross-module linking in a more painless
 way.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">-Andy<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<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""> Manny Ko [mailto:Manny.Ko@imgtec.com]
<br>
<b>Sent:</b> Wednesday, February 06, 2013 10:35 AM<br>
<b>To:</b> Kaylor, Andrew; Andrew Sorensen; llvmdev@cs.uiuc.edu<br>
<b>Subject:</b> RE: [LLVMdev] MCJIT and Lazy Compilation<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black">Hi Andy and Andrew,<o:p></o:p></span></p>
<p><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black"> <o:p></o:p></span></p>
<p><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black">I am very interested in this discussion as our co. have critical components that are dependent on the old JIT.  We have implemented support for MCJIT mostly to get AVX support. 
 The difference in module support is forcing us to duplicate a module when we want to JIT the same bitcode with different parameters.  We also have code that depends on the JITEventListener API.<o:p></o:p></span></p>
<p><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black"> <o:p></o:p></span></p>
<p><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black">Cheers.<o:p></o:p></span></p>
<div>
<div class="MsoNormal" align="center" style="text-align:center"><span style="color:black">
<hr size="2" width="100%" align="center">
</span></div>
<div id="divRpF160718">
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black">
<a href="mailto:llvmdev-bounces@cs.uiuc.edu">llvmdev-bounces@cs.uiuc.edu</a> [llvmdev-bounces@cs.uiuc.edu] on behalf of Kaylor, Andrew [andrew.kaylor@intel.com]<br>
<b>Sent:</b> Tuesday, February 05, 2013 10:08 AM<br>
<b>To:</b> Andrew Sorensen; <a href="mailto:llvmdev@cs.uiuc.edu">llvmdev@cs.uiuc.edu</a><br>
<b>Subject:</b> Re: [LLVMdev] MCJIT and Lazy Compilation</span><span style="color:black"><o:p></o:p></span></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Hi Andrew,</span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black"> <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I was about to write a belated reply to this message (sorry for the delay), but then I realized that pretty much everything useful that I have to say on the
 subject is contained in this message (which is in a thread Albert Graef already linked to):</span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black"> <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><a href="https://groups.google.com/d/msg/llvm-dev/Rk9cWdRX0Wg/Fa1Mn6cyS9UJ" target="_blank">https://groups.google.com/d/msg/llvm-dev/Rk9cWdRX0Wg/Fa1Mn6cyS9UJ</a></span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black"> <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Generally, I do hope that MCJIT will be capable of replacing the old JIT someday soon, though obviously it cannot do so until it provides equivalent functionality. 
 I doubt it will ever be a “drop-in” replacement, but I hope that minimal rework will be needed.  Most significantly, as can be seen in earlier discussions, things will need to be made Module-centric rather than Function-centric.  It ought to be possible to
 write a utility class that takes a monolithic Module and breaks it up into sub-Modules for individual functions, but I think that would need to happen outside of the MCJIT engine because not all clients would want that kind of granularity.</span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black"> <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">There’s definitely a lot of work to be done here to get this right, and hopefully we’ll get active participation in any design discussions to make sure the
 solution meets everyone’s needs.  I don’t have a time table for this right now.  I will file a Bugzilla report as soon as the LLVM server is ready.</span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black"> <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">-Andy</span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black"> <o:p></o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black">
<a href="mailto:llvmdev-bounces@cs.uiuc.edu">llvmdev-bounces@cs.uiuc.edu</a> [<a href="mailto:llvmdev-bounces@cs.uiuc.edu">mailto:llvmdev-bounces@cs.uiuc.edu</a>]
<b>On Behalf Of </b>Andrew Sorensen<br>
<b>Sent:</b> Thursday, January 31, 2013 7:56 PM<br>
<b>To:</b> <a href="mailto:llvmdev@cs.uiuc.edu">llvmdev@cs.uiuc.edu</a><br>
<b>Subject:</b> [LLVMdev] MCJIT and Lazy Compilation</span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black"> <o:p></o:p></span></p>
<div>
<div>
<div>
<p class="MsoNormal"><span style="color:black">Does anyone have a roadmap for MCJIT with what I think people are <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">calling lazy compilation.<o:p></o:p></span></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="color:black"> <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">Is this even on the cards?<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black"> <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">I spent the last few hours moving my project (<a href="http://extempore.moso.com.au" target="_blank">extempore.moso.com.au</a>) <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">over to MCJIT (particularly for ARM), and am a little horrified to discover <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">no ability to compile, and just as importantly to recompile, at a function level.  <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">This is absolutely mandatory for my project.  <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black"> <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">I have been looking enviously at MCJIT's ARM+DWARF support for a <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">couple of years and was under the misapprehension that MCJIT was <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">attempting to be a *drop-in* replacement for JIT.  So I wasn't overly<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">concerned about the primary JIT being largely neglected. This is obviously<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">my fault, I wasn't paying close enough attention.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black"> <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">I am now wondering what the LLVM project, in the large, plans regarding <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">just-in-time compilation moving forward.  Is MCJIT the future, and<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">if so what kind of roadmap is there to replicate current JIT functionality. <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">In my case in relation to function level (re)compilation.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black"> <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">I appreciate everyones efforts, and that we all have our own agendas.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">I'm just trying to put my own roadmap in place.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black"> <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">Cheers,<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">Andrew.<o:p></o:p></span></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>