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.

Reply via email to