Issue 61613
Summary Optimizing functions that compute absolute values of x
Labels new issue
Assignees
Reporter k-arrows
    Test code:
```c
#include <stdlib.h>
#include <math.h>

float f1(float x)
{
    return fabsf(x);
}

float f2(float x)
{
    return sqrtf(x * x);
}

float f3(float x)
{
    return (x >= 0.0f) ? x : -x;
}

float f4(float x)
{
    if(x >= 0.0f) return x;
 else return -x;
}
```

gcc:
```asm
f1:
        fabs s0, s0
        ret
f2:
        fmul    s0, s0, s0
        fsqrt s0, s0
        ret
f3:
        fabs    s0, s0
 ret
f4:
        fabs    s0, s0
 ret
```

clang
```asm
f1: // @f1
        fabs    s0, s0
        ret
f2: // @f2
        fabs    s0, s0
        ret
f3: // @f3
        fabs    s0, s0
 ret
f4:                                     // @f4
        fneg    s1, s0
        fcmp    s0, #0.0
        fcsel   s0, s1, s0, lt
 ret
```

https://godbolt.org/z/EercfYfnd

Interestingly, clang generates different code for f4 and so does gcc for f2.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to