http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48596

--- Comment #2 from Kazumoto Kojima <kkojima at gcc dot gnu.org> 2011-04-18 
12:47:21 UTC ---
I'm looking into why fr14 is allocated to r242 when -O1 is specified.
Here is the info about r242 from .ira dump with -O1

    r242: preferred GENERAL_REGS, alternative GENERAL_FP_REGS, allocno
GENERAL_FP_REGS
    a20 (r242,l1) best GENERAL_REGS, allocno GENERAL_FP_REGS
...
  a20(r242,l1) costs: R0_REGS:0,0 FPUL_REGS:305,305 SIBCALL_REGS:0,0
GENERAL_REGS:0,0 FP0_REGS:2550,2550 FP_REGS:2550,2550 DF_HI_REGS:2550,2550
DF_REGS:2550,2550 GENERAL_FP_REGS:5277,5277 GENERAL_DF_REGS:5277,5277
ALL_REGS:5277,5277 MEM:3880,3880

In contrast, r242 gets GENERAL_REGS for allocno with -O2

    r242: preferred GENERAL_REGS, alternative NO_REGS, allocno GENERAL_REGS
    a20 (r242,l1) best GENERAL_REGS, allocno GENERAL_REGS
...
  a20(r242,l1) costs: R0_REGS:0,0 FPUL_REGS:305,305 SIBCALL_REGS:0,0
GENERAL_REGS:0,0 FP0_REGS:3892,3892 FP_REGS:3892,3892 DF_HI_REGS:3892,3892
DF_REGS:3892,3892 GENERAL_FP_REGS:6619,6619 GENERAL_DF_REGS:6619,6619
ALL_REGS:6619,6619 MEM:3880,3880

and for revision 171582 with -O1

    r242: preferred GENERAL_REGS, alternative NO_REGS, cover GENERAL_REGS
    a20 (r242,l1) best GENERAL_REGS, cover GENERAL_REGS
...
  a20(r242,l1) costs: R0_REGS:0,0 SIBCALL_REGS:0,0 GENERAL_REGS:0,0
FP0_REGS:2550,2550 FP_REGS:2550,2550 FPUL_REGS:305,305 MEM:3880

With -O1, the lines 1713-1714 of ira-costs.c set allocno to
GENERAL_FP_REGS in this case

1707          if (best_cost > i_mem_cost)
1708            regno_aclass[i] = NO_REGS;
1709          else
1710            {
1711              /* Make the common class the biggest class of best and
1712             alt_class.  */
1713              regno_aclass[i]
1714            = ira_reg_class_superunion[best][alt_class];

Is there any way to notify IRA that the alt_class will be too costy
in some cases?

Reply via email to