<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">