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?

Reply via email to