From: Zhijin Zeng Date: Mon, 28 Apr 2025 01:24:16 +0000 (+0800) Subject: RISC-V: Fix register move cost for SIBCALL_REGS/JALR_REGS X-Git-Tag: basepoints/gcc-17~8521 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=102eccaf8e2f914d3afbf7acfcee19bc5b240eca;p=thirdparty%2Fgcc.git 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. --- diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index bad59e248d0..c53e0dd7a7d 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;