<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/61617>61617</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
handling trigonometric function under "-ffast-math"
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
k-arrows
</td>
</tr>
</table>
<pre>
Consider the following code under "-ffast-math".
```c
#include <math.h>
float f1(float x)
{
return tanf(x) * cosf(x);
}
float f2(float x)
{
return sinf(x) / tanf(x);
}
```
gcc
```asm
f1:
b sinf
f2:
b cosf
```
clang
```asm
f1: // @f1
stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
stp x29, x30, [sp, #16] // 16-byte Folded Spill
add x29, sp, #16
fmov s8, s0
bl tanf
fmov s9, s0
fmov s0, s8
bl cosf
fmul s0, s9, s0
ldp x29, x30, [sp, #16] // 16-byte Folded Reload
ldp d9, d8, [sp], #32 // 16-byte Folded Reload
ret
f2: // @f2
stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
stp x29, x30, [sp, #16] // 16-byte Folded Spill
add x29, sp, #16
fmov s8, s0
bl sinf
fmov s9, s0
fmov s0, s8
bl tanf
fdiv s0, s9, s0
ldp x29, x30, [sp, #16] // 16-byte Folded Reload
ldp d9, d8, [sp], #32 // 16-byte Folded Reload
ret
```
https://godbolt.org/z/Kf9r1aPj7
This difference is not specific to aarch64.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vd1yqzYQfhpxo7FHLJifCy7iuL7pTaftCwhpBTqVkUcSOTl9-g5gH2NKEjed7HiQ8O5-30r7IXHvddMhVmS3J7tDxPvQWlf9teHO2e8-qq38UT3bzmuJjoYWqbLG2O-6a6iwEmnfDQ4CsFGK-7A58dASgC1hB8KeSMamn7i8Q6I7YXqJlCTPQ-y2JckvF-f4VMbyQFVMoJimrwTKS0C-nyaUUuow9K6jgXeKQDEEUQJPVFh_fSfJ_pp3WGGABxm8njMc54wrDNcFzwkbIRZe7k-XWmKSPN0oB6snxskNK-7JxoW-zSkM75p3WYfFDOshKVPxPYcP53GUJYFnKovhSXZ7fx4nkGwSILsDgfiKEWeb-kdAerRGoqR_nLUx65CvMGK-JmwJGmdkd3gckEs5B5zDTHHqZF9G5rF8zxbbaKZx7Oad52deeZf38--xcF-sw926coPrzSzvHtTIx3Zlbus79Dsay-UC9t_9G7o24iZA6X-FdRhmsqSP2Exj8FmNfVzl_9Dbp8A_1N5SSu9K8Pa53-UtpLKEfFeGK6qW-mVdgxf7Iiku0L9KkatnYBvC2Q8H6AjUWFlbE7bWNQSOfxM4_qpKF_PfvuXzpD9b7anUSqHDTiDVnnY2UH9GoZUWNFjKuRNtlm4jWSWyTEoeYRVneZkWWZmkUVvlOS9UgRkCgpClUgwZMlYrUGUtuIh0BQwSlgDEwIpdukWB-S7HTGYpZ8hykjI8cW22xrychpIj7X2PVRZncR4ZXqPx1zvbVUPQpu4bT1JmtA_-lhZ0MFi1vJNmuLOD043t7AmD04KqvhNB2-6tWzzqnakWu6hD29dbYU8EjgPLZdicnf2GIhA4jpV6Asex2H8CAAD__2MlJ4A">