<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    So (post morning-coffee) - I did some more digging.<br>
    <br>
    It seems that it will correctly bring over a function from <i><b>src</b></i>
    that is explicitly called in <i><b>dest</b></i>, but it won't bring
    over any functions that are called by a <i><b>src</b></i> function
    from another <i><b>src </b></i>function.<br>
    <p>I may have dug too deep in the rabbit hole when blaming lazily
      loaded modules for the fault - is it perhaps as simple as
      LinkOnlyNeeded does not work when importing a function that calls
      another function?<br>
    </p>
    <p>-Neil.<br>
    </p>
    <div class="moz-cite-prefix">On 21/04/16 10:18, Neil Henning via
      llvm-dev wrote:<br>
    </div>
    <blockquote cite="mid:57189AD7.1000903@duskborn.com" type="cite">
      <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
      Hey all,<br>
      <br>
      For LinkModules, <i><b>dest</b></i> is a fully materialized
      module, <i><b>src</b></i> is a lazily loaded module.<br>
      <br>
      From what I understood, getLinkedToGlobal() is finding the
      function in <i><b>src</b></i> that matches some function
      declaration in <i><b>dest</b></i>, and given that <i><b>src</b></i>
      is lazily loaded it could be un-materialized.<br>
      <br>
      The functions I need brought in from <i><b>src</b></i> into <i><b>dest</b></i>
      are always declarations in <i><b>dest</b></i>. The problem is
      that (for some reason) the combination of Linker::LinkOnlyNeeded
      and a function that is not materialized will not copy the function
      body from <i><b>src</b></i> into <i><b>dest</b></i>.<br>
      <br>
      Cheers,<br>
      -Neil.<br>
      <br>
      <div class="moz-cite-prefix">On 20/04/16 20:39, Teresa Johnson
        wrote:<br>
      </div>
      <blockquote
cite="mid:CAAe5K+U2gvv5Qnak0b_==Jp1x1fcNUuiJC_8ttVoko8viiOnMQ@mail.gmail.com"
        type="cite">
        <div dir="ltr"><br>
          <div class="gmail_extra"><br>
            <div class="gmail_quote">On Wed, Apr 20, 2016 at 12:28 PM,
              Rafael Espíndola <span dir="ltr"><<a
                  moz-do-not-send="true"
                  class="moz-txt-link-abbreviated"
                  href="mailto:rafael.espindola@gmail.com"><a class="moz-txt-link-abbreviated" href="mailto:rafael.espindola@gmail.com">rafael.espindola@gmail.com</a></a>></span>
              wrote:<br>
              <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 class="gmail-">
                        <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 style="word-wrap:break-word">
                            <div>
                              <div>
                                <div>
                                  <div><br>
                                  </div>
                                </div>
                              </div>
                              <div>I understood from his description
                                that he reversed the destination and
                                source so that destination is the user
                                code.</div>
                              <div>I assumed it was not lazy loaded, but
                                that would explain the question then :)</div>
                              <div><br>
                              </div>
                              <div>Neil: can you clarify? If Teresa is
                                right, why aren't you materializing the
                                destination module entirely?</div>
                              <span>
                                <div><br>
                                </div>
                              </span></div>
                          </div>
                        </blockquote>
                        <div><br>
                        </div>
                        <div><br>
                        </div>
                      </span>
                      <div>I don't think it has ever been tried to use a
                        lazy destination. Having said that, I don't
                        think isMaterializable should return true for a
                        declaration.</div>
                    </div>
                  </div>
                </div>
              </blockquote>
              <div><br>
              </div>
              <div>Looking at isMaterializable, I'm now a little
                confused about Neil's case - the materializable bit is
                set to true only when the MODULE_CODE_FUNCTION indicated
                that it was !isproto, which means it should have a
                definition in that module. So I agree with you that
                isMaterializable shouldn't be returning true when the
                symbol is only available as a declaration. <br>
              </div>
              <div><br>
              </div>
              <div>Neil - what case are you trying to handle here? If
                there is a materializable definition in the dest module,
                wouldn't you want to use that instead of linking one in
                from the source module?</div>
              <div><br>
              </div>
              <div>Teresa</div>
              <div><br>
              </div>
              <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 class="gmail-">
                        <div><br>
                        </div>
                        <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 style="word-wrap:break-word">
                            <div><span>
                                <div><br>
                                </div>
                              </span>
                              <div>Even materializing functions from the
                                source module on the fly isn't supported
                                right now, is it?</div>
                              <span><font color="#888888">
                                  <div><br>
                                  </div>
                                </font></span></div>
                          </div>
                        </blockquote>
                        <div> </div>
                      </span>
                      <div>It is.</div>
                      <div><br>
                      </div>
                      <div>Neil, the flag is linked to
                        llvm-link's -only-needed command line option. At
                        least for simple cases it seems to be working.
                        Given</div>
                      <div><br>
                      </div>
                      <div>
                        <div>declare void @g()</div>
                        <div>define void @f() {</div>
                        <div>  call void @g()</div>
                        <div>  ret void</div>
                        <div>}</div>
                      </div>
                      <div><br>
                      </div>
                      <div>and</div>
                      <div><br>
                      </div>
                      <div>
                        <div>define void @g() {</div>
                        <div>  ret void</div>
                        <div>}</div>
                        <div>define void @h() {</div>
                        <div>  ret void</div>
                        <div>}</div>
                      </div>
                      <div><br>
                      </div>
                      <div><br>
                      </div>
                      <div>linking with "llvm-link -only-needed test1.bc
                        test2.bc" will bring in g, but not h. Can you
                        write a testcase showing what you were expecting
                        it to do but it is not?</div>
                      <div><br>
                      </div>
                      <div>Cheers,</div>
                      <div>Rafael</div>
                      <div><br>
                      </div>
                    </div>
                  </div>
                </div>
              </blockquote>
            </div>
            <br>
            <br clear="all">
            <div><br>
            </div>
            -- <br>
            <div class="gmail_signature"><span
                style="font-family:times;font-size:medium">
                <table cellpadding="0" cellspacing="0">
                  <tbody>
                    <tr
                      style="color:rgb(85,85,85);font-family:sans-serif;font-size:small">
                      <td
style="border-top-style:solid;border-top-color:rgb(213,15,37);border-top-width:2px"
                        nowrap="nowrap">Teresa Johnson |</td>
                      <td
style="border-top-style:solid;border-top-color:rgb(51,105,232);border-top-width:2px"
                        nowrap="nowrap"> Software Engineer |</td>
                      <td
style="border-top-style:solid;border-top-color:rgb(0,153,57);border-top-width:2px"
                        nowrap="nowrap"> <a moz-do-not-send="true"
                          href="mailto:tejohnson@google.com">tejohnson@google.com</a> |</td>
                      <td
style="border-top-style:solid;border-top-color:rgb(238,178,17);border-top-width:2px"
                        nowrap="nowrap"> 408-460-2413</td>
                    </tr>
                  </tbody>
                </table>
              </span></div>
          </div>
        </div>
      </blockquote>
      <br>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>