Fixing inline expansion of overlapping memmove and non-overlapping memcpy
Michael Matz
matz@suse.de
Wed May 15 13:10:00 GMT 2019
Hi,
On Tue, 14 May 2019, Aaron Sawdey wrote:
> memcpy -> expand with movmem pattern
> memmove (no overlap) -> transform to memcpy -> expand with movmem pattern
> memmove (overlap) -> remains memmove -> glibc call
...
> However in builtins.c expand_builtin_memmove() does not actually do the
> expansion using the memmove pattern.
Because it can't: the movmem pattern is not defined to require handling
overlaps, and hence can't be used for any possibly overlapping
memmove. (So, in a way the pattern is misnamed and should probably have
been called cpymem from the beginning, alas there we are).
> So here's my proposed set of fixes:
> * Add new optab entries for nonoverlapping_memcpy and overlapping_memmove
> cases.
Wouldn't it be nicer to rename the current movmem pattern to cpymem
wholesale for all ports (i.e. roughly a big s/movmem/cpymem/ over the
whole tree) and then introduce a new optional movmem pattern with
overlapping semantics?
Ciao,
Michael.
More information about the Gcc
mailing list