<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <br>
    <div class="moz-cite-prefix">On 7/17/13 4:53 PM, Nick Kledzik wrote:<br>
    </div>
    <blockquote
      cite="mid:9B50D605-1391-49A6-A888-532D4DAF592D@apple.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html;
        charset=windows-1252">
      <br>
      <div>
        <div>On Jul 17, 2013, at 4:29 PM, Shuxin Yang <<a
            moz-do-not-send="true" href="mailto:shuxin.llvm@gmail.com">shuxin.llvm@gmail.com</a>>
          wrote:</div>
        <br>
        <blockquote type="cite">
          <div class="moz-cite-prefix" style="font-family: Helvetica;
            font-size: 12px; font-style: normal; font-variant: normal;
            font-weight: normal; letter-spacing: normal; line-height:
            normal; orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">On
            7/17/13 4:12 PM, Nick Kledzik wrote:<br>
          </div>
          <blockquote
            cite="mid:DB2C45E0-90D3-4C23-9D60-68C94375A52F@apple.com"
            type="cite" style="font-family: Helvetica; font-size: 12px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">On Jul
            14, 2013, at 7:07 PM, Andrew Trick <<a
              moz-do-not-send="true" href="mailto:atrick@apple.com">atrick@apple.com</a>>
            wrote:<br>
            <div>
              <blockquote type="cite">
                <div style="font-family: Helvetica; font-size: 12px;
                  font-style: normal; font-variant: normal; font-weight:
                  normal; letter-spacing: normal; line-height: normal;
                  orphans: auto; text-align: start; text-indent: 0px;
                  text-transform: none; white-space: normal; widows:
                  auto; word-spacing: 0px; -webkit-text-stroke-width:
                  0px;">The partitioning should be deterministic. It’s
                  just that the linker output now depends on the
                  partitioning heuristics. As long that decision is
                  based on the input (not the host system), then it
                  still meets Eric’s requirements. I just think it’s
                  unfortunate that post-IPO partitioning (or more
                  generally, parallel codegen) affects the output, but
                  may be hard to avoid. It would be nice to be able to
                  tune the partitioning for compile time without
                  worrying about code quality.</div>
              </blockquote>
              <div dir="auto">I also want to chime in on the importance
                of stable binary outputs.  And not just same compiler
                and same sources produces same binary, but that minor
                changes to either should cause minor changes to the
                output binary.   For software updates, Apple updater
                tries to download only the delta to the binaries, so we
                want those to be as small as possible.  In addition, it
                often happens late in an OS release cycle that some
                critical bug is found and the fix is in the compiler.
                 To qualify it, we rebuild the whole OS with the new
                compiler, then compare all the binaries in the OS,
                making sure only things related to the bug are changed.
                 </div>
              <div dir="auto"><br>
              </div>
            </div>
          </blockquote>
          <span style="font-family: Helvetica; font-size: 12px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;
            background-color: rgb(255, 255, 255); float: none; display:
            inline !important;">We can view partitioning as a
            "transformation".  Unless the transformation is absolutely
            no-op,<span class="Apple-converted-space"> </span></span><br
            style="font-family: Helvetica; font-size: 12px; font-style:
            normal; font-variant: normal; font-weight: normal;
            letter-spacing: normal; line-height: normal; orphans: auto;
            text-align: start; text-indent: 0px; text-transform: none;
            white-space: normal; widows: auto; word-spacing: 0px;
            -webkit-text-stroke-width: 0px;">
          <span style="font-family: Helvetica; font-size: 12px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;
            background-color: rgb(255, 255, 255); float: none; display:
            inline !important;">it will change something.   If we care
            the consistency in binaries, we either consistently use
            partition<span class="Apple-converted-space"> </span></span><br
            style="font-family: Helvetica; font-size: 12px; font-style:
            normal; font-variant: normal; font-weight: normal;
            letter-spacing: normal; line-height: normal; orphans: auto;
            text-align: start; text-indent: 0px; text-transform: none;
            white-space: normal; widows: auto; word-spacing: 0px;
            -webkit-text-stroke-width: 0px;">
          <span style="font-family: Helvetica; font-size: 12px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;
            background-color: rgb(255, 255, 255); float: none; display:
            inline !important;">or consistently not use partition.<span
              class="Apple-converted-space"> </span></span><br
            style="font-family: Helvetica; font-size: 12px; font-style:
            normal; font-variant: normal; font-weight: normal;
            letter-spacing: normal; line-height: normal; orphans: auto;
            text-align: start; text-indent: 0px; text-transform: none;
            white-space: normal; widows: auto; word-spacing: 0px;
            -webkit-text-stroke-width: 0px;">
        </blockquote>
        <div dir="auto">But doesn’t "<span style="background-color:
            rgb(255, 255, 255);">consistently not use partition”
            mean “don’t use the optimization you are working on”? </span></div>
      </div>
    </blockquote>
    Yes<br>
    <br>
    <blockquote
      cite="mid:9B50D605-1391-49A6-A888-532D4DAF592D@apple.com"
      type="cite">
      <div>
        <div dir="auto"><span style="background-color: rgb(255, 255,
            255);">  Isn’t there someone to get the same output no
            matter how it is partitioned?  <br>
          </span></div>
      </div>
    </blockquote>
    No.  Just like "cc --without-inline" and "cc --with-inline" yields
    diff binaries. <br>
    <br>
    <br>
    <blockquote
      cite="mid:9B50D605-1391-49A6-A888-532D4DAF592D@apple.com"
      type="cite">
      <div>
        <div dir="auto"><br>
        </div>
        <br>
        <blockquote type="cite"><br style="font-family: Helvetica;
            font-size: 12px; font-style: normal; font-variant: normal;
            font-weight: normal; letter-spacing: normal; line-height:
            normal; orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">
          <blockquote
            cite="mid:DB2C45E0-90D3-4C23-9D60-68C94375A52F@apple.com"
            type="cite" style="font-family: Helvetica; font-size: 12px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">
            <div><br>
            </div>
            <div>
              <blockquote type="cite"> The compiler used to generate a
                single object file from the merged<br>
                IR, now it will generate multiple of them, one for each
                partition.<br>
              </blockquote>
            </div>
            <div>I have not studied the MC interface, but why does each
              partition need to generate a separate object file?  Why
              can’t the first partition done create an object file, and
              as other partitions finish, they just append to that
              object file?</div>
          </blockquote>
          <br style="font-family: Helvetica; font-size: 12px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">
          <span style="font-family: Helvetica; font-size: 12px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;
            background-color: rgb(255, 255, 255); float: none; display:
            inline !important;">We could append the object files as an
            alternative.<span class="Apple-converted-space"> </span></span><br
            style="font-family: Helvetica; font-size: 12px; font-style:
            normal; font-variant: normal; font-weight: normal;
            letter-spacing: normal; line-height: normal; orphans: auto;
            text-align: start; text-indent: 0px; text-transform: none;
            white-space: normal; widows: auto; word-spacing: 0px;
            -webkit-text-stroke-width: 0px;">
          <span style="font-family: Helvetica; font-size: 12px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;
            background-color: rgb(255, 255, 255); float: none; display:
            inline !important;">However, how do we know the /path/to/ld
            from the existing interface ABIs?<span
              class="Apple-converted-space"> </span></span><br
            style="font-family: Helvetica; font-size: 12px; font-style:
            normal; font-variant: normal; font-weight: normal;
            letter-spacing: normal; line-height: normal; orphans: auto;
            text-align: start; text-indent: 0px; text-transform: none;
            white-space: normal; widows: auto; word-spacing: 0px;
            -webkit-text-stroke-width: 0px;">
          <span style="font-family: Helvetica; font-size: 12px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;
            background-color: rgb(255, 255, 255); float: none; display:
            inline !important;">How do we know the flags feed to the ld
            (more often than not, "-r" alone is enough, <span
              class="Apple-converted-space"> </span></span><br
            style="font-family: Helvetica; font-size: 12px; font-style:
            normal; font-variant: normal; font-weight: normal;
            letter-spacing: normal; line-height: normal; orphans: auto;
            text-align: start; text-indent: 0px; text-transform: none;
            white-space: normal; widows: auto; word-spacing: 0px;
            -webkit-text-stroke-width: 0px;">
          <span style="font-family: Helvetica; font-size: 12px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;
            background-color: rgb(255, 255, 255); float: none; display:
            inline !important;">but some linkers may need more).</span><br
            style="font-family: Helvetica; font-size: 12px; font-style:
            normal; font-variant: normal; font-weight: normal;
            letter-spacing: normal; line-height: normal; orphans: auto;
            text-align: start; text-indent: 0px; text-transform: none;
            white-space: normal; widows: auto; word-spacing: 0px;
            -webkit-text-stroke-width: 0px;">
          <br style="font-family: Helvetica; font-size: 12px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">
          <span style="font-family: Helvetica; font-size: 12px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;
            background-color: rgb(255, 255, 255); float: none; display:
            inline !important;">In my rudimentary implement, I hack by
            hardcoding to /usr/bin/ld.</span><br style="font-family:
            Helvetica; font-size: 12px; font-style: normal;
            font-variant: normal; font-weight: normal; letter-spacing:
            normal; line-height: normal; orphans: auto; text-align:
            start; text-indent: 0px; text-transform: none; white-space:
            normal; widows: auto; word-spacing: 0px;
            -webkit-text-stroke-width: 0px;">
          <br style="font-family: Helvetica; font-size: 12px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">
          <span style="font-family: Helvetica; font-size: 12px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;
            background-color: rgb(255, 255, 255); float: none; display:
            inline !important;">I think adding object one by one back to
            the linker is better as the linker already have<span
              class="Apple-converted-space"> </span></span><br
            style="font-family: Helvetica; font-size: 12px; font-style:
            normal; font-variant: normal; font-weight: normal;
            letter-spacing: normal; line-height: normal; orphans: auto;
            text-align: start; text-indent: 0px; text-transform: none;
            white-space: normal; widows: auto; word-spacing: 0px;
            -webkit-text-stroke-width: 0px;">
          <span style="font-family: Helvetica; font-size: 12px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;
            background-color: rgb(255, 255, 255); float: none; display:
            inline !important;">enough information.<span
              class="Apple-converted-space"> </span></span><br
            style="font-family: Helvetica; font-size: 12px; font-style:
            normal; font-variant: normal; font-weight: normal;
            letter-spacing: normal; line-height: normal; orphans: auto;
            text-align: start; text-indent: 0px; text-transform: none;
            white-space: normal; widows: auto; word-spacing: 0px;
            -webkit-text-stroke-width: 0px;">
        </blockquote>
        I think you missed my point, or you are really thinking from the
        multi-process point of view.   In LLVM there is an MCWriter used
        to produce object files.   Your model is that if there are three
        partitions, then there will be three MCWriter objects, each
        producing an object file.  What I am saying is to have only one
        MCWriter object and have all three partitions stream their
        content out through the one MCWriter, producing one object file.</div>
      <div><br>
      </div>
    </blockquote>
    No, I don't want to sync all threads at this point. It make things
    all the more complex. <br>
  </body>
</html>