[gcc(refs/vendors/riscv/heads/gcc-15-with-riscv-opts)] RISC-V: Fix register move cost for SIBCALL_REGS/JALR_REGS
Jeff Law
law@gcc.gnu.org
Fri Jan 30 06:32:15 GMT 2026
https://gcc.gnu.org/g:64f1f4e02d8b2f89490bf1b87d541644f0d09161
commit 64f1f4e02d8b2f89490bf1b87d541644f0d09161
Author: Zhijin Zeng <zengzhijin@linux.spacemit.com>
Date: Mon Apr 28 09:24:16 2025 +0800
RISC-V: Fix register move cost for SIBCALL_REGS/JALR_REGS
SIBCALL_REGS/JALR_REGS are also subset of GR_REGS and need to
be taken into acount in riscv_register_move_cost, otherwise it
will get a incorrect cost.
gcc/ChangeLog:
* config/riscv/riscv.cc (riscv_register_move_cost): Use
reg_class_subset_p to check the reg class.
(cherry picked from commit 102eccaf8e2f914d3afbf7acfcee19bc5b240eca)
Diff:
---
gcc/config/riscv/riscv.cc | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
index c25723cd90da..bc6d568084f6 100644
--- a/gcc/config/riscv/riscv.cc
+++ b/gcc/config/riscv/riscv.cc
@@ -9661,10 +9661,10 @@ int
riscv_register_move_cost (machine_mode mode,
reg_class_t from, reg_class_t to)
{
- bool from_is_fpr = from == FP_REGS || from == RVC_FP_REGS;
- bool from_is_gpr = from == GR_REGS || from == RVC_GR_REGS;
- bool to_is_fpr = to == FP_REGS || to == RVC_FP_REGS;
- bool to_is_gpr = to == GR_REGS || to == RVC_GR_REGS;
+ bool from_is_fpr = reg_class_subset_p (from, FP_REGS);
+ bool from_is_gpr = reg_class_subset_p (from, GR_REGS);
+ bool to_is_fpr = reg_class_subset_p (to, FP_REGS);
+ bool to_is_gpr = reg_class_subset_p (to, GR_REGS);
if ((from_is_fpr && to_is_gpr) || (from_is_gpr && to_is_fpr))
return tune_param->fmv_cost;
More information about the Gcc-cvs
mailing list