https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101934
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Component|target |middle-end --- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Definitely caused by r11-4973. It is this part which does the incorrect part: /* Do certain trailing copies as overlapping if it's going to be cheaper. i.e. less instructions to do so. For instance doing a 15 byte copy it's more efficient to do two overlapping 8 byte copies than 8 + 4 + 2 + 1. */ if (n > 0 && n < copy_limit / 2) { next_mode = smallest_mode_for_size (n, MODE_INT); int n_bits = GET_MODE_BITSIZE (next_mode).to_constant (); gcc_assert (n_bits <= mode_bits); dst = aarch64_move_pointer (dst, (n - n_bits) / BITS_PER_UNIT); n = n_bits; } Maybe that should have a STRICT_ALIGNMENT check too.