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.