https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108237
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Bet another case of post-veclower folding that turns out something we can handle into something we can't. In this case fre5 after veclower21 triggers: /* Simplify comparison of something with itself. For IEEE floating-point, we can only do some of these simplifications. */ (for cmp (eq ge le) (simplify (cmp @0 @0) (if (! FLOAT_TYPE_P (TREE_TYPE (@0)) || ! tree_expr_maybe_nan_p (@0)) { constant_boolean_node (true, type); } and /* (X & Y) == X becomes (X & ~Y) == 0. */ (simplify (cmp:c (bit_and:c @0 @1) @0) (cmp (bit_and @0 (bit_not! @1)) { build_zero_cst (TREE_TYPE (@0)); })) match.pd simplifications: u.0_3 = u; _12 = VIEW_CONVERT_EXPR<unsigned char>(u.0_3); _2 = {_12}; - _15 = VIEW_CONVERT_EXPR<unsigned char>(u.0_3); - _16 = _12 == _15; - _17 = (_Bool) _16; - _18 = _16 & 1; - _19 = (signed char) _18; - _20 = -_19; - _5 = {_20}; - _13 = VIEW_CONVERT_EXPR<unsigned char>(_5); - _6 = (long long unsigned int) _13; - _1 = {_6, _6}; v.2_7 = v; - _8 = _1 & v.2_7; + _8 = v.2_7 & { 255, 255 }; _9 = v.2_7 != _8; _10 = VEC_COND_EXPR <_9, { -1, -1 }, { 0, 0 }>; w_14 = VIEW_CONVERT_EXPR<V>(_10);