<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p><br>
</p>
<div class="moz-cite-prefix">On 08/31/2017 05:02 PM, Richard Smith
wrote:<br>
</div>
<blockquote
cite="mid:CAOfiQqmo_pp8S_2X4KqcEHph3nNCB8VTJO4yc6pmivLcc4Ebdg@mail.gmail.com"
type="cite">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">On 31 August 2017 at 14:40, Hal
Finkel via cfe-dev <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"><span class="">
<p>On 08/31/2017 04:31 PM, Richard Smith via cfe-dev
wrote:<br>
</p>
<blockquote type="cite">
<div dir="ltr">I think that's also not enough; you'd
get the same problem after inlining, and across
modules with LTO. You would need to also prevent
any interprocedural code motion across a
FENV_ACCESS / non-FENV_ACCESS boundary.</div>
</blockquote>
<br>
</span> Or we prevent inlining.</div>
</blockquote>
<div><br>
</div>
<div>Sure, I was considering that to be a form of
interprocedural code motion :)</div>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"><span class="">
<blockquote type="cite">
<div dir="ltr">
<div>And even that doesn't seem to be enough.
Suppose that some scalar optimization pass finds
a clever way to converts some integer operation
into a floating-point operation, such that it
can prove that the FP values never overflow (I
believe Chandler has an example of this that
comes up in some real crypto code). Now suppose
there's a case where the integer operands are
undef, but that the code in question is bypassed
in that case. If the FP operations get hoisted,
and you happen to have FP exceptions enabled,
you have a potential miscompile.</div>
</div>
</blockquote>
<br>
</span> Good point. However, that's not a new problem,
and we currently deal with this by respecting the
noimplicitfloat attribute (and I think we'd definitely
need to use that attribute if we allow fooling with the
FP environment).<br>
</div>
</blockquote>
<div><br>
</div>
<div>OK, so the idea would be that we'd lower a function
containing FENV_ACCESS (or possibly an outlined block of
such a function) with intrinsics for all FP operations,
specially-annotated libm function calls, and
noimplicitfloat and strictfp attributes to prevent
generation of new FP operations and inlining into
non-strictfp functions. Right? (And we could imagine a
verifier check that ensures that you don't have pure FP
operations inside a strictfp function.)</div>
</div>
</div>
</div>
</blockquote>
<br>
Yes, exactly.<br>
<br>
<blockquote
cite="mid:CAOfiQqmo_pp8S_2X4KqcEHph3nNCB8VTJO4yc6pmivLcc4Ebdg@mail.gmail.com"
type="cite">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">
<div><br>
</div>
<div>Given the function annotations, do we need special
intrinsics at all, or could we instead require that passes
check whether the enclosing function is marked strictfp
before optimizing, in the same way that some optimizations
must be gated by a check for noimplicitfloat?</div>
</div>
</div>
</div>
</blockquote>
<br>
That's another possible design. We decided that the intrinsics were
less intrusive. The problems is that it's not just FP-specific
optimizations that would need to check the attribute, it is also
other optimizations doing other kinds of code motion and value
propagation. Having IR-level operations that are side-effect-free,
except when some special function attribute is present, seems
undesirable.<br>
<br>
-Hal<br>
<br>
<blockquote
cite="mid:CAOfiQqmo_pp8S_2X4KqcEHph3nNCB8VTJO4yc6pmivLcc4Ebdg@mail.gmail.com"
type="cite">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">
<div> </div>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"> -Hal
<div>
<div class="h5"><br>
<br>
<blockquote type="cite">
<div dir="ltr">
<div>
<div><br>
</div>
<div>Fundamentally, it seems to me that
feenableexcept is unsound in the current
LLVM IR model of floating point, if we
assume that fadd, fmul, fsub etc do not have
side-effects.
<div class="gmail_extra"><br>
<div class="gmail_quote">On 31 August 2017
at 14:20, Kaylor, Andrew via cfe-dev <span
dir="ltr"><<a
moz-do-not-send="true"
href="mailto:cfe-dev@lists.llvm.org"
target="_blank">cfe-dev@lists.llvm.org</a>></span>
wrote:<br>
<blockquote class="gmail_quote"
style="margin:0 0 0
.8ex;border-left:1px #ccc
solid;padding-left:1ex">
<div link="blue" vlink="purple"
lang="EN-US">
<div
class="m_-23198277102369654m_-2075974219545047674WordSection1">
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">If
that’s the case, we may need
to use the constrained
intrinsics for all FP
operations when FENV_ACCESS is
enabled anywhere in a
function.</span></p>
<p class="MsoNormal"><a
moz-do-not-send="true"
name="m_-23198277102369654_m_-2075974219545047674__MailEndCompose"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span></a></p>
<p class="MsoNormal"><b><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif">
Richard Smith [mailto:<a
moz-do-not-send="true"
href="mailto:richard@metafoo.co.uk"
target="_blank">richard@metafoo.co.uk</a>]
<br>
<b>Sent:</b> Thursday, August
31, 2017 2:18 PM<br>
<b>To:</b> Kaylor, Andrew <<a
moz-do-not-send="true"
href="mailto:andrew.kaylor@intel.com"
target="_blank">andrew.kaylor@intel.com</a>><br>
<b>Cc:</b> Clang Dev <<a
moz-do-not-send="true"
href="mailto:cfe-dev@lists.llvm.org"
target="_blank">cfe-dev@lists.llvm.org</a>>;
Marcus Johnson <<a
moz-do-not-send="true"
href="mailto:bumblebritches57@gmail.com"
target="_blank">bumblebritches57@gmail.com</a>>;
<a moz-do-not-send="true"
href="mailto:wei.ding2@amd.com"
target="_blank">wei.ding2@amd.com</a></span></p>
<div>
<div
class="m_-23198277102369654h5"><br>
<b>Subject:</b> Re: [cfe-dev]
Why is #pragma STDC
FENV_ACCESS not supported?</div>
</div>
<div>
<div
class="m_-23198277102369654h5">
<p class="MsoNormal"> </p>
<div>
<div>
<div>
<p class="MsoNormal">On
31 August 2017 at
14:14, Kaylor, Andrew
via cfe-dev <<a
moz-do-not-send="true"
href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>>
wrote:</p>
<blockquote
style="border:none;border-left:solid
#cccccc
1.0pt;padding:0in 0in
0in
6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p
class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">I
believe that
we will rely
on
fedisableexcept()
being marked
as having
unmodeled
side-effects
to prevent a
hoist like
that.</span></p>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">fadd
can be hoisted past
*anything*, can't
it?</p>
</div>
<div>
<p class="MsoNormal"><a
moz-do-not-send="true"
name="m_-23198277102369654_m_-2075974219545047674_m_2724022782041152477__MailEndCompose"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span></a></p>
</div>
<blockquote
style="border:none;border-left:solid
#cccccc
1.0pt;padding:0in 0in
0in
6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p
class="MsoNormal"><b><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif">
Richard Smith
[mailto:<a
moz-do-not-send="true"
href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>]
<br>
<b>Sent:</b>
Thursday,
August 31,
2017 2:09 PM<br>
<b>To:</b>
Kaylor, Andrew
<<a
moz-do-not-send="true"
href="mailto:andrew.kaylor@intel.com" target="_blank">andrew.kaylor@intel.com</a>><br>
<b>Cc:</b>
Marcus Johnson
<<a
moz-do-not-send="true"
href="mailto:bumblebritches57@gmail.com" target="_blank">bumblebritches57@gmail.com</a>>;
Clang Dev <<a
moz-do-not-send="true" href="mailto:cfe-dev@lists.llvm.org"
target="_blank">cfe-dev@lists.llvm.org</a>>;
<a
moz-do-not-send="true"
href="mailto:wei.ding2@amd.com" target="_blank">wei.ding2@amd.com</a></span></p>
<div>
<div>
<p
class="MsoNormal"><br>
<b>Subject:</b>
Re: [cfe-dev]
Why is #pragma
STDC
FENV_ACCESS
not supported?</p>
</div>
</div>
<div>
<div>
<p
class="MsoNormal"> </p>
<div>
<div>
<div>
<p
class="MsoNormal">On
31 August 2017
at 11:09,
Kaylor, Andrew
via cfe-dev
<<a
moz-do-not-send="true"
href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>>
wrote:</p>
<blockquote
style="border:none;border-left:solid
#cccccc
1.0pt;padding:0in
0in 0in
6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<div>
<p
class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">There
are still a
few things
missing from
the optimizer
to get it
completely
robust, but I
think there is
enough in
place for
front end work
to begin. As
I think I’ve
demonstrated
in my recent
attempt to
contribute a
clang patch
I’m not
skilled enough
with the front
end to be the
person to pull
this off
without an
excessive
amount of
oversight, but
as Erich
indicated we
do have some
good front end
people here
who have this
on their TODO
list. It’s
just not at
the top of the
TODO list yet.</span></p>
<p
class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span></p>
<p
class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">If
anyone is
interested in
the details of
the LLVM side
of things,
there are
constrained FP
intrinisics
(still marked
as
experimental
at this point)
documented in
the language
reference.
The initial
patch can be
seen here:</span></p>
<p
class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span></p>
<p
class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><a
moz-do-not-send="true" href="https://reviews.llvm.org/D27028"
target="_blank">https://reviews.llvm.org/D2702<wbr>8</a></span></p>
<p
class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span></p>
<p
class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">I’ve
since added
another group
of intrinsics
to handle the
libm-equivalent intrinsics, and more recently Wei Ding contributed an
fma intrinsic.</span></p>
<p
class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span></p>
<p
class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">The
idea is that
the front end
will emit the
constrained
intrinsics in
place of
equivalent
general FP
operations or
intrinsics in
scopes where
FENV_ACCESS is
enabled. This
will prevent
the optimizer
from making
optimizations
that assume
default fenv
settings
(which is what
we want the
optimizer to
do in all
other cases).
Eventually,
we’ll want to
go back and
teach specific
optimizations
to understand
the intrinsics
so that where
possible
optimizations
can be
performed in a
manner
consistent
with dynamic
rounding modes
and strict
exception
handling.</span></p>
</div>
</div>
</blockquote>
<div>
<p
class="MsoNormal"> </p>
</div>
<div>
<div>
<p
class="MsoNormal"><span
style="font-size:9.5pt">How do you deal with the hoisting-into-<span
class="m_-23198277102369654m_-2075974219545047674m2724022782041152477gmail-il">fenv_access</span> prob<wbr>lem?
Eg:</span></p>
</div>
<div>
<p
class="MsoNormal"><span
style="font-size:9.5pt"> </span></p>
</div>
<div>
<p
class="MsoNormal"><span
style="font-size:9.5pt">double f(double a, double b, double c) {</span></p>
</div>
<div>
<p
class="MsoNormal"><span
style="font-size:9.5pt"> {</span></p>
</div>
<div>
<p
class="MsoNormal"><span
style="font-size:9.5pt">#pragma STDC <span
class="m_-23198277102369654m_-2075974219545047674m2724022782041152477gmail-il">FENV_ACCESS</span> ON</span></p>
</div>
<div>
<p
class="MsoNormal"><span
style="font-size:9.5pt"> feenableexcept(FE_OVERFLOW);</span></p>
</div>
<div>
<p
class="MsoNormal"><span
style="font-size:9.5pt"> double d = a * b;</span></p>
</div>
<div>
<p
class="MsoNormal"><span
style="font-size:9.5pt"> fedisableexcept(FE_OVERFLOW);</span></p>
</div>
<div>
<p
class="MsoNormal"><span
style="font-size:9.5pt"> }</span></p>
</div>
<div>
<p
class="MsoNormal"><span
style="font-size:9.5pt"> return c * d;</span></p>
</div>
<div>
<p
class="MsoNormal"><span
style="font-size:9.5pt">}</span></p>
</div>
<div>
<p
class="MsoNormal"><span
style="font-size:9.5pt"> </span></p>
</div>
<div>
<p
class="MsoNormal"><span
style="font-size:9.5pt">What stops llvm from hoisting the second fmul up
to before the
fedisableexcept?</span></p>
</div>
</div>
<div>
<p
class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span></p>
</div>
<blockquote
style="border:none;border-left:solid
#cccccc
1.0pt;padding:0in
0in 0in
6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<div>
<p
class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">-Andy</span></p>
<p
class="MsoNormal"><a
moz-do-not-send="true"
name="m_-23198277102369654_m_-2075974219545047674_m_2724022782041152477_m_1667421056975128"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span></a></p>
<div>
<div
style="border:none;border-top:solid
#e1e1e1
1.0pt;padding:3.0pt
0in 0in 0in">
<p
class="MsoNormal"><b><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif"> Hal
Finkel
[mailto:<a
moz-do-not-send="true"
href="mailto:hfinkel@anl.gov" target="_blank">hfinkel@anl.gov</a>] <br>
<b>Sent:</b>
Thursday,
August 31,
2017 10:45 AM<br>
<b>To:</b>
Richard Smith
<<a
moz-do-not-send="true"
href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>>;
Marcus Johnson
<<a
moz-do-not-send="true"
href="mailto:bumblebritches57@gmail.com" target="_blank">bumblebritches57@gmail.com</a>><br>
<b>Cc:</b>
Clang Dev <<a
moz-do-not-send="true" href="mailto:cfe-dev@lists.llvm.org"
target="_blank">cfe-dev@lists.llvm.org</a>>;
Kaylor, Andrew
<<a
moz-do-not-send="true"
href="mailto:andrew.kaylor@intel.com" target="_blank">andrew.kaylor@intel.com</a>><br>
<b>Subject:</b>
Re: [cfe-dev]
Why is #pragma
STDC
FENV_ACCESS
not supported?</span></p>
</div>
</div>
<div>
<div>
<p
class="MsoNormal"> </p>
<p> </p>
<div>
<p
class="MsoNormal">On
08/31/2017
12:10 PM,
Richard Smith
via cfe-dev
wrote:</p>
</div>
<blockquote
style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p
class="MsoNormal">Because
no-one has
implemented
it. Patches
would be
welcome, but
will need to
start with a
design and
implementation
of the
requisite llvm
extensions.</p>
</div>
</blockquote>
<p
class="MsoNormal"
style="margin-bottom:12.0pt"><br>
Yes. This is
what Andrew
Kaylor has
been working
on (cc'd).<br>
<br>
-Hal</p>
<blockquote
style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p
class="MsoNormal"> </p>
<div>
<p
class="MsoNormal">On
31 Aug 2017
10:06, "Marcus
Johnson via
cfe-dev" <<a
moz-do-not-send="true" href="mailto:cfe-dev@lists.llvm.org"
target="_blank">cfe-dev@lists.llvm.org</a>>
wrote:</p>
<blockquote
style="border:none;border-left:solid
#cccccc
1.0pt;padding:0in
0in 0in
6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<div>
<p
class="MsoNormal"><span
style="font-size:18.0pt">^^^^^^</span></p>
</div>
</div>
<p
class="MsoNormal"
style="margin-bottom:12.0pt"><br>
______________________________<wbr>_________________<br>
cfe-dev
mailing list<br>
<a
moz-do-not-send="true"
href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a
moz-do-not-send="true"
href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev"
target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a></p>
</blockquote>
</div>
</div>
<p
class="MsoNormal"
style="margin-bottom:12.0pt"> </p>
<pre>______________________________<wbr>_________________</pre>
<pre>cfe-dev mailing list</pre>
<pre><a moz-do-not-send="true" href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a></pre>
<pre><a moz-do-not-send="true" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a></pre>
</blockquote>
<p class="MsoNormal" style="margin-bottom:12.0pt"> </p>
<pre>-- </pre>
<pre>Hal Finkel</pre>
<pre>Lead, Compiler Technology and Programming Languages</pre>
<pre>Leadership Computing Facility</pre>
<pre>Argonne National Laboratory</pre>
</div>
</div>
</div>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt">
______________________________<wbr>_________________
cfe-dev mailing list
<a moz-do-not-send="true" href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>
<a moz-do-not-send="true" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a></p>
</blockquote>
</div>
<p class="MsoNormal"> </p>
</div>
</div>
</div>
</div>
</div>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt">
______________________________<wbr>_________________
cfe-dev mailing list
<a moz-do-not-send="true" href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>
<a moz-do-not-send="true" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a></p>
</blockquote>
</div>
<p class="MsoNormal"> </p>
</div>
</div>
</div></div></div>
</div>
______________________________<wbr>_________________
cfe-dev mailing list
<a moz-do-not-send="true" href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>
<a moz-do-not-send="true" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a>
</blockquote></div>
</div></div></div></div>
<fieldset class="m_-23198277102369654mimeAttachmentHeader"></fieldset>
<pre>______________________________<wbr>_________________
cfe-dev mailing list
<a moz-do-not-send="true" class="m_-23198277102369654moz-txt-link-abbreviated" href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>
<a moz-do-not-send="true" class="m_-23198277102369654moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a>
</pre>
</blockquote>
<pre class="m_-23198277102369654moz-signature" cols="72">--
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory</pre></div></div></div>
______________________________<wbr>_________________
cfe-dev mailing list
<a moz-do-not-send="true" href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>
<a moz-do-not-send="true" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a>
</blockquote></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>