<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Mar 15, 2017, at 2:00 PM, Hal Finkel <<a href="mailto:hfinkel@anl.gov" class="">hfinkel@anl.gov</a>> wrote:</div><br class="Apple-interchange-newline"><div class="">
  
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" class="">
  
  <div bgcolor="#FFFFFF" text="#000000" class=""><p class=""><br class="">
    </p>
    <div class="moz-cite-prefix">On 03/15/2017 01:47 PM, Adam Nemet
      wrote:<br class="">
    </div>
    <blockquote cite="mid:E74F3BD7-4CF9-4CF7-8657-BC4776A71D03@apple.com" type="cite" class="">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" class="">
      <br class="">
      <div class="">
        <blockquote type="cite" class="">
          <div class="">On Mar 15, 2017, at 11:36 AM, Mehdi Amini <<a moz-do-not-send="true" href="mailto:mehdi.amini@apple.com" class="">mehdi.amini@apple.com</a>> wrote:</div>
          <br class="Apple-interchange-newline">
          <div class="">
            <div style="word-wrap: break-word; -webkit-nbsp-mode: space;
              -webkit-line-break: after-white-space;" class=""><br class="">
              <div class="">
                <blockquote type="cite" class="">
                  <div class="">On Mar 15, 2017, at 10:13 AM, Hal Finkel
                    via cfe-dev <<a moz-do-not-send="true" href="mailto:cfe-dev@lists.llvm.org" class="">cfe-dev@lists.llvm.org</a>>
                    wrote:</div>
                  <br class="Apple-interchange-newline">
                  <div class="">
                    <div class="moz-cite-prefix" style="font-family:
                      Helvetica; font-size: 12px; font-style: normal;
                      font-variant-caps: normal; font-weight: normal;
                      letter-spacing: normal; text-align: start;
                      text-indent: 0px; text-transform: none;
                      white-space: normal; word-spacing: 0px;
                      -webkit-text-stroke-width: 0px; background-color:
                      rgb(255, 255, 255);"><br class="Apple-interchange-newline">
                      On 03/15/2017 12:10 PM, Adam Nemet via llvm-dev
                      wrote:<br class="">
                    </div>
                    <blockquote cite="mid:FAB9D19D-F8F0-4364-BE54-5203FFB1295E@apple.com" type="cite" style="font-family: Helvetica;
                      font-size: 12px; font-style: normal;
                      font-variant-caps: normal; font-weight: normal;
                      letter-spacing: normal; orphans: auto; text-align:
                      start; text-indent: 0px; text-transform: none;
                      white-space: normal; widows: auto; word-spacing:
                      0px; -webkit-text-size-adjust: auto;
                      -webkit-text-stroke-width: 0px; background-color:
                      rgb(255, 255, 255);" class="">Relevant to this
                      discussion is <a moz-do-not-send="true" href="http://bugs.llvm.org/show_bug.cgi?id=25721" class="">http://bugs.llvm.org/show_bug.cgi?id=25721</a> (-ffp-contract=fast
                      does not work with LTO).  I am working on adding
                      function attributes for fp-contract=fast which
                      should fix this.</blockquote>
                    <br style="font-family: Helvetica; font-size: 12px;
                      font-style: normal; font-variant-caps: normal;
                      font-weight: normal; letter-spacing: normal;
                      text-align: start; text-indent: 0px;
                      text-transform: none; white-space: normal;
                      word-spacing: 0px; -webkit-text-stroke-width: 0px;
                      background-color: rgb(255, 255, 255);" class="">
                    <span style="font-family: Helvetica; font-size:
                      12px; font-style: normal; font-variant-caps:
                      normal; font-weight: normal; letter-spacing:
                      normal; text-align: start; text-indent: 0px;
                      text-transform: none; white-space: normal;
                      word-spacing: 0px; -webkit-text-stroke-width: 0px;
                      background-color: rgb(255, 255, 255); float: none;
                      display: inline !important;" class="">Great!</span><br style="font-family: Helvetica; font-size: 12px;
                      font-style: normal; font-variant-caps: normal;
                      font-weight: normal; letter-spacing: normal;
                      text-align: start; text-indent: 0px;
                      text-transform: none; white-space: normal;
                      word-spacing: 0px; -webkit-text-stroke-width: 0px;
                      background-color: rgb(255, 255, 255);" class="">
                    <br style="font-family: Helvetica; font-size: 12px;
                      font-style: normal; font-variant-caps: normal;
                      font-weight: normal; letter-spacing: normal;
                      text-align: start; text-indent: 0px;
                      text-transform: none; white-space: normal;
                      word-spacing: 0px; -webkit-text-stroke-width: 0px;
                      background-color: rgb(255, 255, 255);" class="">
                  </div>
                </blockquote>
                <div class=""><br class="">
                </div>
                <div class="">A function attribute would be a strict
                  improvement over today: LLVM can’t do contraction
                  today. But actually I’m not sure if it is the long
                  term right choice: attributes don’t combine well with
                  inlining for instance. You mentioned FMF earlier, why
                  don’t we have a FMF to allow contraction?</div>
              </div>
            </div>
          </div>
        </blockquote>
        <div class=""><br class="">
        </div>
        <div class="">OK, I thought that the prerequisite for that was a
          fast-math pragma which I don’t think is something we have (I
          want to be able to specify contract=fast on smaller
          granularity than module).  But now that I think more about, we
          should be able to turn a user function attribute into FMF in
          the front-end which is the most flexible. <br class="">
        </div>
      </div>
    </blockquote>
    <br class="">
    I agree, a FMF is the way to go and we can then control it with the
    pragma. We can use the STDC FP_CONTRACT pragma for contraction;</div></div></blockquote><div><br class=""></div><div>Just to confirm, do you mean to introduce a “fast” option to the pragma, e.g.:</div><div><br class=""></div><div>#pragma STDC FP_CONTRACT FAST</div><div><br class=""></div><div>Thanks,</div><div>Adam</div><br class=""><blockquote type="cite" class=""><div class=""><div bgcolor="#FFFFFF" text="#000000" class=""> I
    also think that having a "fast math" pragma is also a good idea (the
    fact that we can currently only specify fast-math settings on a
    translation-unit level is somewhat problematic).<br class="">
    <br class="">
    <blockquote cite="mid:E74F3BD7-4CF9-4CF7-8657-BC4776A71D03@apple.com" type="cite" class="">
      <div class=""><br class="">
        <blockquote type="cite" class="">
          <div class="">
            <div style="word-wrap: break-word; -webkit-nbsp-mode: space;
              -webkit-line-break: after-white-space;" class="">
              <div class="">
                <div class=""><br class="">
                </div>
                <div class="">Also, IIUC, the function attribute as well
                  as a FMF wouldn’t apply to the “ON” setting but only
                  to the “FAST” mode (no way to distinguish source level
                  statement in llvm IR).</div>
              </div>
            </div>
          </div>
        </blockquote>
      </div>
    </blockquote>
    <br class="">
    Right. We still have the existing fmuladd intrinsic method for
    dealing with the "ON" setting.<br class="">
    <br class="">
    <blockquote cite="mid:E74F3BD7-4CF9-4CF7-8657-BC4776A71D03@apple.com" type="cite" class="">
      <div class="">
        <div class=""><br class="">
        </div>
        <div class="">Yes.</div>
        <div class=""><br class="">
        </div>
        <div class="">Adam</div>
        <br class="">
        <blockquote type="cite" class="">
          <div class="">
            <div style="word-wrap: break-word; -webkit-nbsp-mode: space;
              -webkit-line-break: after-white-space;" class="">
              <div class="">
                <div class=""><br class="">
                </div>
                <div class="">— </div>
                <div class="">Mehdi</div>
                <div class=""><br class="">
                </div>
                <div class=""><br class="">
                </div>
                <div class=""><br class="">
                </div>
                <div class=""><br class="">
                </div>
                <br class="">
                <blockquote type="cite" class="">
                  <div class="">
                    <blockquote cite="mid:FAB9D19D-F8F0-4364-BE54-5203FFB1295E@apple.com" type="cite" style="font-family: Helvetica;
                      font-size: 12px; font-style: normal;
                      font-variant-caps: normal; font-weight: normal;
                      letter-spacing: normal; orphans: auto; text-align:
                      start; text-indent: 0px; text-transform: none;
                      white-space: normal; widows: auto; word-spacing:
                      0px; -webkit-text-size-adjust: auto;
                      -webkit-text-stroke-width: 0px; background-color:
                      rgb(255, 255, 255);" class="">
                      <div class=""><br class="">
                      </div>
                      <div class="">Also now that we have backend
                        optimization remarks, I am planning to report
                        missed optimization when we can’t fuse FMAs due
                        “fast” not being on.  This will show up in the
                        opt-viewer.  Then the user can opt in either
                        with the command-line switch or the new function
                        attribute.</div>
                    </blockquote>
                    <br style="font-family: Helvetica; font-size: 12px;
                      font-style: normal; font-variant-caps: normal;
                      font-weight: normal; letter-spacing: normal;
                      text-align: start; text-indent: 0px;
                      text-transform: none; white-space: normal;
                      word-spacing: 0px; -webkit-text-stroke-width: 0px;
                      background-color: rgb(255, 255, 255);" class="">
                    <span style="font-family: Helvetica; font-size:
                      12px; font-style: normal; font-variant-caps:
                      normal; font-weight: normal; letter-spacing:
                      normal; text-align: start; text-indent: 0px;
                      text-transform: none; white-space: normal;
                      word-spacing: 0px; -webkit-text-stroke-width: 0px;
                      background-color: rgb(255, 255, 255); float: none;
                      display: inline !important;" class="">That seems
                      useful.</span><br style="font-family: Helvetica;
                      font-size: 12px; font-style: normal;
                      font-variant-caps: normal; font-weight: normal;
                      letter-spacing: normal; text-align: start;
                      text-indent: 0px; text-transform: none;
                      white-space: normal; word-spacing: 0px;
                      -webkit-text-stroke-width: 0px; background-color:
                      rgb(255, 255, 255);" class="">
                    <br style="font-family: Helvetica; font-size: 12px;
                      font-style: normal; font-variant-caps: normal;
                      font-weight: normal; letter-spacing: normal;
                      text-align: start; text-indent: 0px;
                      text-transform: none; white-space: normal;
                      word-spacing: 0px; -webkit-text-stroke-width: 0px;
                      background-color: rgb(255, 255, 255);" class="">
                    <span style="font-family: Helvetica; font-size:
                      12px; font-style: normal; font-variant-caps:
                      normal; font-weight: normal; letter-spacing:
                      normal; text-align: start; text-indent: 0px;
                      text-transform: none; white-space: normal;
                      word-spacing: 0px; -webkit-text-stroke-width: 0px;
                      background-color: rgb(255, 255, 255); float: none;
                      display: inline !important;" class="">Thanks
                      again,</span><br style="font-family: Helvetica;
                      font-size: 12px; font-style: normal;
                      font-variant-caps: normal; font-weight: normal;
                      letter-spacing: normal; text-align: start;
                      text-indent: 0px; text-transform: none;
                      white-space: normal; word-spacing: 0px;
                      -webkit-text-stroke-width: 0px; background-color:
                      rgb(255, 255, 255);" class="">
                    <span style="font-family: Helvetica; font-size:
                      12px; font-style: normal; font-variant-caps:
                      normal; font-weight: normal; letter-spacing:
                      normal; text-align: start; text-indent: 0px;
                      text-transform: none; white-space: normal;
                      word-spacing: 0px; -webkit-text-stroke-width: 0px;
                      background-color: rgb(255, 255, 255); float: none;
                      display: inline !important;" class="">Hal</span><br style="font-family: Helvetica; font-size: 12px;
                      font-style: normal; font-variant-caps: normal;
                      font-weight: normal; letter-spacing: normal;
                      text-align: start; text-indent: 0px;
                      text-transform: none; white-space: normal;
                      word-spacing: 0px; -webkit-text-stroke-width: 0px;
                      background-color: rgb(255, 255, 255);" class="">
                    <br style="font-family: Helvetica; font-size: 12px;
                      font-style: normal; font-variant-caps: normal;
                      font-weight: normal; letter-spacing: normal;
                      text-align: start; text-indent: 0px;
                      text-transform: none; white-space: normal;
                      word-spacing: 0px; -webkit-text-stroke-width: 0px;
                      background-color: rgb(255, 255, 255);" class="">
                    <blockquote cite="mid:FAB9D19D-F8F0-4364-BE54-5203FFB1295E@apple.com" type="cite" style="font-family: Helvetica;
                      font-size: 12px; font-style: normal;
                      font-variant-caps: normal; font-weight: normal;
                      letter-spacing: normal; orphans: auto; text-align:
                      start; text-indent: 0px; text-transform: none;
                      white-space: normal; widows: auto; word-spacing:
                      0px; -webkit-text-size-adjust: auto;
                      -webkit-text-stroke-width: 0px; background-color:
                      rgb(255, 255, 255);" class="">
                      <div class=""><br class="">
                      </div>
                      <div class="">Adam<br class="">
                        <div class=""><br class="">
                          <div class="">
                            <blockquote type="cite" class="">
                              <div class="">On Mar 15, 2017, at 6:27 AM,
                                Renato Golin via cfe-dev <<a moz-do-not-send="true" href="mailto:cfe-dev@lists.llvm.org" class="">cfe-dev@lists.llvm.org</a>>
                                wrote:</div>
                              <br class="Apple-interchange-newline">
                              <div class="">
                                <div class="">Folks,<br class="">
                                  <br class="">
                                  I've been asking around people about
                                  the state of FP contract, which<br class="">
                                  seems to be "on" but it's not really
                                  behaving like it, at least not as<br class="">
                                  I would expect:<br class="">
                                  <br class="">
                                  int foo(float a, float b, float c) {
                                  return a*b+c; }<br class="">
                                  <br class="">
                                  $ clang -target aarch64-linux-gnu -O2
                                  -S fma.c -ffp-contract=on -o -<br class="">
                                  (...)<br class="">
                                  fmul s0, s0, s1<br class="">
                                  fadd s0, s0, s2<br class="">
                                  (...)<br class="">
                                  <br class="">
                                  $ clang -target aarch64-linux-gnu -O2
                                  -S fma.c -ffp-contract=fast -o -<br class="">
                                  (...)<br class="">
                                  fmadd s0, s0, s1, s2<br class="">
                                  (...)<br class="">
                                  <br class="">
                                  I'm not sure this works in Fortran
                                  either, but defaulting to "on" when<br class="">
                                  (I believe) the language should allow
                                  contraction and not doing it is<br class="">
                                  not a good default.<br class="">
                                  <br class="">
                                  i haven't worked out what would be
                                  necessary to make it work on a<br class="">
                                  case-by-case basis (what kinds of
                                  fusions does C allow?) to make sure<br class="">
                                  we don't do all or nothing, but if we
                                  don't want to start that<br class="">
                                  conversation now, then I'd recommend
                                  we just turn it all the way to 11<br class="">
                                  (like GCC) and let people turn it off
                                  if they really mean it.<br class="">
                                  <br class="">
                                  The rationale is that:<br class="">
                                  <br class="">
                                  * Contracted operations increase
                                  precision (less rounding steps)<br class="">
                                  * It performs equal or faster on all
                                  architectures I know (true
                                  everywhere?)<br class="">
                                  * Users already expect that
                                  (certainly, GCC users do)<br class="">
                                  * Makes us look good on benchmarks :)<br class="">
                                  <br class="">
                                  A recent SPEC2k6 comparison Linaro did
                                  for AArch64, enabling<br class="">
                                  -ffp-contract=fast took the edge of
                                  GCC in a number of cases and in<br class="">
                                  some of them made them comparable in
                                  performance. So, any reasons not<br class="">
                                  to?<br class="">
                                  <br class="">
                                  If we go with it, we need to first
                                  finish the job that Sebastian was<br class="">
                                  dong on the test-suite, then just turn
                                  it on by default. A second<br class="">
                                  stage would be to add tests/benchmarks
                                  that explicitly test FP<br class="">
                                  precision, so that we have some extra
                                  guarantee that we're doing the<br class="">
                                  right thing.<br class="">
                                  <br class="">
                                  Opinions?<br class="">
                                  <br class="">
                                  cheers,<br class="">
                                  --renato<br class="">
_______________________________________________<br class="">
                                  cfe-dev mailing list<br class="">
                                  <a moz-do-not-send="true" href="mailto:cfe-dev@lists.llvm.org" class="">cfe-dev@lists.llvm.org</a><br class="">
                                  <a moz-do-not-send="true" class="moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br class="">
                                </div>
                              </div>
                            </blockquote>
                          </div>
                          <br class="">
                        </div>
                      </div>
                      <br class="">
                      <fieldset class="mimeAttachmentHeader"></fieldset>
                      <br class="">
                      <pre class="" wrap="">_______________________________________________
LLVM Developers mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a moz-do-not-send="true" 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 style="font-family: Helvetica; font-size: 12px;
                      font-style: normal; font-variant-caps: normal;
                      font-weight: normal; letter-spacing: normal;
                      text-align: start; text-indent: 0px;
                      text-transform: none; white-space: normal;
                      word-spacing: 0px; -webkit-text-stroke-width: 0px;
                      background-color: rgb(255, 255, 255);" class="">
                    <pre class="moz-signature" cols="72" style="font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">-- 
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory</pre>
                    <span style="font-family: Helvetica; font-size:
                      12px; font-style: normal; font-variant-caps:
                      normal; font-weight: normal; letter-spacing:
                      normal; text-align: start; text-indent: 0px;
                      text-transform: none; white-space: normal;
                      word-spacing: 0px; -webkit-text-stroke-width: 0px;
                      background-color: rgb(255, 255, 255); float: none;
                      display: inline !important;" class="">_______________________________________________</span><br style="font-family: Helvetica; font-size: 12px;
                      font-style: normal; font-variant-caps: normal;
                      font-weight: normal; letter-spacing: normal;
                      text-align: start; text-indent: 0px;
                      text-transform: none; white-space: normal;
                      word-spacing: 0px; -webkit-text-stroke-width: 0px;
                      background-color: rgb(255, 255, 255);" class="">
                    <span style="font-family: Helvetica; font-size:
                      12px; font-style: normal; font-variant-caps:
                      normal; font-weight: normal; letter-spacing:
                      normal; text-align: start; text-indent: 0px;
                      text-transform: none; white-space: normal;
                      word-spacing: 0px; -webkit-text-stroke-width: 0px;
                      background-color: rgb(255, 255, 255); float: none;
                      display: inline !important;" class="">cfe-dev
                      mailing list</span><br style="font-family:
                      Helvetica; font-size: 12px; font-style: normal;
                      font-variant-caps: normal; font-weight: normal;
                      letter-spacing: normal; text-align: start;
                      text-indent: 0px; text-transform: none;
                      white-space: normal; word-spacing: 0px;
                      -webkit-text-stroke-width: 0px; background-color:
                      rgb(255, 255, 255);" class="">
                    <a moz-do-not-send="true" href="mailto:cfe-dev@lists.llvm.org" style="font-family: Helvetica; font-size: 12px;
                      font-style: normal; font-variant-caps: normal;
                      font-weight: normal; letter-spacing: normal;
                      orphans: auto; text-align: start; text-indent:
                      0px; text-transform: none; white-space: normal;
                      widows: auto; word-spacing: 0px;
                      -webkit-text-size-adjust: auto;
                      -webkit-text-stroke-width: 0px; background-color:
                      rgb(255, 255, 255);" class="">cfe-dev@lists.llvm.org</a><br style="font-family: Helvetica; font-size: 12px;
                      font-style: normal; font-variant-caps: normal;
                      font-weight: normal; letter-spacing: normal;
                      text-align: start; text-indent: 0px;
                      text-transform: none; white-space: normal;
                      word-spacing: 0px; -webkit-text-stroke-width: 0px;
                      background-color: rgb(255, 255, 255);" class="">
                    <a moz-do-not-send="true" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" style="font-family: Helvetica; font-size: 12px;
                      font-style: normal; font-variant-caps: normal;
                      font-weight: normal; letter-spacing: normal;
                      orphans: auto; text-align: start; text-indent:
                      0px; text-transform: none; white-space: normal;
                      widows: auto; word-spacing: 0px;
                      -webkit-text-size-adjust: auto;
                      -webkit-text-stroke-width: 0px; background-color:
                      rgb(255, 255, 255);" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br style="font-family: Helvetica; font-size: 12px;
                      font-style: normal; font-variant-caps: normal;
                      font-weight: normal; letter-spacing: normal;
                      text-align: start; text-indent: 0px;
                      text-transform: none; white-space: normal;
                      word-spacing: 0px; -webkit-text-stroke-width: 0px;
                      background-color: rgb(255, 255, 255);" class="">
                  </div>
                </blockquote>
              </div>
              <br class="">
            </div>
          </div>
        </blockquote>
      </div>
      <br class="">
    </blockquote>
    <br class="">
    <pre class="moz-signature" cols="72">-- 
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory</pre>
  </div>

</div></blockquote></div><br class=""></body></html>