https://gcc.gnu.org/g:1fbbae1d4ba3618a3da829a6d7e11a1606a583b3
commit r15-525-g1fbbae1d4ba3618a3da829a6d7e11a1606a583b3 Author: Christoph Müllner <christoph.muell...@vrull.eu> Date: Wed May 15 12:19:40 2024 -0600 [v2,2/2] RISC-V: strcmp expansion: Use adjust_address() for address calculation We have an arch-independent routine to generate an address with an offset. Let's use that instead of doing the calculation in the backend. gcc/ChangeLog: * config/riscv/riscv-string.cc (emit_strcmp_scalar_load_and_compare): Use adjust_address() to calculate MEM-PLUS pattern. Diff: --- gcc/config/riscv/riscv-string.cc | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/gcc/config/riscv/riscv-string.cc b/gcc/config/riscv/riscv-string.cc index 8f3b6f925e01..cbb9724d2308 100644 --- a/gcc/config/riscv/riscv-string.cc +++ b/gcc/config/riscv/riscv-string.cc @@ -227,8 +227,6 @@ emit_strcmp_scalar_load_and_compare (rtx result, rtx src1, rtx src2, rtx final_label) { const unsigned HOST_WIDE_INT xlen = GET_MODE_SIZE (Xmode); - rtx src1_addr = force_reg (Pmode, XEXP (src1, 0)); - rtx src2_addr = force_reg (Pmode, XEXP (src2, 0)); unsigned HOST_WIDE_INT offset = 0; rtx testval = gen_reg_rtx (Xmode); @@ -246,10 +244,10 @@ emit_strcmp_scalar_load_and_compare (rtx result, rtx src1, rtx src2, else load_mode = Xmode; - rtx addr1 = gen_rtx_PLUS (Pmode, src1_addr, GEN_INT (offset)); - do_load_from_addr (load_mode, data1, addr1, src1); - rtx addr2 = gen_rtx_PLUS (Pmode, src2_addr, GEN_INT (offset)); - do_load_from_addr (load_mode, data2, addr2, src2); + rtx addr1 = adjust_address (src1, load_mode, offset); + do_load (load_mode, data1, addr1); + rtx addr2 = adjust_address (src2, load_mode, offset); + do_load (load_mode, data2, addr2); if (cmp_bytes == 1) {