https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56612
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- Another example is derived from gcc.dg/vect/bb-slp-46.c (which has 'int' instead of 'unsigned int'): unsigned int a[4], b[4]; unsigned int foo () { unsigned int tem0 = a[0] + b[0]; unsigned int temx = tem0 * 17; /* this fails without a real need */ unsigned int tem1 = a[1] + b[1]; unsigned int tem2 = a[2] + b[2]; unsigned int tem3 = a[3] + b[3]; unsigned int temy = tem3 * 13; a[0] = tem0; a[1] = tem1; a[2] = tem2; a[3] = tem3; return temx + temy; } here we first build an SLP instance for the temx + temy reduction, mark stmts as PURE_SLP but then during stmt analysis figure we cannot do the multiplication and remove the instance. That causes the liveness analysis to think temx and temy are vectorized when they are in fact not. Note even when they would be vectorized we'd vectorize the loads twice since we do not consider "live" lanes between instances (but we'd at least cost them together). That's an artifact of how our SLP building works.