https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87901
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Assignee|unassigned at gcc dot gnu.org |pinskia at gcc dot
gnu.org
Status|UNCONFIRMED |ASSIGNED
Ever confirmed|0 |1
See Also| |https://gcc.gnu.org/bugzill
| |a/show_bug.cgi?id=49872,
| |https://gcc.gnu.org/bugzill
| |a/show_bug.cgi?id=79716
Last reconfirmed| |2025-04-07
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Note PR 79716 is about DSE for non-constant len.
The commit which added this to DSE for memset: r7-5965-g7c9560a578a061 .
Here is another testcase which shows the issue on the trunk now:
```
char z[32];
int
foo1(void)
{
char z1[17];
char z2[24];
__builtin_memset (z1, 0, 17);
__builtin_memcpy (z, z1, 17);
__builtin_memset (z2, 0, 24);
__builtin_memcpy (z+8, z2, 24);
}
```
DSE gets:
```
MEM <unsigned char[17]> [(char * {ref-all})&z] = {};
MEM <unsigned char[24]> [(char * {ref-all})&z + 8B] = {};
```
And even tries to do the triming:
Trimming statement (head = 0, tail = 9): MEM <unsigned char[17]> [(char *
{ref-all})&z] = {};
But does not do the triming. Let me see if I can handle that.