<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Microsoft Theme 2.00" content="Eclipse 011">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Garamond;
        panose-1:2 2 4 4 3 3 1 1 8 3;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:12.0pt;
        font-family:"Garamond",serif;
        color:black;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#339999;
        text-decoration:underline;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body bgcolor="white" background="cid:image002.gif@01D7CA48.4BFDCFA0" lang="EN-US" link="#339999" vlink="#999999" style="word-wrap:break-word">
<img src="cid:image002.gif@01D7CA48.4BFDCFA0" v:src="cid:image002.gif@01D7CA48.4BFDCFA0" v:shapes="_x0000_Mail" width="0" height="0" class="shape" style="display:none;width:0;height:0"><!--[if gte mso 9]><xml>
<v:background id="_x0000_s1025" o:bwmode="white" o:targetscreensize="1024,768">
<v:fill src="cid:image002.gif@01D7CA48.4BFDCFA0" o:title="eclbkgnd" type="frame" />
</v:background></xml><![endif]-->
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext">A bug has been filed about this:
<a href="https://bugs.llvm.org/show_bug.cgi?id=39679">https://bugs.llvm.org/show_bug.cgi?id=39679</a><br>
<br>
On the other hand, a change was made to add a new setting, fast-honor-pragmas, to the -ffp-contract option (though it doesn’t seem to work from the command line) and document the current behavior:
<a href="https://reviews.llvm.org/D90174">https://reviews.llvm.org/D90174</a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext">I’ve brought this up before and I feel very strongly that the pragma should be honored even when fp-contract=fast is used on the command line. The current
 behavior depends on a communication channel outside the IR, which is bad. The argument has been made in the past that ignoring the pragma is consistent with gcc behavior, but gcc doesn’t support the pragma at all, so I don’t think that’s a very strong argument.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext">There are tests in llvm-test-suite, which fail when FMA is performed, and without the pragma being respected, the only practical way to force the tests to
 pass with fast-math enabled is to override the option and set fp-contract=off for these tests. If the pragma were respected, we’d be able to have these tests use two kernels -- one with FMA enabled for performance measurements, and one with FMA disabled to
 provide a baseline for results verification. Here’s an example of such a test: <a href="https://github.com/llvm/llvm-test-suite/tree/main/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/3mm">
https://github.com/llvm/llvm-test-suite/tree/main/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/3mm</a> The CMakeLists.txt and Makefile for this test have been modified to force fp-contract=off, but there is code in the test that would perform a
 relative error comparison if the pragma could be relied upon.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext">I would like to build a consensus, for or against, changing the current behavior. If you care about this either way, please respond.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext">Thanks,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext">Andy<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext"><o:p> </o:p></span></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;color:windowtext">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext"> Ammarguellat, Zahira <zahira.ammarguellat@intel.com>
<br>
<b>Sent:</b> Tuesday, October 26, 2021 6:10 AM<br>
<b>To:</b> cfe-dev@lists.llvm.org<br>
<b>Cc:</b> Kaylor, Andrew <andrew.kaylor@intel.com><br>
<b>Subject:</b> ffp-model=fast ignores #pragma STDC FP_CONTRACT OFF <o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1014B6">Hi All,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1014B6"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1014B6">Using option ffp-model=fast and #pragma STDC FP_CONTRACT OFF doesn’t have the expected clang’s behavior of pragmas.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1014B6"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1014B6">See for example
<a href="https://godbolt.org/z/PYYd5zd4Pthis">https://godbolt.org/z/PYYd5zd4Pthis</a> The pragma is honored; FMA instructions are generated following the option and are suppressed as directed by the pragma at codegen.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1014B6"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1014B6">In contrast,
<a href="https://godbolt.org/z/WvvaKrv1b">https://godbolt.org/z/WvvaKrv1b</a> shows that the option -ffp-model=fast is honored in the FE, but the pragma is ignored. The LLVM IR generated is correct, but codegen doesn’t honor the pragma as expected. Although
 this seems to be “historically” (codegen didn’t used to get fast-math flags so a global option was used; now codegen sees these flags) the pragma should be honored. This should be filed as a bug.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1014B6">Thoughts?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1014B6"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1014B6">Thanks.
<o:p></o:p></span></p>
</div>
</body>
</html>