[LLVMdev] Drop the machine code while executing

Sri emdcdeveloper at gmail.com
Sun Apr 27 10:39:24 PDT 2014


Hi Phil
           Thank you for your clarification, Actually I compiled VMKit 
3.2 with llvm 3.2 and  trying do /*recompileAndRelinkFunction*/() .  
Could you please verity the following things to me.  For instance , code 
need to be executed as follows
*/main()/**/{/**/
/**/                                 test()/**/;/**/
/**/                                differentTest();/**/
/**/                                 test();/**/
/**/                        }/*
    as soon as I executed the first *test*() function , I modified the 
llvm IR ( modified some instruction) of test , then when I execute 
differentTest(),  I used /recompileAndRelinkFunction/() 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 
*test*() function but unfortunately it execute the previous test() 
function not modified one.  How can I use this 
/*recompileAndRelinkFunction() to modify the native code during the 
execution.

Thanks .

With regards
Sri.
*/
On 04/26/2014 06:19 PM, Filip Pizlo wrote:
> 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.
>
> -Phil
>
>
> On April 26, 2014 at 9:47:05 AM, Sri (emdcdeveloper at gmail.com 
> <mailto:emdcdeveloper at gmail.com>) wrote:
>
>> 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/20140427/5a7c5f87/attachment.html>


More information about the llvm-dev mailing list