I found if I define a new register class that covers both GR_REGS and PR_REGS, the issue can be solved. New IRA spill the predicate register to general regsister first instead of memory. Is this right approach?
#define IRA_COVER_CLASSES \ { \ GRPR_REGS, M_REGS, BXBC_REGS, LIM_REG_CLASSES \ } > -----Original Message----- > From: gcc-ow...@gcc.gnu.org [mailto:gcc-ow...@gcc.gnu.org] On > Behalf Of Bingfeng Mei > Sent: 02 January 2009 11:50 > To: gcc@gcc.gnu.org > Cc: Vladimir Makarov > Subject: [IRA] New register allocator question > > Hello, > I recently ported our GCC to new IRA by following mainline > development. The only interface I added is > IRA_COVER_CLASSES. Our architecture has predicate register > file. When predicate register has to be spilled, the new IRA > produces inferior code to the old register allocator. The > old allocator first tries to spill to general register file, > which is far cheaper on our architecture than spilling to > memory. The IRA always spills the predicate register to > memory directly. > > #define IRA_COVER_CLASSES \ > { \ > GR_REGS, PR_REGS, M_REGS, BXBC_REGS, LIM_REG_CLASSES \ > } > > Apart from above macro, what other interfaces/parameters I > can tune to change this behaviour in new IRA? Thanks in advance. > > Happy New Year, > Bingfeng Mei > > Broadcom UK. > > >