https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95906
--- Comment #8 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
cmp_8 = -_2;
_3 = cmp_8 & a_6(D);
We convert that into:
_2 * a_6(D);
And then have:
_11 = _2 + -1;
_5 = b_7(D) & _11;
This could be convert into:
(_11 ^ 1) * b_7(D)
```
(simplify
(bit_and:c (convert? (plus zero_one_valued_p@0 integer_all_onesp)) @1)
(if (INTEGRAL_TYPE_P (type)
&& INTEGRAL_TYPE_P (TREE_TYPE (@0))
&& TREE_CODE (TREE_TYPE (@0)) != BOOLEAN_TYPE
/* Sign extending of the neg or a truncation of the neg
is needed. */
&& (!TYPE_UNSIGNED (TREE_TYPE (@0))
|| TYPE_PRECISION (type) <= TYPE_PRECISION (TREE_TYPE (@0))))
(mult (convert (bit_xor @0 { build_one_cst (TREE_TYPE (@0)); })) @1))
```