https://gcc.gnu.org/g:0c3d8dd92811dfbf1ac31b69b58d7946f8d5512d

commit r16-6504-g0c3d8dd92811dfbf1ac31b69b58d7946f8d5512d
Author: Jeff Law <[email protected]>
Date:   Mon Jan 5 09:34:28 2026 -0700

    [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:
---
 gcc/config/riscv/riscv-string.cc | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gcc/config/riscv/riscv-string.cc b/gcc/config/riscv/riscv-string.cc
index 681af0416ecf..74a103e8adf4 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));

Reply via email to