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.