From: Jeff Law Date: Mon, 5 Jan 2026 16:34:28 +0000 (-0700) Subject: [RISC-V] Restore inline expansion of block moves on RISC-V in some cases X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0c3d8dd92811dfbf1ac31b69b58d7946f8d5512d;p=thirdparty%2Fgcc.git [RISC-V] Restore inline expansion of block moves on RISC-V in some cases Edwin's patch to add a --param for a size threshold on block moves inadvertently disabled using inline block moves for cases where the count is unknown. This caused testsuite regressions (I don't remember which test, it was ~6 weeks ago if not longer). I'd hoped Edwin would see the new failures, but I suspect he's buried by transition stuff with Rivos/Meta. This patch restores prior behavior when the count is unknown and no --param was specified. Bootstrapped and regression tested on both the BPI and Pioneer systems and regression tested on riscv{32,64}-elf as well. Pushing to the trunk after pre-commit CI does its thing. gcc/ * config/riscv/riscv-string.cc (expand_block_move): Restore using inlined memcpy/memmove for unknown counts if the param hasn't been specified. (expand_vec_setmem): Similarly for memset. --- diff --git a/gcc/config/riscv/riscv-string.cc b/gcc/config/riscv/riscv-string.cc index 681af0416ec..74a103e8adf 100644 --- a/gcc/config/riscv/riscv-string.cc +++ b/gcc/config/riscv/riscv-string.cc @@ -1249,7 +1249,7 @@ expand_block_move (rtx dst_in, rtx src_in, rtx length_in, bool movmem_p) && length > riscv_memcpy_size_threshold) return false; } - else + else if (riscv_memmove_size_threshold != -1) return false; /* Inlining general memmove is a pessimisation: we can't avoid having to @@ -1641,7 +1641,7 @@ expand_vec_setmem (rtx dst_in, rtx length_in, rtx fill_value_in) && length > riscv_memset_size_threshold) return false; } - else + else if (riscv_memset_size_threshold != -1) return false; rtx dst_addr = copy_addr_to_reg (XEXP (dst_in, 0));