On 11/14/22 12:01, Christoph Müllner wrote:


On Mon, Nov 14, 2022 at 6:16 PM Jeff Law <jeffreya...@gmail.com> wrote:


    On 11/13/22 16:05, Christoph Muellner wrote:
    > From: Christoph Müllner <christoph.muell...@vrull.eu>
    >
    > The current implementation of riscv_block_move_straight() emits
    a couple
    > of load-store pairs with maximum width (e.g. 8-byte for RV64).
    > The remainder is handed over to move_by_pieces(), which emits
    code based
    > target settings like slow_unaligned_access and overlap_op_by_pieces.
    >
    > move_by_pieces() will emit overlapping memory accesses with maximum
    > width only if the given length exceeds the size of one access
    > (e.g. 15-bytes for 8-byte accesses).
    >
    > This patch changes the implementation of riscv_block_move_straight()
    > such, that it preserves a remainder within the interval
    > [delta..2*delta) instead of [0..delta), so that overlapping memory
    > access may be emitted (if the requirements for them are given).
    >
    > gcc/ChangeLog:
    >
    >       * config/riscv/riscv-string.c (riscv_block_move_straight):
    >         Adjust range for emitted load/store pairs.

    The change to riscv_expand_block_move isn't noted in the
    ChangeLog.  OK
    with that fixed (I'm assuming you want to attempt to use overlapping
    word ops for that case).


The change in riscv_expand_block_move is a code cleanup.
At the beginning of riscv_expand_block_move we do the following:
  unsigned HOST_WIDE_INT length = UINTVAL (length);

AH, missed that.


Thanks,

Jeff

Reply via email to