https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111414
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #1) > I see what I did wrong. > Looks like I need to check to make sure the integer_onep is a non vector. That is: diff --git a/gcc/match.pd b/gcc/match.pd index 07ffd831132..97db0eb5f25 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -4206,8 +4206,9 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) /* `(1 >> X) != 0` -> `X == 0` */ /* `(1 >> X) == 0` -> `X != 0` */ (simplify - (cmp (rshift integer_onep @0) integer_zerop) - (icmp @0 { build_zero_cst (TREE_TYPE (@0)); }))) + (cmp (rshift integer_onep@1 @0) integer_zerop) + (if (INTEGRAL_TYPE_P (TREE_TYPE (@1))) + (icmp @0 { build_zero_cst (TREE_TYPE (@0)); })))) /* (CST1 << A) == CST2 -> A == ctz (CST2) - ctz (CST1) (CST1 << A) != CST2 -> A != ctz (CST2) - ctz (CST1)