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.