https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109690
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Without -march=znver1, we get: vect__10.6_9 = MEM <vector(2) int> [(int *)&a]; vect_patt_13.7_8 = VIEW_CONVERT_EXPR<vector(2) unsigned int>(vect__10.6_9); vect_patt_19.8_1 = vect_patt_13.7_8 << 1; vect_patt_25.9_2 = VIEW_CONVERT_EXPR<vector(2) int>(vect_patt_19.8_1); MEM <vector(2) int> [(int *)&a] = vect_patt_25.9_2; Which looks reasonable. But with -march=znver1 we get: _10 = a[0]; _11 = _10 * 2; _16 = a[1]; _17 = _16 * 2; _13 = {_11, _17}; MEM <vector(2) int> [(int *)&a] = _13; So this is definitely a cost model issue.