2011/12/13 Vladimir Makarov <vmaka...@redhat.com>:
> The following patch solves PR 21617 which is described on
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21617.
>
> Just adding number of necessary hard registers solves the problem but
> creates 2% SPEC2000 perlbmk degradation on x86.  Fortunately, removing
> allocno class comparison removes the degradation.   The allocno class
> comparison was originally added for debugging purposes to put coloring of
> allocnos of the same class in one place.  It was ok when we had cover
> classes which did not intersect.  Now allocno classes intersect and this
> comparison should be not used (at least as highest priority heuristic).
>
> Beside solving the problem, the patch improves a bit SPEC2000 performance
> and code size on x86.
>
> The patch was successfully bootstrapped on x86/x86-64.  I expect it should
> be pretty safe for other targets because it changes heuristics only.
>
> Committed as rev. 182263.
>
>
> 2011-12-12  Vladimir Makarov <vmaka...@redhat.com>
>
>        PR rtl-optimization/21617
>        * ira-color.c (bucket_allocno_compare_func): Don't compare
>        allocno classes.  Compare number of hard registers needed.
>

Hello, Vladimir,

I think there may be a typo in this patch. I saw few degradations in
EEMBC2.0 benchmarks caused by this patch. Following fix removes these
degradations:

-  if ((diff = (ira_reg_class_max_nregs[cl1][ALLOCNO_MODE (a1)]
-              - ira_reg_class_max_nregs[cl2][ALLOCNO_MODE (a2)])) != 0)
+  if ((diff = (ira_reg_class_max_nregs[cl2][ALLOCNO_MODE (a2)]
+              - ira_reg_class_max_nregs[cl1][ALLOCNO_MODE (a1)])) != 0)

I suspect typo because previous calculation of 'diff' value used f(a2)
- f(a1) formula and now it is f(a1) - f(a2). Could you please look at
it?

Thanks,
Ilya

Reply via email to