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

--- Comment #2 from Marc Glisse <glisse at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #1)
>   (bit_and (ne (bit_and x_3 y_4) 0) (ne x_3 0))

This could be simplified

> where I'd say we miss
> 
>   (bit_and (ne @0 integer_zerop) (ne @1 integer_zerop))
> 
> ->
> 
>   (ne (bit_and @0 @1) integer_zerop)

This only seems possible for 1-bit types: 1!=0 & 2!0 is not (1&2)!=0

To me, this falls in the general category of (x!=a)?f(x):y where y happens to
be f(a) and f is not as costly as a condition+jump. I handled a few such cases
a while ago with neutral_element_p, but it could be much more general (I am not
saying it is easy).

Reply via email to