[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