https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125355
Bug ID: 125355
Summary: GCC 16 inlines memmove at -Os, increasing code size.
Product: gcc
Version: 16.1.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: peter0x44 at disroot dot org
Target Milestone: ---
GCC 16 inlines memmove at -Os, increasing code size.
Test case:
#include <stddef.h>
#include <string.h>
int f(char *d, char *s, size_t n)
{
memmove(d, s, n);
return d[0];
}
Commands:
x86_64-w64-mingw32-gcc -Os -c memmove.c -o builtin.o
x86_64-w64-mingw32-gcc -Os -fno-builtin-memmove -c memmove.c -o nobuiltin.o
x86_64-w64-mingw32-size -A builtin.o nobuiltin.o
Result with x86_64-w64-mingw32-gcc 16.1.0:
builtin.o: .text 512
nobuiltin.o: .text 32
Expected: -Os should not inline memmove when the inline expansion is much
larger than a call.