From: vmakarov Date: Thu, 31 Mar 2016 17:51:13 +0000 (+0000) Subject: 2016-03-31 Vladimir Makarov X-Git-Tag: upstream/6.1~327 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4dd26fcc32406dc5af8a070fcc468251fe5204f6;p=platform%2Fupstream%2Flinaro-gcc.git 2016-03-31 Vladimir Makarov PR rtl-optimization/70461 * ira-color.c (allocno_copy_cost_saving): Use allocno class if it is necessary. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@234649 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dac7727..123987e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-03-31 Vladimir Makarov + + PR rtl-optimization/70461 + * ira-color.c (allocno_copy_cost_saving): Use allocno class if it + is necessary. + 2016-03-31 Martin Liska PR hsa/70399 diff --git a/gcc/ira-color.c b/gcc/ira-color.c index fba8da4..8433479 100644 --- a/gcc/ira-color.c +++ b/gcc/ira-color.c @@ -2734,10 +2734,16 @@ static int allocno_copy_cost_saving (ira_allocno_t allocno, int hard_regno) { int cost = 0; + enum machine_mode allocno_mode = ALLOCNO_MODE (allocno); enum reg_class rclass; ira_copy_t cp, next_cp; rclass = REGNO_REG_CLASS (hard_regno); + if (ira_reg_class_max_nregs[rclass][allocno_mode] + > ira_class_hard_regs_num[rclass]) + /* For the above condition the cost can be wrong. Use the allocno + class in this case. */ + rclass = ALLOCNO_CLASS (allocno); for (cp = ALLOCNO_COPIES (allocno); cp != NULL; cp = next_cp) { if (cp->first == allocno) @@ -2754,7 +2760,7 @@ allocno_copy_cost_saving (ira_allocno_t allocno, int hard_regno) } else gcc_unreachable (); - cost += cp->freq * ira_register_move_cost[ALLOCNO_MODE (allocno)][rclass][rclass]; + cost += cp->freq * ira_register_move_cost[allocno_mode][rclass][rclass]; } return cost; }