https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97579

--- Comment #2 from Martin Liška <marxin at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #1)
> So we have used_vec_cond_exprs == 1 and a V16SI eq/ne compare with a
> vector(16) <signed-boolean:1> HImode result.  We fall into
> 
>   gcc_assert (known_eq (GET_MODE_SIZE (mode), GET_MODE_SIZE (cmp_op_mode))
>               && known_eq (GET_MODE_NUNITS (mode),
>                            GET_MODE_NUNITS (cmp_op_mode)));
> 
> then but this is clearly a case where we _have_ to use the vec_cmp_expr
> (because of the scalar mode).  So either simply remove the
> used_vec_cond_exprs check or amend it with the negative of the above assert.

No, used_vec_cond_exprs == 2, but we fail here:

   166            if (used_vec_cond_exprs >= 2
   167                && (get_vcond_mask_icode (mode, TYPE_MODE (op0a_type))
   168                    != CODE_FOR_nothing)
   169                && expand_vec_cmp_expr_p (op0a_type, TREE_TYPE (lhs),
tcode))

where:

#0  get_vcond_mask_icode (vmode=E_HImode, mmode=E_V16SImode) at
/home/marxin/Programming/gcc/gcc/optabs-query.h:131

returns false.

Reply via email to