https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95762
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- (In reply to Richard Biener from comment #1) > We're currently representing this as a .VEC_CONVERT IFN lowered at veclower > time to > > _4 = [vec_unpack_lo_expr] a_1(D); > _5 = [vec_unpack_hi_expr] a_1(D); > _2 = {_4, _5}; > > rather than using a NOP_EXPR as would be possible now. I suppose we should > remove .VEC_CONVERT again for vector integer conversions and directly > use NOP_EXPRs plus make sure to lower those when not supported. Not > sure if __builtin_convertvector also supports integer<->float conversions. __builtin_convertvector does support integer<->float conversions too. I'd say we should just fold .VEC_CONVERT to something more appropriate if the conditions are right (e.g. if an optab says it is possible to do it in a different way that will also survive veclower) and otherwise keep it as is.