<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 10/03/2017 05:02 AM, Ristow, Warren
      wrote:<br>
    </div>
    <blockquote
cite="mid:1B965C6BCD3780449482E91EE11D7638C4716DC9@USCULXMSG05.am.sony.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <meta name="Generator" content="Microsoft Word 12 (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:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#44546A;}
.MsoChpDefault
        {mso-style-type:export-only;}
@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]-->
      <div class="WordSection1">
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A">>>>
            I'd like to emphasise in the latter one: "This option also
            relaxes the precision of<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A">>>>
            commonly used math functions."<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A">>><o:p> </o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A">>>
            Isn't this the "libm" flag that is proposed in this thread?<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A">>
            <o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A">>
            I don't know. I didn't see any definition of it.<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A">><o:p> </o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A">>
            In my case I'm talking about allowing the use of lower
            precision but very fast machine<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A">>
            instructions instead of a slow sequence of inline
            instructions. But I guess instruction<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A">>
            vs library is equivalent.<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A">I
            haven't defined "libm" explicitly.  The concept of "reassoc"
            and "libm" are a result of the discussion last November. 
            The "libm" aspect in particular, came from:<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A"><a class="moz-txt-link-freetext" href="http://lists.llvm.org/pipermail/llvm-dev/2016-November/107114.html">http://lists.llvm.org/pipermail/llvm-dev/2016-November/107114.html</a><o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A">It
            was intended to mean actual library functions, which is what
            I thought you were referring to when you said "This option
            also relaxes the precision of commonly used math
            functions."  From your elaboration describing it as a
            sequence of inline instructions, I think whether "libm" is
            the right flag to control it would depend on what that
            sequence of instructions were doing.  If they were
            implementing 'pow()' or 'sqrt()' or 'sin()' etc., then yes,
            I think "libm" would be the right flag.  If something else
            (unrelated to functions generally in libm), then probably
            some other flag (or set of flags) would control whether a
            transformation was done.<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A">More
            generally, my intended approach of doing this change (of
            removing the "fast" umbrella flag, and adding the two new
            flags "reassoc" and "libm"), is to audit all the places that
            currently enable an optimization based on whether
            ‘hasUnsafeAlgebra()’ is true (which essentially is asking
            whether _all_ the existing FastMathFlags are enabled), and
            see which of them can/should be controlled by one (or a
            subset of) the full set.  So it's possible that a particular
            slow sequence of inline instructions you are transforming
            would be controlled by "libm", and a different slow sequence
            of inline instructions would be controlled by some other
            flag (or flags).</span></p>
      </div>
    </blockquote>
    <br>
    I agree. We should give the flags semantic meanings. Whether or not
    something is generally a function call is irrelevant. libm, if we
    use that name, refers to the functions in libm, and perhaps close
    extensions, regardless of how the target generally generates code
    for them.<br>
    <br>
    It might be clearer, instead of using 'libm', to use something like
    'trans' (for transcendental functions).<br>
    <br>
     -Hal<br>
    <br>
    <blockquote
cite="mid:1B965C6BCD3780449482E91EE11D7638C4716DC9@USCULXMSG05.am.sony.com"
      type="cite">
      <div class="WordSection1">
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A"><o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A">-Warren</span><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A"><o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#44546A"><o:p> </o:p></span></p>
        <div style="border:none;border-top:solid #B5C4DF
          1.0pt;padding:3.0pt 0in 0in 0in">
          <p class="MsoNormal"><b><span
style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span
style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">
              <a class="moz-txt-link-abbreviated" href="mailto:bruce.hoult@gmail.com">bruce.hoult@gmail.com</a> [<a class="moz-txt-link-freetext" href="mailto:bruce.hoult@gmail.com">mailto:bruce.hoult@gmail.com</a>]
              <b>On Behalf Of </b>Bruce Hoult<br>
              <b>Sent:</b> Tuesday, October 3, 2017 10:05 AM<br>
              <b>To:</b> Hal Finkel<br>
              <b>Cc:</b> Ristow, Warren; <a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
              <b>Subject:</b> Re: [llvm-dev] Trouble when suppressing a
              portion of fast-math-transformations<o:p></o:p></span></p>
        </div>
        <p class="MsoNormal"><o:p> </o:p></p>
        <div>
          <div>
            <div>
              <p class="MsoNormal">On Tue, Oct 3, 2017 at 4:03 AM, Hal
                Finkel via llvm-dev <<a moz-do-not-send="true"
                  href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>>
                wrote:<o:p></o:p></p>
              <div>
                <p>On 10/02/2017 11:10 AM, Bruce Hoult via llvm-dev
                  wrote:<o:p></o:p></p>
                <blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
                  <div>
                    <p class="MsoNormal">-cl-fast-relaxed-math<o:p></o:p></p>
                  </div>
                </blockquote>
                <blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
                  <div>
                    <div>
                      <div>
                        <p class="MsoNormal">Sets the optimization
                          options -cl-finite-math-only and
                          -cl-unsafe-math-optimizations. This allows
                          optimizations for floating-point arithmetic
                          that may violate the IEEE 754 standard and the
                          OpenCL numerical compliance requirements for
                          single precision and double precision
                          floating-point, as well as floating point edge
                          case behavior. This option also relaxes the
                          precision of commonly used math functions.
                          This option causes the preprocessor macro
                          __FAST_RELAXED_MATH__ to be defined in the
                          OpenCL program. The original and modified
                          values are defined in the SPIR-V OpenCL
                          environment specification<o:p></o:p></p>
                      </div>
                    </div>
                    <div>
                      <p class="MsoNormal"><o:p> </o:p></p>
                    </div>
                    <div>
                      <p class="MsoNormal">I'd like to emphasise in the
                        latter one: "This option also relaxes the
                        precision of commonly used math functions."<o:p></o:p></p>
                    </div>
                  </div>
                </blockquote>
                <p class="MsoNormal">Isn't this the "libm" flag that is
                  proposed in this thread?<o:p></o:p></p>
              </div>
              <div>
                <p class="MsoNormal"> <o:p></o:p></p>
              </div>
              <div>
                <p class="MsoNormal">I don't know. I didn't see any
                  definition of it.<o:p></o:p></p>
              </div>
              <div>
                <p class="MsoNormal"><o:p> </o:p></p>
              </div>
              <div>
                <p class="MsoNormal">In my case I'm talking about
                  allowing the use of lower precision but very fast
                  machine instructions instead of a slow sequence of
                  inline instructions. But I guess instruction vs
                  library is equivalent.<o:p></o:p></p>
              </div>
              <div>
                <p class="MsoNormal"><o:p> </o:p></p>
              </div>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory</pre>
  </body>
</html>