https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111109

            Bug ID: 111109
           Summary: [13/14 Regression] wrong code for some fp comparisons
                    (after r13-4620-g4d9db4bdd458)
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: pinskia at gcc dot gnu.org
  Target Milestone: ---

Take:
```
[[gnu::noipa]]
int f(int a, int b, float fa, float fb) {
    const bool c = fa < fb;
    const bool c1 = fa >= fb;
    return (c * a) | (c1 * b);
}

int main(void)
{
        float a = __builtin_nan("");
        float b = __builtin_nan("");
        if (f(-1,-1, a, b) != 0)
          __builtin_abort();
}
```

This works at -O0 but fails at -O2.

The reasoning is that after r13-4620-g4d9db4bdd458 we think > and <= are
inverses of each other but they are not.

Reply via email to