https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64909
--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Jakub Jelinek from comment #5) > E.g. > unsigned short a[32]; > unsigned int b[32]; > > void > foo () > { > b[0] = a[0]; > b[1] = a[1]; > b[2] = a[2]; > b[3] = a[3]; > } > > will do, or b[0] = a[0] + 5; b[1] = a[1] + 5; b[2] = a[2] + 5; b[3] = a[3] + > 5; > and similar. So it first of all boils down to the vectorizer not handling vectors of different size (V4HI and V4SI) at the same time. The same thing happens when you vectorize double<->int conversion (for which there is already a bug somewhere). For loop vectorization this usually causes unnecessary unrolling (though that may be profitable in the end).