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.

Reply via email to