[LLVMdev] Drop the machine code while executing

Sri emdcdeveloper at gmail.com
Sat Apr 26 09:47:00 PDT 2014


Hi Fillip
                  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.

Thanks

Regards
Sri.
On 04/26/2014 12:15 PM, Sri wrote:
> Hi Filip
>            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  -
>            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.
>
> Thanks
>
> With regards
> Sri.
> On 04/26/2014 05:39 AM, Filip Pizlo wrote:
>> 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.
>>
>> You can't safely drop a function's code if you have other functions 
>> in that module.
>>
>> 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.
>>
>> 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).
>>
>> Long story short, there is no shrink-wrapped solution but it's doable 
>> if you're willing to get dirty.
>>
>> -Fil
>>
>> On Apr 25, 2014, at 3:44 PM, Sri <emdcdeveloper at gmail.com 
>> <mailto:emdcdeveloper at gmail.com>> wrote:
>>
>>> Hi
>>>         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 *void test(int)* 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.
>>>
>>> Thanks.
>>>
>>> With regards
>>> Sri.
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> LLVMdev at cs.uiuc.edu <mailto: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/20140426/999a9837/attachment.html>


More information about the llvm-dev mailing list