https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98537
--- Comment #6 from prathamesh3492 at gcc dot gnu.org --- Thanks for the suggestions, I could reproduce it now. Input to isel is: _1 = a_2(D) == b_3(D); c_4 = VEC_COND_EXPR <_1, { -1, -1, -1, -1 }, { 0, 0, 0, 0 }>; return c_4; For the following check added in r11-5839: if (integer_minus_onep (op1) && integer_zerop (op2) && TYPE_MODE (TREE_TYPE (lhs)) == TYPE_MODE (TREE_TYPE (op0)) && expand_vec_cmp_expr_p (op0a_type, op0_type, tcode)) With -march=skylake-avx512, it seems the TYPE_MODE (TREE_TYPE (lhs)) and TYPE_MODE (TREE_TYPE (op0)) do not agree, and we bail out. That happens because, lhs (c_4) mode is V4SI while op0 (_1) mode is QI. Without -march=skylake-avx512, the type mode is V4SI for both lhs and op0. With -march=skylake-avx512, c_4's type is vector(4) <signed-boolean:1> and without it, the type is vector(4) <signed-boolean:32>. Thanks, Prathamesh