<p dir="ltr">Hi Sri,</p>
<p dir="ltr">If main is compiled before the call to recompile, it will call test with a direct call. After the update of the test function, the second call site is not updated. To call the new test, you can either call test with an indirect call, recompile also main, or use a patchpoint to update the second call. The last solution is probably the best one.</p>
<p dir="ltr">Gaël </p>
<div class="gmail_quote">Le 27 avr. 2014 20:01, "Sri" <<a href="mailto:emdcdeveloper@gmail.com">emdcdeveloper@gmail.com</a>> a écrit :<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
Hi Phil<br>
Thank you for your clarification, Actually I compiled
VMKit 3.2 with llvm 3.2 and trying do <i><b>recompileAndRelinkFunction</b></i>()
. Could you please verity the following things to me. For instance
, code need to be executed as follows <br>
<b><i> main()</i></b><b><i>{</i></b><b><i><br>
</i></b><b><i> test()</i></b><b><i>;</i></b><b><i><br>
</i></b><b><i> differentTest();</i></b><b><i><br>
</i></b><b><i> test();</i></b><b><i><br>
</i></b><b><i> }</i></b><br>
as soon as I executed the first <b>test</b>() function , I
modified the llvm IR ( modified some instruction) of test , then
when I execute differentTest(), I used <i>recompileAndRelinkFunction</i>()
to link the modified test() before I execute the last test()
function. Actually , I was expecting the different result when I was
executing the last <b>test</b>() function but unfortunately it
execute the previous test() function not modified one. How can I
use this <i><b>recompileAndRelinkFunction() to modify the native
code during the execution. <br>
<br>
Thanks .<br>
<br>
With regards <br>
Sri.<br>
</b></i> <br>
<div>On 04/26/2014 06:19 PM, Filip Pizlo
wrote:<br>
</div>
<blockquote type="cite">
<div style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto">That's a good
point. But it's worth noting that recompileAndRelinkFunction()
and freeMachineCodeForFunction() are both vestiges of the old
JIT (i.e. the "JIT" as opposed to the "MCJIT"). The old JIT is
no longer actively supported.</div>
<div style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto"><br>
</div>
<div>
<div style="font-family:helvetica,arial;font-size:13px">-Phil</div>
<div style="font-family:helvetica,arial;font-size:13px"><br>
</div>
</div>
<br>
<p style>On April 26, 2014 at 9:47:05 AM, Sri (<a href="mailto:emdcdeveloper@gmail.com" target="_blank">emdcdeveloper@gmail.com</a>)
wrote:</p>
<blockquote type="cite"><span>
<div bgcolor="#FFFFFF" text="#000000">
<div>
Hi Fillip<br>
Addition to my previous mail, llvm has
recompileAndRelinkFunction
function , so, once we modified the llvm function, and
pass
IR to recompileAndRelinkFunction , I hope it should be
compiled and
linked with previous one.<br>
<br>
Thanks<br>
<br>
Regards<br>
Sri.<br>
<div>On 04/26/2014 12:15 PM, Sri
wrote:<br>
</div>
<blockquote type="cite">Hi
Filip<br>
Thank
you for your detailed explanation, I was actually
looking to
implement an adaptive approach which is basically when
some
function executed more frequently, I was trying to drop
that
function and compiled and linked with new optimized
function.
I just did the following -<br>
whenever some function executed more times , I
called-back to
program, so I that I could be able to call
freeMachineCodeForFunction (F) then I compiled that more
frequent
function with some kind of optimization. But , still I
am getting
previous function signature and not newest one. Could
you please
explain , why we can not use this
freeMachineCodeForFunction for
this purpose. If not, how we can hook some instruction
in emitted
machine code that will call back to our code in llvm.<br>
<br>
Thanks<br>
<br>
With regards<br>
Sri.<br>
<div>On 04/26/2014 05:39 AM,
Filip Pizlo
wrote:<br>
</div>
<blockquote type="cite">
<div>This isn't currently supported directly. It
depends on what
you're doing, which JIT you're using, how you use
modules, and to
what extent you're relying on LLVM to do linking for
you. </div>
<div><br>
</div>
<div>You can't safely drop a function's code if you
have other
functions in that module. </div>
<div><br>
</div>
<div>You can't safely drop a module if there are other
modules that
have calls that you've already resolved to functions
in the module
you're dropping unless you have your own mechanism
for unlinking
those calls. </div>
<div><br>
</div>
<div>The MCJIT currently does support dropping the
memory for a
module, but it involves destroying the MCJIT
execution engine
object. This works best if you use your own JIT
memory manager and
you steal the executable memory from the MCJIT, and
delete the
MCJIT after code is generated. Then your own memory
manager can
manage the memory however you like. This depends on
not having LLVM
call instructions resolve to any of the functions
you would be
dropping. WebKit is an example of a system that does
this. Each
function gets it's own module and all LLVM data
structures are
dropped once the code is compiled. Call instructions
are only used
for intrinsics and for runtime calls; source level
calls are
implemented as patchpoints and WebKit does all of
the linking (and
unlinking). </div>
<div><br>
</div>
<div>Long story short, there is no shrink-wrapped
solution but it's
doable if you're willing to get dirty. <br>
<br>
-Fil</div>
<div><br>
On Apr 25, 2014, at 3:44 PM, Sri <<a href="mailto:emdcdeveloper@gmail.com" target="_blank">emdcdeveloper@gmail.com</a>>
wrote:<br>
<br>
</div>
<blockquote type="cite">
<div>Hi<br>
Currently , I have doing
some experimental work by using llvm, Is it
possible to drop the
machine code once it has been generated for
particular function
while program executing. For example some <b>void
test(int)</b>
function has been executed on native machine , I
want to drop the
code before I start execute some other function
in my long
running program.<br>
<br>
Thanks.<br>
<br>
With regards<br>
Sri.<br>
<div>
</div>
</div>
</blockquote>
<blockquote type="cite">
<div>
<span>_______________________________________________</span><br>
<span>LLVM Developers mailing list</span><br>
<span><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></span><br>
<span><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a></span><br>
</div>
</blockquote>
</blockquote>
<br>
<div>
</div>
</blockquote>
<br>
</div>
</div>
</span></blockquote>
</blockquote>
<br>
<div>
<div title="Click to translate"></div>
</div>
</div>
<br>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu">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></blockquote></div>