Issue 61617
Summary handling trigonometric function under "-ffast-math"
Labels
Assignees
Reporter k-arrows
    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.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to