https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107432
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rguenth at gcc dot gnu.org, | |rsandifo at gcc dot gnu.org Target|X86_64 |x86_64-*-* Last reconfirmed| |2022-10-28 Status|UNCONFIRMED |NEW Ever confirmed|0 |1 Version|unknown |13.0 --- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Hongtao.liu from comment #6) > > Guess expand_vector_conversion can be optimized. > > if (INTEGRAL_TYPE_P (TREE_TYPE (ret_type)) > && SCALAR_FLOAT_TYPE_P (TREE_TYPE (arg_type))) > code = FIX_TRUNC_EXPR; > else if (INTEGRAL_TYPE_P (TREE_TYPE (arg_type)) > && SCALAR_FLOAT_TYPE_P (TREE_TYPE (ret_type))) > code = FLOAT_EXPR; > > It only supports floatmn2/fix_truncmn2 for float <-> integer. > > But we can also supports extendmn2/zero_extendmn2/truncmn2 for float <-> > float, integer <-> integer. > > Or are there any concerns and VEC_PACK_TRUNC_EXPR, > VEC_PACK_FIX_TRUNC_EXPR,VEC_PACK_FLOAT_EXPR are used on purpose? I think we do support FIX_TRUNC_EXPR or FLOAT_EXPR for float <-> int conversion of vectors like we now support {CONVERT,NOP}_EXPR for just widening/shortening. At least the GIMPLE verifier allows that. The obtabs would be [us]fix and [us]float, not sure if aarch64 makes use of those for vector modes or if Richard extended the vectorizer to consider those (I only remember int <-> int conversions). So I think if x86_64 can do float <-> int for vectors implementing [us]fix/[us]float would be the way to go (and of course then make use of those in lowering/vectorization).