<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
    <link href="chrome://translator/skin/floatingPanel.css"
      type="text/css" rel="stylesheet">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    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 class="moz-cite-prefix">On 04/26/2014 05:39 AM, Filip Pizlo
      wrote:<br>
    </div>
    <blockquote
      cite="mid:8BB89150-85B9-4A8E-A291-76F886C590FD@apple.com"
      type="cite">
      <meta http-equiv="content-type" content="text/html;
        charset=ISO-8859-1">
      <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">emdcdeveloper@gmail.com</a>>
        wrote:<br>
        <br>
      </div>
      <blockquote type="cite">
        <div>
          <meta http-equiv="content-type" content="text/html;
            charset=ISO-8859-1">
          <link href="chrome://translator/skin/floatingPanel.css"
            type="text/css" rel="stylesheet">
          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 style="bottom: auto; left: 824px; right: auto; top: 57px;
            display: none;" class="translator-theme-default"
            id="translator-floating-panel"> </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">LLVMdev@cs.uiuc.edu</a>
                    <a moz-do-not-send="true"
              href="http://llvm.cs.uiuc.edu">http://llvm.cs.uiuc.edu</a></span><br>
          <span><a moz-do-not-send="true"
              href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a></span><br>
        </div>
      </blockquote>
    </blockquote>
    <br>
    <div style="bottom: auto; left: 687px; right: auto; top: 68px;
      display: none;" class="translator-theme-default"
      id="translator-floating-panel">
      <div title="Click to translate"
        id="translator-floating-panel-button"></div>
    </div>
  </body>
</html>