<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hi Gael<br>
                  Thanks for your guidance . I will try patchpoint
    method to solve this issue . <br>
    <br>
    Thanks <br>
    <br>
    With regards <br>
    Sri.<br>
    <div class="moz-cite-prefix">On 04/27/2014 07:15 PM, Gaël Thomas
      wrote:<br>
    </div>
    <blockquote
cite="mid:CAOWuPDcSiqpr0VHiKPqLWEB_NBGF-He69UBUzi4aWcevTKyHFg@mail.gmail.com"
      type="cite">
      <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
          moz-do-not-send="true" 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
                  moz-do-not-send="true"
                  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
                              moz-do-not-send="true"
                              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 moz-do-not-send="true"
                                  href="mailto:LLVMdev@cs.uiuc.edu"
                                  target="_blank">LLVMdev@cs.uiuc.edu</a>
                                        <a moz-do-not-send="true"
                                  href="http://llvm.cs.uiuc.edu"
                                  target="_blank">http://llvm.cs.uiuc.edu</a></span><br>
                              <span><a moz-do-not-send="true"
                                  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>
          </div>
          <br>
          _______________________________________________<br>
          LLVM Developers mailing list<br>
          <a moz-do-not-send="true" href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>
                  <a moz-do-not-send="true"
            href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
          <a moz-do-not-send="true"
            href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev"
            target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
          <br>
        </blockquote>
      </div>
    </blockquote>
    <br>
  </body>
</html>