https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113618
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- It might be good to recognize this pattern in strlenopt or a related pass. A purely local transform would turn it into memcpy (temp, a, 64); memmove (b, a, 64); relying on DSE to eliminate the copy to temp if possible. Not sure if that possibly would be a bad transform if copying to temp is required. stp q30, q31, [sp] ldp q30, q31, [sp] why is CSE not able to catch this?