https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121296
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Status|UNCONFIRMED |NEW Last reconfirmed| |2025-07-29 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- The reason is that vector lowering of .VEC_CONVERT does not yet support multi-step conversion for all cases properly. There has been some progress there for GCC 15 I think but it's not fully done. Doing lowering before vectorization does at least allow us to re-vectorize things, like cvt2 to _73 = BIT_FIELD_REF <x_5(D), 256, 0>; _74 = BIT_FIELD_REF <x_5(D), 256, 256>; vect__10.24_75 = (vector(8) signed int) _73; vect__10.24_76 = (vector(8) signed int) _74; vect__10.23_77 = VEC_PACK_TRUNC_EXPR <vect__10.24_75, vect__10.24_76>; _1 = {vect__10.23_77, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }}; _78 = BIT_FIELD_REF <y_6(D), 256, 0>; _79 = BIT_FIELD_REF <y_6(D), 256, 256>; vect__42.26_80 = (vector(8) signed int) _78; vect__42.26_81 = (vector(8) signed int) _79; vect__42.25_82 = VEC_PACK_TRUNC_EXPR <vect__42.26_80, vect__42.26_81>; _3 = {vect__42.25_82, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }}; _7 = VEC_PERM_EXPR <_1, _3, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 }>; which shows some previously observed issues.