From: Vladimir Makarov Date: Mon, 12 Dec 2011 20:51:16 +0000 (+0000) Subject: re PR rtl-optimization/21617 (CRC64 algorithm optimization problem on Intel 32-bit) X-Git-Tag: releases/gcc-4.7.0~1591 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9c3b03463a63d80970178d7df77bb36e19ee9e0b;p=thirdparty%2Fgcc.git re PR rtl-optimization/21617 (CRC64 algorithm optimization problem on Intel 32-bit) 2011-12-12 Vladimir Makarov PR rtl-optimization/21617 * ira-color.c (bucket_allocno_compare_func): Don't compare allocno classes. Compare number of hard registers needed. From-SVN: r182263 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0d1dea37ae03..9de95711d42f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-12-12 Vladimir Makarov + + PR rtl-optimization/21617 + * ira-color.c (bucket_allocno_compare_func): Don't compare + allocno classes. Compare number of hard registers needed. + 2011-12-12 Eric Botcazou PR tree-optimization/50569 diff --git a/gcc/ira-color.c b/gcc/ira-color.c index 1c03a4ae5656..92f68bf0f195 100644 --- a/gcc/ira-color.c +++ b/gcc/ira-color.c @@ -1797,8 +1797,14 @@ bucket_allocno_compare_func (const void *v1p, const void *v2p) ira_allocno_t a1 = *(const ira_allocno_t *) v1p; ira_allocno_t a2 = *(const ira_allocno_t *) v2p; int diff, a1_freq, a2_freq, a1_num, a2_num; - - if ((diff = (int) ALLOCNO_CLASS (a2) - ALLOCNO_CLASS (a1)) != 0) + int cl1 = ALLOCNO_CLASS (a1), cl2 = ALLOCNO_CLASS (a2); + + /* Push pseudos requiring less hard registers first. It means that + we will assign pseudos requiring more hard registers first + avoiding creation small holes in free hard register file into + which the pseudos requiring more hard registers can not fit. */ + if ((diff = (ira_reg_class_max_nregs[cl1][ALLOCNO_MODE (a1)] + - ira_reg_class_max_nregs[cl2][ALLOCNO_MODE (a2)])) != 0) return diff; a1_freq = ALLOCNO_FREQ (a1); a2_freq = ALLOCNO_FREQ (a2);