https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111435
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Changing the match pattern for conversions to non-recusive fixes the issue.
That is:
/* A conversion from an zero_one_valued_p is still a [0,1].
This is useful when the range of a variable is not known */
/* Note this matches can't be recusive because of the way VN handles
nop conversions being equivalent and then recusive between them. */
(match zero_one_valued_p
(convert@0 @1)
(if (INTEGRAL_TYPE_P (TREE_TYPE (@1))
&& (TYPE_UNSIGNED (TREE_TYPE (@1))
|| TYPE_PRECISION (TREE_TYPE (@1)) > 1)
&& wi::leu_p (tree_nonzero_bits (@1), 1))))