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.