From: liuhongt Date: Mon, 3 Apr 2023 02:54:55 +0000 (+0800) Subject: Check hard_regno_mode_ok before setting lowest memory move cost for the mode with... X-Git-Tag: basepoints/gcc-15~10082 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=727be65ec40e119a7c864bfaa5d6a73547863c06;p=thirdparty%2Fgcc.git Check hard_regno_mode_ok before setting lowest memory move cost for the mode with different reg classes. There's a potential performance issue when backend returns some unreasonable value for the mode which can be never be allocate with reg class. gcc/ChangeLog: PR rtl-optimization/109351 * ira.cc (setup_class_subset_and_memory_move_costs): Check hard_regno_mode_ok before setting lowest memory move cost for the mode with different reg classes. --- diff --git a/gcc/ira.cc b/gcc/ira.cc index 6c7f4901e4cc..02dea5d49ee7 100644 --- a/gcc/ira.cc +++ b/gcc/ira.cc @@ -588,6 +588,10 @@ setup_class_subset_and_memory_move_costs (void) /* Costs for NO_REGS are used in cost calculation on the 1st pass when the preferred register classes are not known yet. In this case we take the best scenario. */ + if (!targetm.hard_regno_mode_ok (ira_class_hard_regs[cl][0], + (machine_mode) mode)) + continue; + if (ira_memory_move_cost[mode][NO_REGS][0] > ira_memory_move_cost[mode][cl][0]) ira_max_memory_move_cost[mode][NO_REGS][0]