https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101197
--- Comment #16 from Richard Biener <rguenth at gcc dot gnu.org> ---
We're expanding memmove inline on GIMPLE if the size is constant power-of-two
and up to MOVE_MAX.
/* If we can perform the copy efficiently with first doing all loads
and then all stores inline it that way. Currently efficiently
means that we can load all the memory into a single integer
register which is what MOVE_MAX gives us. */
note as targets allow by_pieces to use larger regs now we could up that
limit as well (we just need an appropriate large integer type for the
copy). Emitting multiple loads/stores on GIMPLE is of course also
possible, likewise would be SRA actually analyzing memmove/copy as
copies (tracking addressability properly of course - rewriting the calls
to aggregate copies of char[] would eventually ease this) so we'd use
matching loads/stores, easing followup optimization and avoiding STLF
penalties when using too large accesses.