[Bug target/98537] [11 Regression] ICE in emit_move_insn since r11-5839
prathamesh3492 at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Jan 8 10:50:42 GMT 2021
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
More information about the Gcc-bugs
mailing list