https://gcc.gnu.org/g:2bf7f4274e6d02515570496676a22f36ba3c7d15

commit 2bf7f4274e6d02515570496676a22f36ba3c7d15
Author: Zhijin Zeng <zengzhi...@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 bad59e248d08..c53e0dd7a7d1 100644
--- a/gcc/config/riscv/riscv.cc
+++ b/gcc/config/riscv/riscv.cc
@@ -9650,10 +9650,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;

Reply via email to