]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
RISC-V: Fix register move cost for SIBCALL_REGS/JALR_REGS
authorZhijin Zeng <zengzhijin@linux.spacemit.com>
Mon, 28 Apr 2025 01:24:16 +0000 (09:24 +0800)
committerKito Cheng <kito.cheng@sifive.com>
Tue, 29 Apr 2025 13:24:56 +0000 (21:24 +0800)
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.

gcc/config/riscv/riscv.cc

index bad59e248d08e8f516a58f9b300f3ff02634f968..c53e0dd7a7d125f2285b30a951537f4276aca568 100644 (file)
@@ -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;