[Bug target/95713] [10/11 Regression] ICE in emit_move_insn when converting int2 vector to short2 vector for -march=skylake-avx512 since r10-5031-g78307657cf9675bc
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Jun 17 06:54:53 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95713
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target|i?86-*-* |x86_64-*-* i?86-*-*
Target Milestone|--- |10.2
CC| |hjl.tools at gmail dot com,
| |kyukhin at gcc dot gnu.org
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
So the expansion of
b_4 = VEC_PACK_TRUNC_EXPR <_2, _7>;
with two V1SI operands results in a DImode rtx (reg:DI 93) but RTL
expansion wants to see it in (reg:SI 84) (that is b). But the
simplistic code doing that doesn't work (obviously):
temp = force_operand (temp, target);
if (temp != target)
emit_move_insn (target, temp);
I guess the expansion of VEC_PACK_TRUNC_EXPR is "wrong". We do have
CODE_FOR_vec_pack_trunc_si but that maps to
(define_expand "vec_pack_trunc_<mode>"
[(set (match_operand:<DOUBLEMASKMODE> 0 "register_operand")
(ior:<DOUBLEMASKMODE>
(ashift:<DOUBLEMASKMODE>
(zero_extend:<DOUBLEMASKMODE>
(match_operand:SWI24 2 "register_operand"))
(match_dup 3))
(zero_extend:<DOUBLEMASKMODE>
(match_operand:SWI24 1 "register_operand"))))]
"TARGET_AVX512BW"
where expand_binop_directly does
1098 if (binoptab == vec_pack_trunc_optab
...
1106 /* The mode of the result is different then the mode of the
1107 arguments. */
1108 tmp_mode = insn_data[(int) icode].operand[0].mode;
and tmp_mode ends up as DImode. Shouldn't the pattern use HALFMASKMODE?
Are those patterns supposed to only trigger for VECTOR_BOOLEAN and not
"generic" vectors mapping to integer modes?
More information about the Gcc-bugs
mailing list