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

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
Interestingly vector lowering ends up in

can_vcond_compare_p (code=EQ, value_mode=E_V4SFmode, cmp_op_mode=E_V4SImode)

via expand_vec_cond_expr_p calling vcond_icode_p where get_vcond_icode
gets us CODE_FOR_vcondv4sfv4si.  And the key difference is that
can_vcond_compare_p uses unsigned_optab_p (code) (false for EQ) but
ISEL passes down true (the type is unsigned).  For EQ/NE whether we use
the signed or unsigned optab shouldn't matter but the query function
canonicalizes via

/* Return whether RTL code CODE corresponds to an unsigned optab.  */

static bool
unsigned_optab_p (enum rtx_code code)
{
  return code == LTU || code == LEU || code == GTU || code == GEU;
}

it's not documented that one or the other form is canonical though.

The easiest is to try both in ISEL.

Reply via email to