https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86017
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |NEW
CC| |jakub at gcc dot gnu.org,
| |rguenth at gcc dot gnu.org
Assignee|rguenth at gcc dot gnu.org |unassigned at gcc dot
gnu.org
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
The testcase is now fixed. We're still not merging adjacent memset/bzero
calls.\
Modified testcase:
void f (void*);
void h (void)
{
char a[8];
__builtin_memset (a, 0, 1);
__builtin_memset (a + 1, 0, 3);
__builtin_memset (a + 4, 0, 4);
f (a);
}
results in
;; Function h (h, funcdef_no=1, decl_uid=1962, cgraph_uid=1, symbol_order=1)
h ()
{
char a[8];
<bb 2> [local count: 1073741825]:
MEM[(void *)&a] = 0;
__builtin_memset (&MEM[(void *)&a + 1B], 0, 3);
__builtin_memset (&MEM[(void *)&a + 4B], 0, 4);
f (&a);
a ={v} {CLOBBER};
return;
}
note we have to deal with merging with stores as well. Given the
original testcase was ultimatively solved by making only stores
available to store-merging the obvious thing to do is to teach
store-merging about memset()/bzero() and consider memset() for
code-generation as well(?).
No longer mine.