<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:30 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 04:05 PM, Adam Nemet
wrote:<br class="">
</div>
<blockquote cite="mid:C5B19D31-4651-4840-B9AC-C4F6FD1BD04D@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 2:00 PM, Hal Finkel <<a moz-do-not-send="true" href="mailto:hfinkel@anl.gov" class="">hfinkel@anl.gov</a>> wrote:</div>
<br class="Apple-interchange-newline">
<div 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=""> <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 class=""><br class="">
</div>
<div class="">Just to confirm, do you mean to introduce a “fast” option
to the pragma, e.g.:</div>
<div class=""><br class="">
</div>
<div class="">#pragma STDC FP_CONTRACT FAST</div>
</div>
</blockquote>
<br class="">
That's a good point. If we don't add something like this, then we'd
be able to turn the fast mode off with the pragma, but then not be
able to turn it back on ;)<br class="">
<br class="">
So, yes, except that I'm somewhat hesitant to invade the 'STDC'
space with vendor extensions. If we generally introduce a pragma to
control FMFs, maybe we should just use that instead? I don't have a
clear idea on the syntax, but for example, if we had some pragma
that let us do<br class="">
<br class="">
#pragma clang fast_math or #pragma clang fast_math nnan(off)
contract(on) or whatever then we could use that. What do you think?<br class=""></div></div></blockquote><div><br class=""></div><div>That looks great; it nicely matches the internal representation. Let me take a stab at this.</div><div><br class=""></div><div>Adam</div><br class=""><blockquote type="cite" class=""><div class=""><div bgcolor="#FFFFFF" text="#000000" class="">
<br class="">
-Hal<br class="">
<br class="">
<blockquote cite="mid:C5B19D31-4651-4840-B9AC-C4F6FD1BD04D@apple.com" type="cite" class="">
<div class="">
<div class=""><br class="">
</div>
<div class="">Thanks,</div>
<div class="">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="">
</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>