https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106365
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org Status|NEW |ASSIGNED --- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> --- Created attachment 53328 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=53328&action=edit patch The attached now also handles .LEN_STORE for int __attribute__((noinline,noclone)) foo () { int out[10]; int i; for (i = 0; i < 10; ++i) { out[i] = i; } return out[9]; } where I can see <bb 2> [local count: 97603129]: - _13 = { 4, 5, 6, 7 }; MEM <vector(4) int> [(int *)&out] = { 0, 1, 2, 3 }; - vectp_out.7_15 = &out + 16; - ivtmp_16 = 1; - _20 = _13 + { 4, 4, 4, 4 }; - MEM <vector(4) int> [(int *)vectp_out.7_15] = _13; - vectp_out.7_22 = vectp_out.7_15 + 16; - ivtmp_25 = ivtmp_16 + 1; - _28 = { 12, 13, 14, 15 }; - vect_33 = { 8, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0 }; - .LEN_STORE (&MEM <int[10]> [(void *)&out + 32B], 128B, 8, vect_33, 0); - vectp_out.10_31 = &MEM <int[10]> [(void *)&out + 32B] + 16; - ivtmp_36 = 16; - _39 = MIN_EXPR <ivtmp_36, 8>; - _40 = 8 - _39; - _41 = MIN_EXPR <_40, 16>; - _4 = out[9]; + MEM <vector(4) int> [(int *)&out + 16B] = { 4, 5, 6, 7 }; + .LEN_STORE (&MEM <int[10]> [(void *)&out + 32B], 128B, 8, { 8, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0 }, 0); out ={v} {CLOBBER(eol)}; - return _4; + return 9; in the diff from cunroll to fre4.