<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/65608>65608</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
optimize `exp(exp(x)) / exp(x)` with fast-math
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
k-arrows
</td>
</tr>
</table>
<pre>
Consider the following two functions:
```c
#include <cmath>
double f1(double x)
{
return exp(exp(x)) / exp(x);
}
double f2(double x)
{
return exp(exp(x) - x);
}
```
When these functions are compiled with `-Ofast`, Clang emits code for `f1` that performs floating-point division. GCC does not emit code that performs floating-point division for either function.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycUs2OnDwQfBpzaTEy5tcHDrvMx3fMMWeDG3BibGQ3O5s8fQQzm91DIq0iIWNwV5W7ulSMZnaILSufWXlN1E6LD-33VIXgbzEZvP7Rdt5FozEALQiTt9bfjJuBbh6m3Y1kvIssf2L8yvgTq_j9GR_fIjdutLtGYHk3rooWlv_3ODtX7ffBIkwZE81j_8qEfJTUz_cNBKQ9OMDXjYnmvp5lQgITPXz4kz-_Ya9_0hH_pAMp_IX8reGPWl8XdIddEd8tAhUQRr9uxqKGm6EFWMXTL5OKdMBFB51VbgZcDUUYvT7cDkfRlLGKAy2KYMMw-bBGmKxXZNycbt44Am1eTDTeXeD_rgPtMYLzdHLdqT6FPgXR0ILh98UviW5zLXOpEmyzShZcVoJXydLKXJX5hKh1gYMsZK0FL-sGa5Vl2YBDYlrBRc4lr7Miq4rigkUjm6EUXNa1qGpkBcdVGXux9mW9-DAnJsYd26qseJNYNaCNZzaFcHiD85AJcUQ1tAcmHfY5soJbEym-s5Ahi63fyKzmJx4WfiI3Fb9P5RhIegQ12YNtF6LtjLfomehnQ8s-XEa_MtEfco9XugX_DUdioj8vGZnozyZ-BQAA__8LrwnH">