https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112623
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I think the problem is that vec_pack_trunc_optab is a normal OPTAB_D and uses just the argument mode (V?SFmode in this case) and the result is some floating point type with half the size. But that is V?HFmode as well as V?BFmode in this case, and the pattern can do only one of those. Doesn't vec_unpack*optab have similar issue when argument is V?DFmode and result can be say on powerpc* V?{IF,KF,TF}mode ? Either we should change it to be OPTAB_CD with $a$b modes specified, or need to manually check the result mode and verify it matches.