<div dir="ltr"><div><span style="font-size:13px"><br></span></div><span style="font-size:13px">> p.s. I don't think we know what the "right" interface is for the JIT yet.</span><br><div><br></div><div>Orc was actually motivated in part by this. Having compassable components makes it much easier for clients to experiment with different JIT API designs, as well as new features. Hopefully any helpful lessons learned can be fed back into the tree.</div><div><br></div><div>Again - keeping the existing MCJIT API is a fundamental requirement for the foreseeable future*.</div><div><br></div><div>- Lang.</div><div><br></div><div>* The caveat, which I mentioned in a previous message, is that I'm happy to discuss replacing the *implementation* of MCJIT with MCJITReplacement if/when clients are satisfied that the latter provides full feature and performance parity and compatible behavior. Such a discussion is premature though.</div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 14, 2015 at 2:46 PM, Philip Reames <span dir="ltr"><<a href="mailto:listmail@philipreames.com" target="_blank">listmail@philipreames.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000"><span class="">
    <br>
    <div>On 01/14/2015 02:33 PM, David Blaikie
      wrote:<br>
    </div>
    <blockquote type="cite">
      <div dir="ltr"><br>
        <div class="gmail_extra"><br>
          <div class="gmail_quote">On Wed, Jan 14, 2015 at 2:22 PM, Lang
            Hames <span dir="ltr"><<a href="mailto:lhames@gmail.com" target="_blank">lhames@gmail.com</a>></span>
            wrote:<br>
            <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div dir="ltr">Hi Dave,
                <div><br>
                  <div class="gmail_extra">
                    <div class="gmail_quote"><span>
                        <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
                          <div dir="ltr">
                            <div class="gmail_extra">
                              <div class="gmail_quote"><span>
                                  <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
                                    <div dir="ltr">
                                      <div>
                                        <div class="gmail_extra">
                                          <div class="gmail_quote">
                                            <div>To confirm - I have no
                                              plans to remove MCJIT. I
                                              don't want to change any
                                              behavior for existing
                                              clients. The new stuff is
                                              opt-in.</div>
                                          </div>
                                        </div>
                                      </div>
                                    </div>
                                  </blockquote>
                                </span>
                                <div><br>
                                  Why not? We did work to remove the
                                  legacy JIT in favor of MCJIT for the
                                  usual reasons (less code/maintenance
                                  burden/etc) - it'd seem unfortunate to
                                  then go back to maintaining two JITs
                                  again.<br>
                                  <br>
                                  You mention the intent to provide a
                                  superset of MCJIT's behavior, at which
                                  point it seems it'd be preferable to
                                  kill of MCJIT in favor of ORC (heck,
                                  we killed of the legacy JIT before
                                  MCJIT had feature parity).<br>
                                   </div>
                              </div>
                            </div>
                          </div>
                        </blockquote>
                        <div><br>
                        </div>
                      </span>
                      <div>Not having plans at the moment doesn't
                        preclude making plans in the future, it's just
                        premature to think about replacing MCJIT when
                        the "replacement" hasn't even been submitted to
                        llvm-commits yet. :)</div>
                    </div>
                  </div>
                </div>
              </div>
            </blockquote>
            <div><br>
              Not necessarily - it doesn't seem unreasonable to make a
              plan to ensure we don't end up with duplicate
              functionality to debug/test/fix indefinitely before adding
              the duplicate. Seems to be common in the project to make
              replacements, introduce them as an alternative but with an
              explicit goal/plan from the start that this is not a
              perpetual state. (for example, Chandler's pass manager
              work and I think most of the bits that Chandler's
              rewritten (shuffling, inlining, etc) were this way - maybe
              there are counterexamples where similar/duplicate
              functionality was introduced without such a goal, but none
              come to my mind)<br>
              <br>
              But I dunno, maybe other people find that to be an OK
              state of affairs, I'm not a code owner/authority in
              much/any of this.<br>
            </div>
          </div>
        </div>
      </div>
    </blockquote></span>
    As a user of the JIT, I am *very* strongly in favour of Lang's
    espoused position.  <br>
    <br>
    p.s. I don't think we know what the "right" interface is for the JIT
    yet.  Until we do, having multiple interfaces (with a single shared
    implementation, based on the rest of LLVM) seems entirely reasonable
    and appropriate.  <br>
    <br>
    p.p.s. If Lang was proposing the replacement of MCJIT - he's not! -
    the review barrier would be far far higher.  He'd have to satisfy
    all existing - well, all vocal - users of the old interface that his
    new one met their needs.  This would be a much slower process and we
    want to let things evolve more quickly than that.  We *don't* want
    to be looking at an old-JIT retirement v2.  That took literally
    years and blocked a lot of useful work on the JIT infrastructure.  <br><span class="">
    <br>
    <blockquote type="cite">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">
            <div><br>
              - David<br>
               </div>
            <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div dir="ltr">
                <div class="gmail_extra">
                  <div class="gmail_quote">
                    <div>The bar for transitioning is higher now, since
                      MCJIT has more substantial clients than the legacy
                      JIT had. The impetus for transitioning is also
                      lower: The legacy JIT required a lot of custom
                      infrastructure to be kept around. MCJIT is much
                      more lightweight, and shares most of its
                      foundation (RuntimeDyld) with Orc.<br>
                    </div>
                    <div><br>
                    </div>
                    <div>
                      <div>If MCJITReplacement reaches full feature and
                        performance parity with MCJIT (which I do
                        actually want to see), and the transition can be
                        done either transparently (by having
                        ExecutionEngineBuilder return an
                        MCJITReplacement instead of an MCJIT), or in a
                        manual way that all clients are happy to buy
                        into, then I'd be ok with deprecating and
                        eventually removing MCJIT. That's a discussion
                        for the future though.</div>
                    </div>
                    <div><br>
                    </div>
                    <div>So clients should rest easy: We just went
                      through a difficult transition from the legacy
                      JIT, and I don't want to put you through that
                      again any time soon.</div>
                    <span><font color="#888888">
                        <div><br>
                        </div>
                        <div>- Lang.</div>
                      </font></span></div>
                </div>
              </div>
            </blockquote>
          </div>
          <br>
        </div>
      </div>
    </blockquote>
    <br>
  </span></div>

</blockquote></div><br></div></div>