<div dir="ltr">This is of course not homework. I am trying to understand how fast math optimizations work in llvm. When I compared IR for both the programs, the only thing I have noticed is that fdiv and fmul are replaced with fdiv fast and fmul fast. Not sure what happens in fdiv fast and fmul fast.<div>I feel that its because d/max is really small number and fast-math does not care about small numbers and consider them to zero but this is so incorrect. </div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Aug 21, 2018 at 12:45 PM Stephen Canon <<a href="mailto:scanon@apple.com">scanon@apple.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto" style="word-wrap:break-word;line-break:after-white-space"><div style="word-wrap:break-word;line-break:after-white-space"><blockquote type="cite">On Aug 21, 2018, at 11:17 AM, sangeeta chowdhary via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br></blockquote><div><blockquote type="cite"><br class="m_1500971553133381826Apple-interchange-newline"><div><div dir="ltr"><font face="arial, helvetica, sans-serif">Why the output is different for this below program when compiled using clang with fast-math optimization</font><div><font face="arial, helvetica, sans-serif"><br></font></div><div><div style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal;color:rgb(195,55,32)"><font face="arial, helvetica, sans-serif"><span class="m_1500971553133381826gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(213,59,211)">#include</span><span class="m_1500971553133381826gmail-s2" style="font-variant-ligatures:no-common-ligatures"><stdio.h></span></font></div><div style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal;min-height:21px"><font face="arial, helvetica, sans-serif"><span class="m_1500971553133381826gmail-s2" style="font-variant-ligatures:no-common-ligatures"></span><br></font></div><div style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="arial, helvetica, sans-serif"><span class="m_1500971553133381826gmail-s3" style="font-variant-ligatures:no-common-ligatures;color:rgb(52,188,38)">int</span><span class="m_1500971553133381826gmail-s2" style="font-variant-ligatures:no-common-ligatures"> main() {</span></font></div><div style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="arial, helvetica, sans-serif"><span class="m_1500971553133381826gmail-s2" style="font-variant-ligatures:no-common-ligatures"><span class="m_1500971553133381826gmail-Apple-converted-space">  </span></span><span class="m_1500971553133381826gmail-s3" style="font-variant-ligatures:no-common-ligatures;color:rgb(52,188,38)">double</span><span class="m_1500971553133381826gmail-s2" style="font-variant-ligatures:no-common-ligatures"> d = </span><span class="m_1500971553133381826gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">1.0</span><span class="m_1500971553133381826gmail-s2" style="font-variant-ligatures:no-common-ligatures">;</span></font></div><div style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="arial, helvetica, sans-serif"><span class="m_1500971553133381826gmail-s5" style="text-decoration-line:underline;font-variant-ligatures:no-common-ligatures"><span class="m_1500971553133381826gmail-Apple-converted-space">  </span></span><span class="m_1500971553133381826gmail-s6" style="text-decoration-line:underline;font-variant-ligatures:no-common-ligatures;color:rgb(52,188,38)">double</span><span class="m_1500971553133381826gmail-s5" style="text-decoration-line:underline;font-variant-ligatures:no-common-ligatures"> max = </span><span class="m_1500971553133381826gmail-s7" style="text-decoration-line:underline;font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">1.79769e+308</span><span class="m_1500971553133381826gmail-s5" style="text-decoration-line:underline;font-variant-ligatures:no-common-ligatures">; <span class="m_1500971553133381826gmail-Apple-converted-space">                                                   </span></span></font></div><div style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><span class="m_1500971553133381826gmail-s2" style="font-variant-ligatures:no-common-ligatures"><font face="arial, helvetica, sans-serif"><span class="m_1500971553133381826gmail-Apple-converted-space">  </span>d /= max;</font></span></div><div style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="arial, helvetica, sans-serif"><span class="m_1500971553133381826gmail-s2" style="font-variant-ligatures:no-common-ligatures"><span class="m_1500971553133381826gmail-Apple-converted-space">  </span>printf(</span><span class="m_1500971553133381826gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">"d:</span><span class="m_1500971553133381826gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(213,59,211)">%e</span><span class="m_1500971553133381826gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">:</span><span class="m_1500971553133381826gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(213,59,211)">\n</span><span class="m_1500971553133381826gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">"</span><span class="m_1500971553133381826gmail-s2" style="font-variant-ligatures:no-common-ligatures">, d);</span></font></div><div style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><span class="m_1500971553133381826gmail-s2" style="font-variant-ligatures:no-common-ligatures"><font face="arial, helvetica, sans-serif"><span class="m_1500971553133381826gmail-Apple-converted-space">  </span>d *= max;</font></span></div><div style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="arial, helvetica, sans-serif"><span class="m_1500971553133381826gmail-s2" style="font-variant-ligatures:no-common-ligatures"><span class="m_1500971553133381826gmail-Apple-converted-space">  </span>printf(</span><span class="m_1500971553133381826gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">"d:</span><span class="m_1500971553133381826gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(213,59,211)">%e</span><span class="m_1500971553133381826gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">:</span><span class="m_1500971553133381826gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(213,59,211)">\n</span><span class="m_1500971553133381826gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">"</span><span class="m_1500971553133381826gmail-s2" style="font-variant-ligatures:no-common-ligatures">, d);</span></font></div><div style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal;color:rgb(205,121,35)"><font face="arial, helvetica, sans-serif"><span class="m_1500971553133381826gmail-s8" style="font-variant-ligatures:no-common-ligatures"><span class="m_1500971553133381826gmail-Apple-converted-space">  </span></span><span class="m_1500971553133381826gmail-s2" style="font-variant-ligatures:no-common-ligatures">return</span><span class="m_1500971553133381826gmail-s8" style="font-variant-ligatures:no-common-ligatures"> </span><span class="m_1500971553133381826gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">0</span><span class="m_1500971553133381826gmail-s8" style="font-variant-ligatures:no-common-ligatures">;</span></font></div><div style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><span class="m_1500971553133381826gmail-s2" style="font-variant-ligatures:no-common-ligatures"><font face="arial, helvetica, sans-serif">}</font></span></div><div style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><span class="m_1500971553133381826gmail-s2" style="font-variant-ligatures:no-common-ligatures"><font face="arial, helvetica, sans-serif"><br></font></span></div><div style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><span style="font-variant-ligatures:no-common-ligatures"><font face="arial, helvetica, sans-serif">prints 0 with fast math but 1 without fast math.</font></span></div></div></div></div></blockquote><br></div><div>Please do not ask llvm-dev to do your homework. If this is genuinely not a school assignment, reply to me off-list and I’ll help you understand what’s happening here.</div><div><br></div><div>– Steve</div></div></div></blockquote></div>