https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123887
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
I sent this to the list but I thought I would add it here too.
Another pattern which has the same issue:
```
/* (a ? x : y) != (b ? x : y) --> (a^b & (x != y)) ? TRUE : FALSE */
/* (a ? x : y) == (b ? x : y) --> (a^b & (x != y)) ? FALSE : TRUE */
/* (a ? x : y) != (b ? y : x) --> (a^b | (x == y)) ? FALSE : TRUE */
/* (a ? x : y) == (b ? y : x) --> (a^b | (x == y)) ? TRUE : FALSE */
/* These are only valid if x and y don't have NaNs. */
```
With testcase of:
```
[[gnu::noipa]]
int f(int a, int b, int *x)
{
return (a ? *x : 0) != (b ? *x : 0);
}
int main()
{
f(0, 0, 0);
return 0;
}
```