[Bug tree-optimization/105312] [12 Regression] ICE in gimple_expand_vec_cond_expr on arm-linux since r12-834-ga6eacbf1055520
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Apr 20 08:14:08 GMT 2022
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.
More information about the Gcc-bugs
mailing list