<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    <div class="moz-cite-prefix">On 9/11/20 1:04 PM, James Y Knight
      wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:CAA2zVHree=9pw+A9ntqcpDuTk4oPUH3q2w9_i8GHpCnp0Mrm1w@mail.gmail.com">
      
      <div dir="ltr">
        <div dir="ltr">
          <div>On Fri, Sep 11, 2020 at 12:42 PM Atmn Patel <<a href="mailto:atmndp@gmail.com" target="_blank" moz-do-not-send="true">atmndp@gmail.com</a>> wrote:<br>
          </div>
        </div>
        <div class="gmail_quote">
          <blockquote class="gmail_quote" style="margin:0px 0px 0px
            0.8ex;border-left:1px solid
            rgb(204,204,204);padding-left:1ex">Hi Hal,<br>
            <br>
            On Thu, Sep 10, 2020 at 8:54 PM Hal Finkel <<a href="mailto:hfinkel@anl.gov" target="_blank" moz-do-not-send="true">hfinkel@anl.gov</a>> wrote:<br>
            ><br>
            > Hi, Atmn,<br>
            ><br>
            > Has anyone else expressed an opinion regarding the
            naming? We need to<br>
            > clarify the semantics in C, it seems.<br>
            <br>
            No other names have come in yet, in total the names proposed
            so far (I<br>
            think) are:<br>
            - maynotprogress<br>
            - maybenoprogress<br>
            - might_not_progress<br>
            - nfpg<br>
            - no_fpg<br>
            and the loop metadata has been pretty firmly established as<br>
            llvm.loop.mustprogress. IMHO, I've warmed up to no_fpg (or
            even nfpg<br>
            in a pinch if we want to save 33% of space and lose some
            readability)<br>
            since we've made substantial progress in clarifying the
            exact<br>
            definitions of progress in this context and I think it's a
            good idea<br>
            to bake it into the attribute name.</blockquote>
          <div><br>
          </div>
          <div>I'd actually like to suggest that we invert the default
            for functions. Rather than adding a "maynotprogress"
            function attribute, instead add a "mustprogress" function
            attribute, which Clang will emit on every function compiled
            in C++ mode. For two reasons:</div>
          <div>1. Having both the attribute and the loop metadata be the
            same way around makes it simpler to think about (rather than
            one being positive, and the other being negated).</div>
          <div>2. Given that the global progress-requirement seems to be
            pretty much C++-specific, having this behavior be off by
            default, and opted into by C++ frontends makes sense.</div>
          <div>3. Bonus: it makes choosing an attribute name easier:
            mustprogress, done.</div>
        </div>
      </div>
    </blockquote>
    <p><br>
    </p>
    <p>I support this suggestion.<br>
    </p>
    <p> -Hal<br>
    </p>
    <p><br>
    </p>
    <blockquote type="cite" cite="mid:CAA2zVHree=9pw+A9ntqcpDuTk4oPUH3q2w9_i8GHpCnp0Mrm1w@mail.gmail.com">
      <div dir="ltr">
        <div class="gmail_quote">
          <div><br>
          </div>
          <blockquote class="gmail_quote" style="margin:0px 0px 0px
            0.8ex;border-left:1px solid
            rgb(204,204,204);padding-left:1ex">I've also modified the
            clang patch [0] to only apply either of the</blockquote>
          <blockquote class="gmail_quote" style="margin:0px 0px 0px
            0.8ex;border-left:1px solid
            rgb(204,204,204);padding-left:1ex">
            attributes for C functions when compiled with C11 or later
            so we can<br>
            tightly adhere to both the C and C++ standards, and the
            other changes<br>
            that need to be made will be forthcoming. Thanks again to
            James, that<br>
            particular example was pretty cool, and I agree that it may
            be best to<br>
            follow that interpretation.<br>
            <br>
            [0] <a href="https://reviews.llvm.org/D86841" rel="noreferrer" target="_blank" moz-do-not-send="true">https://reviews.llvm.org/D86841</a></blockquote>
          <div><br>
          </div>
          <div>You mean that you now apply maynotprogress to all
            functions in C, right? But why only C11 and later? I think
            all versions of C should get the maynotprogress function
            attribute? (Or, with the change I suggest above: only C++
            code should get the "mustprogress" function attribute.)</div>
        </div>
      </div>
    </blockquote>
    <pre class="moz-signature" cols="72">-- 
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory</pre>
  </body>
</html>