diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2011-12-12 20:51:16 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2011-12-12 20:51:16 +0000 |
commit | 9c3b03463a63d80970178d7df77bb36e19ee9e0b (patch) | |
tree | d2749a25b5b9e15e38600edea42e404451d98329 /gcc | |
parent | 35a730f86f0167a0160b20e5b9e25f7efb5108d7 (diff) | |
download | gcc-9c3b03463a63d80970178d7df77bb36e19ee9e0b.zip gcc-9c3b03463a63d80970178d7df77bb36e19ee9e0b.tar.gz gcc-9c3b03463a63d80970178d7df77bb36e19ee9e0b.tar.bz2 |
re PR rtl-optimization/21617 (CRC64 algorithm optimization problem on Intel 32-bit)
2011-12-12 Vladimir Makarov <vmakarov@redhat.com>
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ira-color.c | 10 |
2 files changed, 14 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0d1dea3..9de9571 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-12-12 Vladimir Makarov <vmakarov@redhat.com> + + 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 <ebotcazou@adacore.com> PR tree-optimization/50569 diff --git a/gcc/ira-color.c b/gcc/ira-color.c index 1c03a4a..92f68bf 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); |