]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[PATCH][RISC-V][PR target/70557] Improve storing 0 to memory on rv32
authorSiarhei Volkau <lis8215@gmail.com>
Thu, 22 May 2025 14:52:17 +0000 (08:52 -0600)
committerJeff Law <jlaw@ventanamicro.com>
Thu, 22 May 2025 14:53:04 +0000 (08:53 -0600)
Patch is originally from Siarhei Volkau <lis8215@gmail.com>.

RISC-V has a zero register (x0) which we can use to store zero into memory
without loading the constant into a distinct register. Adjust the constraints
of the 32-bit movdi_32bit pattern to recognize that we can store 0.0 into
memory using x0 as the source register.

This patch only affects RISC-V. It has been regression tested on riscv64-elf.
Jeff has also tested this in his tester (riscv64-elf and riscv32-elf) with no
regressions.

PR target/70557
gcc/
* config/riscv/riscv.md (movdi_32bit): Add "J" constraint to allow storing 0
directly to memory.

gcc/config/riscv/riscv.md

index a5b3abbe5d452a25453eeca418b75c9302b44cd6..92fe7c7741a276da1494c5a44bcdd461244cb310 100644 (file)
 })
 
 (define_insn "*movdi_32bit"
-  [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,r,m,  *f,*f,*r,*f,*m,r")
-       (match_operand:DI 1 "move_operand"         " r,i,m,r,*J*r,*m,*f,*f,*f,vp"))]
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,r, m,  *f,*f,*r,*f,*m,r")
+       (match_operand:DI 1 "move_operand"         " r,i,m,rJ,*J*r,*m,*f,*f,*f,vp"))]
   "!TARGET_64BIT
    && (register_operand (operands[0], DImode)
        || reg_or_0_operand (operands[1], DImode))"