<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;
      charset=windows-1252">
  </head>
  <body>
    <p>No direct involvement in this, but just want to comment that the
      evidence of serious interest and willingness to make widespread
      changes to comply with community wishes is good to see here. 
      Personally, that greatly increases my confidence that the
      integration will be a non issue long term, whatever the short term
      schedule ends up looking like.  </p>
    <p>Philip<br>
    </p>
    <div class="moz-cite-prefix">On 2/20/20 9:41 AM, Richard Barton via
      llvm-dev wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:AM6PR08MB4952E1946A90A21E6F85D76286130@AM6PR08MB4952.eurprd08.prod.outlook.com">
      <meta http-equiv="Content-Type" content="text/html;
        charset=windows-1252">
      <meta name="Generator" content="Microsoft Exchange Server">
      <!-- converted from rtf -->
      <style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
      <font size="2" face="Calibri"><span style="font-size:11pt;">
          <div>Hi llvm-dev</div>
          <div> </div>
          <div>It's been a few weeks since I last gave an update on F18
            and our progress on readying it for inclusion into the
            monorepo. Last time we discussed this the community
            challenged us to make the F18 source code look more like an
            LLVM project and to come up
            with a plan and schedule for completing this work (<a
              href="http://lists.llvm.org/pipermail/llvm-dev/2020-January/137989.html"
              moz-do-not-send="true"><font color="#0563C1"><u>http://lists.llvm.org/pipermail/llvm-dev/2020-January/137989.html</u></font></a>)</div>
          <div> </div>
          <div>The full list of changes that could be made to make F18
            more LLVM-like is very long. We're interested in identifying
            what the absolute dealbreakers are that block inclusion into
            the monorepo and which changes would be acceptable to make
            after inclusion
            to the monorepo. We've come up with strawman lists for each
            and would like to propose the following plan of action:</div>
          <ol
            style="margin:0;padding-left:27pt;list-style-type:decimal;">
            <font face="Calibri">
              <li>We have captured our strawman proposal for all the
                changes that need to happen to F18 to make it ready for
                inclusion into the monorepo on a github project board: <a
href="https://github.com/orgs/flang-compiler/projects/8"
                  moz-do-not-send="true"><font color="#0563C1"><u>https://github.com/orgs/flang-compiler/projects/8</u></font></a>
                (also repeated at the end of this mail.)</li>
            </font>
          </ol>
          <ol
            style="margin:0;padding-left:27pt;list-style-type:decimal;">
            <font face="Calibri">
              <li>We are working through this list and we believe that
                we can complete this work in time for a new upstreaming
                date of 16th March.</li>
              <li>We have captured further work that we plan to complete
                on F18 after merging to the monorepo <a
                  href="https://github.com/orgs/flang-compiler/projects/10"
                  moz-do-not-send="true"><font color="#0563C1"><u>https://github.com/orgs/flang-compiler/projects/10</u></font></a>
                (also repeated
                below)</li>
              <li>We believe that we can complete this work before the
                LLVM11 branching date in June.</li>
              <li>After this date, we'll keep improving the code as we
                go along and not on any specific timescale.</li>
            </font>
          </ol>
          <div> </div>
          <div>We'd really appreciate feedback on the two lists of
            changes, specifically: are these lists complete? Is everyone
            satisfied that with all the items on <a
              href="https://github.com/orgs/flang-compiler/projects/8"
              moz-do-not-send="true"><font color="#0563C1"><u>https://github.com/orgs/flang-compiler/projects/8</u></font></a>,
            we'd be happy to accept F18 into the monorepo? Are there any
            further changes that would need to be made to F18 for this
            to happen?</div>
          <div> </div>
          <div>Thanks</div>
          <div>Rich</div>
          <div> </div>
          <div>More info on the lists:</div>
          <div> </div>
          <div>Pre-merge list: <a
              href="https://github.com/orgs/flang-compiler/projects/8"
              moz-do-not-send="true"><font color="#0563C1"><u>https://github.com/orgs/flang-compiler/projects/8</u></font></a></div>
          <div> </div>
          <div>The status today is that many of the items on the
            pre-merge list are well underway or complete.</div>
          <div> </div>
          <ol
            style="margin:0;padding-left:27pt;list-style-type:decimal;">
            <font face="Calibri">
              <li>Integrate into the monorepo CMake</li>
            </font>
          </ol>
          <ol
            style="margin:0;padding-left:54pt;list-style-type:lower-alpha;">
            <font face="Calibri">
              <li>This will be as an optional project, and default to
                not building.</li>
              <li>This also adds Doxygen infrastructure so we can start
                to improve interface documentation and continue
                post-merge.</li>
            </font>
          </ol>
          <ol
            style="margin:0;padding-left:27pt;list-style-type:decimal;"
            start="2">
            <font face="Calibri">
              <li>F18 changes to make it more LLVM-like in code style</li>
            </font>
          </ol>
          <ol
            style="margin:0;padding-left:54pt;list-style-type:lower-alpha;"
            start="3">
            <font face="Calibri">
              <li>Rationalise headers to put public headers in /include
                and not /lib</li>
              <li>Examine F18's clang-format file and minimise
                deviations to the LLVM clang-format</li>
              <li>Rename all .cc files to .cpp</li>
              <li>Capitalize the module directory names in /lib and
                /include (e.g. /lib/Parser)</li>
            </font>
          </ol>
          <ol
            style="margin:0;padding-left:27pt;list-style-type:decimal;"
            start="3">
            <font face="Calibri">
              <li>Increase use of LLVM APIs and utilities in F18</li>
            </font>
          </ol>
          <ol
            style="margin:0;padding-left:54pt;list-style-type:lower-alpha;"
            start="7">
            <font face="Calibri">
              <li>Switch F18 custom File handling to LLVM's File
                handling (helps with non-POSIX platform support)</li>
              <li>Change uses of C++ standard stream IO library to
                LLVM's equivalent library</li>
              <li>Audit use of std::list and consider migrating to a
                suitable alternative in LLVM's API</li>
              <li>Use llvm_unreachable with an error message for
                unreachable cases</li>
            </font>
          </ol>
          <ol
            style="margin:0;padding-left:27pt;list-style-type:decimal;"
            start="4">
            <font face="Calibri">
              <li>Convert the regression test suite to using lit rather
                than ctest</li>
            </font>
          </ol>
          <ol
            style="margin:0;padding-left:54pt;list-style-type:lower-alpha;"
            start="11">
            <font face="Calibri">
              <li>Porting off the custom scripts to FileCheck will
                continue after this but we think it should not gate
                inclusion to the monorepo.</li>
            </font>
          </ol>
          <ol
            style="margin:0;padding-left:27pt;list-style-type:decimal;"
            start="5">
            <font face="Calibri">
              <li>Ensure that F18 builds with the same compilers as the
                rest of the monorepo</li>
            </font>
          </ol>
          <ol
            style="margin:0;padding-left:54pt;list-style-type:lower-alpha;"
            start="12">
            <font face="Calibri">
              <li>One caveat is that we can only support C++17 compilers</li>
              <li>We propose to defer Windows support until after we
                merge</li>
              <li>We will specifically also check with the latest LLVM
                10 rc</li>
            </font>
          </ol>
          <div style="padding-left:27pt;"> </div>
          <div>Post-merge list: <a
              href="https://github.com/orgs/flang-compiler/projects/10"
              moz-do-not-send="true"><font color="#0563C1"><u>https://github.com/orgs/flang-compiler/projects/10</u></font></a></div>
          <div> </div>
          <div>This is the work that will happen right away after
            merging to the monorepo</div>
          <div> </div>
          <ol
            style="margin:0;padding-left:27pt;list-style-type:decimal;">
            <font face="Calibri">
              <li>F18 changes to make it more LLVM-like in code style -
                We will perform a one-off exercise where we audit the
                code to find these instances and bring them in line.
                We'll look at:</li>
            </font>
          </ol>
          <ol
            style="margin:0;padding-left:54pt;list-style-type:lower-alpha;">
            <font face="Calibri">
              <li>Braces on all single-line if statements</li>
              <li>Uses of else-after-return.</li>
            </font>
          </ol>
          <ol
            style="margin:0;padding-left:27pt;list-style-type:decimal;"
            start="2">
            <font face="Calibri">
              <li>Increase use of LLVM APIs and utilities in F18 - We'll
                audit the uses of these datatypes and try to move to a
                suitable LLVM alternative</li>
            </font>
          </ol>
          <ol
            style="margin:0;padding-left:54pt;list-style-type:lower-alpha;"
            start="3">
            <font face="Calibri">
              <li>std::string/std::string_view</li>
              <li>std::vector</li>
              <li>std::set</li>
              <li>std::map</li>
            </font>
          </ol>
          <ol
            style="margin:0;padding-left:27pt;list-style-type:decimal;"
            start="3">
            <font face="Calibri">
              <li>Further work on porting the test suite to make it more
                LLVM-like</li>
            </font>
          </ol>
          <ol
            style="margin:0;padding-left:54pt;list-style-type:lower-alpha;"
            start="7">
            <font face="Calibri">
              <li>Port lit tests to FileCheck</li>
              <li>Port unit tests to gtest</li>
              <li>Implement equivalent to clang -verify and port tests
                to that</li>
            </font>
          </ol>
          <ol
            style="margin:0;padding-left:27pt;list-style-type:decimal;"
            start="4">
            <font face="Calibri">
              <li>Support Windows</li>
            </font>
          </ol>
          <ol
            style="margin:0;padding-left:54pt;list-style-type:lower-alpha;"
            start="10">
            <font face="Calibri">
              <li>Porting to LLVM file I/O is the main blocker -
                included in the post-merge worklist - but there will be
                more to do after this.</li>
              <li>Isuru Fernando is going to lead this effort</li>
            </font>
          </ol>
          <ol
            style="margin:0;padding-left:27pt;list-style-type:decimal;"
            start="5">
            <font face="Calibri">
              <li>Set up official builders</li>
            </font>
          </ol>
          <ol
            style="margin:0;padding-left:54pt;list-style-type:lower-alpha;"
            start="12">
            <font face="Calibri">
              <li>Arm will handle bots for AArch64</li>
              <li>Nvidia will handle X86</li>
              <li>Tarique Islam at IBM will set up a builder for Power:
                <a
href="http://lists.llvm.org/pipermail/flang-dev/2020-February/000232.html"
                  moz-do-not-send="true"><font color="#0563C1"><u>http://lists.llvm.org/pipermail/flang-dev/2020-February/000232.html</u></font></a></li>
              <li>Any further help from community bot maintainers to
                cover all the platforms and compilers would be greatly
                appreciated.</li>
            </font>
          </ol>
          <div style="padding-left:54pt;"> </div>
          <div>One specific ask in the last round of feedback was on
            sharing lib/common/Although we see the benefit of doing this
            exercise, we feel it is a bit too early to start. One design
            principle we wish to stick to is for the Fortran runtime and
            compiler align
            on their implementations. For the specific example of <a
href="https://github.com/flang-compiler/f18/blob/master/include/flang/common/bit-population-count.h"
              moz-do-not-send="true"><font color="#0563C1"><u>https://github.com/flang-compiler/f18/blob/master/include/flang/common/bit-population-count.h</u></font></a>
            we'd want the compiler and runtime POPCNT intrinsic to align
            on implementation. The F18 runtime is still a work in
            progress. We need to decide on how or if this could share
            code with LLVM libraries and then we can revisit the
            implementations in include/flang/common.</div>
          <div> </div>
          <div>Future work</div>
          <div>After all the above is done, we will continue to bring
            the code more in line with LLVM style and API usage by
            fixing things as we find them during development and enforce
            the new style through code review. A few specific areas that
            have been mentioned
            before that we will tackle in this way are:  </div>
          <ol
            style="margin:0;padding-left:27pt;list-style-type:decimal;">
            <font face="Calibri">
              <li>Add Doxygen style comments to interfaces</li>
              <li>Classes, files, names, etc. where a more LLVM-standard
                naming can be used. </li>
              <li>Refactor code to use early exits when suitable</li>
              <li>Audit functions in include/flang/common and port to
                LLVM equivalents (e.g. builtin_popcount)</li>
            </font>
          </ol>
          <div><font face="Times New Roman"> </font></div>
          <div><font face="Times New Roman"> </font></div>
        </span></font>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-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="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
    </blockquote>
  </body>
</html>