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))))