https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95487
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target| |x86_64-*-* i?86-*-* Target Milestone|--- |10.2 CC| |jakub at gcc dot gnu.org, | |rguenth at gcc dot gnu.org --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- So the issue is in the scatter store the mask is vectorized with V32QImode but we expect a vector boolean (it seems). And we run into if (TYPE_MODE (masktype) == TYPE_MODE (optype)) utype = masktype; else utype = lang_hooks.types.type_for_mode (TYPE_MODE (optype), 1); with maskype QImode and optype V32QImode. utype is V32QImode as well after the above and then with masktype still QImode we do if (!useless_type_conversion_p (masktype, utype)) { gcc_assert (TYPE_PRECISION (utype) <= TYPE_PRECISION (masktype)); var = vect_get_new_ssa_name (masktype, vect_scalar_var); new_stmt = gimple_build_assign (var, NOP_EXPR, mask_arg); vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi); mask_arg = var; and emit the bogus NOP_EXPR trying to convert from V32QImode to QImode. Oops? Jakub, you added the scatter support - do you remember what the code tries to do here?